{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/js.cookie/dst/Cookie.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/captcha_loader_controller.js", "../../javascript/controllers/cart_controller.js", "../../javascript/controllers/cf_checker_controller.js", "../../../node_modules/@splidejs/splide/dist/js/splide.esm.js", "../../javascript/controllers/homepage_controller.js", "../../javascript/controllers/intranet_order_summary_controller.js", "../../javascript/controllers/intranet_point_of_sale_controller.js", "../../javascript/controllers/intranet_purchase_billing_info_controller.js", "../../javascript/controllers/intranet_purchase_summary_controller.js", "../../javascript/controllers/intranet_reports_controller.js", "../../javascript/controllers/intranet_shopping_cart_controller.js", "../../javascript/controllers/intranet_wallet_burner_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/stripe_controller.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/controllers/stripe_init_controller.js", "../../javascript/controllers/toast_controller.js", "../../javascript/controllers/toggle_visibility_controller.js", "../../javascript/controllers/user_controller.js", "../../javascript/controllers/waiting_room_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/trix/src/trix/config/attachments.js", "../../../node_modules/trix/src/trix/config/block_attributes.js", "../../../node_modules/trix/src/trix/config/browser.js", "../../../node_modules/trix/src/trix/config/lang.js", "../../../node_modules/trix/src/trix/config/file_size_formatting.js", "../../../node_modules/trix/src/trix/constants.js", "../../../node_modules/trix/src/trix/core/helpers/extend.js", "../../../node_modules/trix/src/trix/core/helpers/dom.js", "../../../node_modules/trix/src/trix/config/input.js", "../../../node_modules/trix/src/trix/config/key_names.js", "../../../node_modules/trix/src/trix/config/parser.js", "../../../node_modules/trix/src/trix/config/text_attributes.js", "../../../node_modules/trix/src/trix/config/toolbar.js", "../../../node_modules/trix/src/trix/config/undo.js", "../../../node_modules/trix/src/trix/config/css.js", "../../../node_modules/trix/src/trix/core/basic_object.js", "../../../node_modules/trix/src/trix/core/utilities/utf16_string.js", "../../../node_modules/trix/src/trix/core/object.js", "../../../node_modules/trix/src/trix/core/helpers/arrays.js", "../../../node_modules/trix/src/trix/core/helpers/bidi.js", "../../../node_modules/trix/src/trix/core/helpers/config.js", "../../../node_modules/trix/src/trix/core/helpers/custom_elements.js", "../../../node_modules/trix/src/trix/core/helpers/events.js", "../../../node_modules/trix/src/trix/core/helpers/functions.js", "../../../node_modules/trix/src/trix/core/helpers/objects.js", "../../../node_modules/trix/src/trix/core/helpers/ranges.js", "../../../node_modules/trix/src/trix/observers/selection_change_observer.js", "../../../node_modules/trix/src/trix/core/helpers/strings.js", "../../../node_modules/trix/src/trix/core/collections/hash.js", "../../../node_modules/trix/src/trix/core/collections/object_group.js", "../../../node_modules/trix/src/trix/core/collections/object_map.js", "../../../node_modules/trix/src/trix/core/collections/element_store.js", "../../../node_modules/trix/src/trix/core/utilities/operation.js", "../../../node_modules/trix/src/trix/views/object_view.js", "../../../node_modules/trix/src/trix/views/attachment_view.js", "../../../node_modules/trix/src/trix/views/previewable_attachment_view.js", "../../../node_modules/trix/src/trix/views/piece_view.js", "../../../node_modules/trix/src/trix/views/text_view.js", "../../../node_modules/trix/src/trix/views/block_view.js", "../../../node_modules/trix/src/trix/views/document_view.js", "../../../node_modules/trix/src/trix/models/piece.js", "../../../node_modules/trix/src/trix/operations/image_preload_operation.js", "../../../node_modules/trix/src/trix/models/attachment.js", "../../../node_modules/trix/src/trix/models/attachment_piece.js", "../../../node_modules/trix/src/trix/models/string_piece.js", "../../../node_modules/trix/src/trix/models/splittable_list.js", "../../../node_modules/trix/src/trix/models/text.js", "../../../node_modules/trix/src/trix/models/block.js", "../../../node_modules/trix/src/trix/models/document.js", "../../../node_modules/trix/src/trix/models/html_sanitizer.js", "../../../node_modules/trix/src/trix/models/html_parser.js", "../../../node_modules/trix/src/trix/core/serialization.js", "../../../node_modules/trix/src/trix/models/managed_attachment.js", "../../../node_modules/trix/src/trix/models/attachment_manager.js", "../../../node_modules/trix/src/trix/models/line_break_insertion.js", "../../../node_modules/trix/src/trix/models/composition.js", "../../../node_modules/trix/src/trix/models/undo_manager.js", "../../../node_modules/trix/src/trix/filters/filter.js", "../../../node_modules/trix/src/trix/filters/attachment_gallery_filter.js", "../../../node_modules/trix/src/trix/models/editor.js", "../../../node_modules/trix/src/trix/models/location_mapper.js", "../../../node_modules/trix/src/trix/models/point_mapper.js", "../../../node_modules/trix/src/trix/models/selection_manager.js", "../../../node_modules/trix/src/trix/controllers/attachment_editor_controller.js", "../../../node_modules/trix/src/trix/controllers/composition_controller.js", "../../../node_modules/trix/src/trix/controllers/controller.js", "../../../node_modules/trix/src/trix/observers/mutation_observer.js", "../../../node_modules/trix/src/trix/operations/file_verification_operation.js", "../../../node_modules/trix/src/trix/models/flaky_android_keyboard_detector.js", "../../../node_modules/trix/src/trix/controllers/input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_0_input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_2_input_controller.js", "../../../node_modules/trix/src/trix/controllers/toolbar_controller.js", "../../../node_modules/trix/src/trix/controllers/editor_controller.js", "../../../node_modules/trix/src/trix/elements/trix_toolbar_element.js", "../../../node_modules/trix/src/trix/elements/trix_editor_element.js", "../../../node_modules/trix/src/trix/trix.js", "../../../node_modules/@rails/actiontext/app/assets/javascripts/actiontext.esm.js", "../../javascript/extra/cookies_eu.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "\"use strict\";\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n  value: true\r\n});\r\nvar Cookie = {\r\n\r\n  get: function get(name) {\r\n    var match = document.cookie.match(\"(^|;) ?\" + name + \"=([^;]*)(;|$)\");\r\n    var value = match ? unescape(match[2]) : match;\r\n    try {\r\n      value = JSON.parse(value);\r\n    } catch (e) {}\r\n    return value;\r\n  },\r\n\r\n  set: function set(name, value) {\r\n    var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\r\n\r\n    var cookie = name + \"=\" + escape(JSON.stringify(value)) + \"; path=\" + (options.path ? escape(options.path) : \"/\");\r\n    if (options.domain) cookie += \"; domain=\" + escape(options.domain);\r\n    if (options.secure) cookie += \"; secure\";\r\n    if (options.expires) cookie += \"; expires=\" + options.expires;\r\n    if (options.live) cookie += \"; expires=\" + expiresFromLive(options.live);\r\n    document.cookie = cookie;\r\n    return value;\r\n  },\r\n\r\n  remove: function remove(name) {\r\n    var value = this.get(name);\r\n    this.set(name, value, { live: -1 });\r\n    return value;\r\n  }\r\n\r\n};\r\n\r\nfunction expiresFromLive(live) {\r\n  var date = new Date();\r\n  date.setDate(date.getDate() + parseInt(live));\r\n  date.setMinutes(date.getMinutes() - date.getTimezoneOffset());\r\n  return date.toUTCString();\r\n}\r\n\r\nexports[\"default\"] = Cookie;\r\nmodule.exports = exports[\"default\"];\r\n", "/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n    if (window.Reflect === undefined ||\n        window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        HTMLElement: function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        },\n    };\n    window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \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\n * all 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\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype = window.Event.prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        },\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    static get observedAttributes() {\n        return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        return this.delegate.sourceURLReloaded();\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"complete\") {\n            this.delegate.completeChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\":\n            return FrameLoadingStyle.lazy;\n        default:\n            return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction activateScriptElement(element) {\n    if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n        return element;\n    }\n    else {\n        const createdScriptElement = document.createElement(\"script\");\n        const cspNonce = getMetaContent(\"csp-nonce\");\n        if (cspNonce) {\n            createdScriptElement.nonce = cspNonce;\n        }\n        createdScriptElement.textContent = element.textContent;\n        createdScriptElement.async = false;\n        copyElementAttributes(createdScriptElement, element);\n        return createdScriptElement;\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of sourceElement.attributes) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction createDocumentFragment(html) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = html;\n    return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, {\n        cancelable,\n        bubbles: true,\n        composed: true,\n        detail,\n    });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.from({ length: 36 })\n        .map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    })\n        .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n    return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n    return new Promise((resolve) => {\n        const onComplete = () => {\n            element.removeEventListener(\"error\", onComplete);\n            element.removeEventListener(\"load\", onComplete);\n            resolve();\n        };\n        element.addEventListener(\"load\", onComplete, { once: true });\n        element.addEventListener(\"error\", onComplete, { once: true });\n        setTimeout(resolve, timeoutInMilliseconds);\n    });\n}\nfunction getHistoryMethodForAction(action) {\n    switch (action) {\n        case \"replace\":\n            return history.replaceState;\n        case \"advance\":\n        case \"restore\":\n            return history.pushState;\n    }\n}\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n    const action = getAttribute(\"data-turbo-action\", ...elements);\n    return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n    return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n    const element = getMetaElement(name);\n    return element && element.content;\n}\nfunction setMetaContent(name, content) {\n    let element = getMetaElement(name);\n    if (!element) {\n        element = document.createElement(\"meta\");\n        element.setAttribute(\"name\", name);\n        document.head.appendChild(element);\n    }\n    element.setAttribute(\"content\", content);\n    return element;\n}\nfunction findClosestRecursively(element, selector) {\n    var _a;\n    if (element instanceof Element) {\n        return (element.closest(selector) ||\n            findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n    }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\":\n            return FetchMethod.get;\n        case \"post\":\n            return FetchMethod.post;\n        case \"put\":\n            return FetchMethod.put;\n        case \"patch\":\n            return FetchMethod.patch;\n        case \"delete\":\n            return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n        this.abortController = new AbortController();\n        this.resolveRequestPromise = (_value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        const { fetchOptions } = this;\n        this.delegate.prepareRequest(this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== \"AbortError\") {\n                if (this.willDelegateErrorHandling(error)) {\n                    this.delegate.requestErrored(this, error);\n                }\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", {\n            cancelable: true,\n            detail: { fetchResponse },\n            target: this.target,\n        });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isSafe ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n        };\n    }\n    get defaultHeaders() {\n        return {\n            Accept: \"text/html, application/xhtml+xml\",\n        };\n    }\n    get isSafe() {\n        return this.method === FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    acceptResponseType(mimeType) {\n        this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise,\n            },\n            target: this.target,\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n    willDelegateErrorHandling(error) {\n        const event = dispatch(\"turbo:fetch-request-error\", {\n            target: this.target,\n            cancelable: true,\n            detail: { request: this, error: error },\n        });\n        return !event.defaultPrevented;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = (entries) => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(createDocumentFragment(message));\n        }\n        else {\n            return message;\n        }\n    }\n    constructor(fragment) {\n        this.fragment = importStreamElements(fragment);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n    for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n        const streamElement = document.importNode(element, true);\n        for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n            inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n        element.replaceWith(streamElement);\n    }\n    return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart:\n            return FormEnctype.multipart;\n        case FormEnctype.plain:\n            return FormEnctype.plain;\n        default:\n            return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    static confirmMethod(message, _element, _submitter) {\n        return Promise.resolve(confirm(message));\n    }\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n        if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n            return this.submitter.getAttribute(\"formaction\") || \"\";\n        }\n        else {\n            return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n        }\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isSafe() {\n        return this.fetchRequest.isSafe;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n        if (typeof confirmationMessage === \"string\") {\n            const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareRequest(request) {\n        if (!request.isSafe) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                request.headers[\"X-CSRF-Token\"] = token;\n            }\n        }\n        if (this.requestAcceptsTurboStreamResponse(request)) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        this.setSubmitsWith();\n        dispatch(\"turbo:submit-start\", {\n            target: this.formElement,\n            detail: { formSubmission: this },\n        });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(_request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        this.resetSubmitterText();\n        dispatch(\"turbo:submit-end\", {\n            target: this.formElement,\n            detail: Object.assign({ formSubmission: this }, this.result),\n        });\n        this.delegate.formSubmissionFinished(this);\n    }\n    setSubmitsWith() {\n        if (!this.submitter || !this.submitsWith)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.originalSubmitText = this.submitter.innerHTML;\n            this.submitter.innerHTML = this.submitsWith;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            this.originalSubmitText = input.value;\n            input.value = this.submitsWith;\n        }\n    }\n    resetSubmitterText() {\n        if (!this.submitter || !this.originalSubmitText)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.submitter.innerHTML = this.originalSubmitText;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            input.value = this.originalSubmitText;\n        }\n    }\n    requestMustRedirect(request) {\n        return !request.isSafe && this.mustRedirect;\n    }\n    requestAcceptsTurboStreamResponse(request) {\n        return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n    get submitsWith() {\n        var _a;\n        return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name) {\n        formData.append(name, value || \"\");\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams();\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get activeElement() {\n        return this.element.ownerDocument.activeElement;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n        for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n            if (element.closest(inertDisabledOrHidden) == null)\n                return element;\n            else\n                continue;\n        }\n        return null;\n    }\n    get permanentElements() {\n        return queryPermanentElementsAll(this.element);\n    }\n    getPermanentElementById(id) {\n        return getPermanentElementById(this.element, id);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\nfunction getPermanentElementById(node, id) {\n    return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n    return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.submitCaptured = () => {\n            this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n            this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form &&\n                    submissionDoesNotDismissDialog(form, submitter) &&\n                    submissionDoesNotTargetIFrame(form, submitter) &&\n                    this.delegate.willSubmitForm(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmitted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n    return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n    if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n        const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n        for (const element of document.getElementsByName(target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (_value) => { };\n        this.resolveInterceptionPromise = (_value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n                this.renderer = renderer;\n                await this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n                const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate(renderer.reloadReason);\n        }\n    }\n    invalidate(reason) {\n        this.delegate.viewInvalidated(reason);\n    }\n    async prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        await renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    missing() {\n        this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkInterceptor {\n    constructor(delegate, element) {\n        this.clickBubbled = (event) => {\n            if (this.respondsToEventTarget(event.target)) {\n                this.clickEvent = event;\n            }\n            else {\n                delete this.clickEvent;\n            }\n        };\n        this.linkClicked = ((event) => {\n            if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n                if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = ((_event) => {\n            delete this.clickEvent;\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"click\", this.clickBubbled);\n        document.addEventListener(\"turbo:click\", this.linkClicked);\n        document.addEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    stop() {\n        this.element.removeEventListener(\"click\", this.clickBubbled);\n        document.removeEventListener(\"turbo:click\", this.linkClicked);\n        document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    respondsToEventTarget(target) {\n        const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.clickCaptured = () => {\n            this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n            this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link && doesNotTargetIFrame(link)) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable) ||\n            event.defaultPrevented ||\n            event.which > 1 ||\n            event.altKey ||\n            event.ctrlKey ||\n            event.metaKey ||\n            event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\nfunction doesNotTargetIFrame(anchor) {\n    if (anchor.hasAttribute(\"target\")) {\n        for (const element of document.getElementsByName(anchor.target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass FormLinkClickObserver {\n    constructor(delegate, element) {\n        this.delegate = delegate;\n        this.linkInterceptor = new LinkClickObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n    }\n    willFollowLinkToLocation(link, location, originalEvent) {\n        return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n            link.hasAttribute(\"data-turbo-method\"));\n    }\n    followedLinkToLocation(link, location) {\n        const form = document.createElement(\"form\");\n        const type = \"hidden\";\n        for (const [name, value] of location.searchParams) {\n            form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n        }\n        const action = Object.assign(location, { search: \"\" });\n        form.setAttribute(\"data-turbo\", \"true\");\n        form.setAttribute(\"action\", action.href);\n        form.setAttribute(\"hidden\", \"\");\n        const method = link.getAttribute(\"data-turbo-method\");\n        if (method)\n            form.setAttribute(\"method\", method);\n        const turboFrame = link.getAttribute(\"data-turbo-frame\");\n        if (turboFrame)\n            form.setAttribute(\"data-turbo-frame\", turboFrame);\n        const turboAction = getVisitAction(link);\n        if (turboAction)\n            form.setAttribute(\"data-turbo-action\", turboAction);\n        const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n        if (turboConfirm)\n            form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n        const turboStream = link.hasAttribute(\"data-turbo-stream\");\n        if (turboStream)\n            form.setAttribute(\"data-turbo-stream\", \"\");\n        this.delegate.submittedFormLinkToLocation(link, location, form);\n        document.body.appendChild(form);\n        form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n        requestAnimationFrame(() => form.requestSubmit());\n    }\n}\n\nclass Bardo {\n    static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n        const bardo = new this(delegate, permanentElementMap);\n        bardo.enter();\n        await callback();\n        bardo.leave();\n    }\n    constructor(delegate, permanentElementMap) {\n        this.delegate = delegate;\n        this.permanentElementMap = permanentElementMap;\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n            this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n            this.delegate.leavingBardo(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find((element) => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        this.activeElement = null;\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.renderElement = renderElement;\n        this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n    }\n    get shouldRender() {\n        return true;\n    }\n    get reloadReason() {\n        return;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    async preservingPermanentElements(callback) {\n        await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    enteringBardo(currentPermanentElement) {\n        if (this.activeElement)\n            return;\n        if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n            this.activeElement = this.currentSnapshot.activeElement;\n        }\n    }\n    leavingBardo(currentPermanentElement) {\n        if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n            this.activeElement.focus();\n            this.activeElement = null;\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(currentElement);\n        destinationRange.deleteContents();\n        const frameElement = newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n        this.delegate = delegate;\n    }\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        this.delegate.willRenderFrame(this.currentElement, this.newElement);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n            if (element) {\n                element.scrollIntoView({ block, behavior });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\nfunction readScrollBehavior(value, defaultValue) {\n    if (value == \"auto\" || value == \"smooth\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + this.value * 90}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        if (this.cspNonce) {\n            element.nonce = this.cspNonce;\n        }\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n    get cspNonce() {\n        return getMetaContent(\"csp-nonce\");\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: [],\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element ? element.getAttribute(\"content\") : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.localName;\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.localName;\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.localName;\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.localName;\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    clone() {\n        const clonedElement = this.element.cloneNode(true);\n        const selectElements = this.element.querySelectorAll(\"select\");\n        const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n        for (const [index, source] of selectElements.entries()) {\n            const clone = clonedSelectElements[index];\n            for (const option of clone.selectedOptions)\n                option.selected = false;\n            for (const option of source.selectedOptions)\n                clone.options[option.index].selected = true;\n        }\n        for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n            clonedPasswordInput.value = \"\";\n        }\n        return new PageSnapshot(clonedElement, this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n    updateHistory: true,\n    shouldCacheSnapshot: true,\n    acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.shouldCacheSnapshot = true;\n        this.acceptsStreamResponse = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshot = snapshot;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.updateHistory = updateHistory;\n        this.scrolled = !willRender;\n        this.shouldCacheSnapshot = shouldCacheSnapshot;\n        this.acceptsStreamResponse = acceptsStreamResponse;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.followRedirect();\n            if (!this.followedRedirect) {\n                this.adapter.visitCompleted(this);\n                this.delegate.visitCompleted(this);\n            }\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged && this.updateHistory) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                if (this.shouldCacheSnapshot)\n                    this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: \"replace\",\n                response: this.response,\n                shouldCacheSnapshot: false,\n                willRender: false,\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.performScroll();\n                this.changeHistory();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    prepareRequest(request) {\n        if (this.acceptsStreamResponse) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(_request, _response) { }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(_request, _error) {\n        this.recordResponse({\n            statusCode: SystemStatusCode.networkFailure,\n            redirected: false,\n        });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled && !this.view.forceReloaded) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\":\n                return history.replaceState;\n            case \"advance\":\n            case \"restore\":\n                return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise((resolve) => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar();\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n    visitStarted(visit) {\n        this.location = visit.location;\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload({\n                    reason: \"request_failed\",\n                    context: {\n                        statusCode,\n                    },\n                });\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(_visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(_visit) { }\n    pageInvalidated(reason) {\n        this.reload(reason);\n    }\n    visitFailed(_visit) { }\n    visitRendered(_visit) { }\n    formSubmissionStarted(_formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(_formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload(reason) {\n        var _a;\n        dispatch(\"turbo:reload\", { detail: reason });\n        window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.selector = \"[data-turbo-temporary]\";\n        this.deprecatedSelector = \"[data-turbo-cache=false]\";\n        this.started = false;\n        this.removeTemporaryElements = ((_event) => {\n            for (const element of this.temporaryElements) {\n                element.remove();\n            }\n        });\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    get temporaryElements() {\n        return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n    }\n    get temporaryElementsWithDeprecation() {\n        const elements = document.querySelectorAll(this.deprecatedSelector);\n        if (elements.length) {\n            console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n        }\n        return [...elements];\n    }\n}\n\nclass FrameRedirector {\n    constructor(session, element) {\n        this.session = session;\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formSubmitObserver = new FormSubmitObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formSubmitObserver.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formSubmitObserver.stop();\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url, event) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url, event);\n        }\n    }\n    willSubmitForm(element, submitter) {\n        return (element.closest(\"turbo-frame\") == null &&\n            this.shouldSubmit(element, submitter) &&\n            this.shouldRedirect(element, submitter));\n    }\n    formSubmitted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.delegate.formSubmitted(element, submitter);\n        }\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const isNavigatable = element instanceof HTMLFormElement\n            ? this.session.submissionIsNavigatable(element, submitter)\n            : this.session.elementIsNavigatable(element);\n        if (isNavigatable) {\n            const frame = this.findFrameElement(element, submitter);\n            return frame ? frame != element.closest(\"turbo-frame\") : false;\n        }\n        else {\n            return false;\n        }\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (_event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === \"function\") {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                const shouldCacheSnapshot = formSubmission.isSafe;\n                if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = {\n                    action,\n                    shouldCacheSnapshot,\n                    response: { statusCode, responseHTML, redirected },\n                };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot, this.currentVisit);\n            }\n            else {\n                await this.view.renderPage(snapshot, false, true, this.currentVisit);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === \"function\") {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        const anchor = getAnchor(location);\n        const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n        const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n        return (action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission({ submitter, formElement }) {\n        return getVisitAction(submitter, formElement) || \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamMessageRenderer {\n    render({ fragment }) {\n        Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n    }\n    enteringBardo(currentPermanentElement, newPermanentElement) {\n        newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n    leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n    const permanentElementMap = {};\n    for (const permanentElementInDocument of permanentElementsInDocument) {\n        const { id } = permanentElementInDocument;\n        for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n            const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n            if (elementInStream) {\n                permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n            }\n        }\n    }\n    return permanentElementMap;\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set();\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        const { documentElement, body } = document;\n        documentElement.replaceChild(newElement, body);\n    }\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head } = document;\n        documentElement.replaceChild(this.newHead, head);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = activateScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return document.documentElement.querySelectorAll(\"script\");\n    }\n}\n\nclass PageRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        if (document.body && newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(newElement);\n        }\n        else {\n            document.documentElement.appendChild(newElement);\n        }\n    }\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    get reloadReason() {\n        if (!this.newSnapshot.isVisitable) {\n            return {\n                reason: \"turbo_visit_control_is_reload\",\n            };\n        }\n        if (!this.trackedElementsAreIdentical) {\n            return {\n                reason: \"tracked_element_mismatch\",\n            };\n        }\n    }\n    async prepareToRender() {\n        await this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            await this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    async mergeHead() {\n        const mergedHeadElements = this.mergeProvisionalElements();\n        const newStylesheetElements = this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        await mergedHeadElements;\n        await newStylesheetElements;\n    }\n    async replaceBody() {\n        await this.preservingPermanentElements(async () => {\n            this.activateNewBody();\n            await this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    async copyNewHeadStylesheetElements() {\n        const loadingElements = [];\n        for (const element of this.newHeadStylesheetElements) {\n            loadingElements.push(waitForLoad(element));\n            document.head.appendChild(element);\n        }\n        await Promise.all(loadingElements);\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(activateScriptElement(element));\n        }\n    }\n    async mergeProvisionalElements() {\n        const newHeadElements = [...this.newHeadProvisionalElements];\n        for (const element of this.currentHeadProvisionalElements) {\n            if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n                document.head.removeChild(element);\n            }\n        }\n        for (const element of newHeadElements) {\n            document.head.appendChild(element);\n        }\n    }\n    isCurrentElementInElementList(element, elementList) {\n        for (const [index, newElement] of elementList.entries()) {\n            if (element.tagName == \"TITLE\") {\n                if (newElement.tagName != \"TITLE\") {\n                    continue;\n                }\n                if (element.innerHTML == newElement.innerHTML) {\n                    elementList.splice(index, 1);\n                    return true;\n                }\n            }\n            if (newElement.isEqualNode(element)) {\n                elementList.splice(index, 1);\n                return true;\n            }\n        }\n        return false;\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    async assignNewBody() {\n        await this.renderElement(this.currentElement, this.newElement);\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n        this.forceReloaded = false;\n    }\n    renderPage(snapshot, isPreview = false, willRender = true, visit) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n        if (!renderer.shouldRender) {\n            this.forceReloaded = true;\n        }\n        else {\n            visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        }\n        return this.render(renderer);\n    }\n    renderError(snapshot, visit) {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot(snapshot = this.snapshot) {\n        if (snapshot.isCacheable) {\n            this.delegate.viewWillCacheSnapshot();\n            const { lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n}\n\nclass Preloader {\n    constructor(delegate) {\n        this.selector = \"a[data-turbo-preload]\";\n        this.delegate = delegate;\n    }\n    get snapshotCache() {\n        return this.delegate.navigator.view.snapshotCache;\n    }\n    start() {\n        if (document.readyState === \"loading\") {\n            return document.addEventListener(\"DOMContentLoaded\", () => {\n                this.preloadOnLoadLinksForView(document.body);\n            });\n        }\n        else {\n            this.preloadOnLoadLinksForView(document.body);\n        }\n    }\n    preloadOnLoadLinksForView(element) {\n        for (const link of element.querySelectorAll(this.selector)) {\n            this.preloadURL(link);\n        }\n    }\n    async preloadURL(link) {\n        const location = new URL(link.href);\n        if (this.snapshotCache.has(location)) {\n            return;\n        }\n        try {\n            const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n            const responseText = await response.text();\n            const snapshot = PageSnapshot.fromHTMLString(responseText);\n            this.snapshotCache.put(location, snapshot);\n        }\n        catch (_) {\n        }\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.preloader = new Preloader(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this, window);\n        this.formSubmitObserver = new FormSubmitObserver(this, document);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n        this.frameRedirector = new FrameRedirector(this, document.documentElement);\n        this.streamMessageRenderer = new StreamMessageRenderer();\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n        this.formMode = \"on\";\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.formLinkClickObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.preloader.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        const frameElement = options.frame ? document.getElementById(options.frame) : null;\n        if (frameElement instanceof FrameElement) {\n            frameElement.src = location.toString();\n            frameElement.loaded;\n        }\n        else {\n            this.navigator.proposeVisit(expandURL(location), options);\n        }\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    setFormMode(mode) {\n        this.formMode = mode;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, {\n                action: \"restore\",\n                historyChanged: true,\n            });\n        }\n        else {\n            this.adapter.pageInvalidated({\n                reason: \"turbo_disabled\",\n            });\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willSubmitFormLinkToLocation(link, location) {\n        return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n    submittedFormLinkToLocation() { }\n    willFollowLinkToLocation(link, location, event) {\n        return (this.elementIsNavigatable(link) &&\n            locationIsVisitable(location, this.snapshot.rootLocation) &&\n            this.applicationAllowsFollowingLinkToLocation(link, location, event));\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n        this.visit(location.href, { action, acceptsStreamResponse });\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        if (!visit.acceptsStreamResponse) {\n            markAsBusy(document.documentElement);\n        }\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        clearBusyState(document.documentElement);\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return (this.submissionIsNavigatable(form, submitter) &&\n            locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, options) {\n        const event = this.notifyApplicationBeforeRender(element, options);\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    preloadOnLoadLinksForView(element) {\n        this.preloader.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated(reason) {\n        this.adapter.pageInvalidated(reason);\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location, ev) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n        return dispatch(\"turbo:click\", {\n            target: link,\n            detail: { url: location.href, originalEvent: event },\n            cancelable: true,\n        });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", {\n            detail: { url: location.href },\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n        return dispatch(\"turbo:before-render\", {\n            detail: Object.assign({ newBody }, options),\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        return dispatch(\"turbo:load\", {\n            detail: { url: this.location.href, timing },\n        });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", {\n            oldURL: oldURL.toString(),\n            newURL: newURL.toString(),\n        }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", {\n            detail: { fetchResponse },\n            target: frame,\n            cancelable: true,\n        });\n    }\n    submissionIsNavigatable(form, submitter) {\n        if (this.formMode == \"off\") {\n            return false;\n        }\n        else {\n            const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n            if (this.formMode == \"optin\") {\n                return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n            }\n            else {\n                return submitterIsNavigatable && this.elementIsNavigatable(form);\n            }\n        }\n    }\n    elementIsNavigatable(element) {\n        const container = findClosestRecursively(element, \"[data-turbo]\");\n        const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n        if (this.drive || withinFrame) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        return getVisitAction(link) || \"advance\";\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        },\n    },\n};\n\nclass Cache {\n    constructor(session) {\n        this.session = session;\n    }\n    clear() {\n        this.session.clearCache();\n    }\n    resetCacheControl() {\n        this.setCacheControl(\"\");\n    }\n    exemptPageFromCache() {\n        this.setCacheControl(\"no-cache\");\n    }\n    exemptPageFromPreview() {\n        this.setCacheControl(\"no-preview\");\n    }\n    setCacheControl(value) {\n        setMetaContent(\"turbo-cache-control\", value);\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach((e) => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach((targetElement) => {\n            targetElement.innerHTML = \"\";\n            targetElement.append(this.templateContent);\n        });\n    },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n    session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    cache: cache,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    FrameRenderer: FrameRenderer,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod,\n    setFormMode: setFormMode,\n    StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (_fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.ignoredAttributes = new Set();\n        this.action = null;\n        this.visitCachedSnapshot = ({ element }) => {\n            const frame = element.querySelector(\"#\" + this.element.id);\n            if (frame && this.previousFrameElement) {\n                frame.replaceChildren(...this.previousFrameElement.children);\n            }\n            delete this.previousFrameElement;\n        };\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.restorationIdentifier = uuid();\n        this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            else {\n                this.loadSourceURL();\n            }\n            this.formLinkClickObserver.start();\n            this.linkInterceptor.start();\n            this.formSubmitObserver.start();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkInterceptor.stop();\n            this.formSubmitObserver.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.isIgnoringChangesTo(\"src\"))\n            return;\n        if (this.element.isConnected) {\n            this.complete = false;\n        }\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLReloaded() {\n        const { src } = this.element;\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            this.element.removeAttribute(\"complete\");\n        });\n        this.element.src = null;\n        this.element.src = src;\n        return this.element.loaded;\n    }\n    completeChanged() {\n        if (this.isIgnoringChangesTo(\"complete\"))\n            return;\n        this.loadSourceURL();\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n            this.element.loaded = this.visit(expandURL(this.sourceURL));\n            this.appearanceObserver.stop();\n            await this.element.loaded;\n            this.hasBeenLoaded = true;\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const document = parseHTMLDocument(html);\n                const pageSnapshot = PageSnapshot.fromDocument(document);\n                if (pageSnapshot.isVisitable) {\n                    await this.loadFrameResponse(fetchResponse, document);\n                }\n                else {\n                    await this.handleUnvisitableFrameResponse(fetchResponse);\n                }\n            }\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.proposeVisitIfNavigatedWithAction(element, element);\n        this.loadSourceURL();\n    }\n    willSubmitFormLinkToLocation(link) {\n        return this.shouldInterceptNavigation(link);\n    }\n    submittedFormLinkToLocation(link, _location, form) {\n        const frame = this.findFrameElement(link);\n        if (frame)\n            form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldInterceptNavigation(element);\n    }\n    linkClickIntercepted(element, location) {\n        this.navigateFrame(element, location);\n    }\n    willSubmitForm(element, submitter) {\n        return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmitted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareRequest(fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareRequest(request) {\n        var _a;\n        request.headers[\"Turbo-Frame\"] = this.id;\n        if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(_request, _response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    async requestFailedWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(_request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n        if (!formSubmission.isSafe) {\n            session.clearCache();\n        }\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n        session.clearCache();\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender({ element: newFrame }, options) {\n        const event = dispatch(\"turbo:before-frame-render\", {\n            target: this.element,\n            detail: Object.assign({ newFrame }, options),\n            cancelable: true,\n        });\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) { }\n    preloadOnLoadLinksForView(element) {\n        session.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated() { }\n    willRenderFrame(currentElement, _newElement) {\n        this.previousFrameElement = currentElement.cloneNode(true);\n    }\n    async loadFrameResponse(fetchResponse, document) {\n        const newFrameElement = await this.extractForeignFrameElement(document.body);\n        if (newFrameElement) {\n            const snapshot = new Snapshot(newFrameElement);\n            const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n            if (this.view.renderPromise)\n                await this.view.renderPromise;\n            this.changeHistory();\n            await this.view.render(renderer);\n            this.complete = true;\n            session.frameRendered(fetchResponse, this.element);\n            session.frameLoaded(this.element);\n            this.fetchResponseLoaded(fetchResponse);\n        }\n        else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n            this.handleFrameMissingFromResponse(fetchResponse);\n        }\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise((resolve) => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        this.withCurrentNavigationElement(element, () => {\n            frame.src = url;\n        });\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        this.action = getVisitAction(submitter, element, frame);\n        if (this.action) {\n            const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n            const { visitCachedSnapshot } = frame.delegate;\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    const options = {\n                        response,\n                        visitCachedSnapshot,\n                        willRender: false,\n                        updateHistory: false,\n                        restorationIdentifier: this.restorationIdentifier,\n                        snapshot: pageSnapshot,\n                    };\n                    if (this.action)\n                        options.action = this.action;\n                    session.visit(frame.src, options);\n                }\n            };\n        }\n    }\n    changeHistory() {\n        if (this.action) {\n            const method = getHistoryMethodForAction(this.action);\n            session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n        }\n    }\n    async handleUnvisitableFrameResponse(fetchResponse) {\n        console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n        await this.visitResponse(fetchResponse.response);\n    }\n    willHandleFrameMissingFromResponse(fetchResponse) {\n        this.element.setAttribute(\"complete\", \"\");\n        const response = fetchResponse.response;\n        const visit = async (url, options = {}) => {\n            if (url instanceof Response) {\n                this.visitResponse(url);\n            }\n            else {\n                session.visit(url, options);\n            }\n        };\n        const event = dispatch(\"turbo:frame-missing\", {\n            target: this.element,\n            detail: { response, visit },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    handleFrameMissingFromResponse(fetchResponse) {\n        this.view.missing();\n        this.throwFrameMissingError(fetchResponse);\n    }\n    throwFrameMissingError(fetchResponse) {\n        const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n        throw new TurboFrameMissingError(message);\n    }\n    async visitResponse(response) {\n        const wrapped = new FetchResponse(response);\n        const responseHTML = await wrapped.responseHTML;\n        const { location, redirected, statusCode } = wrapped;\n        return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n            if (element) {\n                return element;\n            }\n            element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n            if (element) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            return new FrameElement();\n        }\n        return null;\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementIsNavigatable(element)) {\n            return false;\n        }\n        if (submitter && !session.elementIsNavigatable(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.ignoringChangesToAttribute(\"src\", () => {\n            this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        });\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get complete() {\n        return this.element.hasAttribute(\"complete\");\n    }\n    set complete(value) {\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            if (value) {\n                this.element.setAttribute(\"complete\", \"\");\n            }\n            else {\n                this.element.removeAttribute(\"complete\");\n            }\n        });\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    isIgnoringChangesTo(attributeName) {\n        return this.ignoredAttributes.has(attributeName);\n    }\n    ignoringChangesToAttribute(attributeName, callback) {\n        this.ignoredAttributes.add(attributeName);\n        callback();\n        this.ignoredAttributes.delete(attributeName);\n    }\n    withCurrentNavigationElement(element, callback) {\n        this.currentNavigationElement = element;\n        callback();\n        delete this.currentNavigationElement;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nclass StreamElement extends HTMLElement {\n    static async renderElement(newElement) {\n        await newElement.performAction();\n    }\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            const event = this.beforeRenderEvent;\n            if (this.dispatchEvent(event)) {\n                await nextAnimationFrame();\n                await event.detail.render(this);\n            }\n        })()));\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach((c) => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n        const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n        return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild === null) {\n            const template = this.ownerDocument.createElement(\"template\");\n            this.appendChild(template);\n            return template;\n        }\n        else if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", {\n            bubbles: true,\n            cancelable: true,\n            detail: { newStream: this, render: StreamElement.renderElement },\n        });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nclass StreamSourceElement extends HTMLElement {\n    constructor() {\n        super(...arguments);\n        this.streamSource = null;\n    }\n    connectedCallback() {\n        this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n        connectStreamSource(this.streamSource);\n    }\n    disconnectedCallback() {\n        if (this.streamSource) {\n            disconnectStreamSource(this.streamSource);\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\") || \"\";\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n    customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n    customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n    customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    element = element.parentElement;\n    while (element) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n        element = element.parentElement;\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// 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, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from '@hotwired/stimulus';\n\nconst application = Application.start();\n// Configure Stimulus development experience\napplication.debug = false;\nwindow.Stimulus   = application;\n\nexport { application };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { cache } from \"@hotwired/turbo\"\n\n// Connects to data-controller=\"captcha-loader\"\nexport default class extends Controller {\n  connect() {\n    cache.exemptPageFromPreview();\n\n    this.captchaClientKey = this.data.get(\"captcha-client-key\");\n    this.captchaType = this.data.get(\"captcha-type\");\n    this.action = this.data.get(\"captcha-action\");\n\n    this._beforeCache = this.beforeCache.bind(this);\n    this._onPageShow = this.onPageShow.bind(this);\n\n    document.addEventListener(\"turbo:before-cache\", this._beforeCache);\n    window.addEventListener(\"pageshow\", this._onPageShow);\n\n    this.setFormControlsState('disable');\n    this.initCaptchaCallback();\n  }\n\n  initCaptchaCallback() {\n    const captchaClientKey = this.captchaClientKey;\n\n    if (this.captchaType === 'turnstile') {\n      const action = (\"TS__\" + this.action).substring(0, 32);\n\n      !window.onloadTurnstileCallback && (window.onloadTurnstileCallback = () => {\n        this.widgetId = turnstile.render(\"#turnstile-form-container\", {\n          sitekey: captchaClientKey,\n          action: action,\n          size: 'normal',\n          callback: (token) => { this.turnstileCallback(token, action); }\n        });\n      });\n    } else if (this.captchaType === 'recaptcha') {\n      !window.onloadCallback && (window.onloadCallback = () => { this.recaptchaCallback(); });\n    }\n  }\n\n  turnstileCallback(token, action) {\n    const captchaTokenInput = document.querySelector('input[name=\"captcha_token\"]');\n    const captchaTokenActionInput = document.querySelector('input[name=\"captcha_token_action\"]');\n\n    if (captchaTokenInput) { captchaTokenInput.value = token; }\n    if (captchaTokenActionInput) { captchaTokenActionInput.value = `${action}`; }\n\n    this.setFormControlsState('enable');\n  }\n\n  recaptchaCallback() {\n    this.setFormControlsState('enable');\n  }\n\n  execCaptchaVerify(event) {\n    event.preventDefault();\n\n    const captchaClientKey = this.captchaClientKey;\n    const action = this.action;\n\n    const formId = event.currentTarget.dataset.formid;\n    const form = document.getElementById(formId);\n\n    if (!form) return;\n    if (form.dataset.submitted === 'true') return;\n    if (!form.reportValidity()) return;\n\n    form.dataset.submitted = 'true';\n    this.setFormControlsState('disable');\n\n    const quantityInput = document.getElementById(`${formId}-quantity`);\n\n    let hiddenInput = form.querySelector('input[name=\"quantity\"]');\n\n    if (!hiddenInput) {\n      hiddenInput = document.createElement('input');\n\n      hiddenInput.type = 'hidden';\n      hiddenInput.name = 'quantity';\n\n      form.appendChild(hiddenInput);\n    }\n\n    hiddenInput.value = quantityInput ? quantityInput.value : '1';\n\n    if (this.captchaType === 'recaptcha') {\n      grecaptcha.ready(() => {\n        grecaptcha.execute(captchaClientKey, { action: `RC__${action}` })\n          .then((token) => {\n            const captchaTokenInputs = document.querySelectorAll('input[name=\"captcha_token\"]');\n            const captchaTokenActionInputs = document.querySelectorAll('input[name=\"captcha_token_action\"]');\n\n            captchaTokenInputs.forEach(input => { input.value = token; });\n            captchaTokenActionInputs.forEach(input => { input.value = `RC__${action}`; });\n\n            form.submit();\n          }).catch(() => {\n            delete form.dataset.submitted;\n            this.setFormControlsState('enable');\n          });\n      });\n    } else if (this.captchaType === 'turnstile') {\n      try {\n        if (this.widgetId) { turnstile.remove(this.widgetId); }\n\n        const turnstileContainer = document.querySelector(\"#turnstile-form-container\");\n        if (turnstileContainer) { turnstileContainer.innerHTML = ''; }\n\n        form.submit();\n      } catch (error) {\n        delete form.dataset.submitted;\n        this.setFormControlsState('enable');\n      }\n    } else {\n      form.submit();\n    }\n  }\n\n  beforeCache() {\n    document.querySelectorAll('form[data-submitted]').forEach(form => { delete form.dataset.submitted; });\n    this.setFormControlsState('enable');\n  }\n\n  onPageShow(event) {\n    if (!event.persisted) return;\n\n    document.querySelectorAll('form[data-submitted]').forEach(form => { delete form.dataset.submitted; });\n    this.setFormControlsState('enable');\n  }\n\n  setFormControlsState(state) {\n    if (this.captchaType === 'turnstile') {\n      const triggerElement = document.getElementById(\"captcha-trigger\");\n\n      if (triggerElement) { triggerElement.disabled = state === 'disable'; }\n    } else if (this.captchaType === 'recaptcha') {\n      const captchaTriggers = document.querySelectorAll('.captcha-trigger');\n\n      captchaTriggers.forEach(trigger => { trigger.disabled = state === 'disable'; });\n    }\n  }\n\n  disconnect() {\n    document.removeEventListener(\"turbo:before-cache\", this._beforeCache);\n    window.removeEventListener(\"pageshow\", this._onPageShow);\n\n    if (this.widgetId) { turnstile.remove(this.widgetId); }\n\n    const turnstileContainer = document.querySelector(\"#turnstile-form-container\");\n    if (turnstileContainer) { turnstileContainer.innerHTML = ''; }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"cart\"\nexport default class extends Controller {\n  static values = {\n    key: String\n  }\n\n  connect() {\n    this.stripe = Stripe(this.keyValue, { locale: 'it' });\n    this.submitting = false;\n\n    const stripeButton = document.getElementById('stripe-pay');\n    const stripeSpinner = document.getElementById('stripe-pay-spinner');\n    const stripeError = document.getElementById('stripe-general-error');\n\n    if (!document.getElementById('card-element')) return;\n\n    const elements = this.stripe.elements({ locale: 'it', currency: 'eur', mode: 'setup' });\n\n    this.card = elements.create('payment');\n    this.card.mount('#card-element');\n\n    this.card.addEventListener('change', function (event) {\n      if (event.error) {\n        stripeError.classList.remove('visually-hidden');\n        stripeError.textContent = event.error.message;\n\n        stripeButton.disabled = false;\n        stripeSpinner.classList.add('d-none');\n      } else {\n        stripeError.textContent = '';\n        stripeError.classList.add('visually-hidden');\n      }\n    });\n\n    const termsCheckbox = document.getElementById('terms-and-conditions');\n    const termsError = document.getElementById('terms-error');\n\n    if (termsCheckbox) {\n      termsCheckbox.addEventListener('change', function () {\n        if (termsCheckbox.checked) {\n          termsCheckbox.classList.remove('is-invalid');\n\n          if (termsError) {\n            termsError.classList.add('d-none');\n          }\n\n          if (stripeError) {\n            stripeError.classList.add('visually-hidden');\n            stripeError.textContent = '';\n          }\n        }\n      });\n    }\n  }\n\n  submitStripe(event) {\n    event.preventDefault();\n\n    if (this.submitting) return;\n\n    const cart = this;\n    const stripeButton = document.getElementById('stripe-pay');\n    const stripeSpinner = document.getElementById('stripe-pay-spinner');\n    const stripeError = document.getElementById('stripe-general-error');\n    const termsCheckbox = document.getElementById('terms-and-conditions');\n    const termsError = document.getElementById('terms-error');\n\n    stripeButton.disabled = true;\n    stripeSpinner.classList.remove('d-none');\n\n    stripeError.classList.add('visually-hidden');\n    stripeError.textContent = '';\n\n    termsCheckbox.classList.remove('is-invalid');\n    if (termsError) { termsError.classList.add('d-none'); }\n\n    this.submitting = true;\n\n    this.stripe.createPaymentMethod('card', this.card).then(function (result) {\n      if (result.error) {\n        cart.submitting = false;\n\n        stripeError.classList.remove('visually-hidden');\n        stripeError.textContent = result.error.message;\n\n        stripeButton.disabled = false;\n        stripeSpinner.classList.add('d-none');\n      } else {\n        if (!termsCheckbox.checked) {\n          cart.submitting = false;\n\n          const message = \"Devi accettare le condizioni generali di servizio per procedere.\";\n\n          termsCheckbox.classList.add('is-invalid');\n          if (termsError) termsError.classList.remove('d-none');\n\n          stripeError.textContent = message;\n          stripeError.classList.remove('visually-hidden');\n\n          stripeButton.disabled = false;\n          stripeSpinner.classList.add('d-none');\n          termsCheckbox.focus();\n\n          return false;\n        }\n\n        cart.stripeTokenHandler(result.paymentMethod);\n      }\n    });\n  }\n\n  stripeTokenHandler(token) {\n    const form = document.getElementById('StripeCCForm');\n    const existingInput = form.querySelector('input[name=\"payment_method_id\"]');\n\n    if (existingInput) existingInput.remove();\n\n    const hiddenInput = document.createElement('input');\n    hiddenInput.setAttribute('type', 'hidden');\n    hiddenInput.setAttribute('name', 'payment_method_id');\n    hiddenInput.setAttribute('value', token.id);\n\n    form.appendChild(hiddenInput);\n\n    form.requestSubmit();\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"cf-checker\"\nexport default class extends Controller {\n  static values = { cfRequired: Boolean }\n  static targets = [\"currentModal\"];\n\n  connect() {\n    if (!this.hasCurrentModalTarget) return;\n\n    this.myModal = new bootstrap.Modal(this.currentModalTarget, {});\n  }\n\n  verify(event) {\n    if (!this.hasCurrentModalTarget) return;\n\n    if (this.cfRequiredValue) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n\n      this.myModal.show();\n    }\n  }\n\n  handleCFUpdate(event) {\n    if (event.detail.success) {\n      this.myModal.hide();\n\n      this.cfRequiredValue = false;\n    }\n  }\n}", "function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version  : 4.1.4\n * License  : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n  CREATED: CREATED,\n  MOUNTED: MOUNTED,\n  IDLE: IDLE,\n  MOVING: MOVING,\n  SCROLLING: SCROLLING,\n  DRAGGING: DRAGGING,\n  DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n  array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n  return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n  return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n  return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n  return typeof subject === type;\n}\n\nfunction isObject(subject) {\n  return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n  return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n  try {\n    return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction toArray(value) {\n  return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n  toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n  return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n  array.push.apply(array, toArray(items));\n  return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n  if (elm) {\n    forEach(classes, function (name) {\n      if (name) {\n        elm.classList[add ? \"add\" : \"remove\"](name);\n      }\n    });\n  }\n}\n\nfunction addClass(elm, classes) {\n  toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n  forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n  forEach(nodes, function (node) {\n    var parent = (ref || node).parentNode;\n\n    if (parent) {\n      parent.insertBefore(node, ref);\n    }\n  });\n}\n\nfunction matches(elm, selector) {\n  return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n  var children2 = parent ? slice(parent.children) : [];\n  return selector ? children2.filter(function (child) {\n    return matches(child, selector);\n  }) : children2;\n}\n\nfunction child(parent, selector) {\n  return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n  if (object) {\n    (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n      key !== \"__proto__\" && iteratee(object[key], key);\n    });\n  }\n\n  return object;\n}\n\nfunction assign(object) {\n  slice(arguments, 1).forEach(function (source) {\n    forOwn(source, function (value, key) {\n      object[key] = source[key];\n    });\n  });\n  return object;\n}\n\nfunction merge(object) {\n  slice(arguments, 1).forEach(function (source) {\n    forOwn(source, function (value, key) {\n      if (isArray(value)) {\n        object[key] = value.slice();\n      } else if (isObject(value)) {\n        object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n      } else {\n        object[key] = value;\n      }\n    });\n  });\n  return object;\n}\n\nfunction omit(object, keys) {\n  forEach(keys || ownKeys(object), function (key) {\n    delete object[key];\n  });\n}\n\nfunction removeAttribute(elms, attrs) {\n  forEach(elms, function (elm) {\n    forEach(attrs, function (attr) {\n      elm && elm.removeAttribute(attr);\n    });\n  });\n}\n\nfunction setAttribute(elms, attrs, value) {\n  if (isObject(attrs)) {\n    forOwn(attrs, function (value2, name) {\n      setAttribute(elms, name, value2);\n    });\n  } else {\n    forEach(elms, function (elm) {\n      isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n    });\n  }\n}\n\nfunction create(tag, attrs, parent) {\n  var elm = document.createElement(tag);\n\n  if (attrs) {\n    isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n  }\n\n  parent && append(parent, elm);\n  return elm;\n}\n\nfunction style(elm, prop, value) {\n  if (isUndefined(value)) {\n    return getComputedStyle(elm)[prop];\n  }\n\n  if (!isNull(value)) {\n    elm.style[prop] = \"\" + value;\n  }\n}\n\nfunction display(elm, display2) {\n  style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n  elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n    preventScroll: true\n  });\n}\n\nfunction getAttribute(elm, attr) {\n  return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n  return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n  return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n  forEach(nodes, function (node) {\n    if (node && node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  });\n}\n\nfunction parseHtml(html) {\n  return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n  e.preventDefault();\n\n  if (stopPropagation) {\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n}\n\nfunction query(parent, selector) {\n  return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n  return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n  toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n  return e.timeStamp;\n}\n\nfunction unit(value) {\n  return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n  }\n}\n\nvar min = Math.min,\n    max = Math.max,\n    floor = Math.floor,\n    ceil = Math.ceil,\n    abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n  return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n  var minimum = min(x, y);\n  var maximum = max(x, y);\n  return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n  var minimum = min(x, y);\n  var maximum = max(x, y);\n  return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n  return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n  return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n  forEach(replacements, function (replacement) {\n    string = string.replace(\"%s\", \"\" + replacement);\n  });\n  return string;\n}\n\nfunction pad(number) {\n  return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n  return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n  var listeners = [];\n\n  function bind(targets, events, callback, options) {\n    forEachEvent(targets, events, function (target, event, namespace) {\n      var isEventTarget = (\"addEventListener\" in target);\n      var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n      isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n      listeners.push([target, event, namespace, callback, remover]);\n    });\n  }\n\n  function unbind(targets, events, callback) {\n    forEachEvent(targets, events, function (target, event, namespace) {\n      listeners = listeners.filter(function (listener) {\n        if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n          listener[4]();\n          return false;\n        }\n\n        return true;\n      });\n    });\n  }\n\n  function dispatch(target, type, detail) {\n    var e;\n    var bubbles = true;\n\n    if (typeof CustomEvent === \"function\") {\n      e = new CustomEvent(type, {\n        bubbles: bubbles,\n        detail: detail\n      });\n    } else {\n      e = document.createEvent(\"CustomEvent\");\n      e.initCustomEvent(type, bubbles, false, detail);\n    }\n\n    target.dispatchEvent(e);\n    return e;\n  }\n\n  function forEachEvent(targets, events, iteratee) {\n    forEach(targets, function (target) {\n      target && forEach(events, function (events2) {\n        events2.split(\" \").forEach(function (eventNS) {\n          var fragment = eventNS.split(\".\");\n          iteratee(target, fragment[0], fragment[1]);\n        });\n      });\n    });\n  }\n\n  function destroy() {\n    listeners.forEach(function (data) {\n      data[4]();\n    });\n    empty(listeners);\n  }\n\n  return {\n    bind: bind,\n    unbind: unbind,\n    dispatch: dispatch,\n    destroy: destroy\n  };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n  var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n  var binder = EventBinder();\n\n  function on(events, callback) {\n    binder.bind(bus, toArray(events).join(\" \"), function (e) {\n      callback.apply(callback, isArray(e.detail) ? e.detail : []);\n    });\n  }\n\n  function emit(event) {\n    binder.dispatch(bus, event, slice(arguments, 1));\n  }\n\n  if (Splide2) {\n    Splide2.event.on(EVENT_DESTROY, binder.destroy);\n  }\n\n  return assign(binder, {\n    bus: bus,\n    on: on,\n    off: apply(binder.unbind, bus),\n    emit: emit\n  });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n  var now = Date.now;\n  var startTime;\n  var rate = 0;\n  var id;\n  var paused = true;\n  var count = 0;\n\n  function update() {\n    if (!paused) {\n      rate = interval ? min((now() - startTime) / interval, 1) : 1;\n      onUpdate && onUpdate(rate);\n\n      if (rate >= 1) {\n        onInterval();\n        startTime = now();\n\n        if (limit && ++count >= limit) {\n          return pause();\n        }\n      }\n\n      id = raf(update);\n    }\n  }\n\n  function start(resume) {\n    resume || cancel();\n    startTime = now() - (resume ? rate * interval : 0);\n    paused = false;\n    id = raf(update);\n  }\n\n  function pause() {\n    paused = true;\n  }\n\n  function rewind() {\n    startTime = now();\n    rate = 0;\n\n    if (onUpdate) {\n      onUpdate(rate);\n    }\n  }\n\n  function cancel() {\n    id && cancelAnimationFrame(id);\n    rate = 0;\n    id = 0;\n    paused = true;\n  }\n\n  function set(time) {\n    interval = time;\n  }\n\n  function isPaused() {\n    return paused;\n  }\n\n  return {\n    start: start,\n    rewind: rewind,\n    pause: pause,\n    cancel: cancel,\n    set: set,\n    isPaused: isPaused\n  };\n}\n\nfunction State(initialState) {\n  var state = initialState;\n\n  function set(value) {\n    state = value;\n  }\n\n  function is(states) {\n    return includes(toArray(states), state);\n  }\n\n  return {\n    set: set,\n    is: is\n  };\n}\n\nfunction Throttle(func, duration) {\n  var interval = RequestInterval(duration || 0, func, null, 1);\n  return function () {\n    interval.isPaused() && interval.start();\n  };\n}\n\nfunction Media(Splide2, Components2, options) {\n  var state = Splide2.state;\n  var breakpoints = options.breakpoints || {};\n  var reducedMotion = options.reducedMotion || {};\n  var binder = EventBinder();\n  var queries = [];\n\n  function setup() {\n    var isMin = options.mediaQuery === \"min\";\n    ownKeys(breakpoints).sort(function (n, m) {\n      return isMin ? +n - +m : +m - +n;\n    }).forEach(function (key) {\n      register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n    });\n    register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n    update();\n  }\n\n  function destroy(completely) {\n    if (completely) {\n      binder.destroy();\n    }\n  }\n\n  function register(options2, query) {\n    var queryList = matchMedia(query);\n    binder.bind(queryList, \"change\", update);\n    queries.push([options2, queryList]);\n  }\n\n  function update() {\n    var destroyed = state.is(DESTROYED);\n    var direction = options.direction;\n    var merged = queries.reduce(function (merged2, entry) {\n      return merge(merged2, entry[1].matches ? entry[0] : {});\n    }, {});\n    omit(options);\n    set(merged);\n\n    if (options.destroy) {\n      Splide2.destroy(options.destroy === \"completely\");\n    } else if (destroyed) {\n      destroy(true);\n      Splide2.mount();\n    } else {\n      direction !== options.direction && Splide2.refresh();\n    }\n  }\n\n  function reduce(enable) {\n    if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n      enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n    }\n  }\n\n  function set(opts, base, notify) {\n    merge(options, opts);\n    base && merge(Object.getPrototypeOf(options), opts);\n\n    if (notify || !state.is(CREATED)) {\n      Splide2.emit(EVENT_UPDATED, options);\n    }\n  }\n\n  return {\n    setup: setup,\n    destroy: destroy,\n    reduce: reduce,\n    set: set\n  };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n  width: [\"height\"],\n  left: [\"top\", \"right\"],\n  right: [\"bottom\", \"left\"],\n  x: [\"y\"],\n  X: [\"Y\"],\n  Y: [\"X\"],\n  ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n  ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n  function resolve(prop, axisOnly, direction) {\n    direction = direction || options.direction;\n    var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n    return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n      var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n      return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n    });\n  }\n\n  function orient(value) {\n    return value * (options.direction === RTL ? 1 : -1);\n  }\n\n  return {\n    resolve: resolve,\n    orient: orient\n  };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n  slide: CLASS_SLIDE,\n  clone: CLASS_CLONE,\n  arrows: CLASS_ARROWS,\n  arrow: CLASS_ARROW,\n  prev: CLASS_ARROW_PREV,\n  next: CLASS_ARROW_NEXT,\n  pagination: CLASS_PAGINATION,\n  page: CLASS_PAGINATION_PAGE,\n  spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n  if (isFunction(from.closest)) {\n    return from.closest(selector);\n  }\n\n  var elm = from;\n\n  while (elm && elm.nodeType === 1) {\n    if (matches(elm, selector)) {\n      break;\n    }\n\n    elm = elm.parentElement;\n  }\n\n  return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n  var _EventInterface = EventInterface(Splide2),\n      on = _EventInterface.on,\n      bind = _EventInterface.bind;\n\n  var root = Splide2.root;\n  var i18n = options.i18n;\n  var elements = {};\n  var slides = [];\n  var rootClasses = [];\n  var trackClasses = [];\n  var track;\n  var list;\n  var isUsingKey;\n\n  function setup() {\n    collect();\n    init();\n    update();\n  }\n\n  function mount() {\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, setup);\n    on(EVENT_UPDATED, update);\n    bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n      isUsingKey = e.type === \"keydown\";\n    }, {\n      capture: true\n    });\n    bind(root, \"focusin\", function () {\n      toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n    });\n  }\n\n  function destroy(completely) {\n    var attrs = ALL_ATTRIBUTES.concat(\"style\");\n    empty(slides);\n    removeClass(root, rootClasses);\n    removeClass(track, trackClasses);\n    removeAttribute([track, list], attrs);\n    removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n  }\n\n  function update() {\n    removeClass(root, rootClasses);\n    removeClass(track, trackClasses);\n    rootClasses = getClasses(CLASS_ROOT);\n    trackClasses = getClasses(CLASS_TRACK);\n    addClass(root, rootClasses);\n    addClass(track, trackClasses);\n    setAttribute(root, ARIA_LABEL, options.label);\n    setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n  }\n\n  function collect() {\n    track = find(\".\" + CLASS_TRACK);\n    list = child(track, \".\" + CLASS_LIST);\n    assert(track && list, \"A track/list element is missing.\");\n    push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n    forOwn({\n      arrows: CLASS_ARROWS,\n      pagination: CLASS_PAGINATION,\n      prev: CLASS_ARROW_PREV,\n      next: CLASS_ARROW_NEXT,\n      bar: CLASS_PROGRESS_BAR,\n      toggle: CLASS_TOGGLE\n    }, function (className, key) {\n      elements[key] = find(\".\" + className);\n    });\n    assign(elements, {\n      root: root,\n      track: track,\n      list: list,\n      slides: slides\n    });\n  }\n\n  function init() {\n    var id = root.id || uniqueId(PROJECT_CODE);\n    var role = options.role;\n    root.id = id;\n    track.id = track.id || id + \"-track\";\n    list.id = list.id || id + \"-list\";\n\n    if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n      setAttribute(root, ROLE, role);\n    }\n\n    setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n    setAttribute(list, ROLE, \"presentation\");\n  }\n\n  function find(selector) {\n    var elm = query(root, selector);\n    return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n  }\n\n  function getClasses(base) {\n    return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n  }\n\n  return assign(elements, {\n    setup: setup,\n    mount: mount,\n    destroy: destroy\n  });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      emit = event.emit,\n      bind = event.bind;\n  var Components = Splide2.Components,\n      root = Splide2.root,\n      options = Splide2.options;\n  var isNavigation = options.isNavigation,\n      updateOnMove = options.updateOnMove,\n      i18n = options.i18n,\n      pagination = options.pagination,\n      slideFocus = options.slideFocus;\n  var resolve = Components.Direction.resolve;\n  var styles = getAttribute(slide, \"style\");\n  var label = getAttribute(slide, ARIA_LABEL);\n  var isClone = slideIndex > -1;\n  var container = child(slide, \".\" + CLASS_CONTAINER);\n  var destroyed;\n\n  function mount() {\n    if (!isClone) {\n      slide.id = root.id + \"-slide\" + pad(index + 1);\n      setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n      setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n      setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n    }\n\n    listen();\n  }\n\n  function listen() {\n    bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n    bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n    on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n    on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n    if (updateOnMove) {\n      on(EVENT_MOVE, onMove);\n    }\n  }\n\n  function destroy() {\n    destroyed = true;\n    event.destroy();\n    removeClass(slide, STATUS_CLASSES);\n    removeAttribute(slide, ALL_ATTRIBUTES);\n    setAttribute(slide, \"style\", styles);\n    setAttribute(slide, ARIA_LABEL, label || \"\");\n  }\n\n  function initNavigation() {\n    var controls = Splide2.splides.map(function (target) {\n      var Slide2 = target.splide.Components.Slides.getAt(index);\n      return Slide2 ? Slide2.slide.id : \"\";\n    }).join(\" \");\n    setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n    setAttribute(slide, ARIA_CONTROLS, controls);\n    setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n    slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n  }\n\n  function onMove() {\n    if (!destroyed) {\n      update();\n    }\n  }\n\n  function update() {\n    if (!destroyed) {\n      var curr = Splide2.index;\n      updateActivity();\n      updateVisibility();\n      toggleClass(slide, CLASS_PREV, index === curr - 1);\n      toggleClass(slide, CLASS_NEXT, index === curr + 1);\n    }\n  }\n\n  function updateActivity() {\n    var active = isActive();\n\n    if (active !== hasClass(slide, CLASS_ACTIVE)) {\n      toggleClass(slide, CLASS_ACTIVE, active);\n      setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n      emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n    }\n  }\n\n  function updateVisibility() {\n    var visible = isVisible();\n    var hidden = !visible && (!isActive() || isClone);\n\n    if (!Splide2.state.is([MOVING, SCROLLING])) {\n      setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n    }\n\n    setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n    if (slideFocus) {\n      setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n    }\n\n    if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n      toggleClass(slide, CLASS_VISIBLE, visible);\n      emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n    }\n\n    if (!visible && document.activeElement === slide) {\n      var Slide2 = Components.Slides.getAt(Splide2.index);\n      Slide2 && focus(Slide2.slide);\n    }\n  }\n\n  function style$1(prop, value, useContainer) {\n    style(useContainer && container || slide, prop, value);\n  }\n\n  function isActive() {\n    var curr = Splide2.index;\n    return curr === index || options.cloneStatus && curr === slideIndex;\n  }\n\n  function isVisible() {\n    if (Splide2.is(FADE)) {\n      return isActive();\n    }\n\n    var trackRect = rect(Components.Elements.track);\n    var slideRect = rect(slide);\n    var left = resolve(\"left\", true);\n    var right = resolve(\"right\", true);\n    return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n  }\n\n  function isWithin(from, distance) {\n    var diff = abs(from - index);\n\n    if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n      diff = min(diff, Splide2.length - diff);\n    }\n\n    return diff <= distance;\n  }\n\n  var self = {\n    index: index,\n    slideIndex: slideIndex,\n    slide: slide,\n    container: container,\n    isClone: isClone,\n    mount: mount,\n    destroy: destroy,\n    update: update,\n    style: style$1,\n    isWithin: isWithin\n  };\n  return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n  var _EventInterface2 = EventInterface(Splide2),\n      on = _EventInterface2.on,\n      emit = _EventInterface2.emit,\n      bind = _EventInterface2.bind;\n\n  var _Components2$Elements = Components2.Elements,\n      slides = _Components2$Elements.slides,\n      list = _Components2$Elements.list;\n  var Slides2 = [];\n\n  function mount() {\n    init();\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, init);\n  }\n\n  function init() {\n    slides.forEach(function (slide, index) {\n      register(slide, index, -1);\n    });\n  }\n\n  function destroy() {\n    forEach$1(function (Slide2) {\n      Slide2.destroy();\n    });\n    empty(Slides2);\n  }\n\n  function update() {\n    forEach$1(function (Slide2) {\n      Slide2.update();\n    });\n  }\n\n  function register(slide, index, slideIndex) {\n    var object = Slide$1(Splide2, index, slideIndex, slide);\n    object.mount();\n    Slides2.push(object);\n    Slides2.sort(function (Slide1, Slide2) {\n      return Slide1.index - Slide2.index;\n    });\n  }\n\n  function get(excludeClones) {\n    return excludeClones ? filter(function (Slide2) {\n      return !Slide2.isClone;\n    }) : Slides2;\n  }\n\n  function getIn(page) {\n    var Controller = Components2.Controller;\n    var index = Controller.toIndex(page);\n    var max = Controller.hasFocus() ? 1 : options.perPage;\n    return filter(function (Slide2) {\n      return between(Slide2.index, index, index + max - 1);\n    });\n  }\n\n  function getAt(index) {\n    return filter(index)[0];\n  }\n\n  function add(items, index) {\n    forEach(items, function (slide) {\n      if (isString(slide)) {\n        slide = parseHtml(slide);\n      }\n\n      if (isHTMLElement(slide)) {\n        var ref = slides[index];\n        ref ? before(slide, ref) : append(list, slide);\n        addClass(slide, options.classes.slide);\n        observeImages(slide, apply(emit, EVENT_RESIZE));\n      }\n    });\n    emit(EVENT_REFRESH);\n  }\n\n  function remove$1(matcher) {\n    remove(filter(matcher).map(function (Slide2) {\n      return Slide2.slide;\n    }));\n    emit(EVENT_REFRESH);\n  }\n\n  function forEach$1(iteratee, excludeClones) {\n    get(excludeClones).forEach(iteratee);\n  }\n\n  function filter(matcher) {\n    return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n      return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n    });\n  }\n\n  function style(prop, value, useContainer) {\n    forEach$1(function (Slide2) {\n      Slide2.style(prop, value, useContainer);\n    });\n  }\n\n  function observeImages(elm, callback) {\n    var images = queryAll(elm, \"img\");\n    var length = images.length;\n\n    if (length) {\n      images.forEach(function (img) {\n        bind(img, \"load error\", function () {\n          if (! --length) {\n            callback();\n          }\n        });\n      });\n    } else {\n      callback();\n    }\n  }\n\n  function getLength(excludeClones) {\n    return excludeClones ? slides.length : Slides2.length;\n  }\n\n  function isEnough() {\n    return Slides2.length > options.perPage;\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy,\n    update: update,\n    register: register,\n    get: get,\n    getIn: getIn,\n    getAt: getAt,\n    add: add,\n    remove: remove$1,\n    forEach: forEach$1,\n    filter: filter,\n    style: style,\n    getLength: getLength,\n    isEnough: isEnough\n  };\n}\n\nfunction Layout(Splide2, Components2, options) {\n  var _EventInterface3 = EventInterface(Splide2),\n      on = _EventInterface3.on,\n      bind = _EventInterface3.bind,\n      emit = _EventInterface3.emit;\n\n  var Slides = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var _Components2$Elements2 = Components2.Elements,\n      root = _Components2$Elements2.root,\n      track = _Components2$Elements2.track,\n      list = _Components2$Elements2.list;\n  var getAt = Slides.getAt,\n      styleSlides = Slides.style;\n  var vertical;\n  var rootRect;\n  var overflow;\n\n  function mount() {\n    init();\n    bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n    on([EVENT_UPDATED, EVENT_REFRESH], init);\n    on(EVENT_RESIZE, resize);\n  }\n\n  function init() {\n    vertical = options.direction === TTB;\n    style(root, \"maxWidth\", unit(options.width));\n    style(track, resolve(\"paddingLeft\"), cssPadding(false));\n    style(track, resolve(\"paddingRight\"), cssPadding(true));\n    resize(true);\n  }\n\n  function resize(force) {\n    var newRect = rect(root);\n\n    if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n      style(track, \"height\", cssTrackHeight());\n      styleSlides(resolve(\"marginRight\"), unit(options.gap));\n      styleSlides(\"width\", cssSlideWidth());\n      styleSlides(\"height\", cssSlideHeight(), true);\n      rootRect = newRect;\n      emit(EVENT_RESIZED);\n\n      if (overflow !== (overflow = isOverflow())) {\n        toggleClass(root, CLASS_OVERFLOW, overflow);\n        emit(EVENT_OVERFLOW, overflow);\n      }\n    }\n  }\n\n  function cssPadding(right) {\n    var padding = options.padding;\n    var prop = resolve(right ? \"right\" : \"left\");\n    return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n  }\n\n  function cssTrackHeight() {\n    var height = \"\";\n\n    if (vertical) {\n      height = cssHeight();\n      assert(height, \"height or heightRatio is missing.\");\n      height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n    }\n\n    return height;\n  }\n\n  function cssHeight() {\n    return unit(options.height || rect(list).width * options.heightRatio);\n  }\n\n  function cssSlideWidth() {\n    return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n  }\n\n  function cssSlideHeight() {\n    return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n  }\n\n  function cssSlideSize() {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  }\n\n  function listSize() {\n    return rect(list)[resolve(\"width\")];\n  }\n\n  function slideSize(index, withoutGap) {\n    var Slide = getAt(index || 0);\n    return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n  }\n\n  function totalSize(index, withoutGap) {\n    var Slide = getAt(index);\n\n    if (Slide) {\n      var right = rect(Slide.slide)[resolve(\"right\")];\n      var left = rect(list)[resolve(\"left\")];\n      return abs(right - left) + (withoutGap ? 0 : getGap());\n    }\n\n    return 0;\n  }\n\n  function sliderSize(withoutGap) {\n    return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n  }\n\n  function getGap() {\n    var Slide = getAt(0);\n    return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n  }\n\n  function getPadding(right) {\n    return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n  }\n\n  function isOverflow() {\n    return Splide2.is(FADE) || sliderSize(true) > listSize();\n  }\n\n  return {\n    mount: mount,\n    resize: resize,\n    listSize: listSize,\n    slideSize: slideSize,\n    sliderSize: sliderSize,\n    totalSize: totalSize,\n    getPadding: getPadding,\n    isOverflow: isOverflow\n  };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on;\n  var Elements = Components2.Elements,\n      Slides = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var clones = [];\n  var cloneCount;\n\n  function mount() {\n    on(EVENT_REFRESH, remount);\n    on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n    if (cloneCount = computeCloneCount()) {\n      generate(cloneCount);\n      Components2.Layout.resize(true);\n    }\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function destroy() {\n    remove(clones);\n    empty(clones);\n    event.destroy();\n  }\n\n  function observe() {\n    var count = computeCloneCount();\n\n    if (cloneCount !== count) {\n      if (cloneCount < count || !count) {\n        event.emit(EVENT_REFRESH);\n      }\n    }\n  }\n\n  function generate(count) {\n    var slides = Slides.get().slice();\n    var length = slides.length;\n\n    if (length) {\n      while (slides.length < count) {\n        push(slides, slides);\n      }\n\n      push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n        var isHead = index < count;\n        var clone = cloneDeep(Slide.slide, index);\n        isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n        push(clones, clone);\n        Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n      });\n    }\n  }\n\n  function cloneDeep(elm, index) {\n    var clone = elm.cloneNode(true);\n    addClass(clone, options.classes.clone);\n    clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n    return clone;\n  }\n\n  function computeCloneCount() {\n    var clones2 = options.clones;\n\n    if (!Splide2.is(LOOP)) {\n      clones2 = 0;\n    } else if (isUndefined(clones2)) {\n      var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n      var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n      clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n    }\n\n    return clones2;\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy\n  };\n}\n\nfunction Move(Splide2, Components2, options) {\n  var _EventInterface4 = EventInterface(Splide2),\n      on = _EventInterface4.on,\n      emit = _EventInterface4.emit;\n\n  var set = Splide2.state.set;\n  var _Components2$Layout = Components2.Layout,\n      slideSize = _Components2$Layout.slideSize,\n      getPadding = _Components2$Layout.getPadding,\n      totalSize = _Components2$Layout.totalSize,\n      listSize = _Components2$Layout.listSize,\n      sliderSize = _Components2$Layout.sliderSize;\n  var _Components2$Directio = Components2.Direction,\n      resolve = _Components2$Directio.resolve,\n      orient = _Components2$Directio.orient;\n  var _Components2$Elements3 = Components2.Elements,\n      list = _Components2$Elements3.list,\n      track = _Components2$Elements3.track;\n  var Transition;\n\n  function mount() {\n    Transition = Components2.Transition;\n    on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n  }\n\n  function reposition() {\n    if (!Components2.Controller.isBusy()) {\n      Components2.Scroll.cancel();\n      jump(Splide2.index);\n      Components2.Slides.update();\n    }\n  }\n\n  function move(dest, index, prev, callback) {\n    if (dest !== index && canShift(dest > prev)) {\n      cancel();\n      translate(shift(getPosition(), dest > prev), true);\n    }\n\n    set(MOVING);\n    emit(EVENT_MOVE, index, prev, dest);\n    Transition.start(index, function () {\n      set(IDLE);\n      emit(EVENT_MOVED, index, prev, dest);\n      callback && callback();\n    });\n  }\n\n  function jump(index) {\n    translate(toPosition(index, true));\n  }\n\n  function translate(position, preventLoop) {\n    if (!Splide2.is(FADE)) {\n      var destination = preventLoop ? position : loop(position);\n      style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n      position !== destination && emit(EVENT_SHIFTED);\n    }\n  }\n\n  function loop(position) {\n    if (Splide2.is(LOOP)) {\n      var index = toIndex(position);\n      var exceededMax = index > Components2.Controller.getEnd();\n      var exceededMin = index < 0;\n\n      if (exceededMin || exceededMax) {\n        position = shift(position, exceededMax);\n      }\n    }\n\n    return position;\n  }\n\n  function shift(position, backwards) {\n    var excess = position - getLimit(backwards);\n    var size = sliderSize();\n    position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n    return position;\n  }\n\n  function cancel() {\n    translate(getPosition(), true);\n    Transition.cancel();\n  }\n\n  function toIndex(position) {\n    var Slides = Components2.Slides.get();\n    var index = 0;\n    var minDistance = Infinity;\n\n    for (var i = 0; i < Slides.length; i++) {\n      var slideIndex = Slides[i].index;\n      var distance = abs(toPosition(slideIndex, true) - position);\n\n      if (distance <= minDistance) {\n        minDistance = distance;\n        index = slideIndex;\n      } else {\n        break;\n      }\n    }\n\n    return index;\n  }\n\n  function toPosition(index, trimming) {\n    var position = orient(totalSize(index - 1) - offset(index));\n    return trimming ? trim(position) : position;\n  }\n\n  function getPosition() {\n    var left = resolve(\"left\");\n    return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n  }\n\n  function trim(position) {\n    if (options.trimSpace && Splide2.is(SLIDE)) {\n      position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n    }\n\n    return position;\n  }\n\n  function offset(index) {\n    var focus = options.focus;\n    return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n  }\n\n  function getLimit(max) {\n    return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n  }\n\n  function canShift(backwards) {\n    var shifted = orient(shift(getPosition(), backwards));\n    return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n  }\n\n  function exceededLimit(max, position) {\n    position = isUndefined(position) ? getPosition() : position;\n    var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n    var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n    return exceededMin || exceededMax;\n  }\n\n  return {\n    mount: mount,\n    move: move,\n    jump: jump,\n    translate: translate,\n    shift: shift,\n    cancel: cancel,\n    toIndex: toIndex,\n    toPosition: toPosition,\n    getPosition: getPosition,\n    getLimit: getLimit,\n    exceededLimit: exceededLimit,\n    reposition: reposition\n  };\n}\n\nfunction Controller(Splide2, Components2, options) {\n  var _EventInterface5 = EventInterface(Splide2),\n      on = _EventInterface5.on,\n      emit = _EventInterface5.emit;\n\n  var Move = Components2.Move;\n  var getPosition = Move.getPosition,\n      getLimit = Move.getLimit,\n      toPosition = Move.toPosition;\n  var _Components2$Slides = Components2.Slides,\n      isEnough = _Components2$Slides.isEnough,\n      getLength = _Components2$Slides.getLength;\n  var omitEnd = options.omitEnd;\n  var isLoop = Splide2.is(LOOP);\n  var isSlide = Splide2.is(SLIDE);\n  var getNext = apply(getAdjacent, false);\n  var getPrev = apply(getAdjacent, true);\n  var currIndex = options.start || 0;\n  var endIndex;\n  var prevIndex = currIndex;\n  var slideCount;\n  var perMove;\n  var perPage;\n\n  function mount() {\n    init();\n    on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n    on(EVENT_RESIZED, onResized);\n  }\n\n  function init() {\n    slideCount = getLength(true);\n    perMove = options.perMove;\n    perPage = options.perPage;\n    endIndex = getEnd();\n    var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n    if (index !== currIndex) {\n      currIndex = index;\n      Move.reposition();\n    }\n  }\n\n  function onResized() {\n    if (endIndex !== getEnd()) {\n      emit(EVENT_END_INDEX_CHANGED);\n    }\n  }\n\n  function go(control, allowSameIndex, callback) {\n    if (!isBusy()) {\n      var dest = parse(control);\n      var index = loop(dest);\n\n      if (index > -1 && (allowSameIndex || index !== currIndex)) {\n        setIndex(index);\n        Move.move(dest, index, prevIndex, callback);\n      }\n    }\n  }\n\n  function scroll(destination, duration, snap, callback) {\n    Components2.Scroll.scroll(destination, duration, snap, function () {\n      var index = loop(Move.toIndex(getPosition()));\n      setIndex(omitEnd ? min(index, endIndex) : index);\n      callback && callback();\n    });\n  }\n\n  function parse(control) {\n    var index = currIndex;\n\n    if (isString(control)) {\n      var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n          indicator = _ref[1],\n          number = _ref[2];\n\n      if (indicator === \"+\" || indicator === \"-\") {\n        index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n      } else if (indicator === \">\") {\n        index = number ? toIndex(+number) : getNext(true);\n      } else if (indicator === \"<\") {\n        index = getPrev(true);\n      }\n    } else {\n      index = isLoop ? control : clamp(control, 0, endIndex);\n    }\n\n    return index;\n  }\n\n  function getAdjacent(prev, destination) {\n    var number = perMove || (hasFocus() ? 1 : perPage);\n    var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n    if (dest === -1 && isSlide) {\n      if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n        return prev ? 0 : endIndex;\n      }\n    }\n\n    return destination ? dest : loop(dest);\n  }\n\n  function computeDestIndex(dest, from, snapPage) {\n    if (isEnough() || hasFocus()) {\n      var index = computeMovableDestIndex(dest);\n\n      if (index !== dest) {\n        from = dest;\n        dest = index;\n        snapPage = false;\n      }\n\n      if (dest < 0 || dest > endIndex) {\n        if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n          dest = toIndex(toPage(dest));\n        } else {\n          if (isLoop) {\n            dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n          } else if (options.rewind) {\n            dest = dest < 0 ? endIndex : 0;\n          } else {\n            dest = -1;\n          }\n        }\n      } else {\n        if (snapPage && dest !== from) {\n          dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n        }\n      }\n    } else {\n      dest = -1;\n    }\n\n    return dest;\n  }\n\n  function computeMovableDestIndex(dest) {\n    if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n      var position = getPosition();\n\n      while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n        dest < currIndex ? --dest : ++dest;\n      }\n    }\n\n    return dest;\n  }\n\n  function loop(index) {\n    return isLoop ? (index + slideCount) % slideCount || 0 : index;\n  }\n\n  function getEnd() {\n    var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n    while (omitEnd && end-- > 0) {\n      if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n        end++;\n        break;\n      }\n    }\n\n    return clamp(end, 0, slideCount - 1);\n  }\n\n  function toIndex(page) {\n    return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n  }\n\n  function toPage(index) {\n    return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n  }\n\n  function toDest(destination) {\n    var closest = Move.toIndex(destination);\n    return isSlide ? clamp(closest, 0, endIndex) : closest;\n  }\n\n  function setIndex(index) {\n    if (index !== currIndex) {\n      prevIndex = currIndex;\n      currIndex = index;\n    }\n  }\n\n  function getIndex(prev) {\n    return prev ? prevIndex : currIndex;\n  }\n\n  function hasFocus() {\n    return !isUndefined(options.focus) || options.isNavigation;\n  }\n\n  function isBusy() {\n    return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n  }\n\n  return {\n    mount: mount,\n    go: go,\n    scroll: scroll,\n    getNext: getNext,\n    getPrev: getPrev,\n    getAdjacent: getAdjacent,\n    getEnd: getEnd,\n    setIndex: setIndex,\n    getIndex: getIndex,\n    toIndex: toIndex,\n    toPage: toPage,\n    toDest: toDest,\n    hasFocus: hasFocus,\n    isBusy: isBusy\n  };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      bind = event.bind,\n      emit = event.emit;\n  var classes = options.classes,\n      i18n = options.i18n;\n  var Elements = Components2.Elements,\n      Controller = Components2.Controller;\n  var placeholder = Elements.arrows,\n      track = Elements.track;\n  var wrapper = placeholder;\n  var prev = Elements.prev;\n  var next = Elements.next;\n  var created;\n  var wrapperClasses;\n  var arrows = {};\n\n  function mount() {\n    init();\n    on(EVENT_UPDATED, remount);\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function init() {\n    var enabled = options.arrows;\n\n    if (enabled && !(prev && next)) {\n      createArrows();\n    }\n\n    if (prev && next) {\n      assign(arrows, {\n        prev: prev,\n        next: next\n      });\n      display(wrapper, enabled ? \"\" : \"none\");\n      addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n      if (enabled) {\n        listen();\n        update();\n        setAttribute([prev, next], ARIA_CONTROLS, track.id);\n        emit(EVENT_ARROWS_MOUNTED, prev, next);\n      }\n    }\n  }\n\n  function destroy() {\n    event.destroy();\n    removeClass(wrapper, wrapperClasses);\n\n    if (created) {\n      remove(placeholder ? [prev, next] : wrapper);\n      prev = next = null;\n    } else {\n      removeAttribute([prev, next], ALL_ATTRIBUTES);\n    }\n  }\n\n  function listen() {\n    on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n    bind(next, \"click\", apply(go, \">\"));\n    bind(prev, \"click\", apply(go, \"<\"));\n  }\n\n  function go(control) {\n    Controller.go(control, true);\n  }\n\n  function createArrows() {\n    wrapper = placeholder || create(\"div\", classes.arrows);\n    prev = createArrow(true);\n    next = createArrow(false);\n    created = true;\n    append(wrapper, [prev, next]);\n    !placeholder && before(wrapper, track);\n  }\n\n  function createArrow(prev2) {\n    var arrow = \"<button class=\\\"\" + classes.arrow + \" \" + (prev2 ? classes.prev : classes.next) + \"\\\" type=\\\"button\\\"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\" focusable=\\\"false\\\"><path d=\\\"\" + (options.arrowPath || PATH) + \"\\\" />\";\n    return parseHtml(arrow);\n  }\n\n  function update() {\n    if (prev && next) {\n      var index = Splide2.index;\n      var prevIndex = Controller.getPrev();\n      var nextIndex = Controller.getNext();\n      var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;\n      var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;\n      prev.disabled = prevIndex < 0;\n      next.disabled = nextIndex < 0;\n      setAttribute(prev, ARIA_LABEL, prevLabel);\n      setAttribute(next, ARIA_LABEL, nextLabel);\n      emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex);\n    }\n  }\n\n  return {\n    arrows: arrows,\n    mount: mount,\n    destroy: destroy,\n    update: update\n  };\n}\n\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\n\nfunction Autoplay(Splide2, Components2, options) {\n  var _EventInterface6 = EventInterface(Splide2),\n      on = _EventInterface6.on,\n      bind = _EventInterface6.bind,\n      emit = _EventInterface6.emit;\n\n  var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n  var isPaused = interval.isPaused;\n  var Elements = Components2.Elements,\n      _Components2$Elements4 = Components2.Elements,\n      root = _Components2$Elements4.root,\n      toggle = _Components2$Elements4.toggle;\n  var autoplay = options.autoplay;\n  var hovered;\n  var focused;\n  var stopped = autoplay === \"pause\";\n\n  function mount() {\n    if (autoplay) {\n      listen();\n      toggle && setAttribute(toggle, ARIA_CONTROLS, Elements.track.id);\n      stopped || play();\n      update();\n    }\n  }\n\n  function listen() {\n    if (options.pauseOnHover) {\n      bind(root, \"mouseenter mouseleave\", function (e) {\n        hovered = e.type === \"mouseenter\";\n        autoToggle();\n      });\n    }\n\n    if (options.pauseOnFocus) {\n      bind(root, \"focusin focusout\", function (e) {\n        focused = e.type === \"focusin\";\n        autoToggle();\n      });\n    }\n\n    if (toggle) {\n      bind(toggle, \"click\", function () {\n        stopped ? play() : pause(true);\n      });\n    }\n\n    on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n    on(EVENT_MOVE, onMove);\n  }\n\n  function play() {\n    if (isPaused() && Components2.Slides.isEnough()) {\n      interval.start(!options.resetProgress);\n      focused = hovered = stopped = false;\n      update();\n      emit(EVENT_AUTOPLAY_PLAY);\n    }\n  }\n\n  function pause(stop) {\n    if (stop === void 0) {\n      stop = true;\n    }\n\n    stopped = !!stop;\n    update();\n\n    if (!isPaused()) {\n      interval.pause();\n      emit(EVENT_AUTOPLAY_PAUSE);\n    }\n  }\n\n  function autoToggle() {\n    if (!stopped) {\n      hovered || focused ? pause(false) : play();\n    }\n  }\n\n  function update() {\n    if (toggle) {\n      toggleClass(toggle, CLASS_ACTIVE, !stopped);\n      setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? \"play\" : \"pause\"]);\n    }\n  }\n\n  function onAnimationFrame(rate) {\n    var bar = Elements.bar;\n    bar && style(bar, \"width\", rate * 100 + \"%\");\n    emit(EVENT_AUTOPLAY_PLAYING, rate);\n  }\n\n  function onMove(index) {\n    var Slide = Components2.Slides.getAt(index);\n    interval.set(Slide && +getAttribute(Slide.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n  }\n\n  return {\n    mount: mount,\n    destroy: interval.cancel,\n    play: play,\n    pause: pause,\n    isPaused: isPaused\n  };\n}\n\nfunction Cover(Splide2, Components2, options) {\n  var _EventInterface7 = EventInterface(Splide2),\n      on = _EventInterface7.on;\n\n  function mount() {\n    if (options.cover) {\n      on(EVENT_LAZYLOAD_LOADED, apply(toggle, true));\n      on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true));\n    }\n  }\n\n  function cover(cover2) {\n    Components2.Slides.forEach(function (Slide) {\n      var img = child(Slide.container || Slide.slide, \"img\");\n\n      if (img && img.src) {\n        toggle(cover2, img, Slide);\n      }\n    });\n  }\n\n  function toggle(cover2, img, Slide) {\n    Slide.style(\"background\", cover2 ? \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\" : \"\", true);\n    display(img, cover2 ? \"none\" : \"\");\n  }\n\n  return {\n    mount: mount,\n    destroy: apply(cover, false)\n  };\n}\n\nvar BOUNCE_DIFF_THRESHOLD = 10;\nvar BOUNCE_DURATION = 600;\nvar FRICTION_FACTOR = 0.6;\nvar BASE_VELOCITY = 1.5;\nvar MIN_DURATION = 800;\n\nfunction Scroll(Splide2, Components2, options) {\n  var _EventInterface8 = EventInterface(Splide2),\n      on = _EventInterface8.on,\n      emit = _EventInterface8.emit;\n\n  var set = Splide2.state.set;\n  var Move = Components2.Move;\n  var getPosition = Move.getPosition,\n      getLimit = Move.getLimit,\n      exceededLimit = Move.exceededLimit,\n      translate = Move.translate;\n  var isSlide = Splide2.is(SLIDE);\n  var interval;\n  var callback;\n  var friction = 1;\n\n  function mount() {\n    on(EVENT_MOVE, clear);\n    on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n  }\n\n  function scroll(destination, duration, snap, onScrolled, noConstrain) {\n    var from = getPosition();\n    clear();\n\n    if (snap && (!isSlide || !exceededLimit())) {\n      var size = Components2.Layout.sliderSize();\n      var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n      destination = Move.toPosition(Components2.Controller.toDest(destination % size)) + offset;\n    }\n\n    var noDistance = approximatelyEqual(from, destination, 1);\n    friction = 1;\n    duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION);\n    callback = onScrolled;\n    interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1);\n    set(SCROLLING);\n    emit(EVENT_SCROLL);\n    interval.start();\n  }\n\n  function onEnd() {\n    set(IDLE);\n    callback && callback();\n    emit(EVENT_SCROLLED);\n  }\n\n  function update(from, to, noConstrain, rate) {\n    var position = getPosition();\n    var target = from + (to - from) * easing(rate);\n    var diff = (target - position) * friction;\n    translate(position + diff);\n\n    if (isSlide && !noConstrain && exceededLimit()) {\n      friction *= FRICTION_FACTOR;\n\n      if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n        scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n      }\n    }\n  }\n\n  function clear() {\n    if (interval) {\n      interval.cancel();\n    }\n  }\n\n  function cancel() {\n    if (interval && !interval.isPaused()) {\n      clear();\n      onEnd();\n    }\n  }\n\n  function easing(t) {\n    var easingFunc = options.easingFunc;\n    return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n  }\n\n  return {\n    mount: mount,\n    destroy: clear,\n    scroll: scroll,\n    cancel: cancel\n  };\n}\n\nvar SCROLL_LISTENER_OPTIONS = {\n  passive: false,\n  capture: true\n};\n\nfunction Drag(Splide2, Components2, options) {\n  var _EventInterface9 = EventInterface(Splide2),\n      on = _EventInterface9.on,\n      emit = _EventInterface9.emit,\n      bind = _EventInterface9.bind,\n      unbind = _EventInterface9.unbind;\n\n  var state = Splide2.state;\n  var Move = Components2.Move,\n      Scroll = Components2.Scroll,\n      Controller = Components2.Controller,\n      track = Components2.Elements.track,\n      reduce = Components2.Media.reduce;\n  var _Components2$Directio2 = Components2.Direction,\n      resolve = _Components2$Directio2.resolve,\n      orient = _Components2$Directio2.orient;\n  var getPosition = Move.getPosition,\n      exceededLimit = Move.exceededLimit;\n  var basePosition;\n  var baseEvent;\n  var prevBaseEvent;\n  var isFree;\n  var dragging;\n  var exceeded = false;\n  var clickPrevented;\n  var disabled;\n  var target;\n\n  function mount() {\n    bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n    bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n    bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS);\n    bind(track, \"click\", onClick, {\n      capture: true\n    });\n    bind(track, \"dragstart\", prevent);\n    on([EVENT_MOUNTED, EVENT_UPDATED], init);\n  }\n\n  function init() {\n    var drag = options.drag;\n    disable(!drag);\n    isFree = drag === \"free\";\n  }\n\n  function onPointerDown(e) {\n    clickPrevented = false;\n\n    if (!disabled) {\n      var isTouch = isTouchEvent(e);\n\n      if (isDraggable(e.target) && (isTouch || !e.button)) {\n        if (!Controller.isBusy()) {\n          target = isTouch ? track : window;\n          dragging = state.is([MOVING, SCROLLING]);\n          prevBaseEvent = null;\n          bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS);\n          bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS);\n          Move.cancel();\n          Scroll.cancel();\n          save(e);\n        } else {\n          prevent(e, true);\n        }\n      }\n    }\n  }\n\n  function onPointerMove(e) {\n    if (!state.is(DRAGGING)) {\n      state.set(DRAGGING);\n      emit(EVENT_DRAG);\n    }\n\n    if (e.cancelable) {\n      if (dragging) {\n        Move.translate(basePosition + constrain(diffCoord(e)));\n        var expired = diffTime(e) > LOG_INTERVAL;\n        var hasExceeded = exceeded !== (exceeded = exceededLimit());\n\n        if (expired || hasExceeded) {\n          save(e);\n        }\n\n        clickPrevented = true;\n        emit(EVENT_DRAGGING);\n        prevent(e);\n      } else if (isSliderDirection(e)) {\n        dragging = shouldStart(e);\n        prevent(e);\n      }\n    }\n  }\n\n  function onPointerUp(e) {\n    if (state.is(DRAGGING)) {\n      state.set(IDLE);\n      emit(EVENT_DRAGGED);\n    }\n\n    if (dragging) {\n      move(e);\n      prevent(e);\n    }\n\n    unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n    unbind(target, POINTER_UP_EVENTS, onPointerUp);\n    dragging = false;\n  }\n\n  function onClick(e) {\n    if (!disabled && clickPrevented) {\n      prevent(e, true);\n    }\n  }\n\n  function save(e) {\n    prevBaseEvent = baseEvent;\n    baseEvent = e;\n    basePosition = getPosition();\n  }\n\n  function move(e) {\n    var velocity = computeVelocity(e);\n    var destination = computeDestination(velocity);\n    var rewind = options.rewind && options.rewindByDrag;\n    reduce(false);\n\n    if (isFree) {\n      Controller.scroll(destination, 0, options.snap);\n    } else if (Splide2.is(FADE)) {\n      Controller.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n    } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n      Controller.go(exceededLimit(true) ? \">\" : \"<\");\n    } else {\n      Controller.go(Controller.toDest(destination), true);\n    }\n\n    reduce(true);\n  }\n\n  function shouldStart(e) {\n    var thresholds = options.dragMinThreshold;\n    var isObj = isObject(thresholds);\n    var mouse = isObj && thresholds.mouse || 0;\n    var touch = (isObj ? thresholds.touch : +thresholds) || 10;\n    return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse);\n  }\n\n  function isSliderDirection(e) {\n    return abs(diffCoord(e)) > abs(diffCoord(e, true));\n  }\n\n  function computeVelocity(e) {\n    if (Splide2.is(LOOP) || !exceeded) {\n      var time = diffTime(e);\n\n      if (time && time < LOG_INTERVAL) {\n        return diffCoord(e) / time;\n      }\n    }\n\n    return 0;\n  }\n\n  function computeDestination(velocity) {\n    return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1));\n  }\n\n  function diffCoord(e, orthogonal) {\n    return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n  }\n\n  function diffTime(e) {\n    return timeOf(e) - timeOf(getBaseEvent(e));\n  }\n\n  function getBaseEvent(e) {\n    return baseEvent === e && prevBaseEvent || baseEvent;\n  }\n\n  function coordOf(e, orthogonal) {\n    return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n  }\n\n  function constrain(diff) {\n    return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\n  }\n\n  function isDraggable(target2) {\n    var noDrag = options.noDrag;\n    return !matches(target2, \".\" + CLASS_PAGINATION_PAGE + \", .\" + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag));\n  }\n\n  function isTouchEvent(e) {\n    return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n  }\n\n  function isDragging() {\n    return dragging;\n  }\n\n  function disable(value) {\n    disabled = value;\n  }\n\n  return {\n    mount: mount,\n    disable: disable,\n    isDragging: isDragging\n  };\n}\n\nvar NORMALIZATION_MAP = {\n  Spacebar: \" \",\n  Right: ARROW_RIGHT,\n  Left: ARROW_LEFT,\n  Up: ARROW_UP,\n  Down: ARROW_DOWN\n};\n\nfunction normalizeKey(key) {\n  key = isString(key) ? key : key.key;\n  return NORMALIZATION_MAP[key] || key;\n}\n\nvar KEYBOARD_EVENT = \"keydown\";\n\nfunction Keyboard(Splide2, Components2, options) {\n  var _EventInterface10 = EventInterface(Splide2),\n      on = _EventInterface10.on,\n      bind = _EventInterface10.bind,\n      unbind = _EventInterface10.unbind;\n\n  var root = Splide2.root;\n  var resolve = Components2.Direction.resolve;\n  var target;\n  var disabled;\n\n  function mount() {\n    init();\n    on(EVENT_UPDATED, destroy);\n    on(EVENT_UPDATED, init);\n    on(EVENT_MOVE, onMove);\n  }\n\n  function init() {\n    var keyboard = options.keyboard;\n\n    if (keyboard) {\n      target = keyboard === \"global\" ? window : root;\n      bind(target, KEYBOARD_EVENT, onKeydown);\n    }\n  }\n\n  function destroy() {\n    unbind(target, KEYBOARD_EVENT);\n  }\n\n  function disable(value) {\n    disabled = value;\n  }\n\n  function onMove() {\n    var _disabled = disabled;\n    disabled = true;\n    nextTick(function () {\n      disabled = _disabled;\n    });\n  }\n\n  function onKeydown(e) {\n    if (!disabled) {\n      var key = normalizeKey(e);\n\n      if (key === resolve(ARROW_LEFT)) {\n        Splide2.go(\"<\");\n      } else if (key === resolve(ARROW_RIGHT)) {\n        Splide2.go(\">\");\n      }\n    }\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy,\n    disable: disable\n  };\n}\n\nvar SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-lazy\";\nvar SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + \"-srcset\";\nvar IMAGE_SELECTOR = \"[\" + SRC_DATA_ATTRIBUTE + \"], [\" + SRCSET_DATA_ATTRIBUTE + \"]\";\n\nfunction LazyLoad(Splide2, Components2, options) {\n  var _EventInterface11 = EventInterface(Splide2),\n      on = _EventInterface11.on,\n      off = _EventInterface11.off,\n      bind = _EventInterface11.bind,\n      emit = _EventInterface11.emit;\n\n  var isSequential = options.lazyLoad === \"sequential\";\n  var events = [EVENT_MOVED, EVENT_SCROLLED];\n  var entries = [];\n\n  function mount() {\n    if (options.lazyLoad) {\n      init();\n      on(EVENT_REFRESH, init);\n    }\n  }\n\n  function init() {\n    empty(entries);\n    register();\n\n    if (isSequential) {\n      loadNext();\n    } else {\n      off(events);\n      on(events, check);\n      check();\n    }\n  }\n\n  function register() {\n    Components2.Slides.forEach(function (Slide) {\n      queryAll(Slide.slide, IMAGE_SELECTOR).forEach(function (img) {\n        var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n        var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\n\n        if (src !== img.src || srcset !== img.srcset) {\n          var className = options.classes.spinner;\n          var parent = img.parentElement;\n          var spinner = child(parent, \".\" + className) || create(\"span\", className, parent);\n          entries.push([img, Slide, spinner]);\n          img.src || display(img, \"none\");\n        }\n      });\n    });\n  }\n\n  function check() {\n    entries = entries.filter(function (data) {\n      var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1;\n      return data[1].isWithin(Splide2.index, distance) ? load(data) : true;\n    });\n    entries.length || off(events);\n  }\n\n  function load(data) {\n    var img = data[0];\n    addClass(data[1].slide, CLASS_LOADING);\n    bind(img, \"load error\", apply(onLoad, data));\n    setAttribute(img, \"src\", getAttribute(img, SRC_DATA_ATTRIBUTE));\n    setAttribute(img, \"srcset\", getAttribute(img, SRCSET_DATA_ATTRIBUTE));\n    removeAttribute(img, SRC_DATA_ATTRIBUTE);\n    removeAttribute(img, SRCSET_DATA_ATTRIBUTE);\n  }\n\n  function onLoad(data, e) {\n    var img = data[0],\n        Slide = data[1];\n    removeClass(Slide.slide, CLASS_LOADING);\n\n    if (e.type !== \"error\") {\n      remove(data[2]);\n      display(img, \"\");\n      emit(EVENT_LAZYLOAD_LOADED, img, Slide);\n      emit(EVENT_RESIZE);\n    }\n\n    isSequential && loadNext();\n  }\n\n  function loadNext() {\n    entries.length && load(entries.shift());\n  }\n\n  return {\n    mount: mount,\n    destroy: apply(empty, entries),\n    check: check\n  };\n}\n\nfunction Pagination(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      emit = event.emit,\n      bind = event.bind;\n  var Slides = Components2.Slides,\n      Elements = Components2.Elements,\n      Controller = Components2.Controller;\n  var hasFocus = Controller.hasFocus,\n      getIndex = Controller.getIndex,\n      go = Controller.go;\n  var resolve = Components2.Direction.resolve;\n  var placeholder = Elements.pagination;\n  var items = [];\n  var list;\n  var paginationClasses;\n\n  function mount() {\n    destroy();\n    on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount);\n    var enabled = options.pagination;\n    placeholder && display(placeholder, enabled ? \"\" : \"none\");\n\n    if (enabled) {\n      on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n      createPagination();\n      update();\n      emit(EVENT_PAGINATION_MOUNTED, {\n        list: list,\n        items: items\n      }, getAt(Splide2.index));\n    }\n  }\n\n  function destroy() {\n    if (list) {\n      remove(placeholder ? slice(list.children) : list);\n      removeClass(list, paginationClasses);\n      empty(items);\n      list = null;\n    }\n\n    event.destroy();\n  }\n\n  function createPagination() {\n    var length = Splide2.length;\n    var classes = options.classes,\n        i18n = options.i18n,\n        perPage = options.perPage;\n    var max = hasFocus() ? Controller.getEnd() + 1 : ceil(length / perPage);\n    list = placeholder || create(\"ul\", classes.pagination, Elements.track.parentElement);\n    addClass(list, paginationClasses = CLASS_PAGINATION + \"--\" + getDirection());\n    setAttribute(list, ROLE, \"tablist\");\n    setAttribute(list, ARIA_LABEL, i18n.select);\n    setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? \"vertical\" : \"\");\n\n    for (var i = 0; i < max; i++) {\n      var li = create(\"li\", null, list);\n      var button = create(\"button\", {\n        class: classes.page,\n        type: \"button\"\n      }, li);\n      var controls = Slides.getIn(i).map(function (Slide) {\n        return Slide.slide.id;\n      });\n      var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n      bind(button, \"click\", apply(onClick, i));\n\n      if (options.paginationKeyboard) {\n        bind(button, \"keydown\", apply(onKeydown, i));\n      }\n\n      setAttribute(li, ROLE, \"presentation\");\n      setAttribute(button, ROLE, \"tab\");\n      setAttribute(button, ARIA_CONTROLS, controls.join(\" \"));\n      setAttribute(button, ARIA_LABEL, format(text, i + 1));\n      setAttribute(button, TAB_INDEX, -1);\n      items.push({\n        li: li,\n        button: button,\n        page: i\n      });\n    }\n  }\n\n  function onClick(page) {\n    go(\">\" + page, true);\n  }\n\n  function onKeydown(page, e) {\n    var length = items.length;\n    var key = normalizeKey(e);\n    var dir = getDirection();\n    var nextPage = -1;\n\n    if (key === resolve(ARROW_RIGHT, false, dir)) {\n      nextPage = ++page % length;\n    } else if (key === resolve(ARROW_LEFT, false, dir)) {\n      nextPage = (--page + length) % length;\n    } else if (key === \"Home\") {\n      nextPage = 0;\n    } else if (key === \"End\") {\n      nextPage = length - 1;\n    }\n\n    var item = items[nextPage];\n\n    if (item) {\n      focus(item.button);\n      go(\">\" + nextPage);\n      prevent(e, true);\n    }\n  }\n\n  function getDirection() {\n    return options.paginationDirection || options.direction;\n  }\n\n  function getAt(index) {\n    return items[Controller.toPage(index)];\n  }\n\n  function update() {\n    var prev = getAt(getIndex(true));\n    var curr = getAt(getIndex());\n\n    if (prev) {\n      var button = prev.button;\n      removeClass(button, CLASS_ACTIVE);\n      removeAttribute(button, ARIA_SELECTED);\n      setAttribute(button, TAB_INDEX, -1);\n    }\n\n    if (curr) {\n      var _button = curr.button;\n      addClass(_button, CLASS_ACTIVE);\n      setAttribute(_button, ARIA_SELECTED, true);\n      setAttribute(_button, TAB_INDEX, \"\");\n    }\n\n    emit(EVENT_PAGINATION_UPDATED, {\n      list: list,\n      items: items\n    }, prev, curr);\n  }\n\n  return {\n    items: items,\n    mount: mount,\n    destroy: destroy,\n    getAt: getAt,\n    update: update\n  };\n}\n\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\n\nfunction Sync(Splide2, Components2, options) {\n  var isNavigation = options.isNavigation,\n      slideFocus = options.slideFocus;\n  var events = [];\n\n  function mount() {\n    Splide2.splides.forEach(function (target) {\n      if (!target.isParent) {\n        sync(Splide2, target.splide);\n        sync(target.splide, Splide2);\n      }\n    });\n\n    if (isNavigation) {\n      navigate();\n    }\n  }\n\n  function destroy() {\n    events.forEach(function (event) {\n      event.destroy();\n    });\n    empty(events);\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function sync(splide, target) {\n    var event = EventInterface(splide);\n    event.on(EVENT_MOVE, function (index, prev, dest) {\n      target.go(target.is(LOOP) ? dest : index);\n    });\n    events.push(event);\n  }\n\n  function navigate() {\n    var event = EventInterface(Splide2);\n    var on = event.on;\n    on(EVENT_CLICK, onClick);\n    on(EVENT_SLIDE_KEYDOWN, onKeydown);\n    on([EVENT_MOUNTED, EVENT_UPDATED], update);\n    events.push(event);\n    event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides);\n  }\n\n  function update() {\n    setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n  }\n\n  function onClick(Slide) {\n    Splide2.go(Slide.index);\n  }\n\n  function onKeydown(Slide, e) {\n    if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n      onClick(Slide);\n      prevent(e);\n    }\n  }\n\n  return {\n    setup: apply(Components2.Media.set, {\n      slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n    }, true),\n    mount: mount,\n    destroy: destroy,\n    remount: remount\n  };\n}\n\nfunction Wheel(Splide2, Components2, options) {\n  var _EventInterface12 = EventInterface(Splide2),\n      bind = _EventInterface12.bind;\n\n  var lastTime = 0;\n\n  function mount() {\n    if (options.wheel) {\n      bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\n    }\n  }\n\n  function onWheel(e) {\n    if (e.cancelable) {\n      var deltaY = e.deltaY;\n      var backwards = deltaY < 0;\n      var timeStamp = timeOf(e);\n\n      var _min = options.wheelMinThreshold || 0;\n\n      var sleep = options.wheelSleep || 0;\n\n      if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n        Splide2.go(backwards ? \"<\" : \">\");\n        lastTime = timeStamp;\n      }\n\n      shouldPrevent(backwards) && prevent(e);\n    }\n  }\n\n  function shouldPrevent(backwards) {\n    return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n  }\n\n  return {\n    mount: mount\n  };\n}\n\nvar SR_REMOVAL_DELAY = 90;\n\nfunction Live(Splide2, Components2, options) {\n  var _EventInterface13 = EventInterface(Splide2),\n      on = _EventInterface13.on;\n\n  var track = Components2.Elements.track;\n  var enabled = options.live && !options.isNavigation;\n  var sr = create(\"span\", CLASS_SR);\n  var interval = RequestInterval(SR_REMOVAL_DELAY, apply(toggle, false));\n\n  function mount() {\n    if (enabled) {\n      disable(!Components2.Autoplay.isPaused());\n      setAttribute(track, ARIA_ATOMIC, true);\n      sr.textContent = \"\\u2026\";\n      on(EVENT_AUTOPLAY_PLAY, apply(disable, true));\n      on(EVENT_AUTOPLAY_PAUSE, apply(disable, false));\n      on([EVENT_MOVED, EVENT_SCROLLED], apply(toggle, true));\n    }\n  }\n\n  function toggle(active) {\n    setAttribute(track, ARIA_BUSY, active);\n\n    if (active) {\n      append(track, sr);\n      interval.start();\n    } else {\n      remove(sr);\n      interval.cancel();\n    }\n  }\n\n  function destroy() {\n    removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n    remove(sr);\n  }\n\n  function disable(disabled) {\n    if (enabled) {\n      setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n    }\n  }\n\n  return {\n    mount: mount,\n    disable: disable,\n    destroy: destroy\n  };\n}\n\nvar ComponentConstructors = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  Media: Media,\n  Direction: Direction,\n  Elements: Elements,\n  Slides: Slides,\n  Layout: Layout,\n  Clones: Clones,\n  Move: Move,\n  Controller: Controller,\n  Arrows: Arrows,\n  Autoplay: Autoplay,\n  Cover: Cover,\n  Scroll: Scroll,\n  Drag: Drag,\n  Keyboard: Keyboard,\n  LazyLoad: LazyLoad,\n  Pagination: Pagination,\n  Sync: Sync,\n  Wheel: Wheel,\n  Live: Live\n});\nvar I18N = {\n  prev: \"Previous slide\",\n  next: \"Next slide\",\n  first: \"Go to first slide\",\n  last: \"Go to last slide\",\n  slideX: \"Go to slide %s\",\n  pageX: \"Go to page %s\",\n  play: \"Start autoplay\",\n  pause: \"Pause autoplay\",\n  carousel: \"carousel\",\n  slide: \"slide\",\n  select: \"Select a slide to show\",\n  slideLabel: \"%s of %s\"\n};\nvar DEFAULTS = {\n  type: \"slide\",\n  role: \"region\",\n  speed: 400,\n  perPage: 1,\n  cloneStatus: true,\n  arrows: true,\n  pagination: true,\n  paginationKeyboard: true,\n  interval: 5e3,\n  pauseOnHover: true,\n  pauseOnFocus: true,\n  resetProgress: true,\n  easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n  drag: true,\n  direction: \"ltr\",\n  trimSpace: true,\n  focusableNodes: \"a, button, textarea, input, select, iframe\",\n  live: true,\n  classes: CLASSES,\n  i18n: I18N,\n  reducedMotion: {\n    speed: 0,\n    rewindSpeed: 0,\n    autoplay: \"pause\"\n  }\n};\n\nfunction Fade(Splide2, Components2, options) {\n  var Slides = Components2.Slides;\n\n  function mount() {\n    EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n  }\n\n  function init() {\n    Slides.forEach(function (Slide) {\n      Slide.style(\"transform\", \"translateX(-\" + 100 * Slide.index + \"%)\");\n    });\n  }\n\n  function start(index, done) {\n    Slides.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n    nextTick(done);\n  }\n\n  return {\n    mount: mount,\n    start: start,\n    cancel: noop\n  };\n}\n\nfunction Slide(Splide2, Components2, options) {\n  var Move = Components2.Move,\n      Controller = Components2.Controller,\n      Scroll = Components2.Scroll;\n  var list = Components2.Elements.list;\n  var transition = apply(style, list, \"transition\");\n  var endCallback;\n\n  function mount() {\n    EventInterface(Splide2).bind(list, \"transitionend\", function (e) {\n      if (e.target === list && endCallback) {\n        cancel();\n        endCallback();\n      }\n    });\n  }\n\n  function start(index, done) {\n    var destination = Move.toPosition(index, true);\n    var position = Move.getPosition();\n    var speed = getSpeed(index);\n\n    if (abs(destination - position) >= 1 && speed >= 1) {\n      if (options.useScroll) {\n        Scroll.scroll(destination, speed, false, done);\n      } else {\n        transition(\"transform \" + speed + \"ms \" + options.easing);\n        Move.translate(destination, true);\n        endCallback = done;\n      }\n    } else {\n      Move.jump(index);\n      done();\n    }\n  }\n\n  function cancel() {\n    transition(\"\");\n    Scroll.cancel();\n  }\n\n  function getSpeed(index) {\n    var rewindSpeed = options.rewindSpeed;\n\n    if (Splide2.is(SLIDE) && rewindSpeed) {\n      var prev = Controller.getIndex(true);\n      var end = Controller.getEnd();\n\n      if (prev === 0 && index >= end || prev >= end && index === 0) {\n        return rewindSpeed;\n      }\n    }\n\n    return options.speed;\n  }\n\n  return {\n    mount: mount,\n    start: start,\n    cancel: cancel\n  };\n}\n\nvar _Splide = /*#__PURE__*/function () {\n  function _Splide(target, options) {\n    this.event = EventInterface();\n    this.Components = {};\n    this.state = State(CREATED);\n    this.splides = [];\n    this._o = {};\n    this._E = {};\n    var root = isString(target) ? query(document, target) : target;\n    assert(root, root + \" is invalid.\");\n    this.root = root;\n    options = merge({\n      label: getAttribute(root, ARIA_LABEL) || \"\",\n      labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n    }, DEFAULTS, _Splide.defaults, options || {});\n\n    try {\n      merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n    } catch (e) {\n      assert(false, \"Invalid JSON\");\n    }\n\n    this._o = Object.create(merge({}, options));\n  }\n\n  var _proto = _Splide.prototype;\n\n  _proto.mount = function mount(Extensions, Transition) {\n    var _this = this;\n\n    var state = this.state,\n        Components2 = this.Components;\n    assert(state.is([CREATED, DESTROYED]), \"Already mounted!\");\n    state.set(CREATED);\n    this._C = Components2;\n    this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide);\n    this._E = Extensions || this._E;\n    var Constructors = assign({}, ComponentConstructors, this._E, {\n      Transition: this._T\n    });\n    forOwn(Constructors, function (Component, key) {\n      var component = Component(_this, Components2, _this._o);\n      Components2[key] = component;\n      component.setup && component.setup();\n    });\n    forOwn(Components2, function (component) {\n      component.mount && component.mount();\n    });\n    this.emit(EVENT_MOUNTED);\n    addClass(this.root, CLASS_INITIALIZED);\n    state.set(IDLE);\n    this.emit(EVENT_READY);\n    return this;\n  };\n\n  _proto.sync = function sync(splide) {\n    this.splides.push({\n      splide: splide\n    });\n    splide.splides.push({\n      splide: this,\n      isParent: true\n    });\n\n    if (this.state.is(IDLE)) {\n      this._C.Sync.remount();\n\n      splide.Components.Sync.remount();\n    }\n\n    return this;\n  };\n\n  _proto.go = function go(control) {\n    this._C.Controller.go(control);\n\n    return this;\n  };\n\n  _proto.on = function on(events, callback) {\n    this.event.on(events, callback);\n    return this;\n  };\n\n  _proto.off = function off(events) {\n    this.event.off(events);\n    return this;\n  };\n\n  _proto.emit = function emit(event) {\n    var _this$event;\n\n    (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n\n    return this;\n  };\n\n  _proto.add = function add(slides, index) {\n    this._C.Slides.add(slides, index);\n\n    return this;\n  };\n\n  _proto.remove = function remove(matcher) {\n    this._C.Slides.remove(matcher);\n\n    return this;\n  };\n\n  _proto.is = function is(type) {\n    return this._o.type === type;\n  };\n\n  _proto.refresh = function refresh() {\n    this.emit(EVENT_REFRESH);\n    return this;\n  };\n\n  _proto.destroy = function destroy(completely) {\n    if (completely === void 0) {\n      completely = true;\n    }\n\n    var event = this.event,\n        state = this.state;\n\n    if (state.is(CREATED)) {\n      EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n    } else {\n      forOwn(this._C, function (component) {\n        component.destroy && component.destroy(completely);\n      }, true);\n      event.emit(EVENT_DESTROY);\n      event.destroy();\n      completely && empty(this.splides);\n      state.set(DESTROYED);\n    }\n\n    return this;\n  };\n\n  _createClass(_Splide, [{\n    key: \"options\",\n    get: function get() {\n      return this._o;\n    },\n    set: function set(options) {\n      this._C.Media.set(options, true, true);\n    }\n  }, {\n    key: \"length\",\n    get: function get() {\n      return this._C.Slides.getLength(true);\n    }\n  }, {\n    key: \"index\",\n    get: function get() {\n      return this._C.Controller.getIndex();\n    }\n  }]);\n\n  return _Splide;\n}();\n\nvar Splide = _Splide;\nSplide.defaults = {};\nSplide.STATES = STATES;\nvar CLASS_RENDERED = \"is-rendered\";\nvar RENDERER_DEFAULT_CONFIG = {\n  listTag: \"ul\",\n  slideTag: \"li\"\n};\n\nvar Style = /*#__PURE__*/function () {\n  function Style(id, options) {\n    this.styles = {};\n    this.id = id;\n    this.options = options;\n  }\n\n  var _proto2 = Style.prototype;\n\n  _proto2.rule = function rule(selector, prop, value, breakpoint) {\n    breakpoint = breakpoint || \"default\";\n    var selectors = this.styles[breakpoint] = this.styles[breakpoint] || {};\n    var styles = selectors[selector] = selectors[selector] || {};\n    styles[prop] = value;\n  };\n\n  _proto2.build = function build() {\n    var _this2 = this;\n\n    var css = \"\";\n\n    if (this.styles.default) {\n      css += this.buildSelectors(this.styles.default);\n    }\n\n    Object.keys(this.styles).sort(function (n, m) {\n      return _this2.options.mediaQuery === \"min\" ? +n - +m : +m - +n;\n    }).forEach(function (breakpoint) {\n      if (breakpoint !== \"default\") {\n        css += \"@media screen and (max-width: \" + breakpoint + \"px) {\";\n        css += _this2.buildSelectors(_this2.styles[breakpoint]);\n        css += \"}\";\n      }\n    });\n    return css;\n  };\n\n  _proto2.buildSelectors = function buildSelectors(selectors) {\n    var _this3 = this;\n\n    var css = \"\";\n    forOwn(selectors, function (styles, selector) {\n      selector = (\"#\" + _this3.id + \" \" + selector).trim();\n      css += selector + \" {\";\n      forOwn(styles, function (value, prop) {\n        if (value || value === 0) {\n          css += prop + \": \" + value + \";\";\n        }\n      });\n      css += \"}\";\n    });\n    return css;\n  };\n\n  return Style;\n}();\n\nvar SplideRenderer = /*#__PURE__*/function () {\n  function SplideRenderer(contents, options, config, defaults) {\n    this.slides = [];\n    this.options = {};\n    this.breakpoints = [];\n    merge(DEFAULTS, defaults || {});\n    merge(merge(this.options, DEFAULTS), options || {});\n    this.contents = contents;\n    this.config = assign({}, RENDERER_DEFAULT_CONFIG, config || {});\n    this.id = this.config.id || uniqueId(\"splide\");\n    this.Style = new Style(this.id, this.options);\n    this.Direction = Direction(null, null, this.options);\n    assert(this.contents.length, \"Provide at least 1 content.\");\n    this.init();\n  }\n\n  SplideRenderer.clean = function clean(splide) {\n    var _EventInterface14 = EventInterface(splide),\n        on = _EventInterface14.on;\n\n    var root = splide.root;\n    var clones = queryAll(root, \".\" + CLASS_CLONE);\n    on(EVENT_MOUNTED, function () {\n      remove(child(root, \"style\"));\n    });\n    remove(clones);\n  };\n\n  var _proto3 = SplideRenderer.prototype;\n\n  _proto3.init = function init() {\n    this.parseBreakpoints();\n    this.initSlides();\n    this.registerRootStyles();\n    this.registerTrackStyles();\n    this.registerSlideStyles();\n    this.registerListStyles();\n  };\n\n  _proto3.initSlides = function initSlides() {\n    var _this4 = this;\n\n    push(this.slides, this.contents.map(function (content, index) {\n      content = isString(content) ? {\n        html: content\n      } : content;\n      content.styles = content.styles || {};\n      content.attrs = content.attrs || {};\n\n      _this4.cover(content);\n\n      var classes = _this4.options.classes.slide + \" \" + (index === 0 ? CLASS_ACTIVE : \"\");\n      assign(content.attrs, {\n        class: (classes + \" \" + (content.attrs.class || \"\")).trim(),\n        style: _this4.buildStyles(content.styles)\n      });\n      return content;\n    }));\n\n    if (this.isLoop()) {\n      this.generateClones(this.slides);\n    }\n  };\n\n  _proto3.registerRootStyles = function registerRootStyles() {\n    var _this5 = this;\n\n    this.breakpoints.forEach(function (_ref2) {\n      var width = _ref2[0],\n          options = _ref2[1];\n\n      _this5.Style.rule(\" \", \"max-width\", unit(options.width), width);\n    });\n  };\n\n  _proto3.registerTrackStyles = function registerTrackStyles() {\n    var _this6 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_TRACK;\n    this.breakpoints.forEach(function (_ref3) {\n      var width = _ref3[0],\n          options = _ref3[1];\n      Style2.rule(selector, _this6.resolve(\"paddingLeft\"), _this6.cssPadding(options, false), width);\n      Style2.rule(selector, _this6.resolve(\"paddingRight\"), _this6.cssPadding(options, true), width);\n      Style2.rule(selector, \"height\", _this6.cssTrackHeight(options), width);\n    });\n  };\n\n  _proto3.registerListStyles = function registerListStyles() {\n    var _this7 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_LIST;\n    this.breakpoints.forEach(function (_ref4) {\n      var width = _ref4[0],\n          options = _ref4[1];\n      Style2.rule(selector, \"transform\", _this7.buildTranslate(options), width);\n\n      if (!_this7.cssSlideHeight(options)) {\n        Style2.rule(selector, \"aspect-ratio\", _this7.cssAspectRatio(options), width);\n      }\n    });\n  };\n\n  _proto3.registerSlideStyles = function registerSlideStyles() {\n    var _this8 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_SLIDE;\n    this.breakpoints.forEach(function (_ref5) {\n      var width = _ref5[0],\n          options = _ref5[1];\n      Style2.rule(selector, \"width\", _this8.cssSlideWidth(options), width);\n      Style2.rule(selector, \"height\", _this8.cssSlideHeight(options) || \"100%\", width);\n      Style2.rule(selector, _this8.resolve(\"marginRight\"), unit(options.gap) || \"0px\", width);\n      Style2.rule(selector + \" > img\", \"display\", options.cover ? \"none\" : \"inline\", width);\n    });\n  };\n\n  _proto3.buildTranslate = function buildTranslate(options) {\n    var _this$Direction = this.Direction,\n        resolve = _this$Direction.resolve,\n        orient = _this$Direction.orient;\n    var values = [];\n    values.push(this.cssOffsetClones(options));\n    values.push(this.cssOffsetGaps(options));\n\n    if (this.isCenter(options)) {\n      values.push(this.buildCssValue(orient(-50), \"%\"));\n      values.push.apply(values, this.cssOffsetCenter(options));\n    }\n\n    return values.filter(Boolean).map(function (value) {\n      return \"translate\" + resolve(\"X\") + \"(\" + value + \")\";\n    }).join(\" \");\n  };\n\n  _proto3.cssOffsetClones = function cssOffsetClones(options) {\n    var _this$Direction2 = this.Direction,\n        resolve = _this$Direction2.resolve,\n        orient = _this$Direction2.orient;\n    var cloneCount = this.getCloneCount();\n\n    if (this.isFixedWidth(options)) {\n      var _this$parseCssValue = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n          value = _this$parseCssValue.value,\n          unit2 = _this$parseCssValue.unit;\n\n      return this.buildCssValue(orient(value) * cloneCount, unit2);\n    }\n\n    var percent = 100 * cloneCount / options.perPage;\n    return orient(percent) + \"%\";\n  };\n\n  _proto3.cssOffsetCenter = function cssOffsetCenter(options) {\n    var _this$Direction3 = this.Direction,\n        resolve = _this$Direction3.resolve,\n        orient = _this$Direction3.orient;\n\n    if (this.isFixedWidth(options)) {\n      var _this$parseCssValue2 = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n          value = _this$parseCssValue2.value,\n          unit2 = _this$parseCssValue2.unit;\n\n      return [this.buildCssValue(orient(value / 2), unit2)];\n    }\n\n    var values = [];\n    var perPage = options.perPage,\n        gap = options.gap;\n    values.push(orient(50 / perPage) + \"%\");\n\n    if (gap) {\n      var _this$parseCssValue3 = this.parseCssValue(gap),\n          _value = _this$parseCssValue3.value,\n          _unit = _this$parseCssValue3.unit;\n\n      var gapOffset = (_value / perPage - _value) / 2;\n      values.push(this.buildCssValue(orient(gapOffset), _unit));\n    }\n\n    return values;\n  };\n\n  _proto3.cssOffsetGaps = function cssOffsetGaps(options) {\n    var cloneCount = this.getCloneCount();\n\n    if (cloneCount && options.gap) {\n      var orient = this.Direction.orient;\n\n      var _this$parseCssValue4 = this.parseCssValue(options.gap),\n          value = _this$parseCssValue4.value,\n          unit2 = _this$parseCssValue4.unit;\n\n      if (this.isFixedWidth(options)) {\n        return this.buildCssValue(orient(value * cloneCount), unit2);\n      }\n\n      var perPage = options.perPage;\n      var gaps = cloneCount / perPage;\n      return this.buildCssValue(orient(gaps * value), unit2);\n    }\n\n    return \"\";\n  };\n\n  _proto3.resolve = function resolve(prop) {\n    return camelToKebab(this.Direction.resolve(prop));\n  };\n\n  _proto3.cssPadding = function cssPadding(options, right) {\n    var padding = options.padding;\n    var prop = this.Direction.resolve(right ? \"right\" : \"left\", true);\n    return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n  };\n\n  _proto3.cssTrackHeight = function cssTrackHeight(options) {\n    var height = \"\";\n\n    if (this.isVertical()) {\n      height = this.cssHeight(options);\n      assert(height, '\"height\" is missing.');\n      height = \"calc(\" + height + \" - \" + this.cssPadding(options, false) + \" - \" + this.cssPadding(options, true) + \")\";\n    }\n\n    return height;\n  };\n\n  _proto3.cssHeight = function cssHeight(options) {\n    return unit(options.height);\n  };\n\n  _proto3.cssSlideWidth = function cssSlideWidth(options) {\n    return options.autoWidth ? \"\" : unit(options.fixedWidth) || (this.isVertical() ? \"\" : this.cssSlideSize(options));\n  };\n\n  _proto3.cssSlideHeight = function cssSlideHeight(options) {\n    return unit(options.fixedHeight) || (this.isVertical() ? options.autoHeight ? \"\" : this.cssSlideSize(options) : this.cssHeight(options));\n  };\n\n  _proto3.cssSlideSize = function cssSlideSize(options) {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  };\n\n  _proto3.cssAspectRatio = function cssAspectRatio(options) {\n    var heightRatio = options.heightRatio;\n    return heightRatio ? \"\" + 1 / heightRatio : \"\";\n  };\n\n  _proto3.buildCssValue = function buildCssValue(value, unit2) {\n    return \"\" + value + unit2;\n  };\n\n  _proto3.parseCssValue = function parseCssValue(value) {\n    if (isString(value)) {\n      var number = parseFloat(value) || 0;\n      var unit2 = value.replace(/\\d*(\\.\\d*)?/, \"\") || \"px\";\n      return {\n        value: number,\n        unit: unit2\n      };\n    }\n\n    return {\n      value: value,\n      unit: \"px\"\n    };\n  };\n\n  _proto3.parseBreakpoints = function parseBreakpoints() {\n    var _this9 = this;\n\n    var breakpoints = this.options.breakpoints;\n    this.breakpoints.push([\"default\", this.options]);\n\n    if (breakpoints) {\n      forOwn(breakpoints, function (options, width) {\n        _this9.breakpoints.push([width, merge(merge({}, _this9.options), options)]);\n      });\n    }\n  };\n\n  _proto3.isFixedWidth = function isFixedWidth(options) {\n    return !!options[this.Direction.resolve(\"fixedWidth\")];\n  };\n\n  _proto3.isLoop = function isLoop() {\n    return this.options.type === LOOP;\n  };\n\n  _proto3.isCenter = function isCenter(options) {\n    if (options.focus === \"center\") {\n      if (this.isLoop()) {\n        return true;\n      }\n\n      if (this.options.type === SLIDE) {\n        return !this.options.trimSpace;\n      }\n    }\n\n    return false;\n  };\n\n  _proto3.isVertical = function isVertical() {\n    return this.options.direction === TTB;\n  };\n\n  _proto3.buildClasses = function buildClasses() {\n    var options = this.options;\n    return [CLASS_ROOT, CLASS_ROOT + \"--\" + options.type, CLASS_ROOT + \"--\" + options.direction, options.drag && CLASS_ROOT + \"--draggable\", options.isNavigation && CLASS_ROOT + \"--nav\", CLASS_ACTIVE, !this.config.hidden && CLASS_RENDERED].filter(Boolean).join(\" \");\n  };\n\n  _proto3.buildAttrs = function buildAttrs(attrs) {\n    var attr = \"\";\n    forOwn(attrs, function (value, key) {\n      attr += value ? \" \" + camelToKebab(key) + \"=\\\"\" + value + \"\\\"\" : \"\";\n    });\n    return attr.trim();\n  };\n\n  _proto3.buildStyles = function buildStyles(styles) {\n    var style = \"\";\n    forOwn(styles, function (value, key) {\n      style += \" \" + camelToKebab(key) + \":\" + value + \";\";\n    });\n    return style.trim();\n  };\n\n  _proto3.renderSlides = function renderSlides() {\n    var _this10 = this;\n\n    var tag = this.config.slideTag;\n    return this.slides.map(function (content) {\n      return \"<\" + tag + \" \" + _this10.buildAttrs(content.attrs) + \">\" + (content.html || \"\") + \"</\" + tag + \">\";\n    }).join(\"\");\n  };\n\n  _proto3.cover = function cover(content) {\n    var styles = content.styles,\n        _content$html = content.html,\n        html = _content$html === void 0 ? \"\" : _content$html;\n\n    if (this.options.cover && !this.options.lazyLoad) {\n      var src = html.match(/<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/);\n\n      if (src && src[2]) {\n        styles.background = \"center/cover no-repeat url('\" + src[2] + \"')\";\n      }\n    }\n  };\n\n  _proto3.generateClones = function generateClones(contents) {\n    var classes = this.options.classes;\n    var count = this.getCloneCount();\n    var slides = contents.slice();\n\n    while (slides.length < count) {\n      push(slides, slides);\n    }\n\n    push(slides.slice(-count).reverse(), slides.slice(0, count)).forEach(function (content, index) {\n      var attrs = assign({}, content.attrs, {\n        class: content.attrs.class + \" \" + classes.clone\n      });\n      var clone = assign({}, content, {\n        attrs: attrs\n      });\n      index < count ? contents.unshift(clone) : contents.push(clone);\n    });\n  };\n\n  _proto3.getCloneCount = function getCloneCount() {\n    if (this.isLoop()) {\n      var options = this.options;\n\n      if (options.clones) {\n        return options.clones;\n      }\n\n      var perPage = max.apply(void 0, this.breakpoints.map(function (_ref6) {\n        var options2 = _ref6[1];\n        return options2.perPage;\n      }));\n      return perPage * ((options.flickMaxPages || 1) + 1);\n    }\n\n    return 0;\n  };\n\n  _proto3.renderArrows = function renderArrows() {\n    var html = \"\";\n    html += \"<div class=\\\"\" + this.options.classes.arrows + \"\\\">\";\n    html += this.renderArrow(true);\n    html += this.renderArrow(false);\n    html += \"</div>\";\n    return html;\n  };\n\n  _proto3.renderArrow = function renderArrow(prev) {\n    var _this$options = this.options,\n        classes = _this$options.classes,\n        i18n = _this$options.i18n;\n    var attrs = {\n      class: classes.arrow + \" \" + (prev ? classes.prev : classes.next),\n      type: \"button\",\n      ariaLabel: prev ? i18n.prev : i18n.next\n    };\n    return \"<button \" + this.buildAttrs(attrs) + \"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\"><path d=\\\"\" + (this.options.arrowPath || PATH) + \"\\\" /></svg></button>\";\n  };\n\n  _proto3.html = function html() {\n    var _this$config = this.config,\n        rootClass = _this$config.rootClass,\n        listTag = _this$config.listTag,\n        arrows = _this$config.arrows,\n        beforeTrack = _this$config.beforeTrack,\n        afterTrack = _this$config.afterTrack,\n        slider = _this$config.slider,\n        beforeSlider = _this$config.beforeSlider,\n        afterSlider = _this$config.afterSlider;\n    var html = \"\";\n    html += \"<div id=\\\"\" + this.id + \"\\\" class=\\\"\" + this.buildClasses() + \" \" + (rootClass || \"\") + \"\\\">\";\n    html += \"<style>\" + this.Style.build() + \"</style>\";\n\n    if (slider) {\n      html += beforeSlider || \"\";\n      html += \"<div class=\\\"splide__slider\\\">\";\n    }\n\n    html += beforeTrack || \"\";\n\n    if (arrows) {\n      html += this.renderArrows();\n    }\n\n    html += \"<div class=\\\"splide__track\\\">\";\n    html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n    html += this.renderSlides();\n    html += \"</\" + listTag + \">\";\n    html += \"</div>\";\n    html += afterTrack || \"\";\n\n    if (slider) {\n      html += \"</div>\";\n      html += afterSlider || \"\";\n    }\n\n    html += \"</div>\";\n    return html;\n  };\n\n  return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_OVERFLOW, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_OVERFLOW, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n", "import { Controller } from \"@hotwired/stimulus\";\nimport Splide from '@splidejs/splide';\n\n// Connects to data-controller=\"homepage\"\nexport default class extends Controller {\n  connect() {\n    document.querySelectorAll('.splide').forEach(carousel => new Splide(carousel, {\n      type: 'loop',\n      focus: 'center',\n      start: 0,\n      autoplay: true,\n      breakpoints: {\n        768: {\n          perPage: 1\n        }\n      }\n    }).mount());\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"intranet-order-summary\"\nexport default class extends Controller {\n  connect() {\n    this.alignTotal();\n  }\n\n  alignTotal() {\n    const totalTarget = document.getElementById('summary-total');\n    const partials = Array.from(document.querySelectorAll('.summary-price'));\n    const total = partials.reduce((acc, partial) => {\n      return acc += parseFloat(partial.innerHTML)\n    }, 0).toFixed(2);\n\n    totalTarget.innerHTML = total;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"intranet-point-of-sale\"\nexport default class extends Controller {\n  connect() {\n\n  }\n\n  changeTab(event) {\n    const buyTab = document.getElementById('buyTab');\n    const searchTab = document.getElementById('searchTab');\n    const selectedTab = event.target;\n\n    switch (selectedTab) {\n      case buyTab:\n        searchTab.classList.remove('active');\n        buyTab.classList.add('active');\n        break;\n      case searchTab:\n        buyTab.classList.remove('active');\n        searchTab.classList.add('active');\n        break;\n      default:\n        break;\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"intranet-purchase-billing-info\"\nexport default class extends Controller {\n  connect() {\n    document.getElementById('shopping-cart').classList.remove('active');\n    document.getElementById('billing-info').classList.add('active');\n    document.getElementById('purchase-summary').classList.remove('active');\n  }\n\n  submitForm() {\n    document.getElementById(\"billing-info-form\").requestSubmit();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"intranet-purchase-summary\"\nexport default class extends Controller {\n  connect() {\n    document.getElementById('shopping-cart').classList.remove('active');\n    document.getElementById('billing-info') && document.getElementById('billing-info').classList.remove('active');\n    document.getElementById('purchase-summary').classList.add('active');\n\n    this.alignTotal();\n  }\n\n  alignTotal() {\n    const totalTarget = document.getElementById('summary-total');\n    const partials = Array.from(document.querySelectorAll('.summary-price'));\n    const total = partials.reduce((acc, partial) => {\n      return acc += parseFloat(partial.innerHTML)\n    }, 0).toFixed(2);\n\n    totalTarget.innerHTML = total;\n  }\n\n  setPaymentType(event) {\n    const selectedPaymentType = event.target.dataset.paymentType;\n    const paymentType = document.getElementById('purchase_payment_type');\n    const paymentMessage = document.getElementById('payment_message');\n\n    paymentType.value = selectedPaymentType;\n\n    switch (selectedPaymentType) {\n      case 'cash':\n        paymentMessage.innerHTML = 'Contanti';\n        break;\n      case 'card':\n        paymentMessage.innerHTML = 'Carte di Pagamento';\n      default:\n        break;\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n\n  }\n\n  toggleLogFilters(event) {\n    const walletLogsFilters = document.getElementById(\"wallet-logs-filters\");\n    const checkbox = event.currentTarget;\n\n    if (checkbox.checked) {\n      walletLogsFilters.classList.remove(\"d-none\");\n    } else {\n      walletLogsFilters.classList.add(\"d-none\");\n    }\n  }\n\n  toggleRefundLine(event) {\n    const transactionLine = event.currentTarget.closest(\"tr\");\n    const buttonInnerIcon = event.currentTarget.querySelector(\"i\");\n\n    const burnLineId = event.currentTarget.dataset.burnLine;\n    const burnLine = document.getElementById(burnLineId);\n\n    const refundLineId = event.currentTarget.dataset.refundLine;\n    const refundLine = document.getElementById(refundLineId);\n\n    if (!burnLine) return;\n\n    document.querySelectorAll(\".transaction-line.table-info\").forEach(line => {\n      line.classList.remove(\"table-info\");\n\n      const buttonIcon = line.querySelector(\"button > i\");\n\n      buttonIcon.classList.remove(\"mdi-chevron-up\");\n      buttonIcon.classList.add(\"mdi-chevron-down\");\n    });\n\n    document.querySelectorAll(\".burn-line.table-success\").forEach(line => {\n      if (line.id !== burnLineId && !line.classList.contains(\"d-none\")) {\n        line.classList.add(\"d-none\");\n        line.classList.remove(\"table-success\");\n      }\n    });\n\n    document.querySelectorAll(\".refund-line\").forEach(line => {\n      if (line.id !== refundLineId && !line.classList.contains(\"d-none\")) {\n        line.classList.add(\"d-none\");\n        line.classList.remove(\"table-danger\");\n      }\n    });\n\n    if (burnLine.classList.contains(\"d-none\")) {\n      burnLine.classList.remove(\"d-none\");\n      burnLine.classList.add(\"table-success\");\n\n      transactionLine.classList.add(\"table-info\");\n\n      buttonInnerIcon.classList.remove(\"mdi-chevron-down\");\n      buttonInnerIcon.classList.add(\"mdi-chevron-up\");\n    } else {\n      burnLine.classList.add(\"d-none\");\n\n      transactionLine.classList.remove(\"table-info\");\n\n      buttonInnerIcon.classList.remove(\"mdi-chevron-up\");\n      buttonInnerIcon.classList.add(\"mdi-chevron-down\");\n    }\n\n    if (!refundLine) return;\n\n    if (refundLine.classList.contains(\"d-none\")) {\n      refundLine.classList.remove(\"d-none\");\n      refundLine.classList.add(\"table-danger\");\n    } else {\n      refundLine.classList.add(\"d-none\");\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"intranet-shopping-cart\"\nexport default class extends Controller {\n  connect() {\n    document.getElementById('shopping-cart').classList.add('active');\n    document.getElementById('billing-info') && document.getElementById('billing-info').classList.remove('active');\n    document.getElementById('purchase-summary').classList.remove('active');\n  }\n\n  alignCart(event) {\n    const line = event.target.closest('tr');\n    const partial = line.querySelectorAll(':scope .partial').item(0);\n    const price = parseFloat(line.querySelectorAll(':scope .price').item(0).innerHTML);\n    const quantity = line.querySelectorAll(':scope .quantity').item(0).value;\n    const amount = price * quantity;\n\n    partial.innerHTML = amount.toFixed(2);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"intranet-wallet-burner\"\nexport default class extends Controller {\n  connect() {\n    const barcode = document.getElementById('barcode');\n    barcode.focus();\n\n    const walletBurnerForm = document.getElementById('wallet-burner-form');\n\n    walletBurnerForm.addEventListener('submit', (event) => {\n      barcode.value = barcode.value.replace(/\\+/g, '');\n    });\n\n    if (!document.keydownEventAdded) {\n      document.addEventListener('keydown', (event) => {\n        if (event.key === '+') {\n          event.preventDefault();\n          document.getElementById('barcode').focus();\n        }\n      });\n\n      document.keydownEventAdded = true;\n    }\n  }\n\n  resetWallet() {\n    document.getElementById(\"current-wallet\").innerHTML = \"\";\n    document.getElementById(\"capabilities\").innerHTML = \"\";\n    document.getElementById(\"submit-burn\").innerHTML = \"\";\n    document.getElementById(\"notify-box\").innerHTML = \"\";\n    document.getElementById(\"barcode\").value = \"\";\n    document.getElementById(\"barcode\").focus();\n  }\n\n  chooseCapability(event) {\n    const button = document.getElementById(\"use-wallet-button\");\n    const capability = event.target.closest(\".card\");\n    const capabilities = document.getElementsByClassName(\"capability-card\");\n\n    capabilities.forEach((elem) => elem.classList.remove(\"border-success\"));\n\n    capability.classList.add(\"border-success\");\n    button.classList.remove(\"disabled\");\n\n    document.getElementById(\"capability-id\").value = event.params.id;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"modal\"\nexport default class extends Controller {\n  static targets = [\"currentModal\"];\n\n  connect() {\n    this.myModal = new bootstrap.Modal(this.currentModalTarget, {});\n\n    let modalHidden = this.currentModalTarget.dataset.modalHidden;\n\n    if (modalHidden == null || modalHidden == 'false') {\n      this.myModal.show();\n    }\n  }\n\n  openModal() {\n    this.myModal.show();\n  }\n\n  closeModal() {\n    this.myModal.hide();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"stripe\"\nexport default class extends Controller {\n  static values = {\n    key: String,\n    paymentId: String,\n    clientSecret: String,\n    confirmUrl: String,\n    successUrl: String\n  }\n\n  static outlets = [\"stripe-init\"]\n\n  static targets = [\"promptSection\", \"verifyingSection\", \"errorSection\", \"errorMessage\", \"header\", \"title\"]\n\n  connect() {\n    this.stripe = Stripe(this.keyValue, { locale: 'it' });\n\n    if (this.hasSuccessUrlValue) {\n      setTimeout(() => { window.location.href = this.successUrlValue; }, 2500);\n    } else if (this.hasClientSecretValue) {\n      if (this.hasStripeInitOutlet) {\n        if (!this.stripeInitOutlet.canStart3DS()) { return; }\n\n        this.stripeInitOutlet.set3DSStarted();\n      }\n\n      this.handle3DS();\n    }\n  }\n\n  async handle3DS() {\n    const result = await this.stripe.handleCardAction(this.clientSecretValue);\n\n    if (result.error) {\n      this.showErrorState(result.error.message);\n    } else {\n      this.showVerifyingState();\n      this.confirmToBackend(result.paymentIntent.id);\n    }\n  }\n\n  confirmToBackend(paymentIntentId) {\n    fetch(this.confirmUrlValue, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content\n      },\n      body: JSON.stringify({\n        payment_id: this.paymentIdValue,\n        payment_intent_id: paymentIntentId\n      })\n    }).then(async response => {\n      if (response.ok) {\n        if (this.hasStripeInitOutlet) { this.stripeInitOutlet.waitForFinalization(); }\n      } else {\n        let message = \"Si \u00E8 verificato un errore.\";\n\n        try {\n          const data = await response.json();\n\n          if (data.message) { message = data.message; }\n        } catch (error) { }\n\n        this.showErrorState(message);\n      }\n    }).catch(error => {\n      this.showErrorState(\"Si \u00E8 verificato un errore.\");\n    });\n  }\n\n  showVerifyingState() {\n    this.promptSectionTarget.classList.add(\"d-none\");\n    this.errorSectionTarget.classList.add(\"d-none\");\n    this.verifyingSectionTarget.classList.remove(\"d-none\");\n\n    this.headerTarget.classList.remove(\"bg-warning\");\n    this.headerTarget.classList.add(\"bg-primary\");\n\n    this.titleTarget.textContent = \"Esito Autenticazione\";\n  }\n\n  showErrorState(message) {\n    this.promptSectionTarget.classList.add(\"d-none\");\n    this.verifyingSectionTarget.classList.add(\"d-none\");\n\n    this.errorMessageTarget.textContent = message;\n    this.errorSectionTarget.classList.remove(\"d-none\");\n\n    this.headerTarget.classList.remove(\"bg-warning\", \"bg-primary\");\n    this.headerTarget.classList.add(\"bg-danger\");\n\n    this.titleTarget.textContent = \"Errore Autenticazione\";\n  }\n}", "var adapters = {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now());\n      adapters.logger.log(\"[ActionCable]\", ...messages);\n    }\n  }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this);\n    this.connection = connection;\n    this.reconnectAttempts = 0;\n  }\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now();\n      delete this.stoppedAt;\n      this.startPolling();\n      addEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n    }\n  }\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now();\n      this.stopPolling();\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(\"ConnectionMonitor stopped\");\n    }\n  }\n  isRunning() {\n    return this.startedAt && !this.stoppedAt;\n  }\n  recordPing() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\n    this.recordPing();\n    delete this.disconnectedAt;\n    logger.log(\"ConnectionMonitor recorded connect\");\n  }\n  recordDisconnect() {\n    this.disconnectedAt = now();\n    logger.log(\"ConnectionMonitor recorded disconnect\");\n  }\n  startPolling() {\n    this.stopPolling();\n    this.poll();\n  }\n  stopPolling() {\n    clearTimeout(this.pollTimeout);\n  }\n  poll() {\n    this.pollTimeout = setTimeout((() => {\n      this.reconnectIfStale();\n      this.poll();\n    }), this.getPollInterval());\n  }\n  getPollInterval() {\n    const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n    const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n    const jitter = jitterMax * Math.random();\n    return staleThreshold * 1e3 * backoff * (1 + jitter);\n  }\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n      this.reconnectAttempts++;\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n      } else {\n        logger.log(\"ConnectionMonitor reopening\");\n        this.connection.reopen();\n      }\n    }\n  }\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt;\n  }\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n  }\n  disconnectedRecently() {\n    return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n  }\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout((() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n          this.connection.reopen();\n        }\n      }), 200);\n    }\n  }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n  message_types: {\n    welcome: \"welcome\",\n    disconnect: \"disconnect\",\n    ping: \"ping\",\n    confirmation: \"confirm_subscription\",\n    rejection: \"reject_subscription\"\n  },\n  disconnect_reasons: {\n    unauthorized: \"unauthorized\",\n    invalid_request: \"invalid_request\",\n    server_restart: \"server_restart\",\n    remote: \"remote\"\n  },\n  default_mount_path: \"/cable\",\n  protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this);\n    this.consumer = consumer;\n    this.subscriptions = this.consumer.subscriptions;\n    this.monitor = new ConnectionMonitor(this);\n    this.disconnected = true;\n  }\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data));\n      return true;\n    } else {\n      return false;\n    }\n  }\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n      return false;\n    } else {\n      const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n      if (this.webSocket) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n      this.installEventHandlers();\n      this.monitor.start();\n      return true;\n    }\n  }\n  close({allowReconnect: allowReconnect} = {\n    allowReconnect: true\n  }) {\n    if (!allowReconnect) {\n      this.monitor.stop();\n    }\n    if (this.isOpen()) {\n      return this.webSocket.close();\n    }\n  }\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n    if (this.isActive()) {\n      try {\n        return this.close();\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error);\n      } finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n        setTimeout(this.open, this.constructor.reopenDelay);\n      }\n    } else {\n      return this.open();\n    }\n  }\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol;\n    }\n  }\n  isOpen() {\n    return this.isState(\"open\");\n  }\n  isActive() {\n    return this.isState(\"open\", \"connecting\");\n  }\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0;\n  }\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n  }\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0;\n  }\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase();\n        }\n      }\n    }\n    return null;\n  }\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this);\n      this.webSocket[`on${eventName}`] = handler;\n    }\n  }\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {};\n    }\n  }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) {\n      return;\n    }\n    const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n    switch (type) {\n     case message_types.welcome:\n      if (this.triedToReconnect()) {\n        this.reconnectAttempted = true;\n      }\n      this.monitor.recordConnect();\n      return this.subscriptions.reload();\n\n     case message_types.disconnect:\n      logger.log(`Disconnecting. Reason: ${reason}`);\n      return this.close({\n        allowReconnect: reconnect\n      });\n\n     case message_types.ping:\n      return this.monitor.recordPing();\n\n     case message_types.confirmation:\n      this.subscriptions.confirmSubscription(identifier);\n      if (this.reconnectAttempted) {\n        this.reconnectAttempted = false;\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: true\n        });\n      } else {\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: false\n        });\n      }\n\n     case message_types.rejection:\n      return this.subscriptions.reject(identifier);\n\n     default:\n      return this.subscriptions.notify(identifier, \"received\", message);\n    }\n  },\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n    this.disconnected = false;\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n      return this.close({\n        allowReconnect: false\n      });\n    }\n  },\n  close(event) {\n    logger.log(\"WebSocket onclose event\");\n    if (this.disconnected) {\n      return;\n    }\n    this.disconnected = true;\n    this.monitor.recordDisconnect();\n    return this.subscriptions.notifyAll(\"disconnected\", {\n      willAttemptReconnect: this.monitor.isRunning()\n    });\n  },\n  error() {\n    logger.log(\"WebSocket onerror event\");\n  }\n};\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key];\n      object[key] = value;\n    }\n  }\n  return object;\n};\n\nclass Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer;\n    this.identifier = JSON.stringify(params);\n    extend(this, mixin);\n  }\n  perform(action, data = {}) {\n    data.action = action;\n    return this.send(data);\n  }\n  send(data) {\n    return this.consumer.send({\n      command: \"message\",\n      identifier: this.identifier,\n      data: JSON.stringify(data)\n    });\n  }\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this);\n  }\n}\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions;\n    this.pendingSubscriptions = [];\n  }\n  guarantee(subscription) {\n    if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n      this.pendingSubscriptions.push(subscription);\n    } else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n    }\n    this.startGuaranteeing();\n  }\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n    this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n  }\n  startGuaranteeing() {\n    this.stopGuaranteeing();\n    this.retrySubscribing();\n  }\n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout);\n  }\n  retrySubscribing() {\n    this.retryTimeout = setTimeout((() => {\n      if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n        this.pendingSubscriptions.map((subscription => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n          this.subscriptions.subscribe(subscription);\n        }));\n      }\n    }), 500);\n  }\n}\n\nclass Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer;\n    this.guarantor = new SubscriptionGuarantor(this);\n    this.subscriptions = [];\n  }\n  create(channelName, mixin) {\n    const channel = channelName;\n    const params = typeof channel === \"object\" ? channel : {\n      channel: channel\n    };\n    const subscription = new Subscription(this.consumer, params, mixin);\n    return this.add(subscription);\n  }\n  add(subscription) {\n    this.subscriptions.push(subscription);\n    this.consumer.ensureActiveConnection();\n    this.notify(subscription, \"initialized\");\n    this.subscribe(subscription);\n    return subscription;\n  }\n  remove(subscription) {\n    this.forget(subscription);\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\");\n    }\n    return subscription;\n  }\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription => {\n      this.forget(subscription);\n      this.notify(subscription, \"rejected\");\n      return subscription;\n    }));\n  }\n  forget(subscription) {\n    this.guarantor.forget(subscription);\n    this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n    return subscription;\n  }\n  findAll(identifier) {\n    return this.subscriptions.filter((s => s.identifier === identifier));\n  }\n  reload() {\n    return this.subscriptions.map((subscription => this.subscribe(subscription)));\n  }\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n  }\n  notify(subscription, callbackName, ...args) {\n    let subscriptions;\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription);\n    } else {\n      subscriptions = [ subscription ];\n    }\n    return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n  }\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription);\n    }\n  }\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`);\n    this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n  }\n  sendCommand(subscription, command) {\n    const {identifier: identifier} = subscription;\n    return this.consumer.send({\n      command: command,\n      identifier: identifier\n    });\n  }\n}\n\nclass Consumer {\n  constructor(url) {\n    this._url = url;\n    this.subscriptions = new Subscriptions(this);\n    this.connection = new Connection(this);\n    this.subprotocols = [];\n  }\n  get url() {\n    return createWebSocketURL(this._url);\n  }\n  send(data) {\n    return this.connection.send(data);\n  }\n  connect() {\n    return this.connection.open();\n  }\n  disconnect() {\n    return this.connection.close({\n      allowReconnect: false\n    });\n  }\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open();\n    }\n  }\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [ ...this.subprotocols, subprotocol ];\n  }\n}\n\nfunction createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url();\n  }\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.href = a.href;\n    a.protocol = a.protocol.replace(\"http\", \"ws\");\n    return a.href;\n  } else {\n    return url;\n  }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url);\n}\n\nfunction getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { createConsumer } from \"@rails/actioncable\"\n\n// Connects to data-controller=\"stripe-init\"\nexport default class extends Controller {\n  static values = {\n    statusUrl: String,\n    consumerId: Number\n  }\n\n  connect() {\n    // Flag per indicare che l'utente ha completato il 3DS lato client.\n    // Serve a evitare che il poller riapra il modale 3DS mentre il server sta finalizzando il pagamento\n    // durante la transizione da 'requires_action' a 'completed'.\n    this.threeDSConfirming = false;\n\n    this.handling3DS = false;\n    this.isSocketConnected = false;\n\n    this.consumer = createConsumer();\n\n    this.subscribeToChannel();\n\n    if (this.isSocketConnected) { return; }\n\n    this.startPolling();\n  }\n\n  isConnected() {\n    return this.element.isConnected;\n  }\n\n  disconnect() {\n    if (this.subscription) { this.subscription.unsubscribe(); }\n    if (this.consumer) { this.consumer.disconnect(); }\n\n    this.stopPolling();\n  }\n\n  subscribeToChannel() {\n    this.subscription = this.consumer.subscriptions.create(\n      {\n        channel: \"StripePaymentChannel\",\n        id: this.consumerIdValue\n      },\n      {\n        connected: () => {\n          if (!this.isConnected) { return; }\n\n          this.isSocketConnected = true;\n\n          this.stopPolling();\n        },\n        disconnected: () => {\n          if (!this.isConnected) { return; }\n\n          this.isSocketConnected = false;\n\n          this.startPolling();\n        },\n        received: (data) => {\n          if (!this.isConnected) { return; }\n\n          this.stopPolling();\n\n          if (window.Turbo) { window.Turbo.renderStreamMessage(data); }\n        }\n      }\n    );\n  }\n\n  startPolling() {\n    if (this.polling) { return; }\n\n    this.polling = setInterval(async () => {\n      const response = await fetch(`${this.statusUrlValue}`, { headers: { 'Accept': 'application/json' } });\n\n      if (!response.ok) { return; }\n\n      const data = await response.json();\n\n      //WS chiama stopPolling() mentre aspettiamo la risposta del fetch.\n      if (!this.polling) { return; }\n\n      if (!this.isConnected) { return; }\n\n      if (data.status === 'pending' || (data.status === 'requires_action' && this.threeDSConfirming)) { return; }\n\n      this.stopPolling();\n\n      this.renderHtml(data.html);\n    }, 5000);\n  }\n\n  stopPolling() {\n    if (this.polling) {\n      clearInterval(this.polling);\n      this.polling = null;\n    }\n  }\n\n  canStart3DS() {\n    return !this.handling3DS;\n  }\n\n  set3DSStarted() {\n    this.handling3DS = true;\n  }\n\n  reset3DS() {\n    this.handling3DS = false;\n  }\n\n  waitForFinalization() {\n    if (!this.isConnected) { return; }\n\n    this.reset3DS();\n\n    this.threeDSConfirming = true;\n\n    this.stopPolling();\n\n    if (this.isSocketConnected) { return; }\n\n    this.startPolling();\n  }\n\n  renderHtml(htmlContent) {\n    if (!window.Turbo) { return; }\n\n    const streamMessage = `\n      <turbo-stream action=\"update\" target=\"stripe-modal-content\">\n        <template>\n          ${htmlContent}\n        </template>\n      </turbo-stream>\n    `;\n\n    window.Turbo.renderStreamMessage(streamMessage);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"toast\"\nexport default class extends Controller {\n  connect() {\n    const toast = new bootstrap.Toast(this.element);\n\n    toast.show();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"toggle-visibility\"\nexport default class extends Controller {\n  static targets = [\"container\", \"toggleable\"]\n\n  static values = {\n    hiddenClass: { type: String, default: \"d-none\" }\n  }\n\n  connect() {\n    if (!this.hasContainerTarget || !this.hasToggleableTarget) return;\n\n    this.observer = new MutationObserver(() => this.toggle());\n\n    this.observer.observe(this.containerTarget, { childList: true, subtree: true });\n\n    this.toggle();\n  }\n\n  disconnect() {\n    if (this.observer) { this.observer.disconnect(); }\n  }\n\n  toggle() {\n    const hasContent = this.containerTarget.children.length > 0;\n\n    this.toggleableTarget.classList.toggle(this.hiddenClassValue, hasContent);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"user\"\nexport default class extends Controller {\n  align_requirements_for_billing_info(event) {\n    const town = document.getElementById('billing_info_town');\n    const district = document.getElementById('billing_info_district');\n    const blankDistrict = document.getElementById('blank_district');\n    const address = document.getElementById('billing_info_address');\n    const cap = document.getElementById('billing_info_cap');\n    const cf = document.getElementById('billing_info_cf');\n\n    if (event.target.value != 'IT') {\n      town.removeAttribute('required');\n      town.value = '';\n      town.readOnly = true;\n      district.removeAttribute('required');\n      district.value = '';\n      district.disabled = true;\n      blankDistrict.disabled = false;\n      address.removeAttribute('required');\n      address.value = '';\n      address.readOnly = true;\n      cap.removeAttribute('required');\n      cap.value = '';\n      cap.readOnly = true;\n      cf.removeAttribute('required');\n      cf.value = '';\n      cf.readOnly = true;\n    } else {\n      town.setAttribute('required', '');\n      town.readOnly = false;\n      district.setAttribute('required', '');\n      district.disabled = false;\n      blankDistrict.disabled = true;\n      address.setAttribute('required', '');\n      address.readOnly = false;\n      cap.setAttribute('required', '');\n      cap.readOnly = false;\n      cf.setAttribute('required', '');\n      cf.readOnly = false;\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"waiting-room\"\nexport default class extends Controller {\n  static targets = [\"currentTimer\"];\n\n  connect() {\n    this.ticker = 60;\n\n    this.poller = setInterval(() => {\n      this.ticker -= 1;\n      this.currentTimerTarget.innerText = this.ticker.toString();\n\n      if (this.ticker === 0) {\n        clearInterval(this.poller);\n        location.reload();\n      }\n    }, 1000);\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport CaptchaLoaderController from \"./captcha_loader_controller\"\napplication.register(\"captcha-loader\", CaptchaLoaderController)\n\nimport CartController from \"./cart_controller\"\napplication.register(\"cart\", CartController)\n\nimport CfCheckerController from \"./cf_checker_controller\"\napplication.register(\"cf-checker\", CfCheckerController)\n\nimport HomepageController from \"./homepage_controller\"\napplication.register(\"homepage\", HomepageController)\n\nimport IntranetOrderSummaryController from \"./intranet_order_summary_controller\"\napplication.register(\"intranet-order-summary\", IntranetOrderSummaryController)\n\nimport IntranetPointOfSaleController from \"./intranet_point_of_sale_controller\"\napplication.register(\"intranet-point-of-sale\", IntranetPointOfSaleController)\n\nimport IntranetPurchaseBillingInfoController from \"./intranet_purchase_billing_info_controller\"\napplication.register(\"intranet-purchase-billing-info\", IntranetPurchaseBillingInfoController)\n\nimport IntranetPurchaseSummaryController from \"./intranet_purchase_summary_controller\"\napplication.register(\"intranet-purchase-summary\", IntranetPurchaseSummaryController)\n\nimport IntranetReportsController from \"./intranet_reports_controller\"\napplication.register(\"intranet-reports\", IntranetReportsController)\n\nimport IntranetShoppingCartController from \"./intranet_shopping_cart_controller\"\napplication.register(\"intranet-shopping-cart\", IntranetShoppingCartController)\n\nimport IntranetWalletBurnerController from \"./intranet_wallet_burner_controller\"\napplication.register(\"intranet-wallet-burner\", IntranetWalletBurnerController)\n\nimport ModalController from \"./modal_controller\"\napplication.register(\"modal\", ModalController)\n\nimport StripeController from \"./stripe_controller\"\napplication.register(\"stripe\", StripeController)\n\nimport StripeInitController from \"./stripe_init_controller\"\napplication.register(\"stripe-init\", StripeInitController)\n\nimport ToastController from \"./toast_controller\"\napplication.register(\"toast\", ToastController)\n\nimport ToggleVisibilityController from \"./toggle_visibility_controller\"\napplication.register(\"toggle-visibility\", ToggleVisibilityController)\n\nimport UserController from \"./user_controller\"\napplication.register(\"user\", UserController)\n\nimport WaitingRoomController from \"./waiting_room_controller\"\napplication.register(\"waiting-room\", WaitingRoomController)\n", "export const attachmentSelector = \"[data-trix-attachment]\"\n\nconst attachments = {\n  preview: {\n    presentation: \"gallery\",\n    caption: {\n      name: true,\n      size: true,\n    },\n  },\n  file: {\n    caption: {\n      size: true,\n    },\n  },\n}\nexport default attachments\n", "const attributes = {\n  default: {\n    tagName: \"div\",\n    parse: false,\n  },\n  quote: {\n    tagName: \"blockquote\",\n    nestable: true,\n  },\n  heading1: {\n    tagName: \"h1\",\n    terminal: true,\n    breakOnReturn: true,\n    group: false,\n  },\n  code: {\n    tagName: \"pre\",\n    terminal: true,\n    htmlAttributes: [ \"language\" ],\n    text: {\n      plaintext: true,\n    },\n  },\n  bulletList: {\n    tagName: \"ul\",\n    parse: false,\n  },\n  bullet: {\n    tagName: \"li\",\n    listAttribute: \"bulletList\",\n    group: false,\n    nestable: true,\n    test(element) {\n      return tagName(element.parentNode) === attributes[this.listAttribute].tagName\n    },\n  },\n  numberList: {\n    tagName: \"ol\",\n    parse: false,\n  },\n  number: {\n    tagName: \"li\",\n    listAttribute: \"numberList\",\n    group: false,\n    nestable: true,\n    test(element) {\n      return tagName(element.parentNode) === attributes[this.listAttribute].tagName\n    },\n  },\n  attachmentGallery: {\n    tagName: \"div\",\n    exclusive: true,\n    terminal: true,\n    parse: false,\n    group: false,\n  },\n}\n\nconst tagName = (element) => element?.tagName?.toLowerCase()\n\nexport default attributes\n", "const androidVersionMatch = navigator.userAgent.match(/android\\s([0-9]+.*Chrome)/i)\nconst androidVersion = androidVersionMatch && parseInt(androidVersionMatch[1])\n\nexport default {\n  // Android emits composition events when moving the cursor through existing text\n  // Introduced in Chrome 65: https://bugs.chromium.org/p/chromium/issues/detail?id=764439#c9\n  composesExistingText: /Android.*Chrome/.test(navigator.userAgent),\n\n  // Android 13, especially on Samsung keyboards, emits extra compositionend and beforeinput events\n  // that can make the input handler lose the current selection or enter an infinite input -> render -> input\n  // loop.\n  recentAndroid: androidVersion && androidVersion > 12,\n  samsungAndroid: androidVersion && navigator.userAgent.match(/Android.*SM-/),\n\n  // IE 11 activates resizing handles on editable elements that have \"layout\"\n  forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent),\n  // https://www.w3.org/TR/input-events-1/ + https://www.w3.org/TR/input-events-2/\n  supportsInputEvents: typeof InputEvent !== \"undefined\" &&\n    [ \"data\", \"getTargetRanges\", \"inputType\" ].every(prop => prop in InputEvent.prototype),\n}\n", "export default {\n  attachFiles: \"Attach Files\",\n  bold: \"Bold\",\n  bullets: \"Bullets\",\n  byte: \"Byte\",\n  bytes: \"Bytes\",\n  captionPlaceholder: \"Add a caption\u2026\",\n  code: \"Code\",\n  heading1: \"Heading\",\n  indent: \"Increase Level\",\n  italic: \"Italic\",\n  link: \"Link\",\n  numbers: \"Numbers\",\n  outdent: \"Decrease Level\",\n  quote: \"Quote\",\n  redo: \"Redo\",\n  remove: \"Remove\",\n  strike: \"Strikethrough\",\n  undo: \"Undo\",\n  unlink: \"Unlink\",\n  url: \"URL\",\n  urlPlaceholder: \"Enter a URL\u2026\",\n  GB: \"GB\",\n  KB: \"KB\",\n  MB: \"MB\",\n  PB: \"PB\",\n  TB: \"TB\",\n}\n", "/* eslint-disable\n    no-case-declarations,\n*/\nimport lang from \"trix/config/lang\"\n\nconst sizes = [ lang.bytes, lang.KB, lang.MB, lang.GB, lang.TB, lang.PB ]\n\nexport default {\n  prefix: \"IEC\",\n  precision: 2,\n\n  formatter(number) {\n    switch (number) {\n      case 0:\n        return `0 ${lang.bytes}`\n      case 1:\n        return `1 ${lang.byte}`\n      default:\n        let base\n\n        if (this.prefix === \"SI\") {\n          base = 1000\n        } else if (this.prefix === \"IEC\") {\n          base = 1024\n        }\n\n        const exp = Math.floor(Math.log(number) / Math.log(base))\n        const humanSize = number / Math.pow(base, exp)\n        const string = humanSize.toFixed(this.precision)\n        const withoutInsignificantZeros = string.replace(/0*$/, \"\").replace(/\\.$/, \"\")\n        return `${withoutInsignificantZeros} ${sizes[exp]}`\n    }\n  },\n}\n", "export const ZERO_WIDTH_SPACE = \"\\uFEFF\"\nexport const NON_BREAKING_SPACE = \"\\u00A0\"\nexport const OBJECT_REPLACEMENT_CHARACTER = \"\\uFFFC\"\n", "export const extend = function(properties) {\n  for (const key in properties) {\n    const value = properties[key]\n    this[key] = value\n  }\n  return this\n}\n", "import blockAttributes from \"trix/config/block_attributes\"\nimport { ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport { extend } from \"./extend\"\nimport { attachmentSelector } from \"trix/config/attachments\"\n\nconst html = document.documentElement\nconst match = html.matches\n\nexport const handleEvent = function(eventName, { onElement, matchingSelector, withCallback, inPhase, preventDefault, times } = {}) {\n  const element = onElement ? onElement : html\n  const selector = matchingSelector\n  const useCapture = inPhase === \"capturing\"\n\n  const handler = function(event) {\n    if (times != null && --times === 0) {\n      handler.destroy()\n    }\n    const target = findClosestElementFromNode(event.target, { matchingSelector: selector })\n    if (target != null) {\n      withCallback?.call(target, event, target)\n      if (preventDefault) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  handler.destroy = () => element.removeEventListener(eventName, handler, useCapture)\n\n  element.addEventListener(eventName, handler, useCapture)\n  return handler\n}\n\nexport const handleEventOnce = function(eventName, options = {}) {\n  options.times = 1\n  return handleEvent(eventName, options)\n}\n\nexport const triggerEvent = function(eventName, { onElement, bubbles, cancelable, attributes } = {}) {\n  const element = onElement != null ? onElement : html\n  bubbles = bubbles !== false\n  cancelable = cancelable !== false\n\n  const event = document.createEvent(\"Events\")\n  event.initEvent(eventName, bubbles, cancelable)\n  if (attributes != null) {\n    extend.call(event, attributes)\n  }\n  return element.dispatchEvent(event)\n}\n\nexport const elementMatchesSelector = function(element, selector) {\n  if (element?.nodeType === 1) {\n    return match.call(element, selector)\n  }\n}\n\nexport const findClosestElementFromNode = function(node, { matchingSelector, untilNode } = {}) {\n  while (node && node.nodeType !== Node.ELEMENT_NODE) {\n    node = node.parentNode\n  }\n  if (node == null) {\n    return\n  }\n\n  if (matchingSelector != null) {\n    if (node.closest && untilNode == null) {\n      return node.closest(matchingSelector)\n    } else {\n      while (node && node !== untilNode) {\n        if (elementMatchesSelector(node, matchingSelector)) {\n          return node\n        }\n        node = node.parentNode\n      }\n    }\n  } else {\n    return node\n  }\n}\n\nexport const findInnerElement = function(element) {\n  while (element?.firstElementChild) {\n    element = element.firstElementChild\n  }\n  return element\n}\n\nexport const innerElementIsActive = (element) =>\n  document.activeElement !== element && elementContainsNode(element, document.activeElement)\n\nexport const elementContainsNode = function(element, node) {\n  if (!element || !node) {\n    return\n  }\n  while (node) {\n    if (node === element) {\n      return true\n    }\n    node = node.parentNode\n  }\n}\n\nexport const findNodeFromContainerAndOffset = function(container, offset) {\n  if (!container) {\n    return\n  }\n  if (container.nodeType === Node.TEXT_NODE) {\n    return container\n  } else if (offset === 0) {\n    return container.firstChild != null ? container.firstChild : container\n  } else {\n    return container.childNodes.item(offset - 1)\n  }\n}\n\nexport const findElementFromContainerAndOffset = function(container, offset) {\n  const node = findNodeFromContainerAndOffset(container, offset)\n  return findClosestElementFromNode(node)\n}\n\nexport const findChildIndexOfNode = function(node) {\n  if (!node?.parentNode) {\n    return\n  }\n  let childIndex = 0\n  node = node.previousSibling\n  while (node) {\n    childIndex++\n    node = node.previousSibling\n  }\n  return childIndex\n}\n\nexport const removeNode = (node) => node?.parentNode?.removeChild(node)\n\nexport const walkTree = function(tree, { onlyNodesOfType, usingFilter, expandEntityReferences } = {}) {\n  const whatToShow = (() => {\n    switch (onlyNodesOfType) {\n      case \"element\":\n        return NodeFilter.SHOW_ELEMENT\n      case \"text\":\n        return NodeFilter.SHOW_TEXT\n      case \"comment\":\n        return NodeFilter.SHOW_COMMENT\n      default:\n        return NodeFilter.SHOW_ALL\n    }\n  })()\n\n  return document.createTreeWalker(\n    tree,\n    whatToShow,\n    usingFilter != null ? usingFilter : null,\n    expandEntityReferences === true\n  )\n}\n\nexport const tagName = (element) => element?.tagName?.toLowerCase()\n\nexport const makeElement = function(tag, options = {}) {\n  let key, value\n  if (typeof tag === \"object\") {\n    options = tag\n    tag = options.tagName\n  } else {\n    options = { attributes: options }\n  }\n\n  const element = document.createElement(tag)\n\n  if (options.editable != null) {\n    if (options.attributes == null) {\n      options.attributes = {}\n    }\n    options.attributes.contenteditable = options.editable\n  }\n\n  if (options.attributes) {\n    for (key in options.attributes) {\n      value = options.attributes[key]\n      element.setAttribute(key, value)\n    }\n  }\n\n  if (options.style) {\n    for (key in options.style) {\n      value = options.style[key]\n      element.style[key] = value\n    }\n  }\n\n  if (options.data) {\n    for (key in options.data) {\n      value = options.data[key]\n      element.dataset[key] = value\n    }\n  }\n\n  if (options.className) {\n    options.className.split(\" \").forEach((className) => {\n      element.classList.add(className)\n    })\n  }\n\n  if (options.textContent) {\n    element.textContent = options.textContent\n  }\n\n  if (options.childNodes) {\n    [].concat(options.childNodes).forEach((childNode) => {\n      element.appendChild(childNode)\n    })\n  }\n\n  return element\n}\n\nlet blockTagNames = undefined\n\nexport const getBlockTagNames = function() {\n  if (blockTagNames != null) {\n    return blockTagNames\n  }\n\n  blockTagNames = []\n  for (const key in blockAttributes) {\n    const attributes = blockAttributes[key]\n    if (attributes.tagName) {\n      blockTagNames.push(attributes.tagName)\n    }\n  }\n\n  return blockTagNames\n}\n\nexport const nodeIsBlockContainer = (node) => nodeIsBlockStartComment(node?.firstChild)\n\nexport const nodeProbablyIsBlockContainer = function(node) {\n  return getBlockTagNames().includes(tagName(node)) && !getBlockTagNames().includes(tagName(node.firstChild))\n}\n\nexport const nodeIsBlockStart = function(node, { strict } = { strict: true }) {\n  if (strict) {\n    return nodeIsBlockStartComment(node)\n  } else {\n    return (\n      nodeIsBlockStartComment(node) || !nodeIsBlockStartComment(node.firstChild) && nodeProbablyIsBlockContainer(node)\n    )\n  }\n}\n\nexport const nodeIsBlockStartComment = (node) => nodeIsCommentNode(node) && node?.data === \"block\"\n\nexport const nodeIsCommentNode = (node) => node?.nodeType === Node.COMMENT_NODE\n\nexport const nodeIsCursorTarget = function(node, { name } = {}) {\n  if (!node) {\n    return\n  }\n  if (nodeIsTextNode(node)) {\n    if (node.data === ZERO_WIDTH_SPACE) {\n      if (name) {\n        return node.parentNode.dataset.trixCursorTarget === name\n      } else {\n        return true\n      }\n    }\n  } else {\n    return nodeIsCursorTarget(node.firstChild)\n  }\n}\n\nexport const nodeIsAttachmentElement = (node) => elementMatchesSelector(node, attachmentSelector)\n\nexport const nodeIsEmptyTextNode = (node) => nodeIsTextNode(node) && node?.data === \"\"\n\nexport const nodeIsTextNode = (node) => node?.nodeType === Node.TEXT_NODE\n", "import browser from \"trix/config/browser\"\nimport { makeElement, removeNode } from \"trix/core/helpers/dom\"\n\nconst input = {\n  level2Enabled: true,\n\n  getLevel() {\n    if (this.level2Enabled && browser.supportsInputEvents) {\n      return 2\n    } else {\n      return 0\n    }\n  },\n  pickFiles(callback) {\n    const input = makeElement(\"input\", { type: \"file\", multiple: true, hidden: true, id: this.fileInputId })\n\n    input.addEventListener(\"change\", () => {\n      callback(input.files)\n      removeNode(input)\n    })\n\n    removeNode(document.getElementById(this.fileInputId))\n    document.body.appendChild(input)\n    input.click()\n  }\n}\n\nexport default input\n", "export default {\n  8: \"backspace\",\n  9: \"tab\",\n  13: \"return\",\n  27: \"escape\",\n  37: \"left\",\n  39: \"right\",\n  46: \"delete\",\n  68: \"d\",\n  72: \"h\",\n  79: \"o\",\n}\n", "export default {\n  removeBlankTableCells: false,\n  tableCellSeparator: \" | \",\n  tableRowSeparator: \"\\n\",\n}\n", "import { attachmentSelector } from \"trix/config/attachments\"\n\nexport default {\n  bold: {\n    tagName: \"strong\",\n    inheritable: true,\n    parser(element) {\n      const style = window.getComputedStyle(element)\n      return style.fontWeight === \"bold\" || style.fontWeight >= 600\n    },\n  },\n  italic: {\n    tagName: \"em\",\n    inheritable: true,\n    parser(element) {\n      const style = window.getComputedStyle(element)\n      return style.fontStyle === \"italic\"\n    },\n  },\n  href: {\n    groupTagName: \"a\",\n    parser(element) {\n      const matchingSelector = `a:not(${attachmentSelector})`\n      const link = element.closest(matchingSelector)\n      if (link) {\n        return link.getAttribute(\"href\")\n      }\n    },\n  },\n  strike: {\n    tagName: \"del\",\n    inheritable: true,\n  },\n  frozen: {\n    style: { backgroundColor: \"highlight\" },\n  },\n}\n", "import lang from \"trix/config/lang\"\n\nexport default {\n  getDefaultHTML() {\n    return `<div class=\"trix-button-row\">\n      <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"${lang.bold}\" tabindex=\"-1\">${lang.bold}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"${lang.italic}\" tabindex=\"-1\">${lang.italic}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"${lang.strike}\" tabindex=\"-1\">${lang.strike}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"${lang.link}\" tabindex=\"-1\">${lang.link}</button>\n      </span>\n\n      <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"${lang.heading1}\" tabindex=\"-1\">${lang.heading1}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"${lang.quote}\" tabindex=\"-1\">${lang.quote}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"${lang.code}\" tabindex=\"-1\">${lang.code}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"${lang.bullets}\" tabindex=\"-1\">${lang.bullets}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"${lang.numbers}\" tabindex=\"-1\">${lang.numbers}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"${lang.outdent}\" tabindex=\"-1\">${lang.outdent}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"${lang.indent}\" tabindex=\"-1\">${lang.indent}</button>\n      </span>\n\n      <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"${lang.attachFiles}\" tabindex=\"-1\">${lang.attachFiles}</button>\n      </span>\n\n      <span class=\"trix-button-group-spacer\"></span>\n\n      <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"${lang.undo}\" tabindex=\"-1\">${lang.undo}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"${lang.redo}\" tabindex=\"-1\">${lang.redo}</button>\n      </span>\n    </div>\n\n    <div class=\"trix-dialogs\" data-trix-dialogs>\n      <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\n        <div class=\"trix-dialog__link-fields\">\n          <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"${lang.urlPlaceholder}\" aria-label=\"${lang.url}\" required data-trix-input>\n          <div class=\"trix-button-group\">\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"${lang.link}\" data-trix-method=\"setAttribute\">\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"${lang.unlink}\" data-trix-method=\"removeAttribute\">\n          </div>\n        </div>\n      </div>\n    </div>`\n  },\n}\n", "const undo = { interval: 5000 }\nexport default undo\n", "export default {\n  attachment: \"attachment\",\n  attachmentCaption: \"attachment__caption\",\n  attachmentCaptionEditor: \"attachment__caption-editor\",\n  attachmentMetadata: \"attachment__metadata\",\n  attachmentMetadataContainer: \"attachment__metadata-container\",\n  attachmentName: \"attachment__name\",\n  attachmentProgress: \"attachment__progress\",\n  attachmentSize: \"attachment__size\",\n  attachmentToolbar: \"attachment__toolbar\",\n  attachmentGallery: \"attachment-gallery\",\n}\n", "export default class BasicObject {\n  static proxyMethod(expression) {\n    const { name, toMethod, toProperty, optional } = parseProxyMethodExpression(expression)\n\n    this.prototype[name] = function() {\n      let subject\n      let object\n\n      if (toMethod) {\n        if (optional) {\n          object = this[toMethod]?.()\n        } else {\n          object = this[toMethod]()\n        }\n      } else if (toProperty) {\n        object = this[toProperty]\n      }\n\n      if (optional) {\n        subject = object?.[name]\n        if (subject) {\n          return apply.call(subject, object, arguments)\n        }\n      } else {\n        subject = object[name]\n        return apply.call(subject, object, arguments)\n      }\n    }\n  }\n}\n\nconst parseProxyMethodExpression = function(expression) {\n  const match = expression.match(proxyMethodExpressionPattern)\n  if (!match) {\n    throw new Error(`can't parse @proxyMethod expression: ${expression}`)\n  }\n\n  const args = { name: match[4] }\n\n  if (match[2] != null) {\n    args.toMethod = match[1]\n  } else {\n    args.toProperty = match[1]\n  }\n\n  if (match[3] != null) {\n    args.optional = true\n  }\n\n  return args\n}\n\nconst { apply } = Function.prototype\n\nconst proxyMethodExpressionPattern = new RegExp(\"\\\n^\\\n(.+?)\\\n(\\\\(\\\\))?\\\n(\\\\?)?\\\n\\\\.\\\n(.+?)\\\n$\\\n\")\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class UTF16String extends BasicObject {\n  static box(value = \"\") {\n    if (value instanceof this) {\n      return value\n    } else {\n      return this.fromUCS2String(value?.toString())\n    }\n  }\n\n  static fromUCS2String(ucs2String) {\n    return new this(ucs2String, ucs2decode(ucs2String))\n  }\n\n  static fromCodepoints(codepoints) {\n    return new this(ucs2encode(codepoints), codepoints)\n  }\n\n  constructor(ucs2String, codepoints) {\n    super(...arguments)\n    this.ucs2String = ucs2String\n    this.codepoints = codepoints\n    this.length = this.codepoints.length\n    this.ucs2Length = this.ucs2String.length\n  }\n\n  offsetToUCS2Offset(offset) {\n    return ucs2encode(this.codepoints.slice(0, Math.max(0, offset))).length\n  }\n\n  offsetFromUCS2Offset(ucs2Offset) {\n    return ucs2decode(this.ucs2String.slice(0, Math.max(0, ucs2Offset))).length\n  }\n\n  slice() {\n    return this.constructor.fromCodepoints(this.codepoints.slice(...arguments))\n  }\n\n  charAt(offset) {\n    return this.slice(offset, offset + 1)\n  }\n\n  isEqualTo(value) {\n    return this.constructor.box(value).ucs2String === this.ucs2String\n  }\n\n  toJSON() {\n    return this.ucs2String\n  }\n\n  getCacheKey() {\n    return this.ucs2String\n  }\n\n  toString() {\n    return this.ucs2String\n  }\n}\n\nconst hasArrayFrom = Array.from?.(\"\\ud83d\\udc7c\").length === 1\nconst hasStringCodePointAt = \" \".codePointAt?.(0) != null\nconst hasStringFromCodePoint = String.fromCodePoint?.(32, 128124) === \" \\ud83d\\udc7c\"\n\n// UCS-2 conversion helpers ported from Mathias Bynens' Punycode.js:\n// https://github.com/bestiejs/punycode.js#punycodeucs2\n\nlet ucs2decode, ucs2encode\n\n// Creates an array containing the numeric code points of each Unicode\n// character in the string. While JavaScript uses UCS-2 internally,\n// this function will convert a pair of surrogate halves (each of which\n// UCS-2 exposes as separate characters) into a single code point,\n// matching UTF-16.\nif (hasArrayFrom && hasStringCodePointAt) {\n  ucs2decode = (string) => Array.from(string).map((char) => char.codePointAt(0))\n} else {\n  ucs2decode = function(string) {\n    const output = []\n    let counter = 0\n    const { length } = string\n\n    while (counter < length) {\n      let value = string.charCodeAt(counter++)\n      if (0xd800 <= value && value <= 0xdbff && counter < length) {\n        // high surrogate, and there is a next character\n        const extra = string.charCodeAt(counter++)\n        if ((extra & 0xfc00) === 0xdc00) {\n          // low surrogate\n          value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000\n        } else {\n          // unmatched surrogate; only append this code unit, in case the\n          // next code unit is the high surrogate of a surrogate pair\n          counter--\n        }\n      }\n      output.push(value)\n    }\n\n    return output\n  }\n}\n\n// Creates a string based on an array of numeric code points.\nif (hasStringFromCodePoint) {\n  ucs2encode = (array) => String.fromCodePoint(...Array.from(array || []))\n} else {\n  ucs2encode = function(array) {\n    const characters = (() => {\n      const result = []\n\n      Array.from(array).forEach((value) => {\n        let output = \"\"\n        if (value > 0xffff) {\n          value -= 0x10000\n          output += String.fromCharCode(value >>> 10 & 0x3ff | 0xd800)\n          value = 0xdc00 | value & 0x3ff\n        }\n        result.push(output + String.fromCharCode(value))\n      })\n\n      return result\n    })()\n\n    return characters.join(\"\")\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\n\nlet id = 0\n\nexport default class TrixObject extends BasicObject {\n  static fromJSONString(jsonString) {\n    return this.fromJSON(JSON.parse(jsonString))\n  }\n\n  constructor() {\n    super(...arguments)\n    this.id = ++id\n  }\n\n  hasSameConstructorAs(object) {\n    return this.constructor === object?.constructor\n  }\n\n  isEqualTo(object) {\n    return this === object\n  }\n\n  inspect() {\n    const parts = []\n    const contents = this.contentsForInspection() || {}\n\n    for (const key in contents) {\n      const value = contents[key]\n      parts.push(`${key}=${value}`)\n    }\n\n    return `#<${this.constructor.name}:${this.id}${parts.length ? ` ${parts.join(\", \")}` : \"\"}>`\n  }\n\n  contentsForInspection() {}\n\n  toJSONString() {\n    return JSON.stringify(this)\n  }\n\n  toUTF16String() {\n    return UTF16String.box(this)\n  }\n\n  getCacheKey() {\n    return this.id.toString()\n  }\n}\n", "/* eslint-disable\n    id-length,\n*/\nexport const arraysAreEqual = function(a = [], b = []) {\n  if (a.length !== b.length) {\n    return false\n  }\n  for (let index = 0; index < a.length; index++) {\n    const value = a[index]\n    if (value !== b[index]) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const arrayStartsWith = (a = [], b = []) => arraysAreEqual(a.slice(0, b.length), b)\n\nexport const spliceArray = function(array, ...args) {\n  const result = array.slice(0)\n  result.splice(...args)\n  return result\n}\n\nexport const summarizeArrayChange = function(oldArray = [], newArray = []) {\n  const added = []\n  const removed = []\n\n  const existingValues = new Set()\n\n  oldArray.forEach((value) => {\n    existingValues.add(value)\n  })\n\n  const currentValues = new Set()\n\n  newArray.forEach((value) => {\n    currentValues.add(value)\n    if (!existingValues.has(value)) {\n      added.push(value)\n    }\n  })\n\n  oldArray.forEach((value) => {\n    if (!currentValues.has(value)) {\n      removed.push(value)\n    }\n  })\n\n  return { added, removed }\n}\n", "import { makeElement } from \"trix/core/helpers/dom\"\n\n// https://github.com/mathiasbynens/unicode-2.1.8/blob/master/Bidi_Class/Right_To_Left/regex.js\nconst RTL_PATTERN =\n  /[\\u05BE\\u05C0\\u05C3\\u05D0-\\u05EA\\u05F0-\\u05F4\\u061B\\u061F\\u0621-\\u063A\\u0640-\\u064A\\u066D\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D5\\u06E5\\u06E6\\u200F\\u202B\\u202E\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC]/\n\nexport const getDirection = (function() {\n  const input = makeElement(\"input\", { dir: \"auto\", name: \"x\", dirName: \"x.dir\" })\n  const textArea = makeElement(\"textarea\", { dir: \"auto\", name: \"y\", dirName: \"y.dir\" })\n  const form = makeElement(\"form\")\n  form.appendChild(input)\n  form.appendChild(textArea)\n\n  const supportsDirName = (function() {\n    try {\n      return new FormData(form).has(textArea.dirName)\n    } catch (error) {\n      return false\n    }\n  })()\n\n  const supportsDirSelector = (function() {\n    try {\n      return input.matches(\":dir(ltr),:dir(rtl)\")\n    } catch (error) {\n      return false\n    }\n  })()\n\n  if (supportsDirName) {\n    return function(string) {\n      textArea.value = string\n      return new FormData(form).get(textArea.dirName)\n    }\n  } else if (supportsDirSelector) {\n    return function(string) {\n      input.value = string\n      if (input.matches(\":dir(rtl)\")) {\n        return \"rtl\"\n      } else {\n        return \"ltr\"\n      }\n    }\n  } else {\n    return function(string) {\n      const char = string.trim().charAt(0)\n      if (RTL_PATTERN.test(char)) {\n        return \"rtl\"\n      } else {\n        return \"ltr\"\n      }\n    }\n  }\n})()\n", "import * as config from \"trix/config\"\n\nlet allAttributeNames = null\nlet blockAttributeNames = null\nlet textAttributeNames = null\nlet listAttributeNames = null\n\nexport const getAllAttributeNames = () => {\n  if (!allAttributeNames) {\n    allAttributeNames = getTextAttributeNames().concat(getBlockAttributeNames())\n  }\n  return allAttributeNames\n}\n\nexport const getBlockConfig = (attributeName) => config.blockAttributes[attributeName]\n\nexport const getBlockAttributeNames = () => {\n  if (!blockAttributeNames) {\n    blockAttributeNames = Object.keys(config.blockAttributes)\n  }\n  return blockAttributeNames\n}\n\nexport const getTextConfig = (attributeName) => config.textAttributes[attributeName]\n\nexport const getTextAttributeNames = () => {\n  if (!textAttributeNames) {\n    textAttributeNames = Object.keys(config.textAttributes)\n  }\n  return textAttributeNames\n}\n\nexport const getListAttributeNames = () => {\n  if (!listAttributeNames) {\n    listAttributeNames = []\n    for (const key in config.blockAttributes) {\n      const { listAttribute } = config.blockAttributes[key]\n      if (listAttribute != null) {\n        listAttributeNames.push(listAttribute)\n      }\n    }\n  }\n  return listAttributeNames\n}\n", "/* eslint-disable\n*/\nexport const installDefaultCSSForTagName = function(tagName, defaultCSS) {\n  const styleElement = insertStyleElementForTagName(tagName)\n  styleElement.textContent = defaultCSS.replace(/%t/g, tagName)\n}\n\nconst insertStyleElementForTagName = function(tagName) {\n  const element = document.createElement(\"style\")\n  element.setAttribute(\"type\", \"text/css\")\n  element.setAttribute(\"data-tag-name\", tagName.toLowerCase())\n  const nonce = getCSPNonce()\n  if (nonce) {\n    element.setAttribute(\"nonce\", nonce)\n  }\n  document.head.insertBefore(element, document.head.firstChild)\n  return element\n}\n\nconst getCSPNonce = function() {\n  const element = getMetaElement(\"trix-csp-nonce\") || getMetaElement(\"csp-nonce\")\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n\nconst getMetaElement = (name) => document.head.querySelector(`meta[name=${name}]`)\n", "const testTransferData = { \"application/x-trix-feature-detection\": \"test\" }\n\nexport const dataTransferIsPlainText = function(dataTransfer) {\n  const text = dataTransfer.getData(\"text/plain\")\n  const html = dataTransfer.getData(\"text/html\")\n\n  if (text && html) {\n    const { body } = new DOMParser().parseFromString(html, \"text/html\")\n    if (body.textContent === text) {\n      return !body.querySelector(\"*\")\n    }\n  } else {\n    return text?.length\n  }\n}\n\nexport const dataTransferIsWritable = function(dataTransfer) {\n  if (!dataTransfer?.setData) return false\n\n  for (const key in testTransferData) {\n    const value = testTransferData[key]\n\n    try {\n      dataTransfer.setData(key, value)\n      if (!dataTransfer.getData(key) === value) return false\n    } catch (error) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const keyEventIsKeyboardCommand = (function() {\n  if (/Mac|^iP/.test(navigator.platform)) {\n    return (event) => event.metaKey\n  } else {\n    return (event) => event.ctrlKey\n  }\n})()\n", "export const defer = (fn) => setTimeout(fn, 1)\n", "/* eslint-disable\n    id-length,\n*/\nexport const copyObject = function(object = {}) {\n  const result = {}\n  for (const key in object) {\n    const value = object[key]\n    result[key] = value\n  }\n  return result\n}\n\nexport const objectsAreEqual = function(a = {}, b = {}) {\n  if (Object.keys(a).length !== Object.keys(b).length) {\n    return false\n  }\n  for (const key in a) {\n    const value = a[key]\n    if (value !== b[key]) {\n      return false\n    }\n  }\n  return true\n}\n", "import { copyObject, objectsAreEqual } from \"trix/core/helpers/objects\"\n\nexport const normalizeRange = function(range) {\n  if (range == null) return\n\n  if (!Array.isArray(range)) {\n    range = [ range, range ]\n  }\n  return [ copyValue(range[0]), copyValue(range[1] != null ? range[1] : range[0]) ]\n}\n\nexport const rangeIsCollapsed = function(range) {\n  if (range == null) return\n\n  const [ start, end ] = normalizeRange(range)\n  return rangeValuesAreEqual(start, end)\n}\n\nexport const rangesAreEqual = function(leftRange, rightRange) {\n  if (leftRange == null || rightRange == null) return\n\n  const [ leftStart, leftEnd ] = normalizeRange(leftRange)\n  const [ rightStart, rightEnd ] = normalizeRange(rightRange)\n  return rangeValuesAreEqual(leftStart, rightStart) && rangeValuesAreEqual(leftEnd, rightEnd)\n}\n\nconst copyValue = function(value) {\n  if (typeof value === \"number\") {\n    return value\n  } else {\n    return copyObject(value)\n  }\n}\n\nconst rangeValuesAreEqual = function(left, right) {\n  if (typeof left === \"number\") {\n    return left === right\n  } else {\n    return objectsAreEqual(left, right)\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class SelectionChangeObserver extends BasicObject {\n  constructor() {\n    super(...arguments)\n    this.update = this.update.bind(this)\n    this.selectionManagers = []\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true\n      document.addEventListener(\"selectionchange\", this.update, true)\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false\n      return document.removeEventListener(\"selectionchange\", this.update, true)\n    }\n  }\n\n  registerSelectionManager(selectionManager) {\n    if (!this.selectionManagers.includes(selectionManager)) {\n      this.selectionManagers.push(selectionManager)\n      return this.start()\n    }\n  }\n\n  unregisterSelectionManager(selectionManager) {\n    this.selectionManagers = this.selectionManagers.filter((sm) => sm !== selectionManager)\n    if (this.selectionManagers.length === 0) {\n      return this.stop()\n    }\n  }\n\n  notifySelectionManagersOfSelectionChange() {\n    return this.selectionManagers.map((selectionManager) => selectionManager.selectionDidChange())\n  }\n\n  update() {\n    this.notifySelectionManagersOfSelectionChange()\n  }\n\n  reset() {\n    this.update()\n  }\n}\n\nexport const selectionChangeObserver = new SelectionChangeObserver()\n\nexport const getDOMSelection = function() {\n  const selection = window.getSelection()\n  if (selection.rangeCount > 0) {\n    return selection\n  }\n}\n\nexport const getDOMRange = function() {\n  const domRange = getDOMSelection()?.getRangeAt(0)\n  if (domRange) {\n    if (!domRangeIsPrivate(domRange)) {\n      return domRange\n    }\n  }\n}\n\nexport const setDOMRange = function(domRange) {\n  const selection = window.getSelection()\n  selection.removeAllRanges()\n  selection.addRange(domRange)\n  return selectionChangeObserver.update()\n}\n\n// In Firefox, clicking certain <input> elements changes the selection to a\n// private element used to draw its UI. Attempting to access properties of those\n// elements throws an error.\n// https://bugzilla.mozilla.org/show_bug.cgi?id=208427\nconst domRangeIsPrivate = (domRange) => nodeIsPrivate(domRange.startContainer) || nodeIsPrivate(domRange.endContainer)\n\nconst nodeIsPrivate = (node) => !Object.getPrototypeOf(node)\n", "/* eslint-disable\n    id-length,\n    no-useless-escape,\n*/\nimport { NON_BREAKING_SPACE, ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\n\nexport const normalizeSpaces = (string) =>\n  string.replace(new RegExp(`${ZERO_WIDTH_SPACE}`, \"g\"), \"\").replace(new RegExp(`${NON_BREAKING_SPACE}`, \"g\"), \" \")\n\nexport const normalizeNewlines = (string) => string.replace(/\\r\\n?/g, \"\\n\")\n\nexport const breakableWhitespacePattern = new RegExp(`[^\\\\S${NON_BREAKING_SPACE}]`)\n\nexport const squishBreakableWhitespace = (string) =>\n  string\n    // Replace all breakable whitespace characters with a space\n    .replace(new RegExp(`${breakableWhitespacePattern.source}`, \"g\"), \" \")\n    // Replace two or more spaces with a single space\n    .replace(/\\ {2,}/g, \" \")\n\nexport const summarizeStringChange = function(oldString, newString) {\n  let added, removed\n  oldString = UTF16String.box(oldString)\n  newString = UTF16String.box(newString)\n\n  if (newString.length < oldString.length) {\n    [ removed, added ] = utf16StringDifferences(oldString, newString)\n  } else {\n    [ added, removed ] = utf16StringDifferences(newString, oldString)\n  }\n\n  return { added, removed }\n}\n\nconst utf16StringDifferences = function(a, b) {\n  if (a.isEqualTo(b)) {\n    return [ \"\", \"\" ]\n  }\n\n  const diffA = utf16StringDifference(a, b)\n  const { length } = diffA.utf16String\n\n  let diffB\n\n  if (length) {\n    const { offset } = diffA\n    const codepoints = a.codepoints.slice(0, offset).concat(a.codepoints.slice(offset + length))\n    diffB = utf16StringDifference(b, UTF16String.fromCodepoints(codepoints))\n  } else {\n    diffB = utf16StringDifference(b, a)\n  }\n\n  return [ diffA.utf16String.toString(), diffB.utf16String.toString() ]\n}\n\nconst utf16StringDifference = function(a, b) {\n  let leftIndex = 0\n  let rightIndexA = a.length\n  let rightIndexB = b.length\n\n  while (leftIndex < rightIndexA && a.charAt(leftIndex).isEqualTo(b.charAt(leftIndex))) {\n    leftIndex++\n  }\n\n  while (rightIndexA > leftIndex + 1 && a.charAt(rightIndexA - 1).isEqualTo(b.charAt(rightIndexB - 1))) {\n    rightIndexA--\n    rightIndexB--\n  }\n\n  return {\n    utf16String: a.slice(leftIndex, rightIndexA),\n    offset: leftIndex,\n  }\n}\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport { arraysAreEqual } from \"trix/core/helpers\"\n\nexport default class Hash extends TrixObject {\n  static fromCommonAttributesOfObjects(objects = []) {\n    if (!objects.length) {\n      return new this()\n    }\n    let hash = box(objects[0])\n    let keys = hash.getKeys()\n\n    objects.slice(1).forEach((object) => {\n      keys = hash.getKeysCommonToHash(box(object))\n      hash = hash.slice(keys)\n    })\n\n    return hash\n  }\n\n  static box(values) {\n    return box(values)\n  }\n\n  constructor(values = {}) {\n    super(...arguments)\n    this.values = copy(values)\n  }\n\n  add(key, value) {\n    return this.merge(object(key, value))\n  }\n\n  remove(key) {\n    return new Hash(copy(this.values, key))\n  }\n\n  get(key) {\n    return this.values[key]\n  }\n\n  has(key) {\n    return key in this.values\n  }\n\n  merge(values) {\n    return new Hash(merge(this.values, unbox(values)))\n  }\n\n  slice(keys) {\n    const values = {}\n\n    Array.from(keys).forEach((key) => {\n      if (this.has(key)) {\n        values[key] = this.values[key]\n      }\n    })\n\n    return new Hash(values)\n  }\n\n  getKeys() {\n    return Object.keys(this.values)\n  }\n\n  getKeysCommonToHash(hash) {\n    hash = box(hash)\n    return this.getKeys().filter((key) => this.values[key] === hash.values[key])\n  }\n\n  isEqualTo(values) {\n    return arraysAreEqual(this.toArray(), box(values).toArray())\n  }\n\n  isEmpty() {\n    return this.getKeys().length === 0\n  }\n\n  toArray() {\n    if (!this.array) {\n      const result = []\n      for (const key in this.values) {\n        const value = this.values[key]\n        result.push(result.push(key, value))\n      }\n      this.array = result.slice(0)\n    }\n\n    return this.array\n  }\n\n  toObject() {\n    return copy(this.values)\n  }\n\n  toJSON() {\n    return this.toObject()\n  }\n\n  contentsForInspection() {\n    return { values: JSON.stringify(this.values) }\n  }\n}\n\nconst object = function(key, value) {\n  const result = {}\n  result[key] = value\n  return result\n}\n\nconst merge = function(object, values) {\n  const result = copy(object)\n  for (const key in values) {\n    const value = values[key]\n    result[key] = value\n  }\n  return result\n}\n\nconst copy = function(object, keyToRemove) {\n  const result = {}\n  const sortedKeys = Object.keys(object).sort()\n\n  sortedKeys.forEach((key) => {\n    if (key !== keyToRemove) {\n      result[key] = object[key]\n    }\n  })\n\n  return result\n}\n\nconst box = function(object) {\n  if (object instanceof Hash) {\n    return object\n  } else {\n    return new Hash(object)\n  }\n}\n\nconst unbox = function(object) {\n  if (object instanceof Hash) {\n    return object.values\n  } else {\n    return object\n  }\n}\n", "export default class ObjectGroup {\n  static groupObjects(ungroupedObjects = [], { depth, asTree } = {}) {\n    let group\n    if (asTree) {\n      if (depth == null) {\n        depth = 0\n      }\n    }\n    const objects = []\n\n    Array.from(ungroupedObjects).forEach((object) => {\n      if (group) {\n        if (object.canBeGrouped?.(depth) && group[group.length - 1].canBeGroupedWith?.(object, depth)) {\n          group.push(object)\n          return\n        } else {\n          objects.push(new this(group, { depth, asTree }))\n          group = null\n        }\n      }\n\n      if (object.canBeGrouped?.(depth)) {\n        group = [ object ]\n      } else {\n        objects.push(object)\n      }\n    })\n\n    if (group) {\n      objects.push(new this(group, { depth, asTree }))\n    }\n    return objects\n  }\n\n  constructor(objects = [], { depth, asTree }) {\n    this.objects = objects\n    if (asTree) {\n      this.depth = depth\n      this.objects = this.constructor.groupObjects(this.objects, { asTree, depth: this.depth + 1 })\n    }\n  }\n\n  getObjects() {\n    return this.objects\n  }\n\n  getDepth() {\n    return this.depth\n  }\n\n  getCacheKey() {\n    const keys = [ \"objectGroup\" ]\n    Array.from(this.getObjects()).forEach((object) => {\n      keys.push(object.getCacheKey())\n    })\n    return keys.join(\"/\")\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class ObjectMap extends BasicObject {\n  constructor(objects = []) {\n    super(...arguments)\n    this.objects = {}\n\n    Array.from(objects).forEach((object) => {\n      const hash = JSON.stringify(object)\n      if (this.objects[hash] == null) {\n        this.objects[hash] = object\n      }\n    })\n  }\n\n  find(object) {\n    const hash = JSON.stringify(object)\n    return this.objects[hash]\n  }\n}\n", "export default class ElementStore {\n  constructor(elements) {\n    this.reset(elements)\n  }\n\n  add(element) {\n    const key = getKey(element)\n    this.elements[key] = element\n  }\n\n  remove(element) {\n    const key = getKey(element)\n    const value = this.elements[key]\n    if (value) {\n      delete this.elements[key]\n      return value\n    }\n  }\n\n  reset(elements = []) {\n    this.elements = {}\n    Array.from(elements).forEach((element) => {\n      this.add(element)\n    })\n    return elements\n  }\n}\n\nconst getKey = (element) => element.dataset.trixStoreKey\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class Operation extends BasicObject {\n  isPerforming() {\n    return this.performing === true\n  }\n\n  hasPerformed() {\n    return this.performed === true\n  }\n\n  hasSucceeded() {\n    return this.performed && this.succeeded\n  }\n\n  hasFailed() {\n    return this.performed && !this.succeeded\n  }\n\n  getPromise() {\n    if (!this.promise) {\n      this.promise = new Promise((resolve, reject) => {\n        this.performing = true\n        return this.perform((succeeded, result) => {\n          this.succeeded = succeeded\n          this.performing = false\n          this.performed = true\n\n          if (this.succeeded) {\n            resolve(result)\n          } else {\n            reject(result)\n          }\n        })\n      })\n    }\n\n    return this.promise\n  }\n\n  perform(callback) {\n    return callback(false)\n  }\n\n  release() {\n    this.promise?.cancel?.()\n    this.promise = null\n    this.performing = null\n    this.performed = null\n    this.succeeded = null\n  }\n}\n\nOperation.proxyMethod(\"getPromise().then\")\nOperation.proxyMethod(\"getPromise().catch\")\n", "import BasicObject from \"trix/core/basic_object\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\n\nexport default class ObjectView extends BasicObject {\n  constructor(object, options = {}) {\n    super(...arguments)\n    this.object = object\n    this.options = options\n    this.childViews = []\n    this.rootView = this\n  }\n\n  getNodes() {\n    if (!this.nodes) { this.nodes = this.createNodes() }\n    return this.nodes.map((node) => node.cloneNode(true))\n  }\n\n  invalidate() {\n    this.nodes = null\n    this.childViews = []\n    return this.parentView?.invalidate()\n  }\n\n  invalidateViewForObject(object) {\n    return this.findViewForObject(object)?.invalidate()\n  }\n\n  findOrCreateCachedChildView(viewClass, object, options) {\n    let view = this.getCachedViewForObject(object)\n    if (view) {\n      this.recordChildView(view)\n    } else {\n      view = this.createChildView(...arguments)\n      this.cacheViewForObject(view, object)\n    }\n    return view\n  }\n\n  createChildView(viewClass, object, options = {}) {\n    if (object instanceof ObjectGroup) {\n      options.viewClass = viewClass\n      viewClass = ObjectGroupView\n    }\n\n    const view = new viewClass(object, options)\n    return this.recordChildView(view)\n  }\n\n  recordChildView(view) {\n    view.parentView = this\n    view.rootView = this.rootView\n    this.childViews.push(view)\n    return view\n  }\n\n  getAllChildViews() {\n    let views = []\n\n    this.childViews.forEach((childView) => {\n      views.push(childView)\n      views = views.concat(childView.getAllChildViews())\n    })\n\n    return views\n  }\n\n  findElement() {\n    return this.findElementForObject(this.object)\n  }\n\n  findElementForObject(object) {\n    const id = object?.id\n    if (id) {\n      return this.rootView.element.querySelector(`[data-trix-id='${id}']`)\n    }\n  }\n\n  findViewForObject(object) {\n    for (const view of this.getAllChildViews()) {\n      if (view.object === object) {\n        return view\n      }\n    }\n  }\n\n  getViewCache() {\n    if (this.rootView === this) {\n      if (this.isViewCachingEnabled()) {\n        if (!this.viewCache) { this.viewCache = {} }\n        return this.viewCache\n      }\n    } else {\n      return this.rootView.getViewCache()\n    }\n  }\n\n  isViewCachingEnabled() {\n    return this.shouldCacheViews !== false\n  }\n\n  enableViewCaching() {\n    this.shouldCacheViews = true\n  }\n\n  disableViewCaching() {\n    this.shouldCacheViews = false\n  }\n\n  getCachedViewForObject(object) {\n    return this.getViewCache()?.[object.getCacheKey()]\n  }\n\n  cacheViewForObject(view, object) {\n    const cache = this.getViewCache()\n    if (cache) {\n      cache[object.getCacheKey()] = view\n    }\n  }\n\n  garbageCollectCachedViews() {\n    const cache = this.getViewCache()\n    if (cache) {\n      const views = this.getAllChildViews().concat(this)\n      const objectKeys = views.map((view) => view.object.getCacheKey())\n      for (const key in cache) {\n        if (!objectKeys.includes(key)) {\n          delete cache[key]\n        }\n      }\n    }\n  }\n}\n\nexport class ObjectGroupView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.objectGroup = this.object\n    this.viewClass = this.options.viewClass\n    delete this.options.viewClass\n  }\n\n  getChildViews() {\n    if (!this.childViews.length) {\n      Array.from(this.objectGroup.getObjects()).forEach((object) => {\n        this.findOrCreateCachedChildView(this.viewClass, object, this.options)\n      })\n    }\n    return this.childViews\n  }\n\n  createNodes() {\n    const element = this.createContainerElement()\n\n    this.getChildViews().forEach((view) => {\n      Array.from(view.getNodes()).forEach((node) => {\n        element.appendChild(node)\n      })\n    })\n\n    return [ element ]\n  }\n\n  createContainerElement(depth = this.objectGroup.getDepth()) {\n    return this.getChildViews()[0].createContainerElement(depth)\n  }\n}\n", "import * as config from \"trix/config\"\nimport { ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport { copyObject, makeElement } from \"trix/core/helpers\"\nimport ObjectView from \"trix/views/object_view\"\n\nconst { css } = config\n\nexport default class AttachmentView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.attachment = this.object\n    this.attachment.uploadProgressDelegate = this\n    this.attachmentPiece = this.options.piece\n  }\n\n  createContentNodes() {\n    return []\n  }\n\n  createNodes() {\n    let innerElement\n    const figure = innerElement = makeElement({\n      tagName: \"figure\",\n      className: this.getClassName(),\n      data: this.getData(),\n      editable: false,\n    })\n\n    const href = this.getHref()\n    if (href) {\n      innerElement = makeElement({ tagName: \"a\", editable: false, attributes: { href, tabindex: -1 } })\n      figure.appendChild(innerElement)\n    }\n\n    if (this.attachment.hasContent()) {\n      innerElement.innerHTML = this.attachment.getContent()\n    } else {\n      this.createContentNodes().forEach((node) => {\n        innerElement.appendChild(node)\n      })\n    }\n\n    innerElement.appendChild(this.createCaptionElement())\n\n    if (this.attachment.isPending()) {\n      this.progressElement = makeElement({\n        tagName: \"progress\",\n        attributes: {\n          class: css.attachmentProgress,\n          value: this.attachment.getUploadProgress(),\n          max: 100,\n        },\n        data: {\n          trixMutable: true,\n          trixStoreKey: [ \"progressElement\", this.attachment.id ].join(\"/\"),\n        },\n      })\n\n      figure.appendChild(this.progressElement)\n    }\n\n    return [ createCursorTarget(\"left\"), figure, createCursorTarget(\"right\") ]\n  }\n\n  createCaptionElement() {\n    const figcaption = makeElement({ tagName: \"figcaption\", className: css.attachmentCaption })\n    const caption = this.attachmentPiece.getCaption()\n    if (caption) {\n      figcaption.classList.add(`${css.attachmentCaption}--edited`)\n      figcaption.textContent = caption\n    } else {\n      let name, size\n      const captionConfig = this.getCaptionConfig()\n      if (captionConfig.name) {\n        name = this.attachment.getFilename()\n      }\n      if (captionConfig.size) {\n        size = this.attachment.getFormattedFilesize()\n      }\n\n      if (name) {\n        const nameElement = makeElement({ tagName: \"span\", className: css.attachmentName, textContent: name })\n        figcaption.appendChild(nameElement)\n      }\n\n      if (size) {\n        if (name) {\n          figcaption.appendChild(document.createTextNode(\" \"))\n        }\n        const sizeElement = makeElement({ tagName: \"span\", className: css.attachmentSize, textContent: size })\n        figcaption.appendChild(sizeElement)\n      }\n    }\n\n    return figcaption\n  }\n\n  getClassName() {\n    const names = [ css.attachment, `${css.attachment}--${this.attachment.getType()}` ]\n    const extension = this.attachment.getExtension()\n    if (extension) {\n      names.push(`${css.attachment}--${extension}`)\n    }\n    return names.join(\" \")\n  }\n\n  getData() {\n    const data = {\n      trixAttachment: JSON.stringify(this.attachment),\n      trixContentType: this.attachment.getContentType(),\n      trixId: this.attachment.id,\n    }\n\n    const { attributes } = this.attachmentPiece\n    if (!attributes.isEmpty()) {\n      data.trixAttributes = JSON.stringify(attributes)\n    }\n\n    if (this.attachment.isPending()) {\n      data.trixSerialize = false\n    }\n\n    return data\n  }\n\n  getHref() {\n    if (!htmlContainsTagName(this.attachment.getContent(), \"a\")) {\n      return this.attachment.getHref()\n    }\n  }\n\n  getCaptionConfig() {\n    const type = this.attachment.getType()\n    const captionConfig = copyObject(config.attachments[type]?.caption)\n    if (type === \"file\") {\n      captionConfig.name = true\n    }\n    return captionConfig\n  }\n\n  findProgressElement() {\n    return this.findElement()?.querySelector(\"progress\")\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeUploadProgress() {\n    const value = this.attachment.getUploadProgress()\n    const progressElement = this.findProgressElement()\n    if (progressElement) {\n      progressElement.value = value\n    }\n  }\n}\n\nconst createCursorTarget = (name) =>\n  makeElement({\n    tagName: \"span\",\n    textContent: ZERO_WIDTH_SPACE,\n    data: {\n      trixCursorTarget: name,\n      trixSerialize: false,\n    },\n  })\n\nconst htmlContainsTagName = function(html, tagName) {\n  const div = makeElement(\"div\")\n  div.innerHTML = html || \"\"\n  return div.querySelector(tagName)\n}\n", "import * as config from \"trix/config\"\nimport { makeElement } from \"trix/core/helpers\"\n\nimport AttachmentView from \"trix/views/attachment_view\"\n\nexport default class PreviewableAttachmentView extends AttachmentView {\n  constructor() {\n    super(...arguments)\n    this.attachment.previewDelegate = this\n  }\n\n  createContentNodes() {\n    this.image = makeElement({\n      tagName: \"img\",\n      attributes: {\n        src: \"\",\n      },\n      data: {\n        trixMutable: true,\n      },\n    })\n\n    this.refresh(this.image)\n    return [ this.image ]\n  }\n\n  createCaptionElement() {\n    const figcaption = super.createCaptionElement(...arguments)\n    if (!figcaption.textContent) {\n      figcaption.setAttribute(\"data-trix-placeholder\", config.lang.captionPlaceholder)\n    }\n    return figcaption\n  }\n\n  refresh(image) {\n    if (!image) { image = this.findElement()?.querySelector(\"img\") }\n    if (image) {\n      return this.updateAttributesForImage(image)\n    }\n  }\n\n  updateAttributesForImage(image) {\n    const url = this.attachment.getURL()\n    const previewURL = this.attachment.getPreviewURL()\n    image.src = previewURL || url\n\n    if (previewURL === url) {\n      image.removeAttribute(\"data-trix-serialized-attributes\")\n    } else {\n      const serializedAttributes = JSON.stringify({ src: url })\n      image.setAttribute(\"data-trix-serialized-attributes\", serializedAttributes)\n    }\n\n    const width = this.attachment.getWidth()\n    const height = this.attachment.getHeight()\n\n    if (width != null) {\n      image.width = width\n    }\n    if (height != null) {\n      image.height = height\n    }\n\n    const storeKey = [ \"imageElement\", this.attachment.id, image.src, image.width, image.height ].join(\"/\")\n    image.dataset.trixStoreKey = storeKey\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeAttributes() {\n    this.refresh(this.image)\n    return this.refresh()\n  }\n}\n", "/* eslint-disable\n    no-useless-escape,\n    no-var,\n*/\nimport { NON_BREAKING_SPACE } from \"trix/constants\"\n\nimport ObjectView from \"trix/views/object_view\"\nimport AttachmentView from \"trix/views/attachment_view\"\nimport PreviewableAttachmentView from \"trix/views/previewable_attachment_view\"\n\nimport { findInnerElement, getTextConfig, makeElement } from \"trix/core/helpers\"\n\nexport default class PieceView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.piece = this.object\n    this.attributes = this.piece.getAttributes()\n    this.textConfig = this.options.textConfig\n    this.context = this.options.context\n\n    if (this.piece.attachment) {\n      this.attachment = this.piece.attachment\n    } else {\n      this.string = this.piece.toString()\n    }\n  }\n\n  createNodes() {\n    let nodes = this.attachment ? this.createAttachmentNodes() : this.createStringNodes()\n    const element = this.createElement()\n    if (element) {\n      const innerElement = findInnerElement(element)\n      Array.from(nodes).forEach((node) => {\n        innerElement.appendChild(node)\n      })\n      nodes = [ element ]\n    }\n    return nodes\n  }\n\n  createAttachmentNodes() {\n    const constructor = this.attachment.isPreviewable() ? PreviewableAttachmentView : AttachmentView\n\n    const view = this.createChildView(constructor, this.piece.attachment, { piece: this.piece })\n    return view.getNodes()\n  }\n\n  createStringNodes() {\n    if (this.textConfig?.plaintext) {\n      return [ document.createTextNode(this.string) ]\n    } else {\n      const nodes = []\n      const iterable = this.string.split(\"\\n\")\n      for (let index = 0; index < iterable.length; index++) {\n        const substring = iterable[index]\n        if (index > 0) {\n          const element = makeElement(\"br\")\n          nodes.push(element)\n        }\n\n        if (substring.length) {\n          const node = document.createTextNode(this.preserveSpaces(substring))\n          nodes.push(node)\n        }\n      }\n      return nodes\n    }\n  }\n\n  createElement() {\n    let element, key, value\n    const styles = {}\n\n    for (key in this.attributes) {\n      value = this.attributes[key]\n      const config = getTextConfig(key)\n      if (config) {\n        if (config.tagName) {\n          var innerElement\n          const pendingElement = makeElement(config.tagName)\n\n          if (innerElement) {\n            innerElement.appendChild(pendingElement)\n            innerElement = pendingElement\n          } else {\n            element = innerElement = pendingElement\n          }\n        }\n\n        if (config.styleProperty) {\n          styles[config.styleProperty] = value\n        }\n\n        if (config.style) {\n          for (key in config.style) {\n            value = config.style[key]\n            styles[key] = value\n          }\n        }\n      }\n    }\n\n    if (Object.keys(styles).length) {\n      if (!element) { element = makeElement(\"span\") }\n      for (key in styles) {\n        value = styles[key]\n        element.style[key] = value\n      }\n    }\n    return element\n  }\n\n  createContainerElement() {\n    for (const key in this.attributes) {\n      const value = this.attributes[key]\n      const config = getTextConfig(key)\n      if (config) {\n        if (config.groupTagName) {\n          const attributes = {}\n          attributes[key] = value\n          return makeElement(config.groupTagName, attributes)\n        }\n      }\n    }\n  }\n\n  preserveSpaces(string) {\n    if (this.context.isLast) {\n      string = string.replace(/\\ $/, NON_BREAKING_SPACE)\n    }\n\n    string = string\n      .replace(/(\\S)\\ {3}(\\S)/g, `$1 ${NON_BREAKING_SPACE} $2`)\n      .replace(/\\ {2}/g, `${NON_BREAKING_SPACE} `)\n      .replace(/\\ {2}/g, ` ${NON_BREAKING_SPACE}`)\n\n    if (this.context.isFirst || this.context.followsWhitespace) {\n      string = string.replace(/^\\ /, NON_BREAKING_SPACE)\n    }\n\n    return string\n  }\n}\n", "/* eslint-disable\n    no-var,\n*/\nimport ObjectView from \"trix/views/object_view\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\nimport PieceView from \"trix/views/piece_view\"\n\nexport default class TextView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.text = this.object\n    this.textConfig = this.options.textConfig\n  }\n\n  createNodes() {\n    const nodes = []\n    const pieces = ObjectGroup.groupObjects(this.getPieces())\n    const lastIndex = pieces.length - 1\n\n    for (let index = 0; index < pieces.length; index++) {\n      const piece = pieces[index]\n      const context = {}\n      if (index === 0) {\n        context.isFirst = true\n      }\n      if (index === lastIndex) {\n        context.isLast = true\n      }\n      if (endsWithWhitespace(previousPiece)) {\n        context.followsWhitespace = true\n      }\n\n      const view = this.findOrCreateCachedChildView(PieceView, piece, { textConfig: this.textConfig, context })\n      nodes.push(...Array.from(view.getNodes() || []))\n\n      var previousPiece = piece\n    }\n    return nodes\n  }\n\n  getPieces() {\n    return Array.from(this.text.getPieces()).filter((piece) => !piece.hasAttribute(\"blockBreak\"))\n  }\n}\n\nconst endsWithWhitespace = (piece) => /\\s$/.test(piece?.toString())\n", "import * as config from \"trix/config\"\nimport ObjectView from \"trix/views/object_view\"\nimport TextView from \"trix/views/text_view\"\n\nimport { getBlockConfig, makeElement } from \"trix/core/helpers\"\nconst { css } = config\n\nexport default class BlockView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.block = this.object\n    this.attributes = this.block.getAttributes()\n  }\n\n  createNodes() {\n    const comment = document.createComment(\"block\")\n    const nodes = [ comment ]\n    if (this.block.isEmpty()) {\n      nodes.push(makeElement(\"br\"))\n    } else {\n      const textConfig = getBlockConfig(this.block.getLastAttribute())?.text\n      const textView = this.findOrCreateCachedChildView(TextView, this.block.text, { textConfig })\n      nodes.push(...Array.from(textView.getNodes() || []))\n      if (this.shouldAddExtraNewlineElement()) {\n        nodes.push(makeElement(\"br\"))\n      }\n    }\n\n    if (this.attributes.length) {\n      return nodes\n    } else {\n      let attributes\n      const { tagName } = config.blockAttributes.default\n      if (this.block.isRTL()) {\n        attributes = { dir: \"rtl\" }\n      }\n\n      const element = makeElement({ tagName, attributes })\n      nodes.forEach((node) => element.appendChild(node))\n      return [ element ]\n    }\n  }\n\n  createContainerElement(depth) {\n    const attributes = {}\n    let className\n    const attributeName = this.attributes[depth]\n\n    const { tagName, htmlAttributes = [] } = getBlockConfig(attributeName)\n\n    if (depth === 0 && this.block.isRTL()) {\n      Object.assign(attributes, { dir: \"rtl\" })\n    }\n\n    if (attributeName === \"attachmentGallery\") {\n      const size = this.block.getBlockBreakPosition()\n      className = `${css.attachmentGallery} ${css.attachmentGallery}--${size}`\n    }\n\n    Object.entries(this.block.htmlAttributes).forEach(([ name, value ]) => {\n      if (htmlAttributes.includes(name)) {\n        attributes[name] = value\n      }\n    })\n\n    return makeElement({ tagName, className, attributes })\n  }\n\n  // A single <br> at the end of a block element has no visual representation\n  // so add an extra one.\n  shouldAddExtraNewlineElement() {\n    return /\\n\\n$/.test(this.block.toString())\n  }\n}\n", "import { makeElement } from \"trix/core/helpers\"\n\nimport ElementStore from \"trix/core/collections/element_store\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\nimport ObjectView from \"trix/views/object_view\"\nimport BlockView from \"trix/views/block_view\"\n\nimport { defer } from \"trix/core/helpers\"\n\nexport default class DocumentView extends ObjectView {\n  static render(document) {\n    const element = makeElement(\"div\")\n    const view = new this(document, { element })\n    view.render()\n    view.sync()\n    return element\n  }\n\n  constructor() {\n    super(...arguments)\n    this.element = this.options.element\n    this.elementStore = new ElementStore()\n    this.setDocument(this.object)\n  }\n\n  setDocument(document) {\n    if (!document.isEqualTo(this.document)) {\n      this.document = this.object = document\n    }\n  }\n\n  render() {\n    this.childViews = []\n\n    this.shadowElement = makeElement(\"div\")\n\n    if (!this.document.isEmpty()) {\n      const objects = ObjectGroup.groupObjects(this.document.getBlocks(), { asTree: true })\n\n      Array.from(objects).forEach((object) => {\n        const view = this.findOrCreateCachedChildView(BlockView, object)\n        Array.from(view.getNodes()).map((node) => this.shadowElement.appendChild(node))\n      })\n    }\n  }\n\n  isSynced() {\n    return elementsHaveEqualHTML(this.shadowElement, this.element)\n  }\n\n  sync() {\n    const fragment = this.createDocumentFragmentForSync()\n    while (this.element.lastChild) {\n      this.element.removeChild(this.element.lastChild)\n    }\n    this.element.appendChild(fragment)\n    return this.didSync()\n  }\n\n  // Private\n\n  didSync() {\n    this.elementStore.reset(findStoredElements(this.element))\n    return defer(() => this.garbageCollectCachedViews())\n  }\n\n  createDocumentFragmentForSync() {\n    const fragment = document.createDocumentFragment()\n\n    Array.from(this.shadowElement.childNodes).forEach((node) => {\n      fragment.appendChild(node.cloneNode(true))\n    })\n\n    Array.from(findStoredElements(fragment)).forEach((element) => {\n      const storedElement = this.elementStore.remove(element)\n      if (storedElement) {\n        element.parentNode.replaceChild(storedElement, element)\n      }\n    })\n\n    return fragment\n  }\n}\n\nconst findStoredElements = (element) => element.querySelectorAll(\"[data-trix-store-key]\")\n\nconst elementsHaveEqualHTML = (element, otherElement) =>\n  ignoreSpaces(element.innerHTML) === ignoreSpaces(otherElement.innerHTML)\n\nconst ignoreSpaces = (html) => html.replace(/&nbsp;/g, \" \")\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Hash from \"trix/core/collections/hash\"\n\nexport default class Piece extends TrixObject {\n  static types = {}\n\n  static registerType(type, constructor) {\n    constructor.type = type\n    this.types[type] = constructor\n  }\n\n  static fromJSON(pieceJSON) {\n    const constructor = this.types[pieceJSON.type]\n    if (constructor) {\n      return constructor.fromJSON(pieceJSON)\n    }\n  }\n\n  constructor(value, attributes = {}) {\n    super(...arguments)\n    this.attributes = Hash.box(attributes)\n  }\n\n  copyWithAttributes(attributes) {\n    return new this.constructor(this.getValue(), attributes)\n  }\n\n  copyWithAdditionalAttributes(attributes) {\n    return this.copyWithAttributes(this.attributes.merge(attributes))\n  }\n\n  copyWithoutAttribute(attribute) {\n    return this.copyWithAttributes(this.attributes.remove(attribute))\n  }\n\n  copy() {\n    return this.copyWithAttributes(this.attributes)\n  }\n\n  getAttribute(attribute) {\n    return this.attributes.get(attribute)\n  }\n\n  getAttributesHash() {\n    return this.attributes\n  }\n\n  getAttributes() {\n    return this.attributes.toObject()\n  }\n\n  hasAttribute(attribute) {\n    return this.attributes.has(attribute)\n  }\n\n  hasSameStringValueAsPiece(piece) {\n    return piece && this.toString() === piece.toString()\n  }\n\n  hasSameAttributesAsPiece(piece) {\n    return piece && (this.attributes === piece.attributes || this.attributes.isEqualTo(piece.attributes))\n  }\n\n  isBlockBreak() {\n    return false\n  }\n\n  isEqualTo(piece) {\n    return (\n      super.isEqualTo(...arguments) ||\n      this.hasSameConstructorAs(piece) &&\n        this.hasSameStringValueAsPiece(piece) &&\n        this.hasSameAttributesAsPiece(piece)\n    )\n  }\n\n  isEmpty() {\n    return this.length === 0\n  }\n\n  isSerializable() {\n    return true\n  }\n\n  toJSON() {\n    return {\n      type: this.constructor.type,\n      attributes: this.getAttributes(),\n    }\n  }\n\n  contentsForInspection() {\n    return {\n      type: this.constructor.type,\n      attributes: this.attributes.inspect(),\n    }\n  }\n\n  // Grouping\n\n  canBeGrouped() {\n    return this.hasAttribute(\"href\")\n  }\n\n  canBeGroupedWith(piece) {\n    return this.getAttribute(\"href\") === piece.getAttribute(\"href\")\n  }\n\n  // Splittable\n\n  getLength() {\n    return this.length\n  }\n\n  canBeConsolidatedWith(piece) {\n    return false\n  }\n}\n", "import Operation from \"trix/core/utilities/operation\"\n\nexport default class ImagePreloadOperation extends Operation {\n  constructor(url) {\n    super(...arguments)\n    this.url = url\n  }\n\n  perform(callback) {\n    const image = new Image()\n\n    image.onload = () => {\n      image.width = this.width = image.naturalWidth\n      image.height = this.height = image.naturalHeight\n      return callback(true, image)\n    }\n\n    image.onerror = () => callback(false)\n\n    image.src = this.url\n  }\n}\n", "import * as config from \"trix/config\"\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Hash from \"trix/core/collections/hash\"\nimport ImagePreloadOperation from \"trix/operations/image_preload_operation\"\n\nexport default class Attachment extends TrixObject {\n  static previewablePattern = /^image(\\/(gif|png|webp|jpe?g)|$)/\n\n  static attachmentForFile(file) {\n    const attributes = this.attributesForFile(file)\n    const attachment = new this(attributes)\n    attachment.setFile(file)\n    return attachment\n  }\n\n  static attributesForFile(file) {\n    return new Hash({\n      filename: file.name,\n      filesize: file.size,\n      contentType: file.type,\n    })\n  }\n\n  static fromJSON(attachmentJSON) {\n    return new this(attachmentJSON)\n  }\n\n  constructor(attributes = {}) {\n    super(attributes)\n    this.releaseFile = this.releaseFile.bind(this)\n    this.attributes = Hash.box(attributes)\n    this.didChangeAttributes()\n  }\n\n  getAttribute(attribute) {\n    return this.attributes.get(attribute)\n  }\n\n  hasAttribute(attribute) {\n    return this.attributes.has(attribute)\n  }\n\n  getAttributes() {\n    return this.attributes.toObject()\n  }\n\n  setAttributes(attributes = {}) {\n    const newAttributes = this.attributes.merge(attributes)\n    if (!this.attributes.isEqualTo(newAttributes)) {\n      this.attributes = newAttributes\n      this.didChangeAttributes()\n      this.previewDelegate?.attachmentDidChangeAttributes?.(this)\n      return this.delegate?.attachmentDidChangeAttributes?.(this)\n    }\n  }\n\n  didChangeAttributes() {\n    if (this.isPreviewable()) {\n      return this.preloadURL()\n    }\n  }\n\n  isPending() {\n    return this.file != null && !(this.getURL() || this.getHref())\n  }\n\n  isPreviewable() {\n    if (this.attributes.has(\"previewable\")) {\n      return this.attributes.get(\"previewable\")\n    } else {\n      return Attachment.previewablePattern.test(this.getContentType())\n    }\n  }\n\n  getType() {\n    if (this.hasContent()) {\n      return \"content\"\n    } else if (this.isPreviewable()) {\n      return \"preview\"\n    } else {\n      return \"file\"\n    }\n  }\n\n  getURL() {\n    return this.attributes.get(\"url\")\n  }\n\n  getHref() {\n    return this.attributes.get(\"href\")\n  }\n\n  getFilename() {\n    return this.attributes.get(\"filename\") || \"\"\n  }\n\n  getFilesize() {\n    return this.attributes.get(\"filesize\")\n  }\n\n  getFormattedFilesize() {\n    const filesize = this.attributes.get(\"filesize\")\n    if (typeof filesize === \"number\") {\n      return config.fileSize.formatter(filesize)\n    } else {\n      return \"\"\n    }\n  }\n\n  getExtension() {\n    return this.getFilename()\n      .match(/\\.(\\w+)$/)?.[1]\n      .toLowerCase()\n  }\n\n  getContentType() {\n    return this.attributes.get(\"contentType\")\n  }\n\n  hasContent() {\n    return this.attributes.has(\"content\")\n  }\n\n  getContent() {\n    return this.attributes.get(\"content\")\n  }\n\n  getWidth() {\n    return this.attributes.get(\"width\")\n  }\n\n  getHeight() {\n    return this.attributes.get(\"height\")\n  }\n\n  getFile() {\n    return this.file\n  }\n\n  setFile(file) {\n    this.file = file\n    if (this.isPreviewable()) {\n      return this.preloadFile()\n    }\n  }\n\n  releaseFile() {\n    this.releasePreloadedFile()\n    this.file = null\n  }\n\n  getUploadProgress() {\n    return this.uploadProgress != null ? this.uploadProgress : 0\n  }\n\n  setUploadProgress(value) {\n    if (this.uploadProgress !== value) {\n      this.uploadProgress = value\n      return this.uploadProgressDelegate?.attachmentDidChangeUploadProgress?.(this)\n    }\n  }\n\n  toJSON() {\n    return this.getAttributes()\n  }\n\n  getCacheKey() {\n    return [ super.getCacheKey(...arguments), this.attributes.getCacheKey(), this.getPreviewURL() ].join(\"/\")\n  }\n\n  // Previewable\n\n  getPreviewURL() {\n    return this.previewURL || this.preloadingURL\n  }\n\n  setPreviewURL(url) {\n    if (url !== this.getPreviewURL()) {\n      this.previewURL = url\n      this.previewDelegate?.attachmentDidChangeAttributes?.(this)\n      return this.delegate?.attachmentDidChangePreviewURL?.(this)\n    }\n  }\n\n  preloadURL() {\n    return this.preload(this.getURL(), this.releaseFile)\n  }\n\n  preloadFile() {\n    if (this.file) {\n      this.fileObjectURL = URL.createObjectURL(this.file)\n      return this.preload(this.fileObjectURL)\n    }\n  }\n\n  releasePreloadedFile() {\n    if (this.fileObjectURL) {\n      URL.revokeObjectURL(this.fileObjectURL)\n      this.fileObjectURL = null\n    }\n  }\n\n  preload(url, callback) {\n    if (url && url !== this.getPreviewURL()) {\n      this.preloadingURL = url\n      const operation = new ImagePreloadOperation(url)\n      return operation\n        .then(({ width, height }) => {\n          if (!this.getWidth() || !this.getHeight()) {\n            this.setAttributes({ width, height })\n          }\n          this.preloadingURL = null\n          this.setPreviewURL(url)\n          return callback?.()\n        })\n        .catch(() => {\n          this.preloadingURL = null\n          return callback?.()\n        })\n    }\n  }\n}\n", "import { OBJECT_REPLACEMENT_CHARACTER } from \"trix/constants\"\n\nimport Attachment from \"trix/models/attachment\"\nimport Piece from \"trix/models/piece\"\n\nexport default class AttachmentPiece extends Piece {\n  static permittedAttributes = [ \"caption\", \"presentation\" ]\n\n  static fromJSON(pieceJSON) {\n    return new this(Attachment.fromJSON(pieceJSON.attachment), pieceJSON.attributes)\n  }\n\n  constructor(attachment) {\n    super(...arguments)\n    this.attachment = attachment\n    this.length = 1\n    this.ensureAttachmentExclusivelyHasAttribute(\"href\")\n    if (!this.attachment.hasContent()) {\n      this.removeProhibitedAttributes()\n    }\n  }\n\n  ensureAttachmentExclusivelyHasAttribute(attribute) {\n    if (this.hasAttribute(attribute)) {\n      if (!this.attachment.hasAttribute(attribute)) {\n        this.attachment.setAttributes(this.attributes.slice([ attribute ]))\n      }\n      this.attributes = this.attributes.remove(attribute)\n    }\n  }\n\n  removeProhibitedAttributes() {\n    const attributes = this.attributes.slice(AttachmentPiece.permittedAttributes)\n    if (!attributes.isEqualTo(this.attributes)) {\n      this.attributes = attributes\n    }\n  }\n\n  getValue() {\n    return this.attachment\n  }\n\n  isSerializable() {\n    return !this.attachment.isPending()\n  }\n\n  getCaption() {\n    return this.attributes.get(\"caption\") || \"\"\n  }\n\n  isEqualTo(piece) {\n    return super.isEqualTo(piece) && this.attachment.id === piece?.attachment?.id\n  }\n\n  toString() {\n    return OBJECT_REPLACEMENT_CHARACTER\n  }\n\n  toJSON() {\n    const json = super.toJSON(...arguments)\n    json.attachment = this.attachment\n    return json\n  }\n\n  getCacheKey() {\n    return [ super.getCacheKey(...arguments), this.attachment.getCacheKey() ].join(\"/\")\n  }\n\n  toConsole() {\n    return JSON.stringify(this.toString())\n  }\n}\n\nPiece.registerType(\"attachment\", AttachmentPiece)\n", "import Piece from \"trix/models/piece\"\n\nimport { normalizeNewlines } from \"trix/core/helpers\"\n\nexport default class StringPiece extends Piece {\n  static fromJSON(pieceJSON) {\n    return new this(pieceJSON.string, pieceJSON.attributes)\n  }\n\n  constructor(string) {\n    super(...arguments)\n    this.string = normalizeNewlines(string)\n    this.length = this.string.length\n  }\n\n  getValue() {\n    return this.string\n  }\n\n  toString() {\n    return this.string.toString()\n  }\n\n  isBlockBreak() {\n    return this.toString() === \"\\n\" && this.getAttribute(\"blockBreak\") === true\n  }\n\n  toJSON() {\n    const result = super.toJSON(...arguments)\n    result.string = this.string\n    return result\n  }\n\n  // Splittable\n\n  canBeConsolidatedWith(piece) {\n    return piece && this.hasSameConstructorAs(piece) && this.hasSameAttributesAsPiece(piece)\n  }\n\n  consolidateWith(piece) {\n    return new this.constructor(this.toString() + piece.toString(), this.attributes)\n  }\n\n  splitAtOffset(offset) {\n    let left, right\n    if (offset === 0) {\n      left = null\n      right = this\n    } else if (offset === this.length) {\n      left = this\n      right = null\n    } else {\n      left = new this.constructor(this.string.slice(0, offset), this.attributes)\n      right = new this.constructor(this.string.slice(offset), this.attributes)\n    }\n    return [ left, right ]\n  }\n\n  toConsole() {\n    let { string } = this\n    if (string.length > 15) {\n      string = string.slice(0, 14) + \"\u2026\"\n    }\n    return JSON.stringify(string.toString())\n  }\n}\n\nPiece.registerType(\"string\", StringPiece)\n", "/* eslint-disable\n    prefer-const,\n*/\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport { spliceArray } from \"trix/core/helpers\"\n\nexport default class SplittableList extends TrixObject {\n  static box(objects) {\n    if (objects instanceof this) {\n      return objects\n    } else {\n      return new this(objects)\n    }\n  }\n\n  constructor(objects = []) {\n    super(...arguments)\n    this.objects = objects.slice(0)\n    this.length = this.objects.length\n  }\n\n  indexOf(object) {\n    return this.objects.indexOf(object)\n  }\n\n  splice(...args) {\n    return new this.constructor(spliceArray(this.objects, ...args))\n  }\n\n  eachObject(callback) {\n    return this.objects.map((object, index) => callback(object, index))\n  }\n\n  insertObjectAtIndex(object, index) {\n    return this.splice(index, 0, object)\n  }\n\n  insertSplittableListAtIndex(splittableList, index) {\n    return this.splice(index, 0, ...splittableList.objects)\n  }\n\n  insertSplittableListAtPosition(splittableList, position) {\n    const [ objects, index ] = this.splitObjectAtPosition(position)\n    return new this.constructor(objects).insertSplittableListAtIndex(splittableList, index)\n  }\n\n  editObjectAtIndex(index, callback) {\n    return this.replaceObjectAtIndex(callback(this.objects[index]), index)\n  }\n\n  replaceObjectAtIndex(object, index) {\n    return this.splice(index, 1, object)\n  }\n\n  removeObjectAtIndex(index) {\n    return this.splice(index, 1)\n  }\n\n  getObjectAtIndex(index) {\n    return this.objects[index]\n  }\n\n  getSplittableListInRange(range) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    return new this.constructor(objects.slice(leftIndex, rightIndex + 1))\n  }\n\n  selectSplittableList(test) {\n    const objects = this.objects.filter((object) => test(object))\n    return new this.constructor(objects)\n  }\n\n  removeObjectsInRange(range) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    return new this.constructor(objects).splice(leftIndex, rightIndex - leftIndex + 1)\n  }\n\n  transformObjectsInRange(range, transform) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    const transformedObjects = objects.map((object, index) =>\n      leftIndex <= index && index <= rightIndex ? transform(object) : object\n    )\n    return new this.constructor(transformedObjects)\n  }\n\n  splitObjectsAtRange(range) {\n    let rightOuterIndex\n    let [ objects, leftInnerIndex, offset ] = this.splitObjectAtPosition(startOfRange(range))\n    ;[ objects, rightOuterIndex ] = new this.constructor(objects).splitObjectAtPosition(endOfRange(range) + offset)\n\n    return [ objects, leftInnerIndex, rightOuterIndex - 1 ]\n  }\n\n  getObjectAtPosition(position) {\n    const { index } = this.findIndexAndOffsetAtPosition(position)\n    return this.objects[index]\n  }\n\n  splitObjectAtPosition(position) {\n    let splitIndex, splitOffset\n    const { index, offset } = this.findIndexAndOffsetAtPosition(position)\n    const objects = this.objects.slice(0)\n    if (index != null) {\n      if (offset === 0) {\n        splitIndex = index\n        splitOffset = 0\n      } else {\n        const object = this.getObjectAtIndex(index)\n        const [ leftObject, rightObject ] = object.splitAtOffset(offset)\n        objects.splice(index, 1, leftObject, rightObject)\n        splitIndex = index + 1\n        splitOffset = leftObject.getLength() - offset\n      }\n    } else {\n      splitIndex = objects.length\n      splitOffset = 0\n    }\n\n    return [ objects, splitIndex, splitOffset ]\n  }\n\n  consolidate() {\n    const objects = []\n    let pendingObject = this.objects[0]\n\n    this.objects.slice(1).forEach((object) => {\n      if (pendingObject.canBeConsolidatedWith?.(object)) {\n        pendingObject = pendingObject.consolidateWith(object)\n      } else {\n        objects.push(pendingObject)\n        pendingObject = object\n      }\n    })\n\n    if (pendingObject) {\n      objects.push(pendingObject)\n    }\n\n    return new this.constructor(objects)\n  }\n\n  consolidateFromIndexToIndex(startIndex, endIndex) {\n    const objects = this.objects.slice(0)\n    const objectsInRange = objects.slice(startIndex, endIndex + 1)\n    const consolidatedInRange = new this.constructor(objectsInRange).consolidate().toArray()\n    return this.splice(startIndex, objectsInRange.length, ...consolidatedInRange)\n  }\n\n  findIndexAndOffsetAtPosition(position) {\n    let index\n    let currentPosition = 0\n    for (index = 0; index < this.objects.length; index++) {\n      const object = this.objects[index]\n      const nextPosition = currentPosition + object.getLength()\n      if (currentPosition <= position && position < nextPosition) {\n        return { index, offset: position - currentPosition }\n      }\n      currentPosition = nextPosition\n    }\n    return { index: null, offset: null }\n  }\n\n  findPositionAtIndexAndOffset(index, offset) {\n    let position = 0\n    for (let currentIndex = 0; currentIndex < this.objects.length; currentIndex++) {\n      const object = this.objects[currentIndex]\n      if (currentIndex < index) {\n        position += object.getLength()\n      } else if (currentIndex === index) {\n        position += offset\n        break\n      }\n    }\n    return position\n  }\n\n  getEndPosition() {\n    if (this.endPosition == null) {\n      this.endPosition = 0\n      this.objects.forEach((object) => this.endPosition += object.getLength())\n    }\n\n    return this.endPosition\n  }\n\n  toString() {\n    return this.objects.join(\"\")\n  }\n\n  toArray() {\n    return this.objects.slice(0)\n  }\n\n  toJSON() {\n    return this.toArray()\n  }\n\n  isEqualTo(splittableList) {\n    return super.isEqualTo(...arguments) || objectArraysAreEqual(this.objects, splittableList?.objects)\n  }\n\n  contentsForInspection() {\n    return {\n      objects: `[${this.objects.map((object) => object.inspect()).join(\", \")}]`,\n    }\n  }\n}\n\nconst objectArraysAreEqual = function(left, right = []) {\n  if (left.length !== right.length) {\n    return false\n  }\n  let result = true\n  for (let index = 0; index < left.length; index++) {\n    const object = left[index]\n    if (result && !object.isEqualTo(right[index])) {\n      result = false\n    }\n  }\n  return result\n}\n\nconst startOfRange = (range) => range[0]\n\nconst endOfRange = (range) => range[1]\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport { getDirection } from \"trix/core/helpers\"\n\nimport Piece from \"trix/models/piece\"\nimport AttachmentPiece from \"trix/models/attachment_piece\"\nimport StringPiece from \"trix/models/string_piece\"\nimport SplittableList from \"trix/models/splittable_list\"\n\nimport Hash from \"trix/core/collections/hash\"\n\nexport default class Text extends TrixObject {\n  static textForAttachmentWithAttributes(attachment, attributes) {\n    const piece = new AttachmentPiece(attachment, attributes)\n    return new this([ piece ])\n  }\n\n  static textForStringWithAttributes(string, attributes) {\n    const piece = new StringPiece(string, attributes)\n    return new this([ piece ])\n  }\n\n  static fromJSON(textJSON) {\n    const pieces = Array.from(textJSON).map((pieceJSON) => Piece.fromJSON(pieceJSON))\n    return new this(pieces)\n  }\n\n  constructor(pieces = []) {\n    super(...arguments)\n    const notEmpty = pieces.filter((piece) => !piece.isEmpty())\n    this.pieceList = new SplittableList(notEmpty)\n  }\n\n  copy() {\n    return this.copyWithPieceList(this.pieceList)\n  }\n\n  copyWithPieceList(pieceList) {\n    return new this.constructor(pieceList.consolidate().toArray())\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const pieces = this.getPieces().map((piece) => objectMap.find(piece) || piece)\n    return new this.constructor(pieces)\n  }\n\n  appendText(text) {\n    return this.insertTextAtPosition(text, this.getLength())\n  }\n\n  insertTextAtPosition(text, position) {\n    return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(text.pieceList, position))\n  }\n\n  removeTextAtRange(range) {\n    return this.copyWithPieceList(this.pieceList.removeObjectsInRange(range))\n  }\n\n  replaceTextAtRange(text, range) {\n    return this.removeTextAtRange(range).insertTextAtPosition(text, range[0])\n  }\n\n  moveTextFromRangeToPosition(range, position) {\n    if (range[0] <= position && position <= range[1]) return\n    const text = this.getTextAtRange(range)\n    const length = text.getLength()\n    if (range[0] < position) {\n      position -= length\n    }\n    return this.removeTextAtRange(range).insertTextAtPosition(text, position)\n  }\n\n  addAttributeAtRange(attribute, value, range) {\n    const attributes = {}\n    attributes[attribute] = value\n    return this.addAttributesAtRange(attributes, range)\n  }\n\n  addAttributesAtRange(attributes, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithAdditionalAttributes(attributes))\n    )\n  }\n\n  removeAttributeAtRange(attribute, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithoutAttribute(attribute))\n    )\n  }\n\n  setAttributesAtRange(attributes, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithAttributes(attributes))\n    )\n  }\n\n  getAttributesAtPosition(position) {\n    return this.pieceList.getObjectAtPosition(position)?.getAttributes() || {}\n  }\n\n  getCommonAttributes() {\n    const objects = Array.from(this.pieceList.toArray()).map((piece) => piece.getAttributes())\n    return Hash.fromCommonAttributesOfObjects(objects).toObject()\n  }\n\n  getCommonAttributesAtRange(range) {\n    return this.getTextAtRange(range).getCommonAttributes() || {}\n  }\n\n  getExpandedRangeForAttributeAtOffset(attributeName, offset) {\n    let right\n    let left = right = offset\n    const length = this.getLength()\n\n    while (left > 0 && this.getCommonAttributesAtRange([ left - 1, right ])[attributeName]) {\n      left--\n    }\n    while (right < length && this.getCommonAttributesAtRange([ offset, right + 1 ])[attributeName]) {\n      right++\n    }\n\n    return [ left, right ]\n  }\n\n  getTextAtRange(range) {\n    return this.copyWithPieceList(this.pieceList.getSplittableListInRange(range))\n  }\n\n  getStringAtRange(range) {\n    return this.pieceList.getSplittableListInRange(range).toString()\n  }\n\n  getStringAtPosition(position) {\n    return this.getStringAtRange([ position, position + 1 ])\n  }\n\n  startsWithString(string) {\n    return this.getStringAtRange([ 0, string.length ]) === string\n  }\n\n  endsWithString(string) {\n    const length = this.getLength()\n    return this.getStringAtRange([ length - string.length, length ]) === string\n  }\n\n  getAttachmentPieces() {\n    return this.pieceList.toArray().filter((piece) => !!piece.attachment)\n  }\n\n  getAttachments() {\n    return this.getAttachmentPieces().map((piece) => piece.attachment)\n  }\n\n  getAttachmentAndPositionById(attachmentId) {\n    let position = 0\n    for (const piece of this.pieceList.toArray()) {\n      if (piece.attachment?.id === attachmentId) {\n        return { attachment: piece.attachment, position }\n      }\n      position += piece.length\n    }\n    return { attachment: null, position: null }\n  }\n\n  getAttachmentById(attachmentId) {\n    const { attachment } = this.getAttachmentAndPositionById(attachmentId)\n    return attachment\n  }\n\n  getRangeOfAttachment(attachment) {\n    const attachmentAndPosition = this.getAttachmentAndPositionById(attachment.id)\n    const position = attachmentAndPosition.position\n    attachment = attachmentAndPosition.attachment\n    if (attachment) {\n      return [ position, position + 1 ]\n    }\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    if (range) {\n      return this.addAttributesAtRange(attributes, range)\n    } else {\n      return this\n    }\n  }\n\n  getLength() {\n    return this.pieceList.getEndPosition()\n  }\n\n  isEmpty() {\n    return this.getLength() === 0\n  }\n\n  isEqualTo(text) {\n    return super.isEqualTo(text) || text?.pieceList?.isEqualTo(this.pieceList)\n  }\n\n  isBlockBreak() {\n    return this.getLength() === 1 && this.pieceList.getObjectAtIndex(0).isBlockBreak()\n  }\n\n  eachPiece(callback) {\n    return this.pieceList.eachObject(callback)\n  }\n\n  getPieces() {\n    return this.pieceList.toArray()\n  }\n\n  getPieceAtPosition(position) {\n    return this.pieceList.getObjectAtPosition(position)\n  }\n\n  contentsForInspection() {\n    return { pieceList: this.pieceList.inspect() }\n  }\n\n  toSerializableText() {\n    const pieceList = this.pieceList.selectSplittableList((piece) => piece.isSerializable())\n    return this.copyWithPieceList(pieceList)\n  }\n\n  toString() {\n    return this.pieceList.toString()\n  }\n\n  toJSON() {\n    return this.pieceList.toJSON()\n  }\n\n  toConsole() {\n    return JSON.stringify(this.pieceList.toArray().map((piece) => JSON.parse(piece.toConsole())))\n  }\n\n  // BIDI\n\n  getDirection() {\n    return getDirection(this.toString())\n  }\n\n  isRTL() {\n    return this.getDirection() === \"rtl\"\n  }\n}\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Text from \"trix/models/text\"\n\nimport {\n  arraysAreEqual,\n  getBlockConfig,\n  getListAttributeNames,\n  objectsAreEqual,\n  spliceArray,\n} from \"trix/core/helpers\"\n\nexport default class Block extends TrixObject {\n  static fromJSON(blockJSON) {\n    const text = Text.fromJSON(blockJSON.text)\n    return new this(text, blockJSON.attributes, blockJSON.htmlAttributes)\n  }\n\n  constructor(text, attributes, htmlAttributes) {\n    super(...arguments)\n    this.text = applyBlockBreakToText(text || new Text())\n    this.attributes = attributes || []\n    this.htmlAttributes = htmlAttributes || {}\n  }\n\n  isEmpty() {\n    return this.text.isBlockBreak()\n  }\n\n  isEqualTo(block) {\n    if (super.isEqualTo(block)) return true\n\n    return this.text.isEqualTo(block?.text) && arraysAreEqual(this.attributes, block?.attributes) && objectsAreEqual(this.htmlAttributes, block?.htmlAttributes)\n  }\n\n  copyWithText(text) {\n    return new Block(text, this.attributes, this.htmlAttributes)\n  }\n\n  copyWithoutText() {\n    return this.copyWithText(null)\n  }\n\n  copyWithAttributes(attributes) {\n    return new Block(this.text, attributes, this.htmlAttributes)\n  }\n\n  copyWithoutAttributes() {\n    return this.copyWithAttributes(null)\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const mappedText = objectMap.find(this.text)\n    if (mappedText) {\n      return this.copyWithText(mappedText)\n    } else {\n      return this.copyWithText(this.text.copyUsingObjectMap(objectMap))\n    }\n  }\n\n  addAttribute(attribute) {\n    const attributes = this.attributes.concat(expandAttribute(attribute))\n    return this.copyWithAttributes(attributes)\n  }\n\n  addHTMLAttribute(attribute, value) {\n    const htmlAttributes = Object.assign({}, this.htmlAttributes, { [attribute]: value })\n    return new Block(this.text, this.attributes, htmlAttributes)\n  }\n\n  removeAttribute(attribute) {\n    const { listAttribute } = getBlockConfig(attribute)\n    const attributes = removeLastValue(removeLastValue(this.attributes, attribute), listAttribute)\n    return this.copyWithAttributes(attributes)\n  }\n\n  removeLastAttribute() {\n    return this.removeAttribute(this.getLastAttribute())\n  }\n\n  getLastAttribute() {\n    return getLastElement(this.attributes)\n  }\n\n  getAttributes() {\n    return this.attributes.slice(0)\n  }\n\n  getAttributeLevel() {\n    return this.attributes.length\n  }\n\n  getAttributeAtLevel(level) {\n    return this.attributes[level - 1]\n  }\n\n  hasAttribute(attributeName) {\n    return this.attributes.includes(attributeName)\n  }\n\n  hasAttributes() {\n    return this.getAttributeLevel() > 0\n  }\n\n  getLastNestableAttribute() {\n    return getLastElement(this.getNestableAttributes())\n  }\n\n  getNestableAttributes() {\n    return this.attributes.filter((attribute) => getBlockConfig(attribute).nestable)\n  }\n\n  getNestingLevel() {\n    return this.getNestableAttributes().length\n  }\n\n  decreaseNestingLevel() {\n    const attribute = this.getLastNestableAttribute()\n    if (attribute) {\n      return this.removeAttribute(attribute)\n    } else {\n      return this\n    }\n  }\n\n  increaseNestingLevel() {\n    const attribute = this.getLastNestableAttribute()\n    if (attribute) {\n      const index = this.attributes.lastIndexOf(attribute)\n      const attributes = spliceArray(this.attributes, index + 1, 0, ...expandAttribute(attribute))\n      return this.copyWithAttributes(attributes)\n    } else {\n      return this\n    }\n  }\n\n  getListItemAttributes() {\n    return this.attributes.filter((attribute) => getBlockConfig(attribute).listAttribute)\n  }\n\n  isListItem() {\n    return getBlockConfig(this.getLastAttribute())?.listAttribute\n  }\n\n  isTerminalBlock() {\n    return getBlockConfig(this.getLastAttribute())?.terminal\n  }\n\n  breaksOnReturn() {\n    return getBlockConfig(this.getLastAttribute())?.breakOnReturn\n  }\n\n  findLineBreakInDirectionFromPosition(direction, position) {\n    const string = this.toString()\n    let result\n    switch (direction) {\n      case \"forward\":\n        result = string.indexOf(\"\\n\", position)\n        break\n      case \"backward\":\n        result = string.slice(0, position).lastIndexOf(\"\\n\")\n    }\n\n    if (result !== -1) {\n      return result\n    }\n  }\n\n  contentsForInspection() {\n    return {\n      text: this.text.inspect(),\n      attributes: this.attributes,\n    }\n  }\n\n  toString() {\n    return this.text.toString()\n  }\n\n  toJSON() {\n    return {\n      text: this.text,\n      attributes: this.attributes,\n      htmlAttributes: this.htmlAttributes,\n    }\n  }\n\n  // BIDI\n\n  getDirection() {\n    return this.text.getDirection()\n  }\n\n  isRTL() {\n    return this.text.isRTL()\n  }\n\n  // Splittable\n\n  getLength() {\n    return this.text.getLength()\n  }\n\n  canBeConsolidatedWith(block) {\n    return !this.hasAttributes() && !block.hasAttributes() && this.getDirection() === block.getDirection()\n  }\n\n  consolidateWith(block) {\n    const newlineText = Text.textForStringWithAttributes(\"\\n\")\n    const text = this.getTextWithoutBlockBreak().appendText(newlineText)\n    return this.copyWithText(text.appendText(block.text))\n  }\n\n  splitAtOffset(offset) {\n    let left, right\n    if (offset === 0) {\n      left = null\n      right = this\n    } else if (offset === this.getLength()) {\n      left = this\n      right = null\n    } else {\n      left = this.copyWithText(this.text.getTextAtRange([ 0, offset ]))\n      right = this.copyWithText(this.text.getTextAtRange([ offset, this.getLength() ]))\n    }\n    return [ left, right ]\n  }\n\n  getBlockBreakPosition() {\n    return this.text.getLength() - 1\n  }\n\n  getTextWithoutBlockBreak() {\n    if (textEndsInBlockBreak(this.text)) {\n      return this.text.getTextAtRange([ 0, this.getBlockBreakPosition() ])\n    } else {\n      return this.text.copy()\n    }\n  }\n\n  // Grouping\n\n  canBeGrouped(depth) {\n    return this.attributes[depth]\n  }\n\n  canBeGroupedWith(otherBlock, depth) {\n    const otherAttributes = otherBlock.getAttributes()\n    const otherAttribute = otherAttributes[depth]\n    const attribute = this.attributes[depth]\n\n    return (\n      attribute === otherAttribute &&\n      !(getBlockConfig(attribute).group === false && !getListAttributeNames().includes(otherAttributes[depth + 1])) &&\n      (this.getDirection() === otherBlock.getDirection() || otherBlock.isEmpty())\n    )\n  }\n}\n\n// Block breaks\n\nconst applyBlockBreakToText = function(text) {\n  text = unmarkExistingInnerBlockBreaksInText(text)\n  text = addBlockBreakToText(text)\n  return text\n}\n\nconst unmarkExistingInnerBlockBreaksInText = function(text) {\n  let modified = false\n  const pieces = text.getPieces()\n\n  let innerPieces = pieces.slice(0, pieces.length - 1)\n  const lastPiece = pieces[pieces.length - 1]\n\n  if (!lastPiece) return text\n\n  innerPieces = innerPieces.map((piece) => {\n    if (piece.isBlockBreak()) {\n      modified = true\n      return unmarkBlockBreakPiece(piece)\n    } else {\n      return piece\n    }\n  })\n\n  if (modified) {\n    return new Text([ ...innerPieces, lastPiece ])\n  } else {\n    return text\n  }\n}\n\nconst blockBreakText = Text.textForStringWithAttributes(\"\\n\", { blockBreak: true })\n\nconst addBlockBreakToText = function(text) {\n  if (textEndsInBlockBreak(text)) {\n    return text\n  } else {\n    return text.appendText(blockBreakText)\n  }\n}\n\nconst textEndsInBlockBreak = function(text) {\n  const length = text.getLength()\n  if (length === 0) {\n    return false\n  }\n  const endText = text.getTextAtRange([ length - 1, length ])\n  return endText.isBlockBreak()\n}\n\nconst unmarkBlockBreakPiece = (piece) => piece.copyWithoutAttribute(\"blockBreak\")\n\n// Attributes\n\nconst expandAttribute = function(attribute) {\n  const { listAttribute } = getBlockConfig(attribute)\n  if (listAttribute) {\n    return [ listAttribute, attribute ]\n  } else {\n    return [ attribute ]\n  }\n}\n\n// Array helpers\n\nconst getLastElement = (array) => array.slice(-1)[0]\n\nconst removeLastValue = function(array, value) {\n  const index = array.lastIndexOf(value)\n  if (index === -1) {\n    return array\n  } else {\n    return spliceArray(array, index, 1)\n  }\n}\n", "import * as config from \"trix/config\"\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport Text from \"trix/models/text\"\nimport Block from \"trix/models/block\"\nimport SplittableList from \"trix/models/splittable_list\"\nimport Hash from \"trix/core/collections/hash\"\nimport ObjectMap from \"trix/core/collections/object_map\"\n\nimport { arraysAreEqual, getBlockConfig, normalizeRange, rangeIsCollapsed } from \"trix/core/helpers\"\n\nexport default class Document extends TrixObject {\n  static fromJSON(documentJSON) {\n    const blocks = Array.from(documentJSON).map((blockJSON) => Block.fromJSON(blockJSON))\n    return new this(blocks)\n  }\n\n  static fromString(string, textAttributes) {\n    const text = Text.textForStringWithAttributes(string, textAttributes)\n    return new this([ new Block(text) ])\n  }\n\n  constructor(blocks = []) {\n    super(...arguments)\n    if (blocks.length === 0) {\n      blocks = [ new Block() ]\n    }\n    this.blockList = SplittableList.box(blocks)\n  }\n\n  isEmpty() {\n    const block = this.getBlockAtIndex(0)\n    return this.blockList.length === 1 && block.isEmpty() && !block.hasAttributes()\n  }\n\n  copy(options = {}) {\n    const blocks = options.consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray()\n\n    return new this.constructor(blocks)\n  }\n\n  copyUsingObjectsFromDocument(sourceDocument) {\n    const objectMap = new ObjectMap(sourceDocument.getObjects())\n    return this.copyUsingObjectMap(objectMap)\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const blocks = this.getBlocks().map((block) => {\n      const mappedBlock = objectMap.find(block)\n      return mappedBlock || block.copyUsingObjectMap(objectMap)\n    })\n    return new this.constructor(blocks)\n  }\n\n  copyWithBaseBlockAttributes(blockAttributes = []) {\n    const blocks = this.getBlocks().map((block) => {\n      const attributes = blockAttributes.concat(block.getAttributes())\n      return block.copyWithAttributes(attributes)\n    })\n\n    return new this.constructor(blocks)\n  }\n\n  replaceBlock(oldBlock, newBlock) {\n    const index = this.blockList.indexOf(oldBlock)\n    if (index === -1) {\n      return this\n    }\n    return new this.constructor(this.blockList.replaceObjectAtIndex(newBlock, index))\n  }\n\n  insertDocumentAtRange(document, range) {\n    const { blockList } = document\n    range = normalizeRange(range)\n    let [ position ] = range\n    const { index, offset } = this.locationFromPosition(position)\n\n    let result = this\n    const block = this.getBlockAtPosition(position)\n\n    if (rangeIsCollapsed(range) && block.isEmpty() && !block.hasAttributes()) {\n      result = new this.constructor(result.blockList.removeObjectAtIndex(index))\n    } else if (block.getBlockBreakPosition() === offset) {\n      position++\n    }\n\n    result = result.removeTextAtRange(range)\n    return new this.constructor(result.blockList.insertSplittableListAtPosition(blockList, position))\n  }\n\n  mergeDocumentAtRange(document, range) {\n    let formattedDocument, result\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const blockAttributes = this.getBlockAtIndex(startLocation.index).getAttributes()\n    const baseBlockAttributes = document.getBaseBlockAttributes()\n    const trailingBlockAttributes = blockAttributes.slice(-baseBlockAttributes.length)\n\n    if (arraysAreEqual(baseBlockAttributes, trailingBlockAttributes)) {\n      const leadingBlockAttributes = blockAttributes.slice(0, -baseBlockAttributes.length)\n      formattedDocument = document.copyWithBaseBlockAttributes(leadingBlockAttributes)\n    } else {\n      formattedDocument = document.copy({ consolidateBlocks: true }).copyWithBaseBlockAttributes(blockAttributes)\n    }\n\n    const blockCount = formattedDocument.getBlockCount()\n    const firstBlock = formattedDocument.getBlockAtIndex(0)\n\n    if (arraysAreEqual(blockAttributes, firstBlock.getAttributes())) {\n      const firstText = firstBlock.getTextWithoutBlockBreak()\n      result = this.insertTextAtRange(firstText, range)\n\n      if (blockCount > 1) {\n        formattedDocument = new this.constructor(formattedDocument.getBlocks().slice(1))\n        const position = startPosition + firstText.getLength()\n        result = result.insertDocumentAtRange(formattedDocument, position)\n      }\n    } else {\n      result = this.insertDocumentAtRange(formattedDocument, range)\n    }\n\n    return result\n  }\n\n  insertTextAtRange(text, range) {\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const { index, offset } = this.locationFromPosition(startPosition)\n\n    const document = this.removeTextAtRange(range)\n    return new this.constructor(\n      document.blockList.editObjectAtIndex(index, (block) =>\n        block.copyWithText(block.text.insertTextAtPosition(text, offset))\n      )\n    )\n  }\n\n  removeTextAtRange(range) {\n    let blocks\n    range = normalizeRange(range)\n    const [ leftPosition, rightPosition ] = range\n    if (rangeIsCollapsed(range)) {\n      return this\n    }\n    const [ leftLocation, rightLocation ] = Array.from(this.locationRangeFromRange(range))\n\n    const leftIndex = leftLocation.index\n    const leftOffset = leftLocation.offset\n    const leftBlock = this.getBlockAtIndex(leftIndex)\n\n    const rightIndex = rightLocation.index\n    const rightOffset = rightLocation.offset\n    const rightBlock = this.getBlockAtIndex(rightIndex)\n\n    const removeRightNewline =\n      rightPosition - leftPosition === 1 &&\n      leftBlock.getBlockBreakPosition() === leftOffset &&\n      rightBlock.getBlockBreakPosition() !== rightOffset &&\n      rightBlock.text.getStringAtPosition(rightOffset) === \"\\n\"\n\n    if (removeRightNewline) {\n      blocks = this.blockList.editObjectAtIndex(rightIndex, (block) =>\n        block.copyWithText(block.text.removeTextAtRange([ rightOffset, rightOffset + 1 ]))\n      )\n    } else {\n      let block\n      const leftText = leftBlock.text.getTextAtRange([ 0, leftOffset ])\n      const rightText = rightBlock.text.getTextAtRange([ rightOffset, rightBlock.getLength() ])\n      const text = leftText.appendText(rightText)\n\n      const removingLeftBlock = leftIndex !== rightIndex && leftOffset === 0\n      const useRightBlock = removingLeftBlock && leftBlock.getAttributeLevel() >= rightBlock.getAttributeLevel()\n\n      if (useRightBlock) {\n        block = rightBlock.copyWithText(text)\n      } else {\n        block = leftBlock.copyWithText(text)\n      }\n\n      const affectedBlockCount = rightIndex + 1 - leftIndex\n      blocks = this.blockList.splice(leftIndex, affectedBlockCount, block)\n    }\n\n    return new this.constructor(blocks)\n  }\n\n  moveTextFromRangeToPosition(range, position) {\n    let text\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    if (startPosition <= position && position <= endPosition) {\n      return this\n    }\n\n    let document = this.getDocumentAtRange(range)\n    let result = this.removeTextAtRange(range)\n\n    const movingRightward = startPosition < position\n    if (movingRightward) {\n      position -= document.getLength()\n    }\n\n    const [ firstBlock, ...blocks ] = document.getBlocks()\n    if (blocks.length === 0) {\n      text = firstBlock.getTextWithoutBlockBreak()\n      if (movingRightward) {\n        position += 1\n      }\n    } else {\n      text = firstBlock.text\n    }\n\n    result = result.insertTextAtRange(text, position)\n    if (blocks.length === 0) {\n      return result\n    }\n\n    document = new this.constructor(blocks)\n    position += text.getLength()\n\n    return result.insertDocumentAtRange(document, position)\n  }\n\n  addAttributeAtRange(attribute, value, range) {\n    let { blockList } = this\n    this.eachBlockAtRange(\n      range,\n      (block, textRange, index) =>\n        blockList = blockList.editObjectAtIndex(index, function() {\n          if (getBlockConfig(attribute)) {\n            return block.addAttribute(attribute, value)\n          } else {\n            if (textRange[0] === textRange[1]) {\n              return block\n            } else {\n              return block.copyWithText(block.text.addAttributeAtRange(attribute, value, textRange))\n            }\n          }\n        })\n    )\n    return new this.constructor(blockList)\n  }\n\n  addAttribute(attribute, value) {\n    let { blockList } = this\n    this.eachBlock(\n      (block, index) => blockList = blockList.editObjectAtIndex(index, () => block.addAttribute(attribute, value))\n    )\n    return new this.constructor(blockList)\n  }\n\n  removeAttributeAtRange(attribute, range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      if (getBlockConfig(attribute)) {\n        blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(attribute))\n      } else if (textRange[0] !== textRange[1]) {\n        blockList = blockList.editObjectAtIndex(index, () =>\n          block.copyWithText(block.text.removeAttributeAtRange(attribute, textRange))\n        )\n      }\n    })\n    return new this.constructor(blockList)\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    const [ startPosition ] = Array.from(range)\n    const { index } = this.locationFromPosition(startPosition)\n    const text = this.getTextAtIndex(index)\n\n    return new this.constructor(\n      this.blockList.editObjectAtIndex(index, (block) =>\n        block.copyWithText(text.updateAttributesForAttachment(attributes, attachment))\n      )\n    )\n  }\n\n  removeAttributeForAttachment(attribute, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    return this.removeAttributeAtRange(attribute, range)\n  }\n\n  setHTMLAttributeAtPosition(position, name, value) {\n    const block = this.getBlockAtPosition(position)\n    const updatedBlock = block.addHTMLAttribute(name, value)\n    return this.replaceBlock(block, updatedBlock)\n  }\n\n  insertBlockBreakAtRange(range) {\n    let blocks\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const { offset } = this.locationFromPosition(startPosition)\n\n    const document = this.removeTextAtRange(range)\n    if (offset === 0) {\n      blocks = [ new Block() ]\n    }\n    return new this.constructor(\n      document.blockList.insertSplittableListAtPosition(new SplittableList(blocks), startPosition)\n    )\n  }\n\n  applyBlockAttributeAtRange(attributeName, value, range) {\n    const expanded = this.expandRangeToLineBreaksAndSplitBlocks(range)\n    let document = expanded.document\n    range = expanded.range\n    const blockConfig = getBlockConfig(attributeName)\n\n    if (blockConfig.listAttribute) {\n      document = document.removeLastListAttributeAtRange(range, { exceptAttributeName: attributeName })\n      const converted = document.convertLineBreaksToBlockBreaksInRange(range)\n      document = converted.document\n      range = converted.range\n    } else if (blockConfig.exclusive) {\n      document = document.removeBlockAttributesAtRange(range)\n    } else if (blockConfig.terminal) {\n      document = document.removeLastTerminalAttributeAtRange(range)\n    } else {\n      document = document.consolidateBlocksAtRange(range)\n    }\n\n    return document.addAttributeAtRange(attributeName, value, range)\n  }\n\n  removeLastListAttributeAtRange(range, options = {}) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      const lastAttributeName = block.getLastAttribute()\n      if (!lastAttributeName) {\n        return\n      }\n      if (!getBlockConfig(lastAttributeName).listAttribute) {\n        return\n      }\n      if (lastAttributeName === options.exceptAttributeName) {\n        return\n      }\n      blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(lastAttributeName))\n    })\n    return new this.constructor(blockList)\n  }\n\n  removeLastTerminalAttributeAtRange(range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      const lastAttributeName = block.getLastAttribute()\n      if (!lastAttributeName) {\n        return\n      }\n      if (!getBlockConfig(lastAttributeName).terminal) {\n        return\n      }\n      blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(lastAttributeName))\n    })\n    return new this.constructor(blockList)\n  }\n\n  removeBlockAttributesAtRange(range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      if (block.hasAttributes()) {\n        blockList = blockList.editObjectAtIndex(index, () => block.copyWithoutAttributes())\n      }\n    })\n    return new this.constructor(blockList)\n  }\n\n  expandRangeToLineBreaksAndSplitBlocks(range) {\n    let position\n    range = normalizeRange(range)\n    let [ startPosition, endPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n    let document = this\n\n    const startBlock = document.getBlockAtIndex(startLocation.index)\n    startLocation.offset = startBlock.findLineBreakInDirectionFromPosition(\"backward\", startLocation.offset)\n    if (startLocation.offset != null) {\n      position = document.positionFromLocation(startLocation)\n      document = document.insertBlockBreakAtRange([ position, position + 1 ])\n      endLocation.index += 1\n      endLocation.offset -= document.getBlockAtIndex(startLocation.index).getLength()\n      startLocation.index += 1\n    }\n    startLocation.offset = 0\n\n    if (endLocation.offset === 0 && endLocation.index > startLocation.index) {\n      endLocation.index -= 1\n      endLocation.offset = document.getBlockAtIndex(endLocation.index).getBlockBreakPosition()\n    } else {\n      const endBlock = document.getBlockAtIndex(endLocation.index)\n      if (endBlock.text.getStringAtRange([ endLocation.offset - 1, endLocation.offset ]) === \"\\n\") {\n        endLocation.offset -= 1\n      } else {\n        endLocation.offset = endBlock.findLineBreakInDirectionFromPosition(\"forward\", endLocation.offset)\n      }\n      if (endLocation.offset !== endBlock.getBlockBreakPosition()) {\n        position = document.positionFromLocation(endLocation)\n        document = document.insertBlockBreakAtRange([ position, position + 1 ])\n      }\n    }\n\n    startPosition = document.positionFromLocation(startLocation)\n    endPosition = document.positionFromLocation(endLocation)\n    range = normalizeRange([ startPosition, endPosition ])\n\n    return { document, range }\n  }\n\n  convertLineBreaksToBlockBreaksInRange(range) {\n    range = normalizeRange(range)\n    let [ position ] = range\n    const string = this.getStringAtRange(range).slice(0, -1)\n    let document = this\n\n    string.replace(/.*?\\n/g, function(match) {\n      position += match.length\n      document = document.insertBlockBreakAtRange([ position - 1, position ])\n    })\n\n    return { document, range }\n  }\n\n  consolidateBlocksAtRange(range) {\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    const startIndex = this.locationFromPosition(startPosition).index\n    const endIndex = this.locationFromPosition(endPosition).index\n    return new this.constructor(this.blockList.consolidateFromIndexToIndex(startIndex, endIndex))\n  }\n\n  getDocumentAtRange(range) {\n    range = normalizeRange(range)\n    const blocks = this.blockList.getSplittableListInRange(range).toArray()\n    return new this.constructor(blocks)\n  }\n\n  getStringAtRange(range) {\n    let endIndex\n    const array = range = normalizeRange(range),\n      endPosition = array[array.length - 1]\n    if (endPosition !== this.getLength()) {\n      endIndex = -1\n    }\n    return this.getDocumentAtRange(range).toString().slice(0, endIndex)\n  }\n\n  getBlockAtIndex(index) {\n    return this.blockList.getObjectAtIndex(index)\n  }\n\n  getBlockAtPosition(position) {\n    const { index } = this.locationFromPosition(position)\n    return this.getBlockAtIndex(index)\n  }\n\n  getTextAtIndex(index) {\n    return this.getBlockAtIndex(index)?.text\n  }\n\n  getTextAtPosition(position) {\n    const { index } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index)\n  }\n\n  getPieceAtPosition(position) {\n    const { index, offset } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index).getPieceAtPosition(offset)\n  }\n\n  getCharacterAtPosition(position) {\n    const { index, offset } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index).getStringAtRange([ offset, offset + 1 ])\n  }\n\n  getLength() {\n    return this.blockList.getEndPosition()\n  }\n\n  getBlocks() {\n    return this.blockList.toArray()\n  }\n\n  getBlockCount() {\n    return this.blockList.length\n  }\n\n  getEditCount() {\n    return this.editCount\n  }\n\n  eachBlock(callback) {\n    return this.blockList.eachObject(callback)\n  }\n\n  eachBlockAtRange(range, callback) {\n    let block, textRange\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n\n    if (startLocation.index === endLocation.index) {\n      block = this.getBlockAtIndex(startLocation.index)\n      textRange = [ startLocation.offset, endLocation.offset ]\n      return callback(block, textRange, startLocation.index)\n    } else {\n      for (let index = startLocation.index; index <= endLocation.index; index++) {\n        block = this.getBlockAtIndex(index)\n        if (block) {\n          switch (index) {\n            case startLocation.index:\n              textRange = [ startLocation.offset, block.text.getLength() ]\n              break\n            case endLocation.index:\n              textRange = [ 0, endLocation.offset ]\n              break\n            default:\n              textRange = [ 0, block.text.getLength() ]\n          }\n          callback(block, textRange, index)\n        }\n      }\n    }\n  }\n\n  getCommonAttributesAtRange(range) {\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    if (rangeIsCollapsed(range)) {\n      return this.getCommonAttributesAtPosition(startPosition)\n    } else {\n      const textAttributes = []\n      const blockAttributes = []\n\n      this.eachBlockAtRange(range, function(block, textRange) {\n        if (textRange[0] !== textRange[1]) {\n          textAttributes.push(block.text.getCommonAttributesAtRange(textRange))\n          return blockAttributes.push(attributesForBlock(block))\n        }\n      })\n\n      return Hash.fromCommonAttributesOfObjects(textAttributes)\n        .merge(Hash.fromCommonAttributesOfObjects(blockAttributes))\n        .toObject()\n    }\n  }\n\n  getCommonAttributesAtPosition(position) {\n    let key, value\n    const { index, offset } = this.locationFromPosition(position)\n    const block = this.getBlockAtIndex(index)\n    if (!block) {\n      return {}\n    }\n\n    const commonAttributes = attributesForBlock(block)\n    const attributes = block.text.getAttributesAtPosition(offset)\n    const attributesLeft = block.text.getAttributesAtPosition(offset - 1)\n    const inheritableAttributes = Object.keys(config.textAttributes).filter((key) => {\n      return config.textAttributes[key].inheritable\n    })\n\n    for (key in attributesLeft) {\n      value = attributesLeft[key]\n      if (value === attributes[key] || inheritableAttributes.includes(key)) {\n        commonAttributes[key] = value\n      }\n    }\n\n    return commonAttributes\n  }\n\n  getRangeOfCommonAttributeAtPosition(attributeName, position) {\n    const { index, offset } = this.locationFromPosition(position)\n    const text = this.getTextAtIndex(index)\n    const [ startOffset, endOffset ] = Array.from(text.getExpandedRangeForAttributeAtOffset(attributeName, offset))\n\n    const start = this.positionFromLocation({ index, offset: startOffset })\n    const end = this.positionFromLocation({ index, offset: endOffset })\n    return normalizeRange([ start, end ])\n  }\n\n  getBaseBlockAttributes() {\n    let baseBlockAttributes = this.getBlockAtIndex(0).getAttributes()\n\n    for (let blockIndex = 1; blockIndex < this.getBlockCount(); blockIndex++) {\n      const blockAttributes = this.getBlockAtIndex(blockIndex).getAttributes()\n      const lastAttributeIndex = Math.min(baseBlockAttributes.length, blockAttributes.length)\n\n      baseBlockAttributes = (() => {\n        const result = []\n        for (let index = 0; index < lastAttributeIndex; index++) {\n          if (blockAttributes[index] !== baseBlockAttributes[index]) {\n            break\n          }\n          result.push(blockAttributes[index])\n        }\n        return result\n      })()\n    }\n\n    return baseBlockAttributes\n  }\n\n  getAttachmentById(attachmentId) {\n    for (const attachment of this.getAttachments()) {\n      if (attachment.id === attachmentId) {\n        return attachment\n      }\n    }\n  }\n\n  getAttachmentPieces() {\n    let attachmentPieces = []\n    this.blockList.eachObject(({ text }) => attachmentPieces = attachmentPieces.concat(text.getAttachmentPieces()))\n    return attachmentPieces\n  }\n\n  getAttachments() {\n    return this.getAttachmentPieces().map((piece) => piece.attachment)\n  }\n\n  getRangeOfAttachment(attachment) {\n    let position = 0\n    const iterable = this.blockList.toArray()\n    for (let index = 0; index < iterable.length; index++) {\n      const { text } = iterable[index]\n      const textRange = text.getRangeOfAttachment(attachment)\n      if (textRange) {\n        return normalizeRange([ position + textRange[0], position + textRange[1] ])\n      }\n      position += text.getLength()\n    }\n  }\n\n  getLocationRangeOfAttachment(attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    return this.locationRangeFromRange(range)\n  }\n\n  getAttachmentPieceForAttachment(attachment) {\n    for (const piece of this.getAttachmentPieces()) {\n      if (piece.attachment === attachment) {\n        return piece\n      }\n    }\n  }\n\n  findRangesForBlockAttribute(attributeName) {\n    let position = 0\n    const ranges = []\n\n    this.getBlocks().forEach((block) => {\n      const length = block.getLength()\n      if (block.hasAttribute(attributeName)) {\n        ranges.push([ position, position + length ])\n      }\n      position += length\n    })\n\n    return ranges\n  }\n\n  findRangesForTextAttribute(attributeName, { withValue } = {}) {\n    let position = 0\n    let range = []\n    const ranges = []\n\n    const match = function(piece) {\n      if (withValue) {\n        return piece.getAttribute(attributeName) === withValue\n      } else {\n        return piece.hasAttribute(attributeName)\n      }\n    }\n\n    this.getPieces().forEach((piece) => {\n      const length = piece.getLength()\n      if (match(piece)) {\n        if (range[1] === position) {\n          range[1] = position + length\n        } else {\n          ranges.push(range = [ position, position + length ])\n        }\n      }\n      position += length\n    })\n\n    return ranges\n  }\n\n  locationFromPosition(position) {\n    const location = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, position))\n    if (location.index != null) {\n      return location\n    } else {\n      const blocks = this.getBlocks()\n      return { index: blocks.length - 1, offset: blocks[blocks.length - 1].getLength() }\n    }\n  }\n\n  positionFromLocation(location) {\n    return this.blockList.findPositionAtIndexAndOffset(location.index, location.offset)\n  }\n\n  locationRangeFromPosition(position) {\n    return normalizeRange(this.locationFromPosition(position))\n  }\n\n  locationRangeFromRange(range) {\n    range = normalizeRange(range)\n    if (!range) return\n\n    const [ startPosition, endPosition ] = Array.from(range)\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n    return normalizeRange([ startLocation, endLocation ])\n  }\n\n  rangeFromLocationRange(locationRange) {\n    let rightPosition\n    locationRange = normalizeRange(locationRange)\n    const leftPosition = this.positionFromLocation(locationRange[0])\n    if (!rangeIsCollapsed(locationRange)) {\n      rightPosition = this.positionFromLocation(locationRange[1])\n    }\n    return normalizeRange([ leftPosition, rightPosition ])\n  }\n\n  isEqualTo(document) {\n    return this.blockList.isEqualTo(document?.blockList)\n  }\n\n  getTexts() {\n    return this.getBlocks().map((block) => block.text)\n  }\n\n  getPieces() {\n    const pieces = []\n\n    Array.from(this.getTexts()).forEach((text) => {\n      pieces.push(...Array.from(text.getPieces() || []))\n    })\n\n    return pieces\n  }\n\n  getObjects() {\n    return this.getBlocks().concat(this.getTexts()).concat(this.getPieces())\n  }\n\n  toSerializableDocument() {\n    const blocks = []\n    this.blockList.eachObject((block) => blocks.push(block.copyWithText(block.text.toSerializableText())))\n    return new this.constructor(blocks)\n  }\n\n  toString() {\n    return this.blockList.toString()\n  }\n\n  toJSON() {\n    return this.blockList.toJSON()\n  }\n\n  toConsole() {\n    return JSON.stringify(this.blockList.toArray().map((block) => JSON.parse(block.text.toConsole())))\n  }\n}\n\nconst attributesForBlock = function(block) {\n  const attributes = {}\n  const attributeName = block.getLastAttribute()\n  if (attributeName) {\n    attributes[attributeName] = true\n  }\n  return attributes\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { nodeIsAttachmentElement, removeNode, tagName, walkTree } from \"trix/core/helpers\"\n\nconst DEFAULT_ALLOWED_ATTRIBUTES = \"style href src width height language class\".split(\" \")\nconst DEFAULT_FORBIDDEN_PROTOCOLS = \"javascript:\".split(\" \")\nconst DEFAULT_FORBIDDEN_ELEMENTS = \"script iframe form noscript\".split(\" \")\n\nexport default class HTMLSanitizer extends BasicObject {\n  static sanitize(html, options) {\n    const sanitizer = new this(html, options)\n    sanitizer.sanitize()\n    return sanitizer\n  }\n\n  constructor(html, { allowedAttributes, forbiddenProtocols, forbiddenElements } = {}) {\n    super(...arguments)\n    this.allowedAttributes = allowedAttributes || DEFAULT_ALLOWED_ATTRIBUTES\n    this.forbiddenProtocols = forbiddenProtocols || DEFAULT_FORBIDDEN_PROTOCOLS\n    this.forbiddenElements = forbiddenElements || DEFAULT_FORBIDDEN_ELEMENTS\n    this.body = createBodyElementForHTML(html)\n  }\n\n  sanitize() {\n    this.sanitizeElements()\n    return this.normalizeListElementNesting()\n  }\n\n  getHTML() {\n    return this.body.innerHTML\n  }\n\n  getBody() {\n    return this.body\n  }\n\n  // Private\n\n  sanitizeElements() {\n    const walker = walkTree(this.body)\n    const nodesToRemove = []\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n      switch (node.nodeType) {\n        case Node.ELEMENT_NODE:\n          if (this.elementIsRemovable(node)) {\n            nodesToRemove.push(node)\n          } else {\n            this.sanitizeElement(node)\n          }\n          break\n        case Node.COMMENT_NODE:\n          nodesToRemove.push(node)\n          break\n      }\n    }\n\n    nodesToRemove.forEach((node) => removeNode(node))\n\n    return this.body\n  }\n\n  sanitizeElement(element) {\n    if (element.hasAttribute(\"href\")) {\n      if (this.forbiddenProtocols.includes(element.protocol)) {\n        element.removeAttribute(\"href\")\n      }\n    }\n\n    Array.from(element.attributes).forEach(({ name }) => {\n      if (!this.allowedAttributes.includes(name) && name.indexOf(\"data-trix\") !== 0) {\n        element.removeAttribute(name)\n      }\n    })\n\n    return element\n  }\n\n  normalizeListElementNesting() {\n    Array.from(this.body.querySelectorAll(\"ul,ol\")).forEach((listElement) => {\n      const previousElement = listElement.previousElementSibling\n      if (previousElement) {\n        if (tagName(previousElement) === \"li\") {\n          previousElement.appendChild(listElement)\n        }\n      }\n    })\n\n    return this.body\n  }\n\n  elementIsRemovable(element) {\n    if (element?.nodeType !== Node.ELEMENT_NODE) return\n    return this.elementIsForbidden(element) || this.elementIsntSerializable(element)\n  }\n\n  elementIsForbidden(element) {\n    return this.forbiddenElements.includes(tagName(element))\n  }\n\n  elementIsntSerializable(element) {\n    return element.getAttribute(\"data-trix-serialize\") === \"false\" && !nodeIsAttachmentElement(element)\n  }\n}\n\nconst createBodyElementForHTML = function(html = \"\") {\n  // Remove everything after </html>\n  html = html.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\")\n  const doc = document.implementation.createHTMLDocument(\"\")\n  doc.documentElement.innerHTML = html\n\n  Array.from(doc.head.querySelectorAll(\"style\")).forEach((element) => {\n    doc.body.appendChild(element)\n  })\n\n  return doc.body\n}\n", "/* eslint-disable\n    no-case-declarations,\n    no-irregular-whitespace,\n*/\nimport * as config from \"trix/config\"\nimport BasicObject from \"trix/core/basic_object\"\nimport Document from \"trix/models/document\"\nimport HTMLSanitizer from \"trix/models/html_sanitizer\"\n\nimport {\n  arraysAreEqual,\n  breakableWhitespacePattern,\n  elementContainsNode,\n  findClosestElementFromNode,\n  getBlockTagNames,\n  makeElement,\n  nodeIsAttachmentElement,\n  normalizeSpaces,\n  removeNode,\n  squishBreakableWhitespace,\n  tagName,\n  walkTree,\n} from \"trix/core/helpers\"\n\nconst pieceForString = (string, attributes = {}) => {\n  const type = \"string\"\n  string = normalizeSpaces(string)\n  return { string, attributes, type }\n}\n\nconst pieceForAttachment = (attachment, attributes = {}) => {\n  const type = \"attachment\"\n  return { attachment, attributes, type }\n}\n\nconst blockForAttributes = (attributes = {}, htmlAttributes = {}) => {\n  const text = []\n  return { text, attributes, htmlAttributes }\n}\n\nconst parseTrixDataAttribute = (element, name) => {\n  try {\n    const data = JSON.parse(element.getAttribute(`data-trix-${name}`))\n\n    if (data.contentType === \"text/html\" && data.content) {\n      data.content = HTMLSanitizer.sanitize(data.content).getHTML()\n    }\n\n    return data\n  } catch (error) {\n    return {}\n  }\n}\n\nconst getImageDimensions = (element) => {\n  const width = element.getAttribute(\"width\")\n  const height = element.getAttribute(\"height\")\n  const dimensions = {}\n  if (width) {\n    dimensions.width = parseInt(width, 10)\n  }\n  if (height) {\n    dimensions.height = parseInt(height, 10)\n  }\n  return dimensions\n}\n\nexport default class HTMLParser extends BasicObject {\n  static parse(html, options) {\n    const parser = new this(html, options)\n    parser.parse()\n    return parser\n  }\n\n  constructor(html, { referenceElement } = {}) {\n    super(...arguments)\n    this.html = html\n    this.referenceElement = referenceElement\n    this.blocks = []\n    this.blockElements = []\n    this.processedElements = []\n  }\n\n  getDocument() {\n    return Document.fromJSON(this.blocks)\n  }\n\n  // HTML parsing\n\n  parse() {\n    try {\n      this.createHiddenContainer()\n      const html = HTMLSanitizer.sanitize(this.html).getHTML()\n      this.containerElement.innerHTML = html\n      const walker = walkTree(this.containerElement, { usingFilter: nodeFilter })\n      while (walker.nextNode()) {\n        this.processNode(walker.currentNode)\n      }\n      return this.translateBlockElementMarginsToNewlines()\n    } finally {\n      this.removeHiddenContainer()\n    }\n  }\n\n  createHiddenContainer() {\n    if (this.referenceElement) {\n      this.containerElement = this.referenceElement.cloneNode(false)\n      this.containerElement.removeAttribute(\"id\")\n      this.containerElement.setAttribute(\"data-trix-internal\", \"\")\n      this.containerElement.style.display = \"none\"\n      return this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)\n    } else {\n      this.containerElement = makeElement({ tagName: \"div\", style: { display: \"none\" } })\n      return document.body.appendChild(this.containerElement)\n    }\n  }\n\n  removeHiddenContainer() {\n    return removeNode(this.containerElement)\n  }\n\n  processNode(node) {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        if (!this.isInsignificantTextNode(node)) {\n          this.appendBlockForTextNode(node)\n          return this.processTextNode(node)\n        }\n        break\n      case Node.ELEMENT_NODE:\n        this.appendBlockForElement(node)\n        return this.processElement(node)\n    }\n  }\n\n  appendBlockForTextNode(node) {\n    const element = node.parentNode\n    if (element === this.currentBlockElement && this.isBlockElement(node.previousSibling)) {\n      return this.appendStringWithAttributes(\"\\n\")\n    } else if (element === this.containerElement || this.isBlockElement(element)) {\n      const attributes = this.getBlockAttributes(element)\n      const htmlAttributes = this.getBlockHTMLAttributes(element)\n      if (!arraysAreEqual(attributes, this.currentBlock?.attributes)) {\n        this.currentBlock = this.appendBlockForAttributesWithElement(attributes, element, htmlAttributes)\n        this.currentBlockElement = element\n      }\n    }\n  }\n\n  appendBlockForElement(element) {\n    const elementIsBlockElement = this.isBlockElement(element)\n    const currentBlockContainsElement = elementContainsNode(this.currentBlockElement, element)\n\n    if (elementIsBlockElement && !this.isBlockElement(element.firstChild)) {\n      if (!this.isInsignificantTextNode(element.firstChild) || !this.isBlockElement(element.firstElementChild)) {\n        const attributes = this.getBlockAttributes(element)\n        const htmlAttributes = this.getBlockHTMLAttributes(element)\n        if (element.firstChild) {\n          if (!(currentBlockContainsElement && arraysAreEqual(attributes, this.currentBlock.attributes))) {\n            this.currentBlock = this.appendBlockForAttributesWithElement(attributes, element, htmlAttributes)\n            this.currentBlockElement = element\n          } else {\n            return this.appendStringWithAttributes(\"\\n\")\n          }\n        }\n      }\n    } else if (this.currentBlockElement && !currentBlockContainsElement && !elementIsBlockElement) {\n      const parentBlockElement = this.findParentBlockElement(element)\n      if (parentBlockElement) {\n        return this.appendBlockForElement(parentBlockElement)\n      } else {\n        this.currentBlock = this.appendEmptyBlock()\n        this.currentBlockElement = null\n      }\n    }\n  }\n\n  findParentBlockElement(element) {\n    let { parentElement } = element\n    while (parentElement && parentElement !== this.containerElement) {\n      if (this.isBlockElement(parentElement) && this.blockElements.includes(parentElement)) {\n        return parentElement\n      } else {\n        parentElement = parentElement.parentElement\n      }\n    }\n    return null\n  }\n\n  processTextNode(node) {\n    let string = node.data\n    if (!elementCanDisplayPreformattedText(node.parentNode)) {\n      string = squishBreakableWhitespace(string)\n      if (stringEndsWithWhitespace(node.previousSibling?.textContent)) {\n        string = leftTrimBreakableWhitespace(string)\n      }\n    }\n    return this.appendStringWithAttributes(string, this.getTextAttributes(node.parentNode))\n  }\n\n  processElement(element) {\n    let attributes\n    if (nodeIsAttachmentElement(element)) {\n      attributes = parseTrixDataAttribute(element, \"attachment\")\n      if (Object.keys(attributes).length) {\n        const textAttributes = this.getTextAttributes(element)\n        this.appendAttachmentWithAttributes(attributes, textAttributes)\n        // We have everything we need so avoid processing inner nodes\n        element.innerHTML = \"\"\n      }\n      return this.processedElements.push(element)\n    } else {\n      switch (tagName(element)) {\n        case \"br\":\n          if (!this.isExtraBR(element) && !this.isBlockElement(element.nextSibling)) {\n            this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(element))\n          }\n          return this.processedElements.push(element)\n        case \"img\":\n          attributes = { url: element.getAttribute(\"src\"), contentType: \"image\" }\n          const object = getImageDimensions(element)\n          for (const key in object) {\n            const value = object[key]\n            attributes[key] = value\n          }\n          this.appendAttachmentWithAttributes(attributes, this.getTextAttributes(element))\n          return this.processedElements.push(element)\n        case \"tr\":\n          if (this.needsTableSeparator(element)) {\n            return this.appendStringWithAttributes(config.parser.tableRowSeparator)\n          }\n          break\n        case \"td\":\n          if (this.needsTableSeparator(element)) {\n            return this.appendStringWithAttributes(config.parser.tableCellSeparator)\n          }\n          break\n      }\n    }\n  }\n\n  // Document construction\n\n  appendBlockForAttributesWithElement(attributes, element, htmlAttributes = {}) {\n    this.blockElements.push(element)\n    const block = blockForAttributes(attributes, htmlAttributes)\n    this.blocks.push(block)\n    return block\n  }\n\n  appendEmptyBlock() {\n    return this.appendBlockForAttributesWithElement([], null)\n  }\n\n  appendStringWithAttributes(string, attributes) {\n    return this.appendPiece(pieceForString(string, attributes))\n  }\n\n  appendAttachmentWithAttributes(attachment, attributes) {\n    return this.appendPiece(pieceForAttachment(attachment, attributes))\n  }\n\n  appendPiece(piece) {\n    if (this.blocks.length === 0) {\n      this.appendEmptyBlock()\n    }\n    return this.blocks[this.blocks.length - 1].text.push(piece)\n  }\n\n  appendStringToTextAtIndex(string, index) {\n    const { text } = this.blocks[index]\n    const piece = text[text.length - 1]\n\n    if (piece?.type === \"string\") {\n      piece.string += string\n    } else {\n      return text.push(pieceForString(string))\n    }\n  }\n\n  prependStringToTextAtIndex(string, index) {\n    const { text } = this.blocks[index]\n    const piece = text[0]\n\n    if (piece?.type === \"string\") {\n      piece.string = string + piece.string\n    } else {\n      return text.unshift(pieceForString(string))\n    }\n  }\n\n  // Attribute parsing\n\n  getTextAttributes(element) {\n    let value\n    const attributes = {}\n    for (const attribute in config.textAttributes) {\n      const configAttr = config.textAttributes[attribute]\n      if (\n        configAttr.tagName &&\n        findClosestElementFromNode(element, {\n          matchingSelector: configAttr.tagName,\n          untilNode: this.containerElement,\n        })\n      ) {\n        attributes[attribute] = true\n      } else if (configAttr.parser) {\n        value = configAttr.parser(element)\n        if (value) {\n          let attributeInheritedFromBlock = false\n          for (const blockElement of this.findBlockElementAncestors(element)) {\n            if (configAttr.parser(blockElement) === value) {\n              attributeInheritedFromBlock = true\n              break\n            }\n          }\n          if (!attributeInheritedFromBlock) {\n            attributes[attribute] = value\n          }\n        }\n      } else if (configAttr.styleProperty) {\n        value = element.style[configAttr.styleProperty]\n        if (value) {\n          attributes[attribute] = value\n        }\n      }\n    }\n\n    if (nodeIsAttachmentElement(element)) {\n      const object = parseTrixDataAttribute(element, \"attributes\")\n      for (const key in object) {\n        value = object[key]\n        attributes[key] = value\n      }\n    }\n\n    return attributes\n  }\n\n  getBlockAttributes(element) {\n    const attributes = []\n    while (element && element !== this.containerElement) {\n      for (const attribute in config.blockAttributes) {\n        const attrConfig = config.blockAttributes[attribute]\n        if (attrConfig.parse !== false) {\n          if (tagName(element) === attrConfig.tagName) {\n            if (attrConfig.test?.(element) || !attrConfig.test) {\n              attributes.push(attribute)\n              if (attrConfig.listAttribute) {\n                attributes.push(attrConfig.listAttribute)\n              }\n            }\n          }\n        }\n      }\n      element = element.parentNode\n    }\n    return attributes.reverse()\n  }\n\n  getBlockHTMLAttributes(element) {\n    const attributes = {}\n    const blockConfig = Object.values(config.blockAttributes).find(settings => settings.tagName === tagName(element))\n    const allowedAttributes = blockConfig?.htmlAttributes || []\n\n    allowedAttributes.forEach((attribute) => {\n      if (element.hasAttribute(attribute)) {\n        attributes[attribute] = element.getAttribute(attribute)\n      }\n    })\n\n    return attributes\n  }\n\n  findBlockElementAncestors(element) {\n    const ancestors = []\n    while (element && element !== this.containerElement) {\n      const tag = tagName(element)\n      if (getBlockTagNames().includes(tag)) {\n        ancestors.push(element)\n      }\n      element = element.parentNode\n    }\n    return ancestors\n  }\n\n  // Element inspection\n\n  isBlockElement(element) {\n    if (element?.nodeType !== Node.ELEMENT_NODE) return\n    if (nodeIsAttachmentElement(element)) return\n    if (findClosestElementFromNode(element, { matchingSelector: \"td\", untilNode: this.containerElement })) return\n\n    return getBlockTagNames().includes(tagName(element)) ||\n      window.getComputedStyle(element).display === \"block\"\n  }\n\n  isInsignificantTextNode(node) {\n    if (node?.nodeType !== Node.TEXT_NODE) return\n    if (!stringIsAllBreakableWhitespace(node.data)) return\n    const { parentNode, previousSibling, nextSibling } = node\n    if (nodeEndsWithNonWhitespace(parentNode.previousSibling) && !this.isBlockElement(parentNode.previousSibling)) return\n    if (elementCanDisplayPreformattedText(parentNode)) return\n    return !previousSibling || this.isBlockElement(previousSibling) || !nextSibling || this.isBlockElement(nextSibling)\n  }\n\n  isExtraBR(element) {\n    return tagName(element) === \"br\" && this.isBlockElement(element.parentNode) && element.parentNode.lastChild === element\n  }\n\n  needsTableSeparator(element) {\n    if (config.parser.removeBlankTableCells) {\n      const content = element.previousSibling?.textContent\n      return content && /\\S/.test(content)\n    } else {\n      return element.previousSibling\n    }\n  }\n\n  // Margin translation\n\n  translateBlockElementMarginsToNewlines() {\n    const defaultMargin = this.getMarginOfDefaultBlockElement()\n\n    for (let index = 0; index < this.blocks.length; index++) {\n      const margin = this.getMarginOfBlockElementAtIndex(index)\n      if (margin) {\n        if (margin.top > defaultMargin.top * 2) {\n          this.prependStringToTextAtIndex(\"\\n\", index)\n        }\n\n        if (margin.bottom > defaultMargin.bottom * 2) {\n          this.appendStringToTextAtIndex(\"\\n\", index)\n        }\n      }\n    }\n  }\n\n  getMarginOfBlockElementAtIndex(index) {\n    const element = this.blockElements[index]\n    if (element) {\n      if (element.textContent) {\n        if (!getBlockTagNames().includes(tagName(element)) && !this.processedElements.includes(element)) {\n          return getBlockElementMargin(element)\n        }\n      }\n    }\n  }\n\n  getMarginOfDefaultBlockElement() {\n    const element = makeElement(config.blockAttributes.default.tagName)\n    this.containerElement.appendChild(element)\n    return getBlockElementMargin(element)\n  }\n}\n\n//\u00A0Helpers\n\nconst elementCanDisplayPreformattedText = function(element) {\n  const { whiteSpace } = window.getComputedStyle(element)\n  return [ \"pre\", \"pre-wrap\", \"pre-line\" ].includes(whiteSpace)\n}\n\nconst nodeEndsWithNonWhitespace = (node) => node && !stringEndsWithWhitespace(node.textContent)\n\nconst getBlockElementMargin = function(element) {\n  const style = window.getComputedStyle(element)\n  if (style.display === \"block\") {\n    return { top: parseInt(style.marginTop), bottom: parseInt(style.marginBottom) }\n  }\n}\n\nconst nodeFilter = function(node) {\n  if (tagName(node) === \"style\") {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n\n// Whitespace\n\nconst leftTrimBreakableWhitespace = (string) => string.replace(new RegExp(`^${breakableWhitespacePattern.source}+`), \"\")\n\nconst stringIsAllBreakableWhitespace = (string) => new RegExp(`^${breakableWhitespacePattern.source}*$`).test(string)\n\nconst stringEndsWithWhitespace = (string) => /\\s$/.test(string)\n", "/* eslint-disable\n    no-empty,\n*/\nimport { removeNode } from \"trix/core/helpers\"\n\nimport DocumentView from \"trix/views/document_view\"\nimport Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\n\nconst unserializableElementSelector = \"[data-trix-serialize=false]\"\nconst unserializableAttributeNames = [\n  \"contenteditable\",\n  \"data-trix-id\",\n  \"data-trix-store-key\",\n  \"data-trix-mutable\",\n  \"data-trix-placeholder\",\n  \"tabindex\",\n]\nconst serializedAttributesAttribute = \"data-trix-serialized-attributes\"\nconst serializedAttributesSelector = `[${serializedAttributesAttribute}]`\n\nconst blockCommentPattern = new RegExp(\"<!--block-->\", \"g\")\n\nconst serializers = {\n  \"application/json\": function(serializable) {\n    let document\n    if (serializable instanceof Document) {\n      document = serializable\n    } else if (serializable instanceof HTMLElement) {\n      document = HTMLParser.parse(serializable.innerHTML).getDocument()\n    } else {\n      throw new Error(\"unserializable object\")\n    }\n\n    return document.toSerializableDocument().toJSONString()\n  },\n\n  \"text/html\": function(serializable) {\n    let element\n    if (serializable instanceof Document) {\n      element = DocumentView.render(serializable)\n    } else if (serializable instanceof HTMLElement) {\n      element = serializable.cloneNode(true)\n    } else {\n      throw new Error(\"unserializable object\")\n    }\n\n    // Remove unserializable elements\n    Array.from(element.querySelectorAll(unserializableElementSelector)).forEach((el) => {\n      removeNode(el)\n    })\n\n    // Remove unserializable attributes\n    unserializableAttributeNames.forEach((attribute) => {\n      Array.from(element.querySelectorAll(`[${attribute}]`)).forEach((el) => {\n        el.removeAttribute(attribute)\n      })\n    })\n\n    // Rewrite elements with serialized attribute overrides\n    Array.from(element.querySelectorAll(serializedAttributesSelector)).forEach((el) => {\n      try {\n        const attributes = JSON.parse(el.getAttribute(serializedAttributesAttribute))\n        el.removeAttribute(serializedAttributesAttribute)\n        for (const name in attributes) {\n          const value = attributes[name]\n          el.setAttribute(name, value)\n        }\n      } catch (error) {}\n    })\n\n    return element.innerHTML.replace(blockCommentPattern, \"\")\n  },\n}\n\nconst deserializers = {\n  \"application/json\": function(string) {\n    return Document.fromJSONString(string)\n  },\n\n  \"text/html\": function(string) {\n    return HTMLParser.parse(string).getDocument()\n  },\n}\n\nexport const serializeToContentType = function(serializable, contentType) {\n  const serializer = serializers[contentType]\n  if (serializer) {\n    return serializer(serializable)\n  } else {\n    throw new Error(`unknown content type: ${contentType}`)\n  }\n}\n\nexport const deserializeFromContentType = function(string, contentType) {\n  const deserializer = deserializers[contentType]\n  if (deserializer) {\n    return deserializer(string)\n  } else {\n    throw new Error(`unknown content type: ${contentType}`)\n  }\n}\n", "import \"trix/models/attachment\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class ManagedAttachment extends BasicObject {\n  constructor(attachmentManager, attachment) {\n    super(...arguments)\n    this.attachmentManager = attachmentManager\n    this.attachment = attachment\n    this.id = this.attachment.id\n    this.file = this.attachment.file\n  }\n\n  remove() {\n    return this.attachmentManager.requestRemovalOfAttachment(this.attachment)\n  }\n}\n\nManagedAttachment.proxyMethod(\"attachment.getAttribute\")\nManagedAttachment.proxyMethod(\"attachment.hasAttribute\")\nManagedAttachment.proxyMethod(\"attachment.setAttribute\")\nManagedAttachment.proxyMethod(\"attachment.getAttributes\")\nManagedAttachment.proxyMethod(\"attachment.setAttributes\")\nManagedAttachment.proxyMethod(\"attachment.isPending\")\nManagedAttachment.proxyMethod(\"attachment.isPreviewable\")\nManagedAttachment.proxyMethod(\"attachment.getURL\")\nManagedAttachment.proxyMethod(\"attachment.getHref\")\nManagedAttachment.proxyMethod(\"attachment.getFilename\")\nManagedAttachment.proxyMethod(\"attachment.getFilesize\")\nManagedAttachment.proxyMethod(\"attachment.getFormattedFilesize\")\nManagedAttachment.proxyMethod(\"attachment.getExtension\")\nManagedAttachment.proxyMethod(\"attachment.getContentType\")\nManagedAttachment.proxyMethod(\"attachment.getFile\")\nManagedAttachment.proxyMethod(\"attachment.setFile\")\nManagedAttachment.proxyMethod(\"attachment.releaseFile\")\nManagedAttachment.proxyMethod(\"attachment.getUploadProgress\")\nManagedAttachment.proxyMethod(\"attachment.setUploadProgress\")\n\n", "import ManagedAttachment from \"trix/models/managed_attachment\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class AttachmentManager extends BasicObject {\n  constructor(attachments = []) {\n    super(...arguments)\n    this.managedAttachments = {}\n    Array.from(attachments).forEach((attachment) => {\n      this.manageAttachment(attachment)\n    })\n  }\n\n  getAttachments() {\n    const result = []\n    for (const id in this.managedAttachments) {\n      const attachment = this.managedAttachments[id]\n      result.push(attachment)\n    }\n    return result\n  }\n\n  manageAttachment(attachment) {\n    if (!this.managedAttachments[attachment.id]) {\n      this.managedAttachments[attachment.id] = new ManagedAttachment(this, attachment)\n    }\n    return this.managedAttachments[attachment.id]\n  }\n\n  attachmentIsManaged(attachment) {\n    return attachment.id in this.managedAttachments\n  }\n\n  requestRemovalOfAttachment(attachment) {\n    if (this.attachmentIsManaged(attachment)) {\n      return this.delegate?.attachmentManagerDidRequestRemovalOfAttachment?.(attachment)\n    }\n  }\n\n  unmanageAttachment(attachment) {\n    const managedAttachment = this.managedAttachments[attachment.id]\n    delete this.managedAttachments[attachment.id]\n    return managedAttachment\n  }\n}\n", "export default class LineBreakInsertion {\n  constructor(composition) {\n    this.composition = composition\n    this.document = this.composition.document\n    const selectedRange = this.composition.getSelectedRange()\n    this.startPosition = selectedRange[0]\n    this.endPosition = selectedRange[1]\n\n    this.startLocation = this.document.locationFromPosition(this.startPosition)\n    this.endLocation = this.document.locationFromPosition(this.endPosition)\n\n    this.block = this.document.getBlockAtIndex(this.endLocation.index)\n    this.breaksOnReturn = this.block.breaksOnReturn()\n    this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1)\n    this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset)\n  }\n\n  shouldInsertBlockBreak() {\n    if (this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty()) {\n      return this.startLocation.offset !== 0\n    } else {\n      return this.breaksOnReturn && this.nextCharacter !== \"\\n\"\n    }\n  }\n\n  shouldBreakFormattedBlock() {\n    return (\n      this.block.hasAttributes() &&\n      !this.block.isListItem() &&\n      (this.breaksOnReturn && this.nextCharacter === \"\\n\" || this.previousCharacter === \"\\n\")\n    )\n  }\n\n  shouldDecreaseListLevel() {\n    return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty()\n  }\n\n  shouldPrependListItem() {\n    return this.block.isListItem() && this.startLocation.offset === 0 && !this.block.isEmpty()\n  }\n\n  shouldRemoveLastBlockAttribute() {\n    return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty()\n  }\n}\n", "import * as config from \"trix/config\"\nimport { OBJECT_REPLACEMENT_CHARACTER } from \"trix/constants\"\n\nimport BasicObject from \"trix/core/basic_object\"\nimport Text from \"trix/models/text\"\nimport Block from \"trix/models/block\"\nimport Attachment from \"trix/models/attachment\"\nimport Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\nimport LineBreakInsertion from \"trix/models/line_break_insertion\"\n\nimport {\n  arrayStartsWith,\n  extend,\n  getAllAttributeNames,\n  getBlockConfig,\n  getTextConfig,\n  normalizeRange,\n  objectsAreEqual,\n  rangeIsCollapsed,\n  rangesAreEqual,\n  summarizeArrayChange,\n} from \"trix/core/helpers\"\n\nconst PLACEHOLDER = \" \"\n\nexport default class Composition extends BasicObject {\n  constructor() {\n    super(...arguments)\n    this.document = new Document()\n    this.attachments = []\n    this.currentAttributes = {}\n    this.revision = 0\n  }\n\n  setDocument(document) {\n    if (!document.isEqualTo(this.document)) {\n      this.document = document\n      this.refreshAttachments()\n      this.revision++\n      return this.delegate?.compositionDidChangeDocument?.(document)\n    }\n  }\n\n  // Snapshots\n\n  getSnapshot() {\n    return {\n      document: this.document,\n      selectedRange: this.getSelectedRange(),\n    }\n  }\n\n  loadSnapshot({ document, selectedRange }) {\n    this.delegate?.compositionWillLoadSnapshot?.()\n    this.setDocument(document != null ? document : new Document())\n    this.setSelection(selectedRange != null ? selectedRange : [ 0, 0 ])\n    return this.delegate?.compositionDidLoadSnapshot?.()\n  }\n\n  // Responder protocol\n\n  insertText(text, { updatePosition } = { updatePosition: true }) {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertTextAtRange(text, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + text.getLength()\n\n    if (updatePosition) {\n      this.setSelection(endPosition)\n    }\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertBlock(block = new Block()) {\n    const document = new Document([ block ])\n    return this.insertDocument(document)\n  }\n\n  insertDocument(document = new Document()) {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertDocumentAtRange(document, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + document.getLength()\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertString(string, options) {\n    const attributes = this.getCurrentTextAttributes()\n    const text = Text.textForStringWithAttributes(string, attributes)\n    return this.insertText(text, options)\n  }\n\n  insertBlockBreak() {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertBlockBreakAtRange(selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + 1\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertLineBreak() {\n    const insertion = new LineBreakInsertion(this)\n\n    if (insertion.shouldDecreaseListLevel()) {\n      this.decreaseListLevel()\n      return this.setSelection(insertion.startPosition)\n    } else if (insertion.shouldPrependListItem()) {\n      const document = new Document([ insertion.block.copyWithoutText() ])\n      return this.insertDocument(document)\n    } else if (insertion.shouldInsertBlockBreak()) {\n      return this.insertBlockBreak()\n    } else if (insertion.shouldRemoveLastBlockAttribute()) {\n      return this.removeLastBlockAttribute()\n    } else if (insertion.shouldBreakFormattedBlock()) {\n      return this.breakFormattedBlock(insertion)\n    } else {\n      return this.insertString(\"\\n\")\n    }\n  }\n\n  insertHTML(html) {\n    const document = HTMLParser.parse(html).getDocument()\n    const selectedRange = this.getSelectedRange()\n\n    this.setDocument(this.document.mergeDocumentAtRange(document, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + document.getLength() - 1\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  replaceHTML(html) {\n    const document = HTMLParser.parse(html).getDocument().copyUsingObjectsFromDocument(this.document)\n    const locationRange = this.getLocationRange({ strict: false })\n    const selectedRange = this.document.rangeFromLocationRange(locationRange)\n    this.setDocument(document)\n    return this.setSelection(selectedRange)\n  }\n\n  insertFile(file) {\n    return this.insertFiles([ file ])\n  }\n\n  insertFiles(files) {\n    const attachments = []\n\n    Array.from(files).forEach((file) => {\n      if (this.delegate?.compositionShouldAcceptFile(file)) {\n        const attachment = Attachment.attachmentForFile(file)\n        attachments.push(attachment)\n      }\n    })\n\n    return this.insertAttachments(attachments)\n  }\n\n  insertAttachment(attachment) {\n    return this.insertAttachments([ attachment ])\n  }\n\n  insertAttachments(attachments) {\n    let text = new Text()\n\n    Array.from(attachments).forEach((attachment) => {\n      const type = attachment.getType()\n      const presentation = config.attachments[type]?.presentation\n\n      const attributes = this.getCurrentTextAttributes()\n      if (presentation) {\n        attributes.presentation = presentation\n      }\n\n      const attachmentText = Text.textForAttachmentWithAttributes(attachment, attributes)\n      text = text.appendText(attachmentText)\n    })\n\n    return this.insertText(text)\n  }\n\n  shouldManageDeletingInDirection(direction) {\n    const locationRange = this.getLocationRange()\n    if (rangeIsCollapsed(locationRange)) {\n      if (direction === \"backward\" && locationRange[0].offset === 0) {\n        return true\n      }\n      if (this.shouldManageMovingCursorInDirection(direction)) {\n        return true\n      }\n    } else {\n      if (locationRange[0].index !== locationRange[1].index) {\n        return true\n      }\n    }\n    return false\n  }\n\n  deleteInDirection(direction, { length } = {}) {\n    let attachment, deletingIntoPreviousBlock, selectionSpansBlocks\n    const locationRange = this.getLocationRange()\n    let range = this.getSelectedRange()\n    const selectionIsCollapsed = rangeIsCollapsed(range)\n\n    if (selectionIsCollapsed) {\n      deletingIntoPreviousBlock = direction === \"backward\" && locationRange[0].offset === 0\n    } else {\n      selectionSpansBlocks = locationRange[0].index !== locationRange[1].index\n    }\n\n    if (deletingIntoPreviousBlock) {\n      if (this.canDecreaseBlockAttributeLevel()) {\n        const block = this.getBlock()\n\n        if (block.isListItem()) {\n          this.decreaseListLevel()\n        } else {\n          this.decreaseBlockAttributeLevel()\n        }\n\n        this.setSelection(range[0])\n        if (block.isEmpty()) {\n          return false\n        }\n      }\n    }\n\n    if (selectionIsCollapsed) {\n      range = this.getExpandedRangeInDirection(direction, { length })\n      if (direction === \"backward\") {\n        attachment = this.getAttachmentAtRange(range)\n      }\n    }\n\n    if (attachment) {\n      this.editAttachment(attachment)\n      return false\n    } else {\n      this.setDocument(this.document.removeTextAtRange(range))\n      this.setSelection(range[0])\n      if (deletingIntoPreviousBlock || selectionSpansBlocks) {\n        return false\n      }\n    }\n  }\n\n  moveTextFromRange(range) {\n    const [ position ] = Array.from(this.getSelectedRange())\n    this.setDocument(this.document.moveTextFromRangeToPosition(range, position))\n    return this.setSelection(position)\n  }\n\n  removeAttachment(attachment) {\n    const range = this.document.getRangeOfAttachment(attachment)\n    if (range) {\n      this.stopEditingAttachment()\n      this.setDocument(this.document.removeTextAtRange(range))\n      return this.setSelection(range[0])\n    }\n  }\n\n  removeLastBlockAttribute() {\n    const [ startPosition, endPosition ] = Array.from(this.getSelectedRange())\n    const block = this.document.getBlockAtPosition(endPosition)\n    this.removeCurrentAttribute(block.getLastAttribute())\n    return this.setSelection(startPosition)\n  }\n\n  insertPlaceholder() {\n    this.placeholderPosition = this.getPosition()\n    return this.insertString(PLACEHOLDER)\n  }\n\n  selectPlaceholder() {\n    if (this.placeholderPosition != null) {\n      this.setSelectedRange([ this.placeholderPosition, this.placeholderPosition + PLACEHOLDER.length ])\n      return this.getSelectedRange()\n    }\n  }\n\n  forgetPlaceholder() {\n    this.placeholderPosition = null\n  }\n\n  // Current attributes\n\n  hasCurrentAttribute(attributeName) {\n    const value = this.currentAttributes[attributeName]\n    return value != null && value !== false\n  }\n\n  toggleCurrentAttribute(attributeName) {\n    const value = !this.currentAttributes[attributeName]\n    if (value) {\n      return this.setCurrentAttribute(attributeName, value)\n    } else {\n      return this.removeCurrentAttribute(attributeName)\n    }\n  }\n\n  canSetCurrentAttribute(attributeName) {\n    if (getBlockConfig(attributeName)) {\n      return this.canSetCurrentBlockAttribute(attributeName)\n    } else {\n      return this.canSetCurrentTextAttribute(attributeName)\n    }\n  }\n\n  canSetCurrentTextAttribute(attributeName) {\n    const document = this.getSelectedDocument()\n    if (!document) return\n    for (const attachment of Array.from(document.getAttachments())) {\n      if (!attachment.hasContent()) {\n        return false\n      }\n    }\n    return true\n  }\n\n  canSetCurrentBlockAttribute(attributeName) {\n    const block = this.getBlock()\n    if (!block) return\n    return !block.isTerminalBlock()\n  }\n\n  setCurrentAttribute(attributeName, value) {\n    if (getBlockConfig(attributeName)) {\n      return this.setBlockAttribute(attributeName, value)\n    } else {\n      this.setTextAttribute(attributeName, value)\n      this.currentAttributes[attributeName] = value\n      return this.notifyDelegateOfCurrentAttributesChange()\n    }\n  }\n\n  setHTMLAtributeAtPosition(position, attributeName, value) {\n    const block = this.document.getBlockAtPosition(position)\n    const allowedHTMLAttributes = getBlockConfig(block.getLastAttribute())?.htmlAttributes\n\n    if (block && allowedHTMLAttributes?.includes(attributeName)) {\n      const newDocument = this.document.setHTMLAttributeAtPosition(position, attributeName, value)\n      this.setDocument(newDocument)\n    }\n  }\n\n  setTextAttribute(attributeName, value) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n\n    const [ startPosition, endPosition ] = Array.from(selectedRange)\n    if (startPosition === endPosition) {\n      if (attributeName === \"href\") {\n        const text = Text.textForStringWithAttributes(value, { href: value })\n        return this.insertText(text)\n      }\n    } else {\n      return this.setDocument(this.document.addAttributeAtRange(attributeName, value, selectedRange))\n    }\n  }\n\n  setBlockAttribute(attributeName, value) {\n    const selectedRange = this.getSelectedRange()\n    if (this.canSetCurrentAttribute(attributeName)) {\n      this.setDocument(this.document.applyBlockAttributeAtRange(attributeName, value, selectedRange))\n      return this.setSelection(selectedRange)\n    }\n  }\n\n  removeCurrentAttribute(attributeName) {\n    if (getBlockConfig(attributeName)) {\n      this.removeBlockAttribute(attributeName)\n      return this.updateCurrentAttributes()\n    } else {\n      this.removeTextAttribute(attributeName)\n      delete this.currentAttributes[attributeName]\n      return this.notifyDelegateOfCurrentAttributesChange()\n    }\n  }\n\n  removeTextAttribute(attributeName) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n    return this.setDocument(this.document.removeAttributeAtRange(attributeName, selectedRange))\n  }\n\n  removeBlockAttribute(attributeName) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n    return this.setDocument(this.document.removeAttributeAtRange(attributeName, selectedRange))\n  }\n\n  canDecreaseNestingLevel() {\n    return this.getBlock()?.getNestingLevel() > 0\n  }\n\n  canIncreaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    if (getBlockConfig(block.getLastNestableAttribute())?.listAttribute) {\n      const previousBlock = this.getPreviousBlock()\n      if (previousBlock) {\n        return arrayStartsWith(previousBlock.getListItemAttributes(), block.getListItemAttributes())\n      }\n    } else {\n      return block.getNestingLevel() > 0\n    }\n  }\n\n  decreaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    return this.setDocument(this.document.replaceBlock(block, block.decreaseNestingLevel()))\n  }\n\n  increaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    return this.setDocument(this.document.replaceBlock(block, block.increaseNestingLevel()))\n  }\n\n  canDecreaseBlockAttributeLevel() {\n    return this.getBlock()?.getAttributeLevel() > 0\n  }\n\n  decreaseBlockAttributeLevel() {\n    const attribute = this.getBlock()?.getLastAttribute()\n    if (attribute) {\n      return this.removeCurrentAttribute(attribute)\n    }\n  }\n\n  decreaseListLevel() {\n    let [ startPosition ] = Array.from(this.getSelectedRange())\n    const { index } = this.document.locationFromPosition(startPosition)\n    let endIndex = index\n    const attributeLevel = this.getBlock().getAttributeLevel()\n\n    let block = this.document.getBlockAtIndex(endIndex + 1)\n    while (block) {\n      if (!block.isListItem() || block.getAttributeLevel() <= attributeLevel) {\n        break\n      }\n      endIndex++\n      block = this.document.getBlockAtIndex(endIndex + 1)\n    }\n\n    startPosition = this.document.positionFromLocation({ index, offset: 0 })\n    const endPosition = this.document.positionFromLocation({ index: endIndex, offset: 0 })\n    return this.setDocument(this.document.removeLastListAttributeAtRange([ startPosition, endPosition ]))\n  }\n\n  updateCurrentAttributes() {\n    const selectedRange = this.getSelectedRange({ ignoreLock: true })\n    if (selectedRange) {\n      const currentAttributes = this.document.getCommonAttributesAtRange(selectedRange)\n\n      Array.from(getAllAttributeNames()).forEach((attributeName) => {\n        if (!currentAttributes[attributeName]) {\n          if (!this.canSetCurrentAttribute(attributeName)) {\n            currentAttributes[attributeName] = false\n          }\n        }\n      })\n\n      if (!objectsAreEqual(currentAttributes, this.currentAttributes)) {\n        this.currentAttributes = currentAttributes\n        return this.notifyDelegateOfCurrentAttributesChange()\n      }\n    }\n  }\n\n  getCurrentAttributes() {\n    return extend.call({}, this.currentAttributes)\n  }\n\n  getCurrentTextAttributes() {\n    const attributes = {}\n    for (const key in this.currentAttributes) {\n      const value = this.currentAttributes[key]\n      if (value !== false) {\n        if (getTextConfig(key)) {\n          attributes[key] = value\n        }\n      }\n    }\n    return attributes\n  }\n\n  // Selection freezing\n\n  freezeSelection() {\n    return this.setCurrentAttribute(\"frozen\", true)\n  }\n\n  thawSelection() {\n    return this.removeCurrentAttribute(\"frozen\")\n  }\n\n  hasFrozenSelection() {\n    return this.hasCurrentAttribute(\"frozen\")\n  }\n\n  setSelection(selectedRange) {\n    const locationRange = this.document.locationRangeFromRange(selectedRange)\n    return this.delegate?.compositionDidRequestChangingSelectionToLocationRange(locationRange)\n  }\n\n  getSelectedRange() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.rangeFromLocationRange(locationRange)\n    }\n  }\n\n  setSelectedRange(selectedRange) {\n    const locationRange = this.document.locationRangeFromRange(selectedRange)\n    return this.getSelectionManager().setLocationRange(locationRange)\n  }\n\n  getPosition() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.positionFromLocation(locationRange[0])\n    }\n  }\n\n  getLocationRange(options) {\n    if (this.targetLocationRange) {\n      return this.targetLocationRange\n    } else {\n      return this.getSelectionManager().getLocationRange(options) || normalizeRange({ index: 0, offset: 0 })\n    }\n  }\n\n  withTargetLocationRange(locationRange, fn) {\n    let result\n    this.targetLocationRange = locationRange\n    try {\n      result = fn()\n    } finally {\n      this.targetLocationRange = null\n    }\n    return result\n  }\n\n  withTargetRange(range, fn) {\n    const locationRange = this.document.locationRangeFromRange(range)\n    return this.withTargetLocationRange(locationRange, fn)\n  }\n\n  withTargetDOMRange(domRange, fn) {\n    const locationRange = this.createLocationRangeFromDOMRange(domRange, { strict: false })\n    return this.withTargetLocationRange(locationRange, fn)\n  }\n\n  getExpandedRangeInDirection(direction, { length } = {}) {\n    let [ startPosition, endPosition ] = Array.from(this.getSelectedRange())\n    if (direction === \"backward\") {\n      if (length) {\n        startPosition -= length\n      } else {\n        startPosition = this.translateUTF16PositionFromOffset(startPosition, -1)\n      }\n    } else {\n      if (length) {\n        endPosition += length\n      } else {\n        endPosition = this.translateUTF16PositionFromOffset(endPosition, 1)\n      }\n    }\n    return normalizeRange([ startPosition, endPosition ])\n  }\n\n  shouldManageMovingCursorInDirection(direction) {\n    if (this.editingAttachment) {\n      return true\n    }\n    const range = this.getExpandedRangeInDirection(direction)\n    return this.getAttachmentAtRange(range) != null\n  }\n\n  moveCursorInDirection(direction) {\n    let canEditAttachment, range\n    if (this.editingAttachment) {\n      range = this.document.getRangeOfAttachment(this.editingAttachment)\n    } else {\n      const selectedRange = this.getSelectedRange()\n      range = this.getExpandedRangeInDirection(direction)\n      canEditAttachment = !rangesAreEqual(selectedRange, range)\n    }\n\n    if (direction === \"backward\") {\n      this.setSelectedRange(range[0])\n    } else {\n      this.setSelectedRange(range[1])\n    }\n\n    if (canEditAttachment) {\n      const attachment = this.getAttachmentAtRange(range)\n      if (attachment) {\n        return this.editAttachment(attachment)\n      }\n    }\n  }\n\n  expandSelectionInDirection(direction, { length } = {}) {\n    const range = this.getExpandedRangeInDirection(direction, { length })\n    return this.setSelectedRange(range)\n  }\n\n  expandSelectionForEditing() {\n    if (this.hasCurrentAttribute(\"href\")) {\n      return this.expandSelectionAroundCommonAttribute(\"href\")\n    }\n  }\n\n  expandSelectionAroundCommonAttribute(attributeName) {\n    const position = this.getPosition()\n    const range = this.document.getRangeOfCommonAttributeAtPosition(attributeName, position)\n    return this.setSelectedRange(range)\n  }\n\n  selectionContainsAttachments() {\n    return this.getSelectedAttachments()?.length > 0\n  }\n\n  selectionIsInCursorTarget() {\n    return this.editingAttachment || this.positionIsCursorTarget(this.getPosition())\n  }\n\n  positionIsCursorTarget(position) {\n    const location = this.document.locationFromPosition(position)\n    if (location) {\n      return this.locationIsCursorTarget(location)\n    }\n  }\n\n  positionIsBlockBreak(position) {\n    return this.document.getPieceAtPosition(position)?.isBlockBreak()\n  }\n\n  getSelectedDocument() {\n    const selectedRange = this.getSelectedRange()\n    if (selectedRange) {\n      return this.document.getDocumentAtRange(selectedRange)\n    }\n  }\n\n  getSelectedAttachments() {\n    return this.getSelectedDocument()?.getAttachments()\n  }\n\n  // Attachments\n\n  getAttachments() {\n    return this.attachments.slice(0)\n  }\n\n  refreshAttachments() {\n    const attachments = this.document.getAttachments()\n    const { added, removed } = summarizeArrayChange(this.attachments, attachments)\n    this.attachments = attachments\n\n    Array.from(removed).forEach((attachment) => {\n      attachment.delegate = null\n      this.delegate?.compositionDidRemoveAttachment?.(attachment)\n    })\n\n    return (() => {\n      const result = []\n\n      Array.from(added).forEach((attachment) => {\n        attachment.delegate = this\n        result.push(this.delegate?.compositionDidAddAttachment?.(attachment))\n      })\n\n      return result\n    })()\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeAttributes(attachment) {\n    this.revision++\n    return this.delegate?.compositionDidEditAttachment?.(attachment)\n  }\n\n  attachmentDidChangePreviewURL(attachment) {\n    this.revision++\n    return this.delegate?.compositionDidChangeAttachmentPreviewURL?.(attachment)\n  }\n\n  // Attachment editing\n\n  editAttachment(attachment, options) {\n    if (attachment === this.editingAttachment) return\n    this.stopEditingAttachment()\n    this.editingAttachment = attachment\n    return this.delegate?.compositionDidStartEditingAttachment?.(this.editingAttachment, options)\n  }\n\n  stopEditingAttachment() {\n    if (!this.editingAttachment) return\n    this.delegate?.compositionDidStopEditingAttachment?.(this.editingAttachment)\n    this.editingAttachment = null\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    return this.setDocument(this.document.updateAttributesForAttachment(attributes, attachment))\n  }\n\n  removeAttributeForAttachment(attribute, attachment) {\n    return this.setDocument(this.document.removeAttributeForAttachment(attribute, attachment))\n  }\n\n  // Private\n\n  breakFormattedBlock(insertion) {\n    let { document } = insertion\n    const { block } = insertion\n    let position = insertion.startPosition\n    let range = [ position - 1, position ]\n\n    if (block.getBlockBreakPosition() === insertion.startLocation.offset) {\n      if (block.breaksOnReturn() && insertion.nextCharacter === \"\\n\") {\n        position += 1\n      } else {\n        document = document.removeTextAtRange(range)\n      }\n      range = [ position, position ]\n    } else if (insertion.nextCharacter === \"\\n\") {\n      if (insertion.previousCharacter === \"\\n\") {\n        range = [ position - 1, position + 1 ]\n      } else {\n        range = [ position, position + 1 ]\n        position += 1\n      }\n    } else if (insertion.startLocation.offset - 1 !== 0) {\n      position += 1\n    }\n\n    const newDocument = new Document([ block.removeLastAttribute().copyWithoutText() ])\n    this.setDocument(document.insertDocumentAtRange(newDocument, range))\n    return this.setSelection(position)\n  }\n\n  getPreviousBlock() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      const { index } = locationRange[0]\n      if (index > 0) {\n        return this.document.getBlockAtIndex(index - 1)\n      }\n    }\n  }\n\n  getBlock() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.getBlockAtIndex(locationRange[0].index)\n    }\n  }\n\n  getAttachmentAtRange(range) {\n    const document = this.document.getDocumentAtRange(range)\n    if (document.toString() === `${OBJECT_REPLACEMENT_CHARACTER}\\n`) {\n      return document.getAttachments()[0]\n    }\n  }\n\n  notifyDelegateOfCurrentAttributesChange() {\n    return this.delegate?.compositionDidChangeCurrentAttributes?.(this.currentAttributes)\n  }\n\n  notifyDelegateOfInsertionAtRange(range) {\n    return this.delegate?.compositionDidPerformInsertionAtRange?.(range)\n  }\n\n  translateUTF16PositionFromOffset(position, offset) {\n    const utf16string = this.document.toUTF16String()\n    const utf16position = utf16string.offsetFromUCS2Offset(position)\n    return utf16string.offsetToUCS2Offset(utf16position + offset)\n  }\n}\n\nComposition.proxyMethod(\"getSelectionManager().getPointRange\")\nComposition.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\")\nComposition.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\")\nComposition.proxyMethod(\"getSelectionManager().locationIsCursorTarget\")\nComposition.proxyMethod(\"getSelectionManager().selectionIsExpanded\")\nComposition.proxyMethod(\"delegate?.getSelectionManager\")\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class UndoManager extends BasicObject {\n  constructor(composition) {\n    super(...arguments)\n    this.composition = composition\n    this.undoEntries = []\n    this.redoEntries = []\n  }\n\n  recordUndoEntry(description, { context, consolidatable } = {}) {\n    const previousEntry = this.undoEntries.slice(-1)[0]\n\n    if (!consolidatable || !entryHasDescriptionAndContext(previousEntry, description, context)) {\n      const undoEntry = this.createEntry({ description, context })\n      this.undoEntries.push(undoEntry)\n      this.redoEntries = []\n    }\n  }\n\n  undo() {\n    const undoEntry = this.undoEntries.pop()\n    if (undoEntry) {\n      const redoEntry = this.createEntry(undoEntry)\n      this.redoEntries.push(redoEntry)\n      return this.composition.loadSnapshot(undoEntry.snapshot)\n    }\n  }\n\n  redo() {\n    const redoEntry = this.redoEntries.pop()\n    if (redoEntry) {\n      const undoEntry = this.createEntry(redoEntry)\n      this.undoEntries.push(undoEntry)\n      return this.composition.loadSnapshot(redoEntry.snapshot)\n    }\n  }\n\n  canUndo() {\n    return this.undoEntries.length > 0\n  }\n\n  canRedo() {\n    return this.redoEntries.length > 0\n  }\n\n  // Private\n\n  createEntry({ description, context } = {}) {\n    return {\n      description: description?.toString(),\n      context: JSON.stringify(context),\n      snapshot: this.composition.getSnapshot(),\n    }\n  }\n}\n\nconst entryHasDescriptionAndContext = (entry, description, context) =>\n  entry?.description === description?.toString() && entry?.context === JSON.stringify(context)\n", "const BLOCK_ATTRIBUTE_NAME = \"attachmentGallery\"\nconst TEXT_ATTRIBUTE_NAME = \"presentation\"\nconst TEXT_ATTRIBUTE_VALUE = \"gallery\"\n\nexport default class Filter {\n  constructor(snapshot) {\n    this.document = snapshot.document\n    this.selectedRange = snapshot.selectedRange\n  }\n\n  perform() {\n    this.removeBlockAttribute()\n    return this.applyBlockAttribute()\n  }\n\n  getSnapshot() {\n    return { document: this.document, selectedRange: this.selectedRange }\n  }\n\n  // Private\n\n  removeBlockAttribute() {\n    return this.findRangesOfBlocks().map((range) => this.document = this.document.removeAttributeAtRange(BLOCK_ATTRIBUTE_NAME, range))\n  }\n\n  applyBlockAttribute() {\n    let offset = 0\n\n    this.findRangesOfPieces().forEach((range) => {\n      if (range[1] - range[0] > 1) {\n        range[0] += offset\n        range[1] += offset\n\n        if (this.document.getCharacterAtPosition(range[1]) !== \"\\n\") {\n          this.document = this.document.insertBlockBreakAtRange(range[1])\n          if (range[1] < this.selectedRange[1]) {\n            this.moveSelectedRangeForward()\n          }\n          range[1]++\n          offset++\n        }\n\n        if (range[0] !== 0) {\n          if (this.document.getCharacterAtPosition(range[0] - 1) !== \"\\n\") {\n            this.document = this.document.insertBlockBreakAtRange(range[0])\n            if (range[0] < this.selectedRange[0]) {\n              this.moveSelectedRangeForward()\n            }\n            range[0]++\n            offset++\n          }\n        }\n\n        this.document = this.document.applyBlockAttributeAtRange(BLOCK_ATTRIBUTE_NAME, true, range)\n      }\n    })\n  }\n\n  findRangesOfBlocks() {\n    return this.document.findRangesForBlockAttribute(BLOCK_ATTRIBUTE_NAME)\n  }\n\n  findRangesOfPieces() {\n    return this.document.findRangesForTextAttribute(TEXT_ATTRIBUTE_NAME, { withValue: TEXT_ATTRIBUTE_VALUE })\n  }\n\n  moveSelectedRangeForward() {\n    this.selectedRange[0] += 1\n    this.selectedRange[1] += 1\n  }\n}\n", "import Filter from \"./filter\"\n\nexport const attachmentGalleryFilter = function(snapshot) {\n  const filter = new Filter(snapshot)\n  filter.perform()\n  return filter.getSnapshot()\n}\n\n", "import Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\n\nimport UndoManager from \"trix/models/undo_manager\"\nimport { attachmentGalleryFilter } from \"trix/filters/attachment_gallery_filter\"\nconst DEFAULT_FILTERS = [ attachmentGalleryFilter ]\n\nexport default class Editor {\n  constructor(composition, selectionManager, element) {\n    this.insertFiles = this.insertFiles.bind(this)\n    this.composition = composition\n    this.selectionManager = selectionManager\n    this.element = element\n    this.undoManager = new UndoManager(this.composition)\n    this.filters = DEFAULT_FILTERS.slice(0)\n  }\n\n  loadDocument(document) {\n    return this.loadSnapshot({ document, selectedRange: [ 0, 0 ] })\n  }\n\n  loadHTML(html = \"\") {\n    const document = HTMLParser.parse(html, { referenceElement: this.element }).getDocument()\n    return this.loadDocument(document)\n  }\n\n  loadJSON({ document, selectedRange }) {\n    document = Document.fromJSON(document)\n    return this.loadSnapshot({ document, selectedRange })\n  }\n\n  loadSnapshot(snapshot) {\n    this.undoManager = new UndoManager(this.composition)\n    return this.composition.loadSnapshot(snapshot)\n  }\n\n  getDocument() {\n    return this.composition.document\n  }\n\n  getSelectedDocument() {\n    return this.composition.getSelectedDocument()\n  }\n\n  getSnapshot() {\n    return this.composition.getSnapshot()\n  }\n\n  toJSON() {\n    return this.getSnapshot()\n  }\n\n  // Document manipulation\n\n  deleteInDirection(direction) {\n    return this.composition.deleteInDirection(direction)\n  }\n\n  insertAttachment(attachment) {\n    return this.composition.insertAttachment(attachment)\n  }\n\n  insertAttachments(attachments) {\n    return this.composition.insertAttachments(attachments)\n  }\n\n  insertDocument(document) {\n    return this.composition.insertDocument(document)\n  }\n\n  insertFile(file) {\n    return this.composition.insertFile(file)\n  }\n\n  insertFiles(files) {\n    return this.composition.insertFiles(files)\n  }\n\n  insertHTML(html) {\n    return this.composition.insertHTML(html)\n  }\n\n  insertString(string) {\n    return this.composition.insertString(string)\n  }\n\n  insertText(text) {\n    return this.composition.insertText(text)\n  }\n\n  insertLineBreak() {\n    return this.composition.insertLineBreak()\n  }\n\n  // Selection\n\n  getSelectedRange() {\n    return this.composition.getSelectedRange()\n  }\n\n  getPosition() {\n    return this.composition.getPosition()\n  }\n\n  getClientRectAtPosition(position) {\n    const locationRange = this.getDocument().locationRangeFromRange([ position, position + 1 ])\n    return this.selectionManager.getClientRectAtLocationRange(locationRange)\n  }\n\n  expandSelectionInDirection(direction) {\n    return this.composition.expandSelectionInDirection(direction)\n  }\n\n  moveCursorInDirection(direction) {\n    return this.composition.moveCursorInDirection(direction)\n  }\n\n  setSelectedRange(selectedRange) {\n    return this.composition.setSelectedRange(selectedRange)\n  }\n\n  // Attributes\n\n  activateAttribute(name, value = true) {\n    return this.composition.setCurrentAttribute(name, value)\n  }\n\n  attributeIsActive(name) {\n    return this.composition.hasCurrentAttribute(name)\n  }\n\n  canActivateAttribute(name) {\n    return this.composition.canSetCurrentAttribute(name)\n  }\n\n  deactivateAttribute(name) {\n    return this.composition.removeCurrentAttribute(name)\n  }\n\n  // HTML attributes\n  setHTMLAtributeAtPosition(position, name, value) {\n    this.composition.setHTMLAtributeAtPosition(position, name, value)\n  }\n\n  // Nesting level\n\n  canDecreaseNestingLevel() {\n    return this.composition.canDecreaseNestingLevel()\n  }\n\n  canIncreaseNestingLevel() {\n    return this.composition.canIncreaseNestingLevel()\n  }\n\n  decreaseNestingLevel() {\n    if (this.canDecreaseNestingLevel()) {\n      return this.composition.decreaseNestingLevel()\n    }\n  }\n\n  increaseNestingLevel() {\n    if (this.canIncreaseNestingLevel()) {\n      return this.composition.increaseNestingLevel()\n    }\n  }\n\n  // Undo/redo\n\n  canRedo() {\n    return this.undoManager.canRedo()\n  }\n\n  canUndo() {\n    return this.undoManager.canUndo()\n  }\n\n  recordUndoEntry(description, { context, consolidatable } = {}) {\n    return this.undoManager.recordUndoEntry(description, { context, consolidatable })\n  }\n\n  redo() {\n    if (this.canRedo()) {\n      return this.undoManager.redo()\n    }\n  }\n\n  undo() {\n    if (this.canUndo()) {\n      return this.undoManager.undo()\n    }\n  }\n}\n", "/* eslint-disable\n    no-var,\n    prefer-const,\n*/\nimport {\n  elementContainsNode,\n  findChildIndexOfNode,\n  nodeIsAttachmentElement,\n  nodeIsBlockContainer,\n  nodeIsBlockStart,\n  nodeIsBlockStartComment,\n  nodeIsCursorTarget,\n  nodeIsEmptyTextNode,\n  nodeIsTextNode,\n  tagName,\n  walkTree,\n} from \"trix/core/helpers\"\n\nexport default class LocationMapper {\n  constructor(element) {\n    this.element = element\n  }\n\n  findLocationFromContainerAndOffset(container, offset, { strict } = { strict: true }) {\n    let childIndex = 0\n    let foundBlock = false\n    const location = { index: 0, offset: 0 }\n    const attachmentElement = this.findAttachmentElementParentForNode(container)\n\n    if (attachmentElement) {\n      container = attachmentElement.parentNode\n      offset = findChildIndexOfNode(attachmentElement)\n    }\n\n    const walker = walkTree(this.element, { usingFilter: rejectAttachmentContents })\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n\n      if (node === container && nodeIsTextNode(container)) {\n        if (!nodeIsCursorTarget(node)) {\n          location.offset += offset\n        }\n        break\n      } else {\n        if (node.parentNode === container) {\n          if (childIndex++ === offset) {\n            break\n          }\n        } else if (!elementContainsNode(container, node)) {\n          if (childIndex > 0) {\n            break\n          }\n        }\n\n        if (nodeIsBlockStart(node, { strict })) {\n          if (foundBlock) {\n            location.index++\n          }\n          location.offset = 0\n          foundBlock = true\n        } else {\n          location.offset += nodeLength(node)\n        }\n      }\n    }\n\n    return location\n  }\n\n  findContainerAndOffsetFromLocation(location) {\n    let container, offset\n    if (location.index === 0 && location.offset === 0) {\n      container = this.element\n      offset = 0\n\n      while (container.firstChild) {\n        container = container.firstChild\n        if (nodeIsBlockContainer(container)) {\n          offset = 1\n          break\n        }\n      }\n\n      return [ container, offset ]\n    }\n\n    let [ node, nodeOffset ] = this.findNodeAndOffsetFromLocation(location)\n    if (!node) return\n\n    if (nodeIsTextNode(node)) {\n      if (nodeLength(node) === 0) {\n        container = node.parentNode.parentNode\n        offset = findChildIndexOfNode(node.parentNode)\n        if (nodeIsCursorTarget(node, { name: \"right\" })) {\n          offset++\n        }\n      } else {\n        container = node\n        offset = location.offset - nodeOffset\n      }\n    } else {\n      container = node.parentNode\n\n      if (!nodeIsBlockStart(node.previousSibling)) {\n        if (!nodeIsBlockContainer(container)) {\n          while (node === container.lastChild) {\n            node = container\n            container = container.parentNode\n            if (nodeIsBlockContainer(container)) {\n              break\n            }\n          }\n        }\n      }\n\n      offset = findChildIndexOfNode(node)\n      if (location.offset !== 0) {\n        offset++\n      }\n    }\n\n    return [ container, offset ]\n  }\n\n  findNodeAndOffsetFromLocation(location) {\n    let node, nodeOffset\n    let offset = 0\n\n    for (const currentNode of this.getSignificantNodesForIndex(location.index)) {\n      const length = nodeLength(currentNode)\n\n      if (location.offset <= offset + length) {\n        if (nodeIsTextNode(currentNode)) {\n          node = currentNode\n          nodeOffset = offset\n          if (location.offset === nodeOffset && nodeIsCursorTarget(node)) {\n            break\n          }\n        } else if (!node) {\n          node = currentNode\n          nodeOffset = offset\n        }\n      }\n\n      offset += length\n      if (offset > location.offset) {\n        break\n      }\n    }\n\n    return [ node, nodeOffset ]\n  }\n\n  // Private\n\n  findAttachmentElementParentForNode(node) {\n    while (node && node !== this.element) {\n      if (nodeIsAttachmentElement(node)) {\n        return node\n      }\n      node = node.parentNode\n    }\n  }\n\n  getSignificantNodesForIndex(index) {\n    const nodes = []\n    const walker = walkTree(this.element, { usingFilter: acceptSignificantNodes })\n    let recordingNodes = false\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n      if (nodeIsBlockStartComment(node)) {\n        var blockIndex\n        if (blockIndex != null) {\n          blockIndex++\n        } else {\n          blockIndex = 0\n        }\n\n        if (blockIndex === index) {\n          recordingNodes = true\n        } else if (recordingNodes) {\n          break\n        }\n      } else if (recordingNodes) {\n        nodes.push(node)\n      }\n    }\n\n    return nodes\n  }\n}\n\nconst nodeLength = function(node) {\n  if (node.nodeType === Node.TEXT_NODE) {\n    if (nodeIsCursorTarget(node)) {\n      return 0\n    } else {\n      const string = node.textContent\n      return string.length\n    }\n  } else if (tagName(node) === \"br\" || nodeIsAttachmentElement(node)) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nconst acceptSignificantNodes = function(node) {\n  if (rejectEmptyTextNodes(node) === NodeFilter.FILTER_ACCEPT) {\n    return rejectAttachmentContents(node)\n  } else {\n    return NodeFilter.FILTER_REJECT\n  }\n}\n\nconst rejectEmptyTextNodes = function(node) {\n  if (nodeIsEmptyTextNode(node)) {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n\nconst rejectAttachmentContents = function(node) {\n  if (nodeIsAttachmentElement(node.parentNode)) {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n", "/* eslint-disable\n    id-length,\n    no-empty,\n*/\nimport { getDOMRange, setDOMRange } from \"trix/core/helpers\"\n\nexport default class PointMapper {\n  createDOMRangeFromPoint({ x, y }) {\n    let domRange\n    if (document.caretPositionFromPoint) {\n      const { offsetNode, offset } = document.caretPositionFromPoint(x, y)\n      domRange = document.createRange()\n      domRange.setStart(offsetNode, offset)\n      return domRange\n    } else if (document.caretRangeFromPoint) {\n      return document.caretRangeFromPoint(x, y)\n    } else if (document.body.createTextRange) {\n      const originalDOMRange = getDOMRange()\n      try {\n        // IE 11 throws \"Unspecified error\" when using moveToPoint\n        // during a drag-and-drop operation.\n        const textRange = document.body.createTextRange()\n        textRange.moveToPoint(x, y)\n        textRange.select()\n      } catch (error) {}\n      domRange = getDOMRange()\n      setDOMRange(originalDOMRange)\n      return domRange\n    }\n  }\n\n  getClientRectsForDOMRange(domRange) {\n    const array = Array.from(domRange.getClientRects())\n    const start = array[0]\n    const end = array[array.length - 1]\n\n    return [ start, end ]\n  }\n}\n", "/* eslint-disable\n*/\nimport BasicObject from \"trix/core/basic_object\"\n\nimport LocationMapper from \"trix/models/location_mapper\"\nimport PointMapper from \"trix/models/point_mapper\"\n\nimport {\n  elementContainsNode,\n  getDOMRange,\n  getDOMSelection,\n  handleEvent,\n  innerElementIsActive,\n  nodeIsCursorTarget,\n  normalizeRange,\n  rangeIsCollapsed,\n  rangesAreEqual,\n  setDOMRange,\n} from \"trix/core/helpers\"\n\nexport default class SelectionManager extends BasicObject {\n  constructor(element) {\n    super(...arguments)\n    this.didMouseDown = this.didMouseDown.bind(this)\n    this.selectionDidChange = this.selectionDidChange.bind(this)\n    this.element = element\n    this.locationMapper = new LocationMapper(this.element)\n    this.pointMapper = new PointMapper()\n    this.lockCount = 0\n    handleEvent(\"mousedown\", { onElement: this.element, withCallback: this.didMouseDown })\n  }\n\n  getLocationRange(options = {}) {\n    if (options.strict === false) {\n      return this.createLocationRangeFromDOMRange(getDOMRange())\n    } else if (options.ignoreLock) {\n      return this.currentLocationRange\n    } else if (this.lockedLocationRange) {\n      return this.lockedLocationRange\n    } else {\n      return this.currentLocationRange\n    }\n  }\n\n  setLocationRange(locationRange) {\n    if (this.lockedLocationRange) return\n    locationRange = normalizeRange(locationRange)\n\n    const domRange = this.createDOMRangeFromLocationRange(locationRange)\n    if (domRange) {\n      setDOMRange(domRange)\n      this.updateCurrentLocationRange(locationRange)\n    }\n  }\n\n  setLocationRangeFromPointRange(pointRange) {\n    pointRange = normalizeRange(pointRange)\n    const startLocation = this.getLocationAtPoint(pointRange[0])\n    const endLocation = this.getLocationAtPoint(pointRange[1])\n    this.setLocationRange([ startLocation, endLocation ])\n  }\n\n  getClientRectAtLocationRange(locationRange) {\n    const domRange = this.createDOMRangeFromLocationRange(locationRange)\n    if (domRange) {\n      return this.getClientRectsForDOMRange(domRange)[1]\n    }\n  }\n\n  locationIsCursorTarget(location) {\n    const node = Array.from(this.findNodeAndOffsetFromLocation(location))[0]\n    return nodeIsCursorTarget(node)\n  }\n\n  lock() {\n    if (this.lockCount++ === 0) {\n      this.updateCurrentLocationRange()\n      this.lockedLocationRange = this.getLocationRange()\n    }\n  }\n\n  unlock() {\n    if (--this.lockCount === 0) {\n      const { lockedLocationRange } = this\n      this.lockedLocationRange = null\n      if (lockedLocationRange != null) {\n        return this.setLocationRange(lockedLocationRange)\n      }\n    }\n  }\n\n  clearSelection() {\n    return getDOMSelection()?.removeAllRanges()\n  }\n\n  selectionIsCollapsed() {\n    return getDOMRange()?.collapsed === true\n  }\n\n  selectionIsExpanded() {\n    return !this.selectionIsCollapsed()\n  }\n\n  createLocationRangeFromDOMRange(domRange, options) {\n    if (domRange == null || !this.domRangeWithinElement(domRange)) return\n\n    const start = this.findLocationFromContainerAndOffset(domRange.startContainer, domRange.startOffset, options)\n    if (!start) return\n\n    const end = domRange.collapsed\n      ? undefined\n      : this.findLocationFromContainerAndOffset(domRange.endContainer, domRange.endOffset, options)\n\n    return normalizeRange([ start, end ])\n  }\n\n  didMouseDown() {\n    return this.pauseTemporarily()\n  }\n\n  pauseTemporarily() {\n    let resumeHandlers\n    this.paused = true\n\n    const resume = () => {\n      this.paused = false\n      clearTimeout(resumeTimeout)\n\n      Array.from(resumeHandlers).forEach((handler) => {\n        handler.destroy()\n      })\n\n      if (elementContainsNode(document, this.element)) {\n        return this.selectionDidChange()\n      }\n    }\n\n    const resumeTimeout = setTimeout(resume, 200)\n\n    resumeHandlers = [ \"mousemove\", \"keydown\" ].map((eventName) =>\n      handleEvent(eventName, { onElement: document, withCallback: resume })\n    )\n  }\n\n  selectionDidChange() {\n    if (!this.paused && !innerElementIsActive(this.element)) {\n      return this.updateCurrentLocationRange()\n    }\n  }\n\n  updateCurrentLocationRange(locationRange) {\n    if (locationRange != null ? locationRange : locationRange = this.createLocationRangeFromDOMRange(getDOMRange())) {\n      if (!rangesAreEqual(locationRange, this.currentLocationRange)) {\n        this.currentLocationRange = locationRange\n        return this.delegate?.locationRangeDidChange?.(this.currentLocationRange.slice(0))\n      }\n    }\n  }\n\n  createDOMRangeFromLocationRange(locationRange) {\n    const rangeStart = this.findContainerAndOffsetFromLocation(locationRange[0])\n    const rangeEnd = rangeIsCollapsed(locationRange)\n      ? rangeStart\n      : this.findContainerAndOffsetFromLocation(locationRange[1]) || rangeStart\n\n    if (rangeStart != null && rangeEnd != null) {\n      const domRange = document.createRange()\n      domRange.setStart(...Array.from(rangeStart || []))\n      domRange.setEnd(...Array.from(rangeEnd || []))\n      return domRange\n    }\n  }\n\n  getLocationAtPoint(point) {\n    const domRange = this.createDOMRangeFromPoint(point)\n    if (domRange) {\n      return this.createLocationRangeFromDOMRange(domRange)?.[0]\n    }\n  }\n\n  domRangeWithinElement(domRange) {\n    if (domRange.collapsed) {\n      return elementContainsNode(this.element, domRange.startContainer)\n    } else {\n      return (\n        elementContainsNode(this.element, domRange.startContainer) &&\n        elementContainsNode(this.element, domRange.endContainer)\n      )\n    }\n  }\n}\n\nSelectionManager.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\")\nSelectionManager.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\")\nSelectionManager.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\")\nSelectionManager.proxyMethod(\"pointMapper.createDOMRangeFromPoint\")\nSelectionManager.proxyMethod(\"pointMapper.getClientRectsForDOMRange\")\n\n", "import { removeNode } from \"trix/core/helpers\"\n\nimport * as config from \"trix/config\"\nimport BasicObject from \"trix/core/basic_object\"\n\nimport { defer, handleEvent, makeElement, tagName, triggerEvent } from \"trix/core/helpers\"\nconst { lang, css, keyNames } = config\n\nconst undoable = function(fn) {\n  return function() {\n    const commands = fn.apply(this, arguments)\n    commands.do()\n    if (!this.undos) {\n      this.undos = []\n    }\n    this.undos.push(commands.undo)\n  }\n}\n\nexport default class AttachmentEditorController extends BasicObject {\n  constructor(attachmentPiece, element, container, options = {}) {\n    super(...arguments)\n    this.didClickToolbar = this.didClickToolbar.bind(this)\n    this.didClickActionButton = this.didClickActionButton.bind(this)\n    this.didKeyDownCaption = this.didKeyDownCaption.bind(this)\n    this.didInputCaption = this.didInputCaption.bind(this)\n    this.didChangeCaption = this.didChangeCaption.bind(this)\n    this.didBlurCaption = this.didBlurCaption.bind(this)\n    this.attachmentPiece = attachmentPiece\n    this.element = element\n    this.container = container\n    this.options = options\n    this.attachment = this.attachmentPiece.attachment\n    if (tagName(this.element) === \"a\") {\n      this.element = this.element.firstChild\n    }\n    this.install()\n  }\n\n  install() {\n    this.makeElementMutable()\n    this.addToolbar()\n    if (this.attachment.isPreviewable()) {\n      this.installCaptionEditor()\n    }\n  }\n\n  uninstall() {\n    let undo = this.undos.pop()\n    this.savePendingCaption()\n    while (undo) {\n      undo()\n      undo = this.undos.pop()\n    }\n    this.delegate?.didUninstallAttachmentEditor(this)\n  }\n\n  // Private\n\n  savePendingCaption() {\n    if (this.pendingCaption != null) {\n      const caption = this.pendingCaption\n      this.pendingCaption = null\n      if (caption) {\n        this.delegate?.attachmentEditorDidRequestUpdatingAttributesForAttachment?.({ caption }, this.attachment)\n      } else {\n        this.delegate?.attachmentEditorDidRequestRemovingAttributeForAttachment?.(\"caption\", this.attachment)\n      }\n    }\n  }\n\n  // Installing and uninstalling\n\n  makeElementMutable = undoable(() => {\n    return {\n      do: () => {\n        this.element.dataset.trixMutable = true\n      },\n      undo: () => delete this.element.dataset.trixMutable,\n    }\n  })\n\n  addToolbar = undoable(() => {\n    // <div class=\"#{css.attachmentMetadataContainer}\" data-trix-mutable=\"true\">\n    //   <div class=\"trix-button-row\">\n    //     <span class=\"trix-button-group trix-button-group--actions\">\n    //       <button type=\"button\" class=\"trix-button trix-button--remove\" title=\"#{lang.remove}\" data-trix-action=\"remove\">#{lang.remove}</button>\n    //     </span>\n    //   </div>\n    // </div>\n    const element = makeElement({\n      tagName: \"div\",\n      className: css.attachmentToolbar,\n      data: { trixMutable: true },\n      childNodes: makeElement({\n        tagName: \"div\",\n        className: \"trix-button-row\",\n        childNodes: makeElement({\n          tagName: \"span\",\n          className: \"trix-button-group trix-button-group--actions\",\n          childNodes: makeElement({\n            tagName: \"button\",\n            className: \"trix-button trix-button--remove\",\n            textContent: lang.remove,\n            attributes: { title: lang.remove },\n            data: { trixAction: \"remove\" },\n          }),\n        }),\n      }),\n    })\n\n    if (this.attachment.isPreviewable()) {\n      // <div class=\"#{css.attachmentMetadataContainer}\">\n      //   <span class=\"#{css.attachmentMetadata}\">\n      //     <span class=\"#{css.attachmentName}\" title=\"#{name}\">#{name}</span>\n      //     <span class=\"#{css.attachmentSize}\">#{size}</span>\n      //   </span>\n      // </div>\n      element.appendChild(\n        makeElement({\n          tagName: \"div\",\n          className: css.attachmentMetadataContainer,\n          childNodes: makeElement({\n            tagName: \"span\",\n            className: css.attachmentMetadata,\n            childNodes: [\n              makeElement({\n                tagName: \"span\",\n                className: css.attachmentName,\n                textContent: this.attachment.getFilename(),\n                attributes: { title: this.attachment.getFilename() },\n              }),\n              makeElement({\n                tagName: \"span\",\n                className: css.attachmentSize,\n                textContent: this.attachment.getFormattedFilesize(),\n              }),\n            ],\n          }),\n        })\n      )\n    }\n\n    handleEvent(\"click\", { onElement: element, withCallback: this.didClickToolbar })\n    handleEvent(\"click\", {\n      onElement: element,\n      matchingSelector: \"[data-trix-action]\",\n      withCallback: this.didClickActionButton,\n    })\n\n    triggerEvent(\"trix-attachment-before-toolbar\", { onElement: this.element, attributes: { toolbar: element, attachment: this.attachment } })\n\n    return {\n      do: () => this.element.appendChild(element),\n      undo: () => removeNode(element),\n    }\n  })\n\n  installCaptionEditor = undoable(() => {\n    const textarea = makeElement({\n      tagName: \"textarea\",\n      className: css.attachmentCaptionEditor,\n      attributes: { placeholder: lang.captionPlaceholder },\n      data: { trixMutable: true },\n    })\n    textarea.value = this.attachmentPiece.getCaption()\n\n    const textareaClone = textarea.cloneNode()\n    textareaClone.classList.add(\"trix-autoresize-clone\")\n    textareaClone.tabIndex = -1\n\n    const autoresize = function() {\n      textareaClone.value = textarea.value\n      textarea.style.height = textareaClone.scrollHeight + \"px\"\n    }\n\n    handleEvent(\"input\", { onElement: textarea, withCallback: autoresize })\n    handleEvent(\"input\", { onElement: textarea, withCallback: this.didInputCaption })\n    handleEvent(\"keydown\", { onElement: textarea, withCallback: this.didKeyDownCaption })\n    handleEvent(\"change\", { onElement: textarea, withCallback: this.didChangeCaption })\n    handleEvent(\"blur\", { onElement: textarea, withCallback: this.didBlurCaption })\n\n    const figcaption = this.element.querySelector(\"figcaption\")\n    const editingFigcaption = figcaption.cloneNode()\n\n    return {\n      do: () => {\n        figcaption.style.display = \"none\"\n        editingFigcaption.appendChild(textarea)\n        editingFigcaption.appendChild(textareaClone)\n        editingFigcaption.classList.add(`${css.attachmentCaption}--editing`)\n        figcaption.parentElement.insertBefore(editingFigcaption, figcaption)\n        autoresize()\n        if (this.options.editCaption) {\n          return defer(() => textarea.focus())\n        }\n      },\n      undo() {\n        removeNode(editingFigcaption)\n        figcaption.style.display = null\n      },\n    }\n  })\n\n  // Event handlers\n\n  didClickToolbar(event) {\n    event.preventDefault()\n    return event.stopPropagation()\n  }\n\n  didClickActionButton(event) {\n    const action = event.target.getAttribute(\"data-trix-action\")\n    switch (action) {\n      case \"remove\":\n        return this.delegate?.attachmentEditorDidRequestRemovalOfAttachment(this.attachment)\n    }\n  }\n\n  didKeyDownCaption(event) {\n    if (keyNames[event.keyCode] === \"return\") {\n      event.preventDefault()\n      this.savePendingCaption()\n      return this.delegate?.attachmentEditorDidRequestDeselectingAttachment?.(this.attachment)\n    }\n  }\n\n  didInputCaption(event) {\n    this.pendingCaption = event.target.value.replace(/\\s/g, \" \").trim()\n  }\n\n  didChangeCaption(event) {\n    return this.savePendingCaption()\n  }\n\n  didBlurCaption(event) {\n    return this.savePendingCaption()\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\nimport DocumentView from \"trix/views/document_view\"\nimport AttachmentEditorController from \"trix/controllers/attachment_editor_controller\"\n\nimport { defer, findClosestElementFromNode, handleEvent, innerElementIsActive } from \"trix/core/helpers\"\nimport { attachmentSelector } from \"trix/config/attachments\"\n\nexport default class CompositionController extends BasicObject {\n  constructor(element, composition) {\n    super(...arguments)\n    this.didFocus = this.didFocus.bind(this)\n    this.didBlur = this.didBlur.bind(this)\n    this.didClickAttachment = this.didClickAttachment.bind(this)\n\n    this.element = element\n    this.composition = composition\n    this.documentView = new DocumentView(this.composition.document, { element: this.element })\n\n    handleEvent(\"focus\", { onElement: this.element, withCallback: this.didFocus })\n    handleEvent(\"blur\", { onElement: this.element, withCallback: this.didBlur })\n    handleEvent(\"click\", {\n      onElement: this.element,\n      matchingSelector: \"a[contenteditable=false]\",\n      preventDefault: true,\n    })\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: attachmentSelector,\n      withCallback: this.didClickAttachment,\n    })\n    handleEvent(\"click\", { onElement: this.element, matchingSelector: `a${attachmentSelector}`, preventDefault: true })\n  }\n\n  didFocus(event) {\n    const perform = () => {\n      if (!this.focused) {\n        this.focused = true\n        return this.delegate?.compositionControllerDidFocus?.()\n      }\n    }\n\n    return this.blurPromise?.then(perform) || perform()\n  }\n\n  didBlur(event) {\n    this.blurPromise = new Promise((resolve) => {\n      return defer(() => {\n        if (!innerElementIsActive(this.element)) {\n          this.focused = null\n          this.delegate?.compositionControllerDidBlur?.()\n        }\n        this.blurPromise = null\n        return resolve()\n      })\n    })\n  }\n\n  didClickAttachment(event, target) {\n    const attachment = this.findAttachmentForElement(target)\n    const editCaption = !!findClosestElementFromNode(event.target, { matchingSelector: \"figcaption\" })\n    return this.delegate?.compositionControllerDidSelectAttachment?.(attachment, { editCaption })\n  }\n\n  getSerializableElement() {\n    if (this.isEditingAttachment()) {\n      return this.documentView.shadowElement\n    } else {\n      return this.element\n    }\n  }\n\n  render() {\n    if (this.revision !== this.composition.revision) {\n      this.documentView.setDocument(this.composition.document)\n      this.documentView.render()\n      this.revision = this.composition.revision\n    }\n\n    if (this.canSyncDocumentView() && !this.documentView.isSynced()) {\n      this.delegate?.compositionControllerWillSyncDocumentView?.()\n      this.documentView.sync()\n      this.delegate?.compositionControllerDidSyncDocumentView?.()\n    }\n\n    return this.delegate?.compositionControllerDidRender?.()\n  }\n\n  rerenderViewForObject(object) {\n    this.invalidateViewForObject(object)\n    return this.render()\n  }\n\n  invalidateViewForObject(object) {\n    return this.documentView.invalidateViewForObject(object)\n  }\n\n  isViewCachingEnabled() {\n    return this.documentView.isViewCachingEnabled()\n  }\n\n  enableViewCaching() {\n    return this.documentView.enableViewCaching()\n  }\n\n  disableViewCaching() {\n    return this.documentView.disableViewCaching()\n  }\n\n  refreshViewCache() {\n    return this.documentView.garbageCollectCachedViews()\n  }\n\n  // Attachment editor management\n\n  isEditingAttachment() {\n    return !!this.attachmentEditor\n  }\n\n  installAttachmentEditorForAttachment(attachment, options) {\n    if (this.attachmentEditor?.attachment === attachment) return\n    const element = this.documentView.findElementForObject(attachment)\n    if (!element) return\n\n    this.uninstallAttachmentEditor()\n    const attachmentPiece = this.composition.document.getAttachmentPieceForAttachment(attachment)\n    this.attachmentEditor = new AttachmentEditorController(attachmentPiece, element, this.element, options)\n    this.attachmentEditor.delegate = this\n  }\n\n  uninstallAttachmentEditor() {\n    return this.attachmentEditor?.uninstall()\n  }\n\n  // Attachment controller delegate\n\n  didUninstallAttachmentEditor() {\n    this.attachmentEditor = null\n    return this.render()\n  }\n\n  attachmentEditorDidRequestUpdatingAttributesForAttachment(attributes, attachment) {\n    this.delegate?.compositionControllerWillUpdateAttachment?.(attachment)\n    return this.composition.updateAttributesForAttachment(attributes, attachment)\n  }\n\n  attachmentEditorDidRequestRemovingAttributeForAttachment(attribute, attachment) {\n    this.delegate?.compositionControllerWillUpdateAttachment?.(attachment)\n    return this.composition.removeAttributeForAttachment(attribute, attachment)\n  }\n\n  attachmentEditorDidRequestRemovalOfAttachment(attachment) {\n    return this.delegate?.compositionControllerDidRequestRemovalOfAttachment?.(attachment)\n  }\n\n  attachmentEditorDidRequestDeselectingAttachment(attachment) {\n    return this.delegate?.compositionControllerDidRequestDeselectingAttachment?.(attachment)\n  }\n\n  // Private\n\n  canSyncDocumentView() {\n    return !this.isEditingAttachment()\n  }\n\n  findAttachmentForElement(element) {\n    return this.composition.document.getAttachmentById(parseInt(element.dataset.trixId, 10))\n  }\n}\n", "import \"trix/views/object_view\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class Controller extends BasicObject {}\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport {\n  findClosestElementFromNode,\n  nodeIsBlockStartComment,\n  nodeIsEmptyTextNode,\n  normalizeSpaces,\n  summarizeStringChange,\n  tagName,\n} from \"trix/core/helpers\"\n\nconst mutableAttributeName = \"data-trix-mutable\"\nconst mutableSelector = `[${mutableAttributeName}]`\n\nconst options = {\n  attributes: true,\n  childList: true,\n  characterData: true,\n  characterDataOldValue: true,\n  subtree: true,\n}\n\nexport default class MutationObserver extends BasicObject {\n  constructor(element) {\n    super(element)\n    this.didMutate = this.didMutate.bind(this)\n    this.element = element\n    this.observer = new window.MutationObserver(this.didMutate)\n    this.start()\n  }\n\n  start() {\n    this.reset()\n    return this.observer.observe(this.element, options)\n  }\n\n  stop() {\n    return this.observer.disconnect()\n  }\n\n  didMutate(mutations) {\n    this.mutations.push(...Array.from(this.findSignificantMutations(mutations) || []))\n\n    if (this.mutations.length) {\n      this.delegate?.elementDidMutate?.(this.getMutationSummary())\n      return this.reset()\n    }\n  }\n\n  // Private\n\n  reset() {\n    this.mutations = []\n  }\n\n  findSignificantMutations(mutations) {\n    return mutations.filter((mutation) => {\n      return this.mutationIsSignificant(mutation)\n    })\n  }\n\n  mutationIsSignificant(mutation) {\n    if (this.nodeIsMutable(mutation.target)) {\n      return false\n    }\n    for (const node of Array.from(this.nodesModifiedByMutation(mutation))) {\n      if (this.nodeIsSignificant(node)) return true\n    }\n    return false\n  }\n\n  nodeIsSignificant(node) {\n    return node !== this.element && !this.nodeIsMutable(node) && !nodeIsEmptyTextNode(node)\n  }\n\n  nodeIsMutable(node) {\n    return findClosestElementFromNode(node, { matchingSelector: mutableSelector })\n  }\n\n  nodesModifiedByMutation(mutation) {\n    const nodes = []\n    switch (mutation.type) {\n      case \"attributes\":\n        if (mutation.attributeName !== mutableAttributeName) {\n          nodes.push(mutation.target)\n        }\n        break\n      case \"characterData\":\n        // Changes to text nodes should consider the parent element\n        nodes.push(mutation.target.parentNode)\n        nodes.push(mutation.target)\n        break\n      case \"childList\":\n        // Consider each added or removed node\n        nodes.push(...Array.from(mutation.addedNodes || []))\n        nodes.push(...Array.from(mutation.removedNodes || []))\n        break\n    }\n    return nodes\n  }\n\n  getMutationSummary() {\n    return this.getTextMutationSummary()\n  }\n\n  getTextMutationSummary() {\n    const { additions, deletions } = this.getTextChangesFromCharacterData()\n    const textChanges = this.getTextChangesFromChildList()\n\n    Array.from(textChanges.additions).forEach((addition) => {\n      if (!Array.from(additions).includes(addition)) {\n        additions.push(addition)\n      }\n    })\n\n    deletions.push(...Array.from(textChanges.deletions || []))\n\n    const summary = {}\n\n    const added = additions.join(\"\")\n    if (added) {\n      summary.textAdded = added\n    }\n\n    const deleted = deletions.join(\"\")\n    if (deleted) {\n      summary.textDeleted = deleted\n    }\n\n    return summary\n  }\n\n  getMutationsByType(type) {\n    return Array.from(this.mutations).filter((mutation) => mutation.type === type)\n  }\n\n  getTextChangesFromChildList() {\n    let textAdded, textRemoved\n    const addedNodes = []\n    const removedNodes = []\n\n    Array.from(this.getMutationsByType(\"childList\")).forEach((mutation) => {\n      addedNodes.push(...Array.from(mutation.addedNodes || []))\n      removedNodes.push(...Array.from(mutation.removedNodes || []))\n    })\n\n    const singleBlockCommentRemoved =\n      addedNodes.length === 0 && removedNodes.length === 1 && nodeIsBlockStartComment(removedNodes[0])\n\n    if (singleBlockCommentRemoved) {\n      textAdded = []\n      textRemoved = [ \"\\n\" ]\n    } else {\n      textAdded = getTextForNodes(addedNodes)\n      textRemoved = getTextForNodes(removedNodes)\n    }\n\n    const additions = textAdded.filter((text, index) => text !== textRemoved[index]).map(normalizeSpaces)\n    const deletions = textRemoved.filter((text, index) => text !== textAdded[index]).map(normalizeSpaces)\n\n    return { additions, deletions }\n  }\n\n  getTextChangesFromCharacterData() {\n    let added, removed\n    const characterMutations = this.getMutationsByType(\"characterData\")\n\n    if (characterMutations.length) {\n      const startMutation = characterMutations[0],\n        endMutation = characterMutations[characterMutations.length - 1]\n\n      const oldString = normalizeSpaces(startMutation.oldValue)\n      const newString = normalizeSpaces(endMutation.target.data)\n      const summarized = summarizeStringChange(oldString, newString)\n      added = summarized.added\n      removed = summarized.removed\n    }\n\n    return {\n      additions: added ? [ added ] : [],\n      deletions: removed ? [ removed ] : [],\n    }\n  }\n}\n\nconst getTextForNodes = function(nodes = []) {\n  const text = []\n  for (const node of Array.from(nodes)) {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        text.push(node.data)\n        break\n      case Node.ELEMENT_NODE:\n        if (tagName(node) === \"br\") {\n          text.push(\"\\n\")\n        } else {\n          text.push(...Array.from(getTextForNodes(node.childNodes) || []))\n        }\n        break\n    }\n  }\n  return text\n}\n", "/* eslint-disable\n    no-empty,\n*/\nimport Operation from \"trix/core/utilities/operation\"\n\nexport default class FileVerificationOperation extends Operation {\n  constructor(file) {\n    super(...arguments)\n    this.file = file\n  }\n\n  perform(callback) {\n    const reader = new FileReader()\n\n    reader.onerror = () => callback(false)\n\n    reader.onload = () => {\n      reader.onerror = null\n      try {\n        reader.abort()\n      } catch (error) {}\n      return callback(true, this.file)\n    }\n\n    return reader.readAsArrayBuffer(this.file)\n  }\n}\n", "import * as config from \"trix/config\"\nimport { NON_BREAKING_SPACE, OBJECT_REPLACEMENT_CHARACTER, ZERO_WIDTH_SPACE } from \"trix/constants\"\n\n// Each software keyboard on Android emits its own set of events and some of them can be buggy.\n// This class detects when some buggy events are being emitted and lets know the input controller\n// that they should be ignored.\nexport default class FlakyAndroidKeyboardDetector {\n  constructor(element) {\n    this.element = element\n  }\n\n  shouldIgnore(event) {\n    if (!config.browser.samsungAndroid) return false\n\n    this.previousEvent = this.event\n    this.event = event\n\n    this.checkSamsungKeyboardBuggyModeStart()\n    this.checkSamsungKeyboardBuggyModeEnd()\n\n    return this.buggyMode\n  }\n\n  // private\n\n  // The Samsung keyboard on Android can enter a buggy state in which it emits a flurry of confused events that,\n  // if processed, corrupts the editor. The buggy mode always starts with an insertText event, right after a\n  // keydown event with for an \"Unidentified\" key, with the same text as the editor element, except for a few\n  // extra whitespace, or exotic utf8, characters.\n  checkSamsungKeyboardBuggyModeStart() {\n    if (this.insertingLongTextAfterUnidentifiedChar() && differsInWhitespace(this.element.innerText, this.event.data)) {\n      this.buggyMode = true\n      this.event.preventDefault()\n    }\n  }\n\n  // The flurry of buggy events are always insertText. If we see any other type, it means it's over.\n  checkSamsungKeyboardBuggyModeEnd() {\n    if (this.buggyMode && this.event.inputType !== \"insertText\") {\n      this.buggyMode = false\n    }\n  }\n\n  insertingLongTextAfterUnidentifiedChar() {\n    return this.isBeforeInputInsertText() && this.previousEventWasUnidentifiedKeydown() && this.event.data?.length > 50\n  }\n\n  isBeforeInputInsertText() {\n    return this.event.type === \"beforeinput\" && this.event.inputType === \"insertText\"\n  }\n\n  previousEventWasUnidentifiedKeydown() {\n    return this.previousEvent?.type === \"keydown\" && this.previousEvent?.key === \"Unidentified\"\n  }\n}\n\nconst differsInWhitespace = (text1, text2) => {\n  return normalize(text1) === normalize(text2)\n}\n\nconst whiteSpaceNormalizerRegexp = new RegExp(`(${OBJECT_REPLACEMENT_CHARACTER}|${ZERO_WIDTH_SPACE}|${NON_BREAKING_SPACE}|\\\\s)+`, \"g\")\nconst normalize = (text) => text.replace(whiteSpaceNormalizerRegexp, \" \").trim()\n", "import BasicObject from \"trix/core/basic_object\"\nimport MutationObserver from \"trix/observers/mutation_observer\"\nimport FileVerificationOperation from \"trix/operations/file_verification_operation\"\nimport FlakyAndroidKeyboardDetector from \"../models/flaky_android_keyboard_detector\"\n\nimport { handleEvent, innerElementIsActive } from \"trix/core/helpers\"\n\nexport default class InputController extends BasicObject {\n\n  static events = {}\n\n  constructor(element) {\n    super(...arguments)\n    this.element = element\n    this.mutationObserver = new MutationObserver(this.element)\n    this.mutationObserver.delegate = this\n    this.flakyKeyboardDetector = new FlakyAndroidKeyboardDetector(this.element)\n    for (const eventName in this.constructor.events) {\n      handleEvent(eventName, { onElement: this.element, withCallback: this.handlerFor(eventName) })\n    }\n  }\n\n  elementDidMutate(mutationSummary) {}\n\n  editorWillSyncDocumentView() {\n    return this.mutationObserver.stop()\n  }\n\n  editorDidSyncDocumentView() {\n    return this.mutationObserver.start()\n  }\n\n  requestRender() {\n    return this.delegate?.inputControllerDidRequestRender?.()\n  }\n\n  requestReparse() {\n    this.delegate?.inputControllerDidRequestReparse?.()\n    return this.requestRender()\n  }\n\n  attachFiles(files) {\n    const operations = Array.from(files).map((file) => new FileVerificationOperation(file))\n    return Promise.all(operations).then((files) => {\n      this.handleInput(function() {\n        this.delegate?.inputControllerWillAttachFiles()\n        this.responder?.insertFiles(files)\n        return this.requestRender()\n      })\n    })\n  }\n\n  // Private\n\n  handlerFor(eventName) {\n    return (event) => {\n      if (!event.defaultPrevented) {\n        this.handleInput(() => {\n          if (!innerElementIsActive(this.element)) {\n            if (this.flakyKeyboardDetector.shouldIgnore(event)) return\n\n            this.eventName = eventName\n            this.constructor.events[eventName].call(this, event)\n          }\n        })\n      }\n    }\n  }\n\n  handleInput(callback) {\n    try {\n      this.delegate?.inputControllerWillHandleInput()\n      callback.call(this)\n    } finally {\n      this.delegate?.inputControllerDidHandleInput()\n    }\n  }\n\n  createLinkHTML(href, text) {\n    const link = document.createElement(\"a\")\n    link.href = href\n    link.textContent = text ? text : href\n    return link.outerHTML\n  }\n}\n\n", "import * as config from \"trix/config\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\nimport BasicObject from \"trix/core/basic_object\"\nimport InputController from \"trix/controllers/input_controller\"\nimport DocumentView from \"trix/views/document_view\"\nimport Document from \"trix/models/document\"\n\nimport {\n  dataTransferIsPlainText,\n  dataTransferIsWritable,\n  keyEventIsKeyboardCommand,\n  makeElement,\n  objectsAreEqual,\n  removeNode,\n  squishBreakableWhitespace,\n} from \"trix/core/helpers\"\n\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nconst { browser, keyNames } = config\nlet pastedFileCount = 0\n\nexport default class Level0InputController extends InputController {\n\n  static events = {\n    keydown(event) {\n      if (!this.isComposing()) {\n        this.resetInputSummary()\n      }\n      this.inputSummary.didInput = true\n\n      const keyName = keyNames[event.keyCode]\n      if (keyName) {\n        let context = this.keys\n\n        ;[ \"ctrl\", \"alt\", \"shift\", \"meta\" ].forEach((modifier) => {\n          if (event[`${modifier}Key`]) {\n            if (modifier === \"ctrl\") {\n              modifier = \"control\"\n            }\n            context = context?.[modifier]\n          }\n        })\n\n        if (context?.[keyName] != null) {\n          this.setInputSummary({ keyName })\n          selectionChangeObserver.reset()\n          context[keyName].call(this, event)\n        }\n      }\n\n      if (keyEventIsKeyboardCommand(event)) {\n        const character = String.fromCharCode(event.keyCode).toLowerCase()\n        if (character) {\n          const keys = [ \"alt\", \"shift\" ].map((modifier) => {\n            if (event[`${modifier}Key`]) {\n              return modifier\n            }\n          }).filter(key => key)\n          keys.push(character)\n          if (this.delegate?.inputControllerDidReceiveKeyboardCommand(keys)) {\n            event.preventDefault()\n          }\n        }\n      }\n    },\n\n    keypress(event) {\n      if (this.inputSummary.eventName != null) return\n      if (event.metaKey) return\n      if (event.ctrlKey && !event.altKey) return\n\n      const string = stringFromKeyEvent(event)\n      if (string) {\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(string)\n        return this.setInputSummary({ textAdded: string, didDelete: this.selectionIsExpanded() })\n      }\n    },\n\n    textInput(event) {\n      // Handle autocapitalization\n      const { data } = event\n      const { textAdded } = this.inputSummary\n      if (textAdded && textAdded !== data && textAdded.toUpperCase() === data) {\n        const range = this.getSelectedRange()\n        this.setSelectedRange([ range[0], range[1] + textAdded.length ])\n        this.responder?.insertString(data)\n        this.setInputSummary({ textAdded: data })\n        return this.setSelectedRange(range)\n      }\n    },\n\n    dragenter(event) {\n      event.preventDefault()\n    },\n\n    dragstart(event) {\n      this.serializeSelectionToDataTransfer(event.dataTransfer)\n      this.draggedRange = this.getSelectedRange()\n      return this.delegate?.inputControllerDidStartDrag?.()\n    },\n\n    dragover(event) {\n      if (this.draggedRange || this.canAcceptDataTransfer(event.dataTransfer)) {\n        event.preventDefault()\n        const draggingPoint = { x: event.clientX, y: event.clientY }\n        if (!objectsAreEqual(draggingPoint, this.draggingPoint)) {\n          this.draggingPoint = draggingPoint\n          return this.delegate?.inputControllerDidReceiveDragOverPoint?.(this.draggingPoint)\n        }\n      }\n    },\n\n    dragend(event) {\n      this.delegate?.inputControllerDidCancelDrag?.()\n      this.draggedRange = null\n      this.draggingPoint = null\n    },\n\n    drop(event) {\n      event.preventDefault()\n      const files = event.dataTransfer?.files\n      const documentJSON = event.dataTransfer.getData(\"application/x-trix-document\")\n\n      const point = { x: event.clientX, y: event.clientY }\n      this.responder?.setLocationRangeFromPointRange(point)\n\n      if (files?.length) {\n        this.attachFiles(files)\n      } else if (this.draggedRange) {\n        this.delegate?.inputControllerWillMoveText()\n        this.responder?.moveTextFromRange(this.draggedRange)\n        this.draggedRange = null\n        this.requestRender()\n      } else if (documentJSON) {\n        const document = Document.fromJSONString(documentJSON)\n        this.responder?.insertDocument(document)\n        this.requestRender()\n      }\n\n      this.draggedRange = null\n      this.draggingPoint = null\n    },\n\n    cut(event) {\n      if (this.responder?.selectionIsExpanded()) {\n        if (this.serializeSelectionToDataTransfer(event.clipboardData)) {\n          event.preventDefault()\n        }\n\n        this.delegate?.inputControllerWillCutText()\n        this.deleteInDirection(\"backward\")\n        if (event.defaultPrevented) {\n          return this.requestRender()\n        }\n      }\n    },\n\n    copy(event) {\n      if (this.responder?.selectionIsExpanded()) {\n        if (this.serializeSelectionToDataTransfer(event.clipboardData)) {\n          event.preventDefault()\n        }\n      }\n    },\n\n    paste(event) {\n      const clipboard = event.clipboardData || event.testClipboardData\n      const paste = { clipboard }\n\n      if (!clipboard || pasteEventIsCrippledSafariHTMLPaste(event)) {\n        this.getPastedHTMLUsingHiddenElement((html) => {\n          paste.type = \"text/html\"\n          paste.html = html\n          this.delegate?.inputControllerWillPaste(paste)\n          this.responder?.insertHTML(paste.html)\n          this.requestRender()\n          return this.delegate?.inputControllerDidPaste(paste)\n        })\n        return\n      }\n\n      const href = clipboard.getData(\"URL\")\n      const html = clipboard.getData(\"text/html\")\n      const name = clipboard.getData(\"public.url-name\")\n\n      if (href) {\n        let string\n        paste.type = \"text/html\"\n        if (name) {\n          string = squishBreakableWhitespace(name).trim()\n        } else {\n          string = href\n        }\n        paste.html = this.createLinkHTML(href, string)\n        this.delegate?.inputControllerWillPaste(paste)\n        this.setInputSummary({ textAdded: string, didDelete: this.selectionIsExpanded() })\n        this.responder?.insertHTML(paste.html)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (dataTransferIsPlainText(clipboard)) {\n        paste.type = \"text/plain\"\n        paste.string = clipboard.getData(\"text/plain\")\n        this.delegate?.inputControllerWillPaste(paste)\n        this.setInputSummary({ textAdded: paste.string, didDelete: this.selectionIsExpanded() })\n        this.responder?.insertString(paste.string)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (html) {\n        paste.type = \"text/html\"\n        paste.html = html\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertHTML(paste.html)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (Array.from(clipboard.types).includes(\"Files\")) {\n        const file = clipboard.items?.[0]?.getAsFile?.()\n        if (file) {\n          const extension = extensionForFile(file)\n          if (!file.name && extension) {\n            file.name = `pasted-file-${++pastedFileCount}.${extension}`\n          }\n          paste.type = \"File\"\n          paste.file = file\n          this.delegate?.inputControllerWillAttachFiles()\n          this.responder?.insertFile(paste.file)\n          this.requestRender()\n          this.delegate?.inputControllerDidPaste(paste)\n        }\n      }\n\n      event.preventDefault()\n    },\n\n    compositionstart(event) {\n      return this.getCompositionInput().start(event.data)\n    },\n\n    compositionupdate(event) {\n      return this.getCompositionInput().update(event.data)\n    },\n\n    compositionend(event) {\n      return this.getCompositionInput().end(event.data)\n    },\n\n    beforeinput(event) {\n      this.inputSummary.didInput = true\n    },\n\n    input(event) {\n      this.inputSummary.didInput = true\n      return event.stopPropagation()\n    },\n  }\n\n  static keys = {\n    backspace(event) {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.deleteInDirection(\"backward\", event)\n    },\n\n    delete(event) {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.deleteInDirection(\"forward\", event)\n    },\n\n    return(event) {\n      this.setInputSummary({ preferDocument: true })\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.responder?.insertLineBreak()\n    },\n\n    tab(event) {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        this.responder?.increaseNestingLevel()\n        this.requestRender()\n        event.preventDefault()\n      }\n    },\n\n    left(event) {\n      if (this.selectionIsInCursorTarget()) {\n        event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"backward\")\n      }\n    },\n\n    right(event) {\n      if (this.selectionIsInCursorTarget()) {\n        event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"forward\")\n      }\n    },\n\n    control: {\n      d(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        return this.deleteInDirection(\"forward\", event)\n      },\n\n      h(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        return this.deleteInDirection(\"backward\", event)\n      },\n\n      o(event) {\n        event.preventDefault()\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(\"\\n\", { updatePosition: false })\n        return this.requestRender()\n      },\n    },\n\n    shift: {\n      return(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(\"\\n\")\n        this.requestRender()\n        event.preventDefault()\n      },\n\n      tab(event) {\n        if (this.responder?.canDecreaseNestingLevel()) {\n          this.responder?.decreaseNestingLevel()\n          this.requestRender()\n          event.preventDefault()\n        }\n      },\n\n      left(event) {\n        if (this.selectionIsInCursorTarget()) {\n          event.preventDefault()\n          return this.expandSelectionInDirection(\"backward\")\n        }\n      },\n\n      right(event) {\n        if (this.selectionIsInCursorTarget()) {\n          event.preventDefault()\n          return this.expandSelectionInDirection(\"forward\")\n        }\n      },\n    },\n\n    alt: {\n      backspace(event) {\n        this.setInputSummary({ preferDocument: false })\n        return this.delegate?.inputControllerWillPerformTyping()\n      },\n    },\n\n    meta: {\n      backspace(event) {\n        this.setInputSummary({ preferDocument: false })\n        return this.delegate?.inputControllerWillPerformTyping()\n      },\n    },\n  }\n\n  constructor() {\n    super(...arguments)\n    this.resetInputSummary()\n  }\n\n  setInputSummary(summary = {}) {\n    this.inputSummary.eventName = this.eventName\n    for (const key in summary) {\n      const value = summary[key]\n      this.inputSummary[key] = value\n    }\n    return this.inputSummary\n  }\n\n  resetInputSummary() {\n    this.inputSummary = {}\n  }\n\n  reset() {\n    this.resetInputSummary()\n    return selectionChangeObserver.reset()\n  }\n\n  // Mutation observer delegate\n\n  elementDidMutate(mutationSummary) {\n    if (this.isComposing()) {\n      return this.delegate?.inputControllerDidAllowUnhandledInput?.()\n    } else {\n      return this.handleInput(function() {\n        if (this.mutationIsSignificant(mutationSummary)) {\n          if (this.mutationIsExpected(mutationSummary)) {\n            this.requestRender()\n          } else {\n            this.requestReparse()\n          }\n        }\n        return this.reset()\n      })\n    }\n  }\n\n  mutationIsExpected({ textAdded, textDeleted }) {\n    if (this.inputSummary.preferDocument) {\n      return true\n    }\n\n    const mutationAdditionMatchesSummary =\n      textAdded != null ? textAdded === this.inputSummary.textAdded : !this.inputSummary.textAdded\n    const mutationDeletionMatchesSummary =\n      textDeleted != null ? this.inputSummary.didDelete : !this.inputSummary.didDelete\n\n    const unexpectedNewlineAddition = [ \"\\n\", \" \\n\" ].includes(textAdded) && !mutationAdditionMatchesSummary\n    const unexpectedNewlineDeletion = textDeleted === \"\\n\" && !mutationDeletionMatchesSummary\n    const singleUnexpectedNewline =\n      unexpectedNewlineAddition && !unexpectedNewlineDeletion ||\n      unexpectedNewlineDeletion && !unexpectedNewlineAddition\n\n    if (singleUnexpectedNewline) {\n      const range = this.getSelectedRange()\n      if (range) {\n        const offset = unexpectedNewlineAddition ? textAdded.replace(/\\n$/, \"\").length || -1 : textAdded?.length || 1\n        if (this.responder?.positionIsBlockBreak(range[1] + offset)) {\n          return true\n        }\n      }\n    }\n\n    return mutationAdditionMatchesSummary && mutationDeletionMatchesSummary\n  }\n\n  mutationIsSignificant(mutationSummary) {\n    const textChanged = Object.keys(mutationSummary).length > 0\n    const composedEmptyString = this.compositionInput?.getEndData() === \"\"\n    return textChanged || !composedEmptyString\n  }\n\n  // Private\n\n  getCompositionInput() {\n    if (this.isComposing()) {\n      return this.compositionInput\n    } else {\n      this.compositionInput = new CompositionInput(this)\n    }\n  }\n\n  isComposing() {\n    return this.compositionInput && !this.compositionInput.isEnded()\n  }\n\n  deleteInDirection(direction, event) {\n    if (this.responder?.deleteInDirection(direction) === false) {\n      if (event) {\n        event.preventDefault()\n        return this.requestRender()\n      }\n    } else {\n      return this.setInputSummary({ didDelete: true })\n    }\n  }\n\n  serializeSelectionToDataTransfer(dataTransfer) {\n    if (!dataTransferIsWritable(dataTransfer)) return\n    const document = this.responder?.getSelectedDocument().toSerializableDocument()\n\n    dataTransfer.setData(\"application/x-trix-document\", JSON.stringify(document))\n    dataTransfer.setData(\"text/html\", DocumentView.render(document).innerHTML)\n    dataTransfer.setData(\"text/plain\", document.toString().replace(/\\n$/, \"\"))\n    return true\n  }\n\n  canAcceptDataTransfer(dataTransfer) {\n    const types = {}\n    Array.from(dataTransfer?.types || []).forEach((type) => {\n      types[type] = true\n    })\n    return types.Files || types[\"application/x-trix-document\"] || types[\"text/html\"] || types[\"text/plain\"]\n  }\n\n  getPastedHTMLUsingHiddenElement(callback) {\n    const selectedRange = this.getSelectedRange()\n\n    const style = {\n      position: \"absolute\",\n      left: `${window.pageXOffset}px`,\n      top: `${window.pageYOffset}px`,\n      opacity: 0,\n    }\n\n    const element = makeElement({ style, tagName: \"div\", editable: true })\n    document.body.appendChild(element)\n    element.focus()\n\n    return requestAnimationFrame(() => {\n      const html = element.innerHTML\n      removeNode(element)\n      this.setSelectedRange(selectedRange)\n      return callback(html)\n    })\n  }\n}\n\nLevel0InputController.proxyMethod(\"responder?.getSelectedRange\")\nLevel0InputController.proxyMethod(\"responder?.setSelectedRange\")\nLevel0InputController.proxyMethod(\"responder?.expandSelectionInDirection\")\nLevel0InputController.proxyMethod(\"responder?.selectionIsInCursorTarget\")\nLevel0InputController.proxyMethod(\"responder?.selectionIsExpanded\")\n\nconst extensionForFile = (file) => file.type?.match(/\\/(\\w+)$/)?.[1]\n\nconst hasStringCodePointAt = !!\" \".codePointAt?.(0)\n\nconst stringFromKeyEvent = function(event) {\n  if (event.key && hasStringCodePointAt && event.key.codePointAt(0) === event.keyCode) {\n    return event.key\n  } else {\n    let code\n    if (event.which === null) {\n      code = event.keyCode\n    } else if (event.which !== 0 && event.charCode !== 0) {\n      code = event.charCode\n    }\n\n    if (code != null && keyNames[code] !== \"escape\") {\n      return UTF16String.fromCodepoints([ code ]).toString()\n    }\n  }\n}\n\nconst pasteEventIsCrippledSafariHTMLPaste = function(event) {\n  const paste = event.clipboardData\n  if (paste) {\n    if (paste.types.includes(\"text/html\")) {\n      // Answer is yes if there's any possibility of Paste and Match Style in Safari,\n      // which is nearly impossible to detect confidently: https://bugs.webkit.org/show_bug.cgi?id=174165\n      for (const type of paste.types) {\n        const hasPasteboardFlavor = /^CorePasteboardFlavorType/.test(type)\n        const hasReadableDynamicData = /^dyn\\./.test(type) && paste.getData(type)\n        const mightBePasteAndMatchStyle = hasPasteboardFlavor || hasReadableDynamicData\n        if (mightBePasteAndMatchStyle) {\n          return true\n        }\n      }\n      return false\n    } else {\n      const isExternalHTMLPaste = paste.types.includes(\"com.apple.webarchive\")\n      const isExternalRichTextPaste = paste.types.includes(\"com.apple.flat-rtfd\")\n      return isExternalHTMLPaste || isExternalRichTextPaste\n    }\n  }\n}\n\nclass CompositionInput extends BasicObject {\n  constructor(inputController) {\n    super(...arguments)\n    this.inputController = inputController\n    this.responder = this.inputController.responder\n    this.delegate = this.inputController.delegate\n    this.inputSummary = this.inputController.inputSummary\n    this.data = {}\n  }\n\n  start(data) {\n    this.data.start = data\n\n    if (this.isSignificant()) {\n      if (this.inputSummary.eventName === \"keypress\" && this.inputSummary.textAdded) {\n        this.responder?.deleteInDirection(\"left\")\n      }\n\n      if (!this.selectionIsExpanded()) {\n        this.insertPlaceholder()\n        this.requestRender()\n      }\n\n      this.range = this.responder?.getSelectedRange()\n    }\n  }\n\n  update(data) {\n    this.data.update = data\n\n    if (this.isSignificant()) {\n      const range = this.selectPlaceholder()\n      if (range) {\n        this.forgetPlaceholder()\n        this.range = range\n      }\n    }\n  }\n\n  end(data) {\n    this.data.end = data\n\n    if (this.isSignificant()) {\n      this.forgetPlaceholder()\n\n      if (this.canApplyToDocument()) {\n        this.setInputSummary({ preferDocument: true, didInput: false })\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.setSelectedRange(this.range)\n        this.responder?.insertString(this.data.end)\n        return this.responder?.setSelectedRange(this.range[0] + this.data.end.length)\n      } else if (this.data.start != null || this.data.update != null) {\n        this.requestReparse()\n        return this.inputController.reset()\n      }\n    } else {\n      return this.inputController.reset()\n    }\n  }\n\n  getEndData() {\n    return this.data.end\n  }\n\n  isEnded() {\n    return this.getEndData() != null\n  }\n\n  isSignificant() {\n    if (browser.composesExistingText) {\n      return this.inputSummary.didInput\n    } else {\n      return true\n    }\n  }\n\n  // Private\n\n  canApplyToDocument() {\n    return this.data.start?.length === 0 && this.data.end?.length > 0 && this.range\n  }\n}\n\nCompositionInput.proxyMethod(\"inputController.setInputSummary\")\nCompositionInput.proxyMethod(\"inputController.requestRender\")\nCompositionInput.proxyMethod(\"inputController.requestReparse\")\nCompositionInput.proxyMethod(\"responder?.selectionIsExpanded\")\nCompositionInput.proxyMethod(\"responder?.insertPlaceholder\")\nCompositionInput.proxyMethod(\"responder?.selectPlaceholder\")\nCompositionInput.proxyMethod(\"responder?.forgetPlaceholder\")\n", "import { getAllAttributeNames, squishBreakableWhitespace } from \"trix/core/helpers\"\nimport InputController from \"trix/controllers/input_controller\"\nimport * as config from \"trix/config\"\n\nimport { dataTransferIsPlainText, keyEventIsKeyboardCommand, objectsAreEqual } from \"trix/core/helpers\"\n\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nexport default class Level2InputController extends InputController {\n  constructor(...args) {\n    super(...args)\n    this.render = this.render.bind(this)\n  }\n\n  static events = {\n    keydown(event) {\n      if (keyEventIsKeyboardCommand(event)) {\n        const command = keyboardCommandFromKeyEvent(event)\n        if (this.delegate?.inputControllerDidReceiveKeyboardCommand(command)) {\n          event.preventDefault()\n        }\n      } else {\n        let name = event.key\n        if (event.altKey) {\n          name += \"+Alt\"\n        }\n        if (event.shiftKey) {\n          name += \"+Shift\"\n        }\n        const handler = this.constructor.keys[name]\n        if (handler) {\n          return this.withEvent(event, handler)\n        }\n      }\n    },\n\n    // Handle paste event to work around beforeinput.insertFromPaste browser bugs.\n    // Safe to remove each condition once fixed upstream.\n    paste(event) {\n      // https://bugs.webkit.org/show_bug.cgi?id=194921\n      let paste\n      const href = event.clipboardData?.getData(\"URL\")\n      if (pasteEventHasFilesOnly(event)) {\n        event.preventDefault()\n        return this.attachFiles(event.clipboardData.files)\n\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=934448\n      } else if (pasteEventHasPlainTextOnly(event)) {\n        event.preventDefault()\n        paste = {\n          type: \"text/plain\",\n          string: event.clipboardData.getData(\"text/plain\"),\n        }\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertString(paste.string)\n        this.render()\n        return this.delegate?.inputControllerDidPaste(paste)\n\n        // https://bugs.webkit.org/show_bug.cgi?id=196702\n      } else if (href) {\n        event.preventDefault()\n        paste = {\n          type: \"text/html\",\n          html: this.createLinkHTML(href),\n        }\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertHTML(paste.html)\n        this.render()\n        return this.delegate?.inputControllerDidPaste(paste)\n      }\n    },\n\n    beforeinput(event) {\n      const handler = this.constructor.inputTypes[event.inputType]\n\n      if (handler) {\n        this.withEvent(event, handler)\n        this.scheduleRender()\n      }\n    },\n\n    input(event) {\n      selectionChangeObserver.reset()\n    },\n\n    dragstart(event) {\n      if (this.responder?.selectionContainsAttachments()) {\n        event.dataTransfer.setData(\"application/x-trix-dragging\", true)\n\n        this.dragging = {\n          range: this.responder?.getSelectedRange(),\n          point: pointFromEvent(event),\n        }\n      }\n    },\n\n    dragenter(event) {\n      if (dragEventHasFiles(event)) {\n        event.preventDefault()\n      }\n    },\n\n    dragover(event) {\n      if (this.dragging) {\n        event.preventDefault()\n        const point = pointFromEvent(event)\n        if (!objectsAreEqual(point, this.dragging.point)) {\n          this.dragging.point = point\n          return this.responder?.setLocationRangeFromPointRange(point)\n        }\n      } else if (dragEventHasFiles(event)) {\n        event.preventDefault()\n      }\n    },\n\n    drop(event) {\n      if (this.dragging) {\n        event.preventDefault()\n        this.delegate?.inputControllerWillMoveText()\n        this.responder?.moveTextFromRange(this.dragging.range)\n        this.dragging = null\n        return this.scheduleRender()\n      } else if (dragEventHasFiles(event)) {\n        event.preventDefault()\n        const point = pointFromEvent(event)\n        this.responder?.setLocationRangeFromPointRange(point)\n        return this.attachFiles(event.dataTransfer.files)\n      }\n    },\n\n    dragend() {\n      if (this.dragging) {\n        this.responder?.setSelectedRange(this.dragging.range)\n        this.dragging = null\n      }\n    },\n\n    compositionend(event) {\n      if (this.composing) {\n        this.composing = false\n        if (!config.browser.recentAndroid) this.scheduleRender()\n      }\n    },\n  }\n\n  static keys = {\n    ArrowLeft() {\n      if (this.responder?.shouldManageMovingCursorInDirection(\"backward\")) {\n        this.event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"backward\")\n      }\n    },\n\n    ArrowRight() {\n      if (this.responder?.shouldManageMovingCursorInDirection(\"forward\")) {\n        this.event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"forward\")\n      }\n    },\n\n    Backspace() {\n      if (this.responder?.shouldManageDeletingInDirection(\"backward\")) {\n        this.event.preventDefault()\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.deleteInDirection(\"backward\")\n        return this.render()\n      }\n    },\n\n    Tab() {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        this.event.preventDefault()\n        this.responder?.increaseNestingLevel()\n        return this.render()\n      }\n    },\n\n    \"Tab+Shift\"() {\n      if (this.responder?.canDecreaseNestingLevel()) {\n        this.event.preventDefault()\n        this.responder?.decreaseNestingLevel()\n        return this.render()\n      }\n    },\n  }\n\n  static inputTypes = {\n    deleteByComposition() {\n      return this.deleteInDirection(\"backward\", { recordUndoEntry: false })\n    },\n\n    deleteByCut() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteByDrag() {\n      this.event.preventDefault()\n      return this.withTargetDOMRange(function() {\n        this.deleteByDragRange = this.responder?.getSelectedRange()\n      })\n    },\n\n    deleteCompositionText() {\n      return this.deleteInDirection(\"backward\", { recordUndoEntry: false })\n    },\n\n    deleteContent() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteContentBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteContentForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteEntireSoftLine() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteHardLineBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteHardLineForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteSoftLineBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteSoftLineForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteWordBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteWordForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    formatBackColor() {\n      return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data)\n    },\n\n    formatBold() {\n      return this.toggleAttributeIfSupported(\"bold\")\n    },\n\n    formatFontColor() {\n      return this.activateAttributeIfSupported(\"color\", this.event.data)\n    },\n\n    formatFontName() {\n      return this.activateAttributeIfSupported(\"font\", this.event.data)\n    },\n\n    formatIndent() {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        return this.withTargetDOMRange(function() {\n          return this.responder?.increaseNestingLevel()\n        })\n      }\n    },\n\n    formatItalic() {\n      return this.toggleAttributeIfSupported(\"italic\")\n    },\n\n    formatJustifyCenter() {\n      return this.toggleAttributeIfSupported(\"justifyCenter\")\n    },\n\n    formatJustifyFull() {\n      return this.toggleAttributeIfSupported(\"justifyFull\")\n    },\n\n    formatJustifyLeft() {\n      return this.toggleAttributeIfSupported(\"justifyLeft\")\n    },\n\n    formatJustifyRight() {\n      return this.toggleAttributeIfSupported(\"justifyRight\")\n    },\n\n    formatOutdent() {\n      if (this.responder?.canDecreaseNestingLevel()) {\n        return this.withTargetDOMRange(function() {\n          return this.responder?.decreaseNestingLevel()\n        })\n      }\n    },\n\n    formatRemove() {\n      this.withTargetDOMRange(function() {\n        for (const attributeName in this.responder?.getCurrentAttributes()) {\n          this.responder?.removeCurrentAttribute(attributeName)\n        }\n      })\n    },\n\n    formatSetBlockTextDirection() {\n      return this.activateAttributeIfSupported(\"blockDir\", this.event.data)\n    },\n\n    formatSetInlineTextDirection() {\n      return this.activateAttributeIfSupported(\"textDir\", this.event.data)\n    },\n\n    formatStrikeThrough() {\n      return this.toggleAttributeIfSupported(\"strike\")\n    },\n\n    formatSubscript() {\n      return this.toggleAttributeIfSupported(\"sub\")\n    },\n\n    formatSuperscript() {\n      return this.toggleAttributeIfSupported(\"sup\")\n    },\n\n    formatUnderline() {\n      return this.toggleAttributeIfSupported(\"underline\")\n    },\n\n    historyRedo() {\n      return this.delegate?.inputControllerWillPerformRedo()\n    },\n\n    historyUndo() {\n      return this.delegate?.inputControllerWillPerformUndo()\n    },\n\n    insertCompositionText() {\n      this.composing = true\n      return this.insertString(this.event.data)\n    },\n\n    insertFromComposition() {\n      this.composing = false\n      return this.insertString(this.event.data)\n    },\n\n    insertFromDrop() {\n      const range = this.deleteByDragRange\n      if (range) {\n        this.deleteByDragRange = null\n        this.delegate?.inputControllerWillMoveText()\n        return this.withTargetDOMRange(function() {\n          return this.responder?.moveTextFromRange(range)\n        })\n      }\n    },\n\n    insertFromPaste() {\n      const { dataTransfer } = this.event\n      const paste = { dataTransfer }\n      const href = dataTransfer.getData(\"URL\")\n      const html = dataTransfer.getData(\"text/html\")\n\n      if (href) {\n        let string\n        this.event.preventDefault()\n        paste.type = \"text/html\"\n        const name = dataTransfer.getData(\"public.url-name\")\n        if (name) {\n          string = squishBreakableWhitespace(name).trim()\n        } else {\n          string = href\n        }\n        paste.html = this.createLinkHTML(href, string)\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertHTML(paste.html)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (dataTransferIsPlainText(dataTransfer)) {\n        paste.type = \"text/plain\"\n        paste.string = dataTransfer.getData(\"text/plain\")\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertString(paste.string)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (html) {\n        this.event.preventDefault()\n        paste.type = \"text/html\"\n        paste.html = html\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertHTML(paste.html)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (dataTransfer.files?.length) {\n        paste.type = \"File\"\n        paste.file = dataTransfer.files[0]\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertFile(paste.file)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      }\n    },\n\n    insertFromYank() {\n      return this.insertString(this.event.data)\n    },\n\n    insertLineBreak() {\n      return this.insertString(\"\\n\")\n    },\n\n    insertLink() {\n      return this.activateAttributeIfSupported(\"href\", this.event.data)\n    },\n\n    insertOrderedList() {\n      return this.toggleAttributeIfSupported(\"number\")\n    },\n\n    insertParagraph() {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.withTargetDOMRange(function() {\n        return this.responder?.insertLineBreak()\n      })\n    },\n\n    insertReplacementText() {\n      const replacement = this.event.dataTransfer.getData(\"text/plain\")\n      const domRange = this.event.getTargetRanges()[0]\n\n      this.withTargetDOMRange(domRange, () => {\n        this.insertString(replacement, { updatePosition: false })\n      })\n    },\n\n    insertText() {\n      return this.insertString(this.event.data || this.event.dataTransfer?.getData(\"text/plain\"))\n    },\n\n    insertTranspose() {\n      return this.insertString(this.event.data)\n    },\n\n    insertUnorderedList() {\n      return this.toggleAttributeIfSupported(\"bullet\")\n    },\n  }\n\n  elementDidMutate() {\n    if (this.scheduledRender) {\n      if (this.composing) {\n        return this.delegate?.inputControllerDidAllowUnhandledInput?.()\n      }\n    } else {\n      return this.reparse()\n    }\n  }\n\n  scheduleRender() {\n    return this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render)\n  }\n\n  render() {\n    cancelAnimationFrame(this.scheduledRender)\n    this.scheduledRender = null\n    if (!this.composing) {\n      this.delegate?.render()\n    }\n    this.afterRender?.()\n    this.afterRender = null\n  }\n\n  reparse() {\n    return this.delegate?.reparse()\n  }\n\n  // Responder helpers\n\n  insertString(string = \"\", options) {\n    this.delegate?.inputControllerWillPerformTyping()\n    return this.withTargetDOMRange(function() {\n      return this.responder?.insertString(string, options)\n    })\n  }\n\n  toggleAttributeIfSupported(attributeName) {\n    if (getAllAttributeNames().includes(attributeName)) {\n      this.delegate?.inputControllerWillPerformFormatting(attributeName)\n      return this.withTargetDOMRange(function() {\n        return this.responder?.toggleCurrentAttribute(attributeName)\n      })\n    }\n  }\n\n  activateAttributeIfSupported(attributeName, value) {\n    if (getAllAttributeNames().includes(attributeName)) {\n      this.delegate?.inputControllerWillPerformFormatting(attributeName)\n      return this.withTargetDOMRange(function() {\n        return this.responder?.setCurrentAttribute(attributeName, value)\n      })\n    }\n  }\n\n  deleteInDirection(direction, { recordUndoEntry } = { recordUndoEntry: true }) {\n    if (recordUndoEntry) {\n      this.delegate?.inputControllerWillPerformTyping()\n    }\n    const perform = () => this.responder?.deleteInDirection(direction)\n    const domRange = this.getTargetDOMRange({ minLength: this.composing ? 1 : 2 })\n    if (domRange) {\n      return this.withTargetDOMRange(domRange, perform)\n    } else {\n      return perform()\n    }\n  }\n\n  // Selection helpers\n\n  withTargetDOMRange(domRange, fn) {\n    if (typeof domRange === \"function\") {\n      fn = domRange\n      domRange = this.getTargetDOMRange()\n    }\n    if (domRange) {\n      return this.responder?.withTargetDOMRange(domRange, fn.bind(this))\n    } else {\n      selectionChangeObserver.reset()\n      return fn.call(this)\n    }\n  }\n\n  getTargetDOMRange({ minLength } = { minLength: 0 }) {\n    const targetRanges = this.event.getTargetRanges?.()\n    if (targetRanges) {\n      if (targetRanges.length) {\n        const domRange = staticRangeToRange(targetRanges[0])\n        if (minLength === 0 || domRange.toString().length >= minLength) {\n          return domRange\n        }\n      }\n    }\n  }\n\n  withEvent(event, fn) {\n    let result\n    this.event = event\n    try {\n      result = fn.call(this)\n    } finally {\n      this.event = null\n    }\n    return result\n  }\n}\n\nconst staticRangeToRange = function(staticRange) {\n  const range = document.createRange()\n  range.setStart(staticRange.startContainer, staticRange.startOffset)\n  range.setEnd(staticRange.endContainer, staticRange.endOffset)\n  return range\n}\n\n// Event helpers\n\nconst dragEventHasFiles = (event) => Array.from(event.dataTransfer?.types || []).includes(\"Files\")\n\nconst pasteEventHasFilesOnly = function(event) {\n  const clipboard = event.clipboardData\n  if (clipboard) {\n    return clipboard.types.includes(\"Files\") && clipboard.types.length === 1 && clipboard.files.length >= 1\n  }\n}\n\nconst pasteEventHasPlainTextOnly = function(event) {\n  const clipboard = event.clipboardData\n  if (clipboard) {\n    return clipboard.types.includes(\"text/plain\") && clipboard.types.length === 1\n  }\n}\n\nconst keyboardCommandFromKeyEvent = function(event) {\n  const command = []\n  if (event.altKey) {\n    command.push(\"alt\")\n  }\n  if (event.shiftKey) {\n    command.push(\"shift\")\n  }\n  command.push(event.key)\n  return command\n}\n\nconst pointFromEvent = (event) => ({\n  x: event.clientX,\n  y: event.clientY,\n})\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { findClosestElementFromNode, handleEvent, triggerEvent } from \"trix/core/helpers\"\n\nconst attributeButtonSelector = \"[data-trix-attribute]\"\nconst actionButtonSelector = \"[data-trix-action]\"\nconst toolbarButtonSelector = `${attributeButtonSelector}, ${actionButtonSelector}`\nconst dialogSelector = \"[data-trix-dialog]\"\nconst activeDialogSelector = `${dialogSelector}[data-trix-active]`\nconst dialogButtonSelector = `${dialogSelector} [data-trix-method]`\nconst dialogInputSelector = `${dialogSelector} [data-trix-input]`\nconst getInputForDialog = (element, attributeName) => {\n  if (!attributeName) { attributeName = getAttributeName(element) }\n  return element.querySelector(`[data-trix-input][name='${attributeName}']`)\n}\nconst getActionName = (element) => element.getAttribute(\"data-trix-action\")\nconst getAttributeName = (element) => {\n  return element.getAttribute(\"data-trix-attribute\") || element.getAttribute(\"data-trix-dialog-attribute\")\n}\nconst getDialogName = (element) => element.getAttribute(\"data-trix-dialog\")\n\nexport default class ToolbarController extends BasicObject {\n  constructor(element) {\n    super(element)\n    this.didClickActionButton = this.didClickActionButton.bind(this)\n    this.didClickAttributeButton = this.didClickAttributeButton.bind(this)\n    this.didClickDialogButton = this.didClickDialogButton.bind(this)\n    this.didKeyDownDialogInput = this.didKeyDownDialogInput.bind(this)\n    this.element = element\n    this.attributes = {}\n    this.actions = {}\n    this.resetDialogInputs()\n\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: actionButtonSelector,\n      withCallback: this.didClickActionButton,\n    })\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: attributeButtonSelector,\n      withCallback: this.didClickAttributeButton,\n    })\n    handleEvent(\"click\", { onElement: this.element, matchingSelector: toolbarButtonSelector, preventDefault: true })\n    handleEvent(\"click\", {\n      onElement: this.element,\n      matchingSelector: dialogButtonSelector,\n      withCallback: this.didClickDialogButton,\n    })\n    handleEvent(\"keydown\", {\n      onElement: this.element,\n      matchingSelector: dialogInputSelector,\n      withCallback: this.didKeyDownDialogInput,\n    })\n  }\n\n  // Event handlers\n\n  didClickActionButton(event, element) {\n    this.delegate?.toolbarDidClickButton()\n    event.preventDefault()\n    const actionName = getActionName(element)\n\n    if (this.getDialog(actionName)) {\n      return this.toggleDialog(actionName)\n    } else {\n      return this.delegate?.toolbarDidInvokeAction(actionName, element)\n    }\n  }\n\n  didClickAttributeButton(event, element) {\n    this.delegate?.toolbarDidClickButton()\n    event.preventDefault()\n    const attributeName = getAttributeName(element)\n\n    if (this.getDialog(attributeName)) {\n      this.toggleDialog(attributeName)\n    } else {\n      this.delegate?.toolbarDidToggleAttribute(attributeName)\n    }\n\n    return this.refreshAttributeButtons()\n  }\n\n  didClickDialogButton(event, element) {\n    const dialogElement = findClosestElementFromNode(element, { matchingSelector: dialogSelector })\n    const method = element.getAttribute(\"data-trix-method\")\n    return this[method].call(this, dialogElement)\n  }\n\n  didKeyDownDialogInput(event, element) {\n    if (event.keyCode === 13) {\n      // Enter key\n      event.preventDefault()\n      const attribute = element.getAttribute(\"name\")\n      const dialog = this.getDialog(attribute)\n      this.setAttribute(dialog)\n    }\n    if (event.keyCode === 27) {\n      // Escape key\n      event.preventDefault()\n      return this.hideDialog()\n    }\n  }\n\n  // Action buttons\n\n  updateActions(actions) {\n    this.actions = actions\n    return this.refreshActionButtons()\n  }\n\n  refreshActionButtons() {\n    return this.eachActionButton((element, actionName) => {\n      element.disabled = this.actions[actionName] === false\n    })\n  }\n\n  eachActionButton(callback) {\n    return Array.from(this.element.querySelectorAll(actionButtonSelector)).map((element) =>\n      callback(element, getActionName(element))\n    )\n  }\n\n  // Attribute buttons\n\n  updateAttributes(attributes) {\n    this.attributes = attributes\n    return this.refreshAttributeButtons()\n  }\n\n  refreshAttributeButtons() {\n    return this.eachAttributeButton((element, attributeName) => {\n      element.disabled = this.attributes[attributeName] === false\n      if (this.attributes[attributeName] || this.dialogIsVisible(attributeName)) {\n        element.setAttribute(\"data-trix-active\", \"\")\n        return element.classList.add(\"trix-active\")\n      } else {\n        element.removeAttribute(\"data-trix-active\")\n        return element.classList.remove(\"trix-active\")\n      }\n    })\n  }\n\n  eachAttributeButton(callback) {\n    return Array.from(this.element.querySelectorAll(attributeButtonSelector)).map((element) =>\n      callback(element, getAttributeName(element))\n    )\n  }\n\n  applyKeyboardCommand(keys) {\n    const keyString = JSON.stringify(keys.sort())\n    for (const button of Array.from(this.element.querySelectorAll(\"[data-trix-key]\"))) {\n      const buttonKeys = button.getAttribute(\"data-trix-key\").split(\"+\")\n      const buttonKeyString = JSON.stringify(buttonKeys.sort())\n      if (buttonKeyString === keyString) {\n        triggerEvent(\"mousedown\", { onElement: button })\n        return true\n      }\n    }\n    return false\n  }\n\n  // Dialogs\n\n  dialogIsVisible(dialogName) {\n    const element = this.getDialog(dialogName)\n    if (element) {\n      return element.hasAttribute(\"data-trix-active\")\n    }\n  }\n\n  toggleDialog(dialogName) {\n    if (this.dialogIsVisible(dialogName)) {\n      return this.hideDialog()\n    } else {\n      return this.showDialog(dialogName)\n    }\n  }\n\n  showDialog(dialogName) {\n    this.hideDialog()\n    this.delegate?.toolbarWillShowDialog()\n\n    const element = this.getDialog(dialogName)\n    element.setAttribute(\"data-trix-active\", \"\")\n    element.classList.add(\"trix-active\")\n\n    Array.from(element.querySelectorAll(\"input[disabled]\")).forEach((disabledInput) => {\n      disabledInput.removeAttribute(\"disabled\")\n    })\n\n    const attributeName = getAttributeName(element)\n    if (attributeName) {\n      const input = getInputForDialog(element, dialogName)\n      if (input) {\n        input.value = this.attributes[attributeName] || \"\"\n        input.select()\n      }\n    }\n\n    return this.delegate?.toolbarDidShowDialog(dialogName)\n  }\n\n  setAttribute(dialogElement) {\n    const attributeName = getAttributeName(dialogElement)\n    const input = getInputForDialog(dialogElement, attributeName)\n    if (input.willValidate && !input.checkValidity()) {\n      input.setAttribute(\"data-trix-validate\", \"\")\n      input.classList.add(\"trix-validate\")\n      return input.focus()\n    } else {\n      this.delegate?.toolbarDidUpdateAttribute(attributeName, input.value)\n      return this.hideDialog()\n    }\n  }\n\n  removeAttribute(dialogElement) {\n    const attributeName = getAttributeName(dialogElement)\n    this.delegate?.toolbarDidRemoveAttribute(attributeName)\n    return this.hideDialog()\n  }\n\n  hideDialog() {\n    const element = this.element.querySelector(activeDialogSelector)\n    if (element) {\n      element.removeAttribute(\"data-trix-active\")\n      element.classList.remove(\"trix-active\")\n      this.resetDialogInputs()\n      return this.delegate?.toolbarDidHideDialog(getDialogName(element))\n    }\n  }\n\n  resetDialogInputs() {\n    Array.from(this.element.querySelectorAll(dialogInputSelector)).forEach((input) => {\n      input.setAttribute(\"disabled\", \"disabled\")\n      input.removeAttribute(\"data-trix-validate\")\n      input.classList.remove(\"trix-validate\")\n    })\n  }\n\n  getDialog(dialogName) {\n    return this.element.querySelector(`[data-trix-dialog=${dialogName}]`)\n  }\n}\n", "/* eslint-disable\n    id-length,\n*/\nimport * as config from \"trix/config\"\n\nimport { serializeToContentType } from \"trix/core/serialization\"\n\nimport Controller from \"trix/controllers/controller\"\nimport Level0InputController from \"trix/controllers/level_0_input_controller\"\nimport Level2InputController from \"trix/controllers/level_2_input_controller\"\nimport CompositionController from \"trix/controllers/composition_controller\"\nimport ToolbarController from \"trix/controllers/toolbar_controller\"\nimport Composition from \"trix/models/composition\"\nimport Editor from \"trix/models/editor\"\nimport AttachmentManager from \"trix/models/attachment_manager\"\nimport SelectionManager from \"trix/models/selection_manager\"\n\nimport { getBlockConfig, objectsAreEqual, rangeIsCollapsed, rangesAreEqual } from \"trix/core/helpers\"\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nconst snapshotsAreEqual = (a, b) => rangesAreEqual(a.selectedRange, b.selectedRange) && a.document.isEqualTo(b.document)\n\nexport default class EditorController extends Controller {\n  static actions = {\n    undo: {\n      test() {\n        return this.editor.canUndo()\n      },\n      perform() {\n        return this.editor.undo()\n      },\n    },\n    redo: {\n      test() {\n        return this.editor.canRedo()\n      },\n      perform() {\n        return this.editor.redo()\n      },\n    },\n    link: {\n      test() {\n        return this.editor.canActivateAttribute(\"href\")\n      },\n    },\n    increaseNestingLevel: {\n      test() {\n        return this.editor.canIncreaseNestingLevel()\n      },\n      perform() {\n        return this.editor.increaseNestingLevel() && this.render()\n      },\n    },\n    decreaseNestingLevel: {\n      test() {\n        return this.editor.canDecreaseNestingLevel()\n      },\n      perform() {\n        return this.editor.decreaseNestingLevel() && this.render()\n      },\n    },\n    attachFiles: {\n      test() {\n        return true\n      },\n      perform() {\n        return config.input.pickFiles(this.editor.insertFiles)\n      },\n    },\n  }\n\n  constructor({ editorElement, document, html }) {\n    super(...arguments)\n    this.editorElement = editorElement\n    this.selectionManager = new SelectionManager(this.editorElement)\n    this.selectionManager.delegate = this\n\n    this.composition = new Composition()\n    this.composition.delegate = this\n\n    this.attachmentManager = new AttachmentManager(this.composition.getAttachments())\n    this.attachmentManager.delegate = this\n\n    this.inputController =\n      config.input.getLevel() === 2\n        ? new Level2InputController(this.editorElement)\n        : new Level0InputController(this.editorElement)\n\n    this.inputController.delegate = this\n    this.inputController.responder = this.composition\n\n    this.compositionController = new CompositionController(this.editorElement, this.composition)\n    this.compositionController.delegate = this\n\n    this.toolbarController = new ToolbarController(this.editorElement.toolbarElement)\n    this.toolbarController.delegate = this\n\n    this.editor = new Editor(this.composition, this.selectionManager, this.editorElement)\n    if (document) {\n      this.editor.loadDocument(document)\n    } else {\n      this.editor.loadHTML(html)\n    }\n  }\n\n  registerSelectionManager() {\n    return selectionChangeObserver.registerSelectionManager(this.selectionManager)\n  }\n\n  unregisterSelectionManager() {\n    return selectionChangeObserver.unregisterSelectionManager(this.selectionManager)\n  }\n\n  render() {\n    return this.compositionController.render()\n  }\n\n  reparse() {\n    return this.composition.replaceHTML(this.editorElement.innerHTML)\n  }\n\n  // Composition delegate\n\n  compositionDidChangeDocument(document) {\n    this.notifyEditorElement(\"document-change\")\n    if (!this.handlingInput) {\n      return this.render()\n    }\n  }\n\n  compositionDidChangeCurrentAttributes(currentAttributes) {\n    this.currentAttributes = currentAttributes\n    this.toolbarController.updateAttributes(this.currentAttributes)\n    this.updateCurrentActions()\n    return this.notifyEditorElement(\"attributes-change\", { attributes: this.currentAttributes })\n  }\n\n  compositionDidPerformInsertionAtRange(range) {\n    if (this.pasting) {\n      this.pastedRange = range\n    }\n  }\n\n  compositionShouldAcceptFile(file) {\n    return this.notifyEditorElement(\"file-accept\", { file })\n  }\n\n  compositionDidAddAttachment(attachment) {\n    const managedAttachment = this.attachmentManager.manageAttachment(attachment)\n    return this.notifyEditorElement(\"attachment-add\", { attachment: managedAttachment })\n  }\n\n  compositionDidEditAttachment(attachment) {\n    this.compositionController.rerenderViewForObject(attachment)\n    const managedAttachment = this.attachmentManager.manageAttachment(attachment)\n    this.notifyEditorElement(\"attachment-edit\", { attachment: managedAttachment })\n    return this.notifyEditorElement(\"change\")\n  }\n\n  compositionDidChangeAttachmentPreviewURL(attachment) {\n    this.compositionController.invalidateViewForObject(attachment)\n    return this.notifyEditorElement(\"change\")\n  }\n\n  compositionDidRemoveAttachment(attachment) {\n    const managedAttachment = this.attachmentManager.unmanageAttachment(attachment)\n    return this.notifyEditorElement(\"attachment-remove\", { attachment: managedAttachment })\n  }\n\n  compositionDidStartEditingAttachment(attachment, options) {\n    this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(attachment)\n    this.compositionController.installAttachmentEditorForAttachment(attachment, options)\n    return this.selectionManager.setLocationRange(this.attachmentLocationRange)\n  }\n\n  compositionDidStopEditingAttachment(attachment) {\n    this.compositionController.uninstallAttachmentEditor()\n    this.attachmentLocationRange = null\n  }\n\n  compositionDidRequestChangingSelectionToLocationRange(locationRange) {\n    if (this.loadingSnapshot && !this.isFocused()) return\n    this.requestedLocationRange = locationRange\n    this.compositionRevisionWhenLocationRangeRequested = this.composition.revision\n    if (!this.handlingInput) {\n      return this.render()\n    }\n  }\n\n  compositionWillLoadSnapshot() {\n    this.loadingSnapshot = true\n  }\n\n  compositionDidLoadSnapshot() {\n    this.compositionController.refreshViewCache()\n    this.render()\n    this.loadingSnapshot = false\n  }\n\n  getSelectionManager() {\n    return this.selectionManager\n  }\n\n  // Attachment manager delegate\n\n  attachmentManagerDidRequestRemovalOfAttachment(attachment) {\n    return this.removeAttachment(attachment)\n  }\n\n  // Document controller delegate\n\n  compositionControllerWillSyncDocumentView() {\n    this.inputController.editorWillSyncDocumentView()\n    this.selectionManager.lock()\n    return this.selectionManager.clearSelection()\n  }\n\n  compositionControllerDidSyncDocumentView() {\n    this.inputController.editorDidSyncDocumentView()\n    this.selectionManager.unlock()\n    this.updateCurrentActions()\n    return this.notifyEditorElement(\"sync\")\n  }\n\n  compositionControllerDidRender() {\n    if (this.requestedLocationRange) {\n      if (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision) {\n        this.selectionManager.setLocationRange(this.requestedLocationRange)\n      }\n      this.requestedLocationRange = null\n      this.compositionRevisionWhenLocationRangeRequested = null\n    }\n\n    if (this.renderedCompositionRevision !== this.composition.revision) {\n      this.runEditorFilters()\n      this.composition.updateCurrentAttributes()\n      this.notifyEditorElement(\"render\")\n    }\n\n    this.renderedCompositionRevision = this.composition.revision\n  }\n\n  compositionControllerDidFocus() {\n    if (this.isFocusedInvisibly()) {\n      this.setLocationRange({ index: 0, offset: 0 })\n    }\n    this.toolbarController.hideDialog()\n    return this.notifyEditorElement(\"focus\")\n  }\n\n  compositionControllerDidBlur() {\n    return this.notifyEditorElement(\"blur\")\n  }\n\n  compositionControllerDidSelectAttachment(attachment, options) {\n    this.toolbarController.hideDialog()\n    return this.composition.editAttachment(attachment, options)\n  }\n\n  compositionControllerDidRequestDeselectingAttachment(attachment) {\n    const locationRange = this.attachmentLocationRange || this.composition.document.getLocationRangeOfAttachment(attachment)\n    return this.selectionManager.setLocationRange(locationRange[1])\n  }\n\n  compositionControllerWillUpdateAttachment(attachment) {\n    return this.editor.recordUndoEntry(\"Edit Attachment\", { context: attachment.id, consolidatable: true })\n  }\n\n  compositionControllerDidRequestRemovalOfAttachment(attachment) {\n    return this.removeAttachment(attachment)\n  }\n\n  // Input controller delegate\n\n  inputControllerWillHandleInput() {\n    this.handlingInput = true\n    this.requestedRender = false\n  }\n\n  inputControllerDidRequestRender() {\n    this.requestedRender = true\n  }\n\n  inputControllerDidHandleInput() {\n    this.handlingInput = false\n    if (this.requestedRender) {\n      this.requestedRender = false\n      return this.render()\n    }\n  }\n\n  inputControllerDidAllowUnhandledInput() {\n    return this.notifyEditorElement(\"change\")\n  }\n\n  inputControllerDidRequestReparse() {\n    return this.reparse()\n  }\n\n  inputControllerWillPerformTyping() {\n    return this.recordTypingUndoEntry()\n  }\n\n  inputControllerWillPerformFormatting(attributeName) {\n    return this.recordFormattingUndoEntry(attributeName)\n  }\n\n  inputControllerWillCutText() {\n    return this.editor.recordUndoEntry(\"Cut\")\n  }\n\n  inputControllerWillPaste(paste) {\n    this.editor.recordUndoEntry(\"Paste\")\n    this.pasting = true\n    return this.notifyEditorElement(\"before-paste\", { paste })\n  }\n\n  inputControllerDidPaste(paste) {\n    paste.range = this.pastedRange\n    this.pastedRange = null\n    this.pasting = null\n    return this.notifyEditorElement(\"paste\", { paste })\n  }\n\n  inputControllerWillMoveText() {\n    return this.editor.recordUndoEntry(\"Move\")\n  }\n\n  inputControllerWillAttachFiles() {\n    return this.editor.recordUndoEntry(\"Drop Files\")\n  }\n\n  inputControllerWillPerformUndo() {\n    return this.editor.undo()\n  }\n\n  inputControllerWillPerformRedo() {\n    return this.editor.redo()\n  }\n\n  inputControllerDidReceiveKeyboardCommand(keys) {\n    return this.toolbarController.applyKeyboardCommand(keys)\n  }\n\n  inputControllerDidStartDrag() {\n    this.locationRangeBeforeDrag = this.selectionManager.getLocationRange()\n  }\n\n  inputControllerDidReceiveDragOverPoint(point) {\n    return this.selectionManager.setLocationRangeFromPointRange(point)\n  }\n\n  inputControllerDidCancelDrag() {\n    this.selectionManager.setLocationRange(this.locationRangeBeforeDrag)\n    this.locationRangeBeforeDrag = null\n  }\n\n  // Selection manager delegate\n\n  locationRangeDidChange(locationRange) {\n    this.composition.updateCurrentAttributes()\n    this.updateCurrentActions()\n    if (this.attachmentLocationRange && !rangesAreEqual(this.attachmentLocationRange, locationRange)) {\n      this.composition.stopEditingAttachment()\n    }\n    return this.notifyEditorElement(\"selection-change\")\n  }\n\n  // Toolbar controller delegate\n\n  toolbarDidClickButton() {\n    if (!this.getLocationRange()) {\n      return this.setLocationRange({ index: 0, offset: 0 })\n    }\n  }\n\n  toolbarDidInvokeAction(actionName, invokingElement) {\n    return this.invokeAction(actionName, invokingElement)\n  }\n\n  toolbarDidToggleAttribute(attributeName) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.toggleCurrentAttribute(attributeName)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarDidUpdateAttribute(attributeName, value) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.setCurrentAttribute(attributeName, value)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarDidRemoveAttribute(attributeName) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.removeCurrentAttribute(attributeName)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarWillShowDialog(dialogElement) {\n    this.composition.expandSelectionForEditing()\n    return this.freezeSelection()\n  }\n\n  toolbarDidShowDialog(dialogName) {\n    return this.notifyEditorElement(\"toolbar-dialog-show\", { dialogName })\n  }\n\n  toolbarDidHideDialog(dialogName) {\n    this.thawSelection()\n    this.editorElement.focus()\n    return this.notifyEditorElement(\"toolbar-dialog-hide\", { dialogName })\n  }\n\n  // Selection\n\n  freezeSelection() {\n    if (!this.selectionFrozen) {\n      this.selectionManager.lock()\n      this.composition.freezeSelection()\n      this.selectionFrozen = true\n      return this.render()\n    }\n  }\n\n  thawSelection() {\n    if (this.selectionFrozen) {\n      this.composition.thawSelection()\n      this.selectionManager.unlock()\n      this.selectionFrozen = false\n      return this.render()\n    }\n  }\n\n  canInvokeAction(actionName) {\n    if (this.actionIsExternal(actionName)) {\n      return true\n    } else {\n      return !!this.actions[actionName]?.test?.call(this)\n    }\n  }\n\n  invokeAction(actionName, invokingElement) {\n    if (this.actionIsExternal(actionName)) {\n      return this.notifyEditorElement(\"action-invoke\", { actionName, invokingElement })\n    } else {\n      return this.actions[actionName]?.perform?.call(this)\n    }\n  }\n\n  actionIsExternal(actionName) {\n    return /^x-./.test(actionName)\n  }\n\n  getCurrentActions() {\n    const result = {}\n    for (const actionName in this.actions) {\n      result[actionName] = this.canInvokeAction(actionName)\n    }\n    return result\n  }\n\n  updateCurrentActions() {\n    const currentActions = this.getCurrentActions()\n    if (!objectsAreEqual(currentActions, this.currentActions)) {\n      this.currentActions = currentActions\n      this.toolbarController.updateActions(this.currentActions)\n      return this.notifyEditorElement(\"actions-change\", { actions: this.currentActions })\n    }\n  }\n\n  // Editor filters\n\n  runEditorFilters() {\n    let snapshot = this.composition.getSnapshot()\n\n    Array.from(this.editor.filters).forEach((filter) => {\n      const { document, selectedRange } = snapshot\n      snapshot = filter.call(this.editor, snapshot) || {}\n      if (!snapshot.document) {\n        snapshot.document = document\n      }\n      if (!snapshot.selectedRange) {\n        snapshot.selectedRange = selectedRange\n      }\n    })\n\n    if (!snapshotsAreEqual(snapshot, this.composition.getSnapshot())) {\n      return this.composition.loadSnapshot(snapshot)\n    }\n  }\n\n  // Private\n\n  updateInputElement() {\n    const element = this.compositionController.getSerializableElement()\n    const value = serializeToContentType(element, \"text/html\")\n    return this.editorElement.setInputElementValue(value)\n  }\n\n  notifyEditorElement(message, data) {\n    switch (message) {\n      case \"document-change\":\n        this.documentChangedSinceLastRender = true\n        break\n      case \"render\":\n        if (this.documentChangedSinceLastRender) {\n          this.documentChangedSinceLastRender = false\n          this.notifyEditorElement(\"change\")\n        }\n        break\n      case \"change\":\n      case \"attachment-add\":\n      case \"attachment-edit\":\n      case \"attachment-remove\":\n        this.updateInputElement()\n        break\n    }\n\n    return this.editorElement.notify(message, data)\n  }\n\n  removeAttachment(attachment) {\n    this.editor.recordUndoEntry(\"Delete Attachment\")\n    this.composition.removeAttachment(attachment)\n    return this.render()\n  }\n\n  recordFormattingUndoEntry(attributeName) {\n    const blockConfig = getBlockConfig(attributeName)\n    const locationRange = this.selectionManager.getLocationRange()\n    if (blockConfig || !rangeIsCollapsed(locationRange)) {\n      return this.editor.recordUndoEntry(\"Formatting\", { context: this.getUndoContext(), consolidatable: true })\n    }\n  }\n\n  recordTypingUndoEntry() {\n    return this.editor.recordUndoEntry(\"Typing\", {\n      context: this.getUndoContext(this.currentAttributes),\n      consolidatable: true,\n    })\n  }\n\n  getUndoContext(...context) {\n    return [ this.getLocationContext(), this.getTimeContext(), ...Array.from(context) ]\n  }\n\n  getLocationContext() {\n    const locationRange = this.selectionManager.getLocationRange()\n    if (rangeIsCollapsed(locationRange)) {\n      return locationRange[0].index\n    } else {\n      return locationRange\n    }\n  }\n\n  getTimeContext() {\n    if (config.undo.interval > 0) {\n      return Math.floor(new Date().getTime() / config.undo.interval)\n    } else {\n      return 0\n    }\n  }\n\n  isFocused() {\n    return this.editorElement === this.editorElement.ownerDocument?.activeElement\n  }\n\n  // Detect \"Cursor disappears sporadically\" Firefox bug.\n  // - https://bugzilla.mozilla.org/show_bug.cgi?id=226301\n  isFocusedInvisibly() {\n    return this.isFocused() && !this.getLocationRange()\n  }\n\n  get actions() {\n    return this.constructor.actions\n  }\n}\n\nEditorController.proxyMethod(\"getSelectionManager().setLocationRange\")\nEditorController.proxyMethod(\"getSelectionManager().getLocationRange\")\n", "import * as config from \"trix/config\"\n\nimport { installDefaultCSSForTagName } from \"trix/core/helpers\"\n\ninstallDefaultCSSForTagName(\"trix-toolbar\", `\\\n%t {\n  display: block;\n}\n\n%t {\n  white-space: nowrap;\n}\n\n%t [data-trix-dialog] {\n  display: none;\n}\n\n%t [data-trix-dialog][data-trix-active] {\n  display: block;\n}\n\n%t [data-trix-dialog] [data-trix-validate]:invalid {\n  background-color: #ffdddd;\n}`)\n\nexport default class TrixToolbarElement extends HTMLElement {\n\n  // Element lifecycle\n\n  connectedCallback() {\n    if (this.innerHTML === \"\") {\n      this.innerHTML = config.toolbar.getDefaultHTML()\n    }\n  }\n}\n", "import * as config from \"trix/config\"\n\nimport {\n  findClosestElementFromNode,\n  handleEvent,\n  handleEventOnce,\n  installDefaultCSSForTagName,\n  makeElement,\n  triggerEvent,\n} from \"trix/core/helpers\"\n\nimport { attachmentSelector } from \"trix/config/attachments\"\nimport EditorController from \"trix/controllers/editor_controller\"\nimport \"trix/elements/trix_toolbar_element\"\n\nlet id = 0\n\n// Contenteditable support helpers\n\nconst autofocus = function(element) {\n  if (!document.querySelector(\":focus\")) {\n    if (element.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === element) {\n      return element.focus()\n    }\n  }\n}\n\nconst makeEditable = function(element) {\n  if (element.hasAttribute(\"contenteditable\")) {\n    return\n  }\n  element.setAttribute(\"contenteditable\", \"\")\n  return handleEventOnce(\"focus\", {\n    onElement: element,\n    withCallback() {\n      return configureContentEditable(element)\n    },\n  })\n}\n\nconst configureContentEditable = function(element) {\n  disableObjectResizing(element)\n  return setDefaultParagraphSeparator(element)\n}\n\nconst disableObjectResizing = function(element) {\n  if (document.queryCommandSupported?.(\"enableObjectResizing\")) {\n    document.execCommand(\"enableObjectResizing\", false, false)\n    return handleEvent(\"mscontrolselect\", { onElement: element, preventDefault: true })\n  }\n}\n\nconst setDefaultParagraphSeparator = function(element) {\n  if (document.queryCommandSupported?.(\"DefaultParagraphSeparator\")) {\n    const { tagName } = config.blockAttributes.default\n    if ([ \"div\", \"p\" ].includes(tagName)) {\n      return document.execCommand(\"DefaultParagraphSeparator\", false, tagName)\n    }\n  }\n}\n\n// Accessibility helpers\n\nconst addAccessibilityRole = function(element) {\n  if (element.hasAttribute(\"role\")) {\n    return\n  }\n  return element.setAttribute(\"role\", \"textbox\")\n}\n\nconst ensureAriaLabel = function(element) {\n  if (element.hasAttribute(\"aria-label\") || element.hasAttribute(\"aria-labelledby\")) {\n    return\n  }\n\n  const update = function() {\n    const texts = Array.from(element.labels).map((label) => {\n      if (!label.contains(element)) return label.textContent\n    }).filter(text => text)\n\n    const text = texts.join(\" \")\n    if (text) {\n      return element.setAttribute(\"aria-label\", text)\n    } else {\n      return element.removeAttribute(\"aria-label\")\n    }\n  }\n  update()\n  return handleEvent(\"focus\", { onElement: element, withCallback: update })\n}\n\n// Style\n\nconst cursorTargetStyles = (function() {\n  if (config.browser.forcesObjectResizing) {\n    return {\n      display: \"inline\",\n      width: \"auto\",\n    }\n  } else {\n    return {\n      display: \"inline-block\",\n      width: \"1px\",\n    }\n  }\n})()\n\ninstallDefaultCSSForTagName(\"trix-editor\", `\\\n%t {\n    display: block;\n}\n\n%t:empty:not(:focus)::before {\n    content: attr(placeholder);\n    color: graytext;\n    cursor: text;\n    pointer-events: none;\n    white-space: pre-line;\n}\n\n%t a[contenteditable=false] {\n    cursor: text;\n}\n\n%t img {\n    max-width: 100%;\n    height: auto;\n}\n\n%t ${attachmentSelector} figcaption textarea {\n    resize: none;\n}\n\n%t ${attachmentSelector} figcaption textarea.trix-autoresize-clone {\n    position: absolute;\n    left: -9999px;\n    max-height: 0px;\n}\n\n%t ${attachmentSelector} figcaption[data-trix-placeholder]:empty::before {\n    content: attr(data-trix-placeholder);\n    color: graytext;\n}\n\n%t [data-trix-cursor-target] {\n    display: ${cursorTargetStyles.display} !important;\n    width: ${cursorTargetStyles.width} !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    border: none !important;\n}\n\n%t [data-trix-cursor-target=left] {\n    vertical-align: top !important;\n    margin-left: -1px !important;\n}\n\n%t [data-trix-cursor-target=right] {\n    vertical-align: bottom !important;\n    margin-right: -1px !important;\n}`)\n\nexport default class TrixEditorElement extends HTMLElement {\n\n  // Properties\n\n  get trixId() {\n    if (this.hasAttribute(\"trix-id\")) {\n      return this.getAttribute(\"trix-id\")\n    } else {\n      this.setAttribute(\"trix-id\", ++id)\n      return this.trixId\n    }\n  }\n\n  get labels() {\n    const labels = []\n    if (this.id && this.ownerDocument) {\n      labels.push(...Array.from(this.ownerDocument.querySelectorAll(`label[for='${this.id}']`) || []))\n    }\n\n    const label = findClosestElementFromNode(this, { matchingSelector: \"label\" })\n    if (label) {\n      if ([ this, null ].includes(label.control)) {\n        labels.push(label)\n      }\n    }\n\n    return labels\n  }\n\n  get toolbarElement() {\n    if (this.hasAttribute(\"toolbar\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"toolbar\"))\n    } else if (this.parentNode) {\n      const toolbarId = `trix-toolbar-${this.trixId}`\n      this.setAttribute(\"toolbar\", toolbarId)\n      const element = makeElement(\"trix-toolbar\", { id: toolbarId })\n      this.parentNode.insertBefore(element, this)\n      return element\n    } else {\n      return undefined\n    }\n  }\n\n  get form() {\n    return this.inputElement?.form\n  }\n\n  get inputElement() {\n    if (this.hasAttribute(\"input\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"input\"))\n    } else if (this.parentNode) {\n      const inputId = `trix-input-${this.trixId}`\n      this.setAttribute(\"input\", inputId)\n      const element = makeElement(\"input\", { type: \"hidden\", id: inputId })\n      this.parentNode.insertBefore(element, this.nextElementSibling)\n      return element\n    } else {\n      return undefined\n    }\n  }\n\n  get editor() {\n    return this.editorController?.editor\n  }\n\n  get name() {\n    return this.inputElement?.name\n  }\n\n  get value() {\n    return this.inputElement?.value\n  }\n\n  set value(defaultValue) {\n    this.defaultValue = defaultValue\n    this.editor?.loadHTML(this.defaultValue)\n  }\n\n  // Controller delegate methods\n\n  notify(message, data) {\n    if (this.editorController) {\n      return triggerEvent(`trix-${message}`, { onElement: this, attributes: data })\n    }\n  }\n\n  setInputElementValue(value) {\n    if (this.inputElement) {\n      this.inputElement.value = value\n    }\n  }\n\n  // Element lifecycle\n\n  connectedCallback() {\n    if (!this.hasAttribute(\"data-trix-internal\")) {\n      makeEditable(this)\n      addAccessibilityRole(this)\n      ensureAriaLabel(this)\n\n      if (!this.editorController) {\n        triggerEvent(\"trix-before-initialize\", { onElement: this })\n        this.editorController = new EditorController({\n          editorElement: this,\n          html: this.defaultValue = this.value,\n        })\n        requestAnimationFrame(() => triggerEvent(\"trix-initialize\", { onElement: this }))\n      }\n      this.editorController.registerSelectionManager()\n      this.registerResetListener()\n      this.registerClickListener()\n      autofocus(this)\n    }\n  }\n\n  disconnectedCallback() {\n    this.editorController?.unregisterSelectionManager()\n    this.unregisterResetListener()\n    return this.unregisterClickListener()\n  }\n\n  // Form support\n\n  registerResetListener() {\n    this.resetListener = this.resetBubbled.bind(this)\n    return window.addEventListener(\"reset\", this.resetListener, false)\n  }\n\n  unregisterResetListener() {\n    return window.removeEventListener(\"reset\", this.resetListener, false)\n  }\n\n  registerClickListener() {\n    this.clickListener = this.clickBubbled.bind(this)\n    return window.addEventListener(\"click\", this.clickListener, false)\n  }\n\n  unregisterClickListener() {\n    return window.removeEventListener(\"click\", this.clickListener, false)\n  }\n\n  resetBubbled(event) {\n    if (event.defaultPrevented) return\n    if (event.target !== this.form) return\n    return this.reset()\n  }\n\n  clickBubbled(event) {\n    if (event.defaultPrevented) return\n    if (this.contains(event.target)) return\n\n    const label = findClosestElementFromNode(event.target, { matchingSelector: \"label\" })\n    if (!label) return\n\n    if (!Array.from(this.labels).includes(label)) return\n\n    return this.focus()\n  }\n\n  reset() {\n    this.value = this.defaultValue\n  }\n}\n", "import { version } from \"../../package.json\"\n\nimport * as config from \"trix/config\"\nimport * as core from \"trix/core\"\nimport * as models from \"trix/models\"\nimport * as views from \"trix/views\"\nimport * as controllers from \"trix/controllers\"\nimport * as observers from \"trix/observers\"\nimport * as operations from \"trix/operations\"\nimport * as elements from \"trix/elements\"\nimport * as filters from \"trix/filters\"\n\nconst Trix = {\n  VERSION: version,\n  config,\n  core,\n  models,\n  views,\n  controllers,\n  observers,\n  operations,\n  elements,\n  filters\n}\n\n// Expose models under the Trix constant for compatibility with v1\nObject.assign(Trix, models)\n\nfunction start() {\n  if (!customElements.get(\"trix-toolbar\")) {\n    customElements.define(\"trix-toolbar\", elements.TrixToolbarElement)\n  }\n\n  if (!customElements.get(\"trix-editor\")) {\n    customElements.define(\"trix-editor\", elements.TrixEditorElement)\n  }\n}\n\nwindow.Trix = Trix\nsetTimeout(start, 0)\n\nexport default Trix\n", "var sparkMd5 = {\n  exports: {}\n};\n\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })((function(undefined$1) {\n    var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [], length = hex.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function(str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer;\n    this.fileReader = new FileReader;\n    this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n    this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const {disabled: disabled} = element;\n  const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\n\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\n\nclass BlobRecord {\n  constructor(file, checksum, url, customHeaders = {}) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    Object.keys(customHeaders).forEach((headerKey => {\n      this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n    }));\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const {responseType: responseType, response: response} = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const {response: response} = this;\n      const {direct_upload: direct_upload} = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\n\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const {url: url, headers: headers} = blob.directUploadData;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const {status: status, response: response} = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n  constructor(file, url, delegate, customHeaders = {}) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n    this.customHeaders = customHeaders;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, ((error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          }));\n        }\n      }));\n    }));\n  }\n}\n\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\n\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create(((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    }));\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n  }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        }));\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input => {\n      toArray(input.files).forEach((file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      }));\n    }));\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\n\nfunction didClick(event) {\n  const button = event.target.closest(\"button, input\");\n  if (button && button.type === \"submit\" && button.form) {\n    submitButtonsByForm.set(button.form, button);\n  }\n}\n\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\n\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const {inputs: inputs} = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    }));\n  }\n}\n\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const {disabled: disabled} = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n  input.disabled = true;\n}\n\nfunction enable(input) {\n  input.disabled = false;\n}\n\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\n\nsetTimeout(autostart, 1);\n\nclass AttachmentUpload {\n  constructor(attachment, element) {\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this);\n  }\n  start() {\n    this.directUpload.create(this.directUploadDidComplete.bind(this));\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    xhr.upload.addEventListener(\"progress\", (event => {\n      const progress = event.loaded / event.total * 100;\n      this.attachment.setUploadProgress(progress);\n    }));\n  }\n  directUploadDidComplete(error, attributes) {\n    if (error) {\n      throw new Error(`Direct upload failed: ${error}`);\n    }\n    this.attachment.setAttributes({\n      sgid: attributes.attachable_sgid,\n      url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n    });\n  }\n  createBlobUrl(signedId, filename) {\n    return this.blobUrlTemplate.replace(\":signed_id\", signedId).replace(\":filename\", encodeURIComponent(filename));\n  }\n  get directUploadUrl() {\n    return this.element.dataset.directUploadUrl;\n  }\n  get blobUrlTemplate() {\n    return this.element.dataset.blobUrlTemplate;\n  }\n}\n\naddEventListener(\"trix-attachment-add\", (event => {\n  const {attachment: attachment, target: target} = event;\n  if (attachment.file) {\n    const upload = new AttachmentUpload(attachment, target);\n    upload.start();\n  }\n}));\n", "import Cookies from 'js.cookie';\n\n'use strict';\n\nclass CookiesEuBanner {\n  constructor() {\n    this.container = document.querySelector('.js-cookies-eu');\n    this.button = document.querySelector('.js-cookies-eu-ok');\n\n    this.handleConsentClick = this.handleConsentClick.bind(this);\n  }\n\n  init() {\n    if (!this.button) {\n      return;\n    }\n\n    this.button.addEventListener('click', this.handleConsentClick);\n    this.clearPageCache();\n  }\n\n  handleConsentClick() {\n    const isSecure = location.protocol === 'https:';\n    Cookies.set('cookie_eu_consented', true, { path: '/', expires: 365, secure: isSecure });\n\n    if (this.container) {\n      this.container.remove();\n    }\n\n    document.dispatchEvent(new CustomEvent('cookies-eu-acknowledged'));\n  }\n\n  clearPageCache() {\n    if ('Turbo' in window) {\n      if (window.Turbo.cache && typeof window.Turbo.cache.clear === 'function') {\n        window.Turbo.cache.clear();\n      } else if (typeof window.Turbo.clearCache === 'function') {\n        window.Turbo.clearCache();\n      }\n    } else if ('Turbolinks' in window && typeof window.Turbolinks.clearCache === 'function') {\n      window.Turbolinks.clearCache();\n    }\n  }\n}\n\nfunction getPageLoadEvent() {\n  if ('Turbo' in window) {\n    return 'turbo:load';\n  }\n\n  if ('Turbolinks' in window) {\n    return 'turbolinks:load';\n  }\n\n  return 'DOMContentLoaded';\n}\n\ndocument.addEventListener(getPageLoadEvent(), () => {\n  new CookiesEuBanner().init();\n}, false);"],
  "mappings": "4wBAAA,IAAOA,GAAPC,GAAAC,GAAA,KAAOF,GAAQ,CACb,OAAQ,OAAO,QAAY,IAAc,QAAU,OACnD,UAAW,OAAO,UAAc,IAAc,UAAY,MAC5D,ICHA,IAcOG,EAdPC,GAAAC,GAAA,KAAAC,KAcOH,EAAQ,CACb,OAAOI,EAAU,CACX,KAAK,UACPA,EAAS,KAAK,KAAK,IAAI,CAAC,EACxBC,GAAS,OAAO,IAAI,gBAAiB,GAAGD,CAAQ,EAEpD,CACF,ICrBA,IAKME,GAEAC,GAEAC,GAmHCC,GA5HPC,GAAAC,GAAA,KAAAC,KAKMN,GAAM,IAAM,IAAI,KAAK,EAAE,QAAQ,EAE/BC,GAAeM,IAASP,GAAI,EAAIO,GAAQ,IAExCL,GAAN,KAAwB,CACtB,YAAYM,EAAY,CACtB,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,WAAaA,EAClB,KAAK,kBAAoB,CAC3B,CAEA,OAAQ,CACD,KAAK,UAAU,IAClB,KAAK,UAAYR,GAAI,EACrB,OAAO,KAAK,UACZ,KAAK,aAAa,EAClB,iBAAiB,mBAAoB,KAAK,mBAAmB,EAC7DS,EAAO,IAAI,gDAAgD,KAAK,YAAY,kBAAkB,EAElG,CAEA,MAAO,CACD,KAAK,UAAU,IACjB,KAAK,UAAYT,GAAI,EACrB,KAAK,YAAY,EACjB,oBAAoB,mBAAoB,KAAK,mBAAmB,EAChES,EAAO,IAAI,2BAA2B,EAE1C,CAEA,WAAY,CACV,OAAO,KAAK,WAAa,CAAC,KAAK,SACjC,CAEA,YAAa,CACX,KAAK,SAAWT,GAAI,CACtB,CAEA,eAAgB,CACd,KAAK,kBAAoB,EACzB,KAAK,WAAW,EAChB,OAAO,KAAK,eACZS,EAAO,IAAI,oCAAoC,CACjD,CAEA,kBAAmB,CACjB,KAAK,eAAiBT,GAAI,EAC1BS,EAAO,IAAI,uCAAuC,CACpD,CAIA,cAAe,CACb,KAAK,YAAY,EACjB,KAAK,KAAK,CACZ,CAEA,aAAc,CACZ,aAAa,KAAK,WAAW,CAC/B,CAEA,MAAO,CACL,KAAK,YAAc,WAAW,IAAM,CAClC,KAAK,iBAAiB,EACtB,KAAK,KAAK,CACZ,EACE,KAAK,gBAAgB,CAAC,CAC1B,CAEA,iBAAkB,CAChB,GAAM,CAAE,eAAAC,EAAgB,wBAAAC,CAAwB,EAAI,KAAK,YACnDC,EAAU,KAAK,IAAI,EAAID,EAAyB,KAAK,IAAI,KAAK,kBAAmB,EAAE,CAAC,EAEpFE,GADY,KAAK,oBAAsB,EAAI,EAAMF,GAC5B,KAAK,OAAO,EACvC,OAAOD,EAAiB,IAAOE,GAAW,EAAIC,EAChD,CAEA,kBAAmB,CACb,KAAK,kBAAkB,IACzBJ,EAAO,IAAI,oEAAoE,KAAK,mCAAmCR,GAAa,KAAK,WAAW,0BAA0B,KAAK,YAAY,kBAAkB,EACjN,KAAK,oBACD,KAAK,qBAAqB,EAC5BQ,EAAO,IAAI,+EAA+ER,GAAa,KAAK,cAAc,KAAK,GAE/HQ,EAAO,IAAI,6BAA6B,EACxC,KAAK,WAAW,OAAO,GAG7B,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,SAAW,KAAK,SAAW,KAAK,SAC9C,CAEA,mBAAoB,CAClB,OAAOR,GAAa,KAAK,WAAW,EAAI,KAAK,YAAY,cAC3D,CAEA,sBAAuB,CACrB,OAAO,KAAK,gBAAmBA,GAAa,KAAK,cAAc,EAAI,KAAK,YAAY,cACtF,CAEA,qBAAsB,CAChB,SAAS,kBAAoB,WAC/B,WAAW,IAAM,EACX,KAAK,kBAAkB,GAAK,CAAC,KAAK,WAAW,OAAO,KACtDQ,EAAO,IAAI,uFAAuF,SAAS,iBAAiB,EAC5H,KAAK,WAAW,OAAO,EAE3B,EACE,GAAG,CAET,CAEF,EAEAP,GAAkB,eAAiB,EACnCA,GAAkB,wBAA0B,IAErCC,GAAQD,KC5Hf,IAAOY,GAAPC,GAAAC,GAAA,KAAOF,GAAQ,CACb,cAAiB,CACf,QAAW,UACX,WAAc,aACd,KAAQ,OACR,aAAgB,uBAChB,UAAa,qBACf,EACA,mBAAsB,CACpB,aAAgB,eAChB,gBAAmB,kBACnB,eAAkB,iBAClB,OAAU,QACZ,EACA,mBAAsB,SACtB,UAAa,CACX,sBACA,yBACF,CACF,ICnBA,IAOOG,GAAeC,GAChBC,GAEAC,GAEAC,GAuKCC,GAnLPC,GAAAC,GAAA,KAAAC,KACAC,KACAC,KACAC,MAIM,CAAC,cAAAX,GAAe,UAAAC,IAAaW,IAC7BV,GAAqBD,GAAU,MAAM,EAAGA,GAAU,OAAS,CAAC,EAE5DE,GAAU,CAAC,EAAE,QAEbC,GAAN,KAAiB,CACf,YAAYS,EAAU,CACpB,KAAK,KAAO,KAAK,KAAK,KAAK,IAAI,EAC/B,KAAK,SAAWA,EAChB,KAAK,cAAgB,KAAK,SAAS,cACnC,KAAK,QAAU,IAAIC,GAAkB,IAAI,EACzC,KAAK,aAAe,EACtB,CAEA,KAAKC,EAAM,CACT,OAAI,KAAK,OAAO,GACd,KAAK,UAAU,KAAK,KAAK,UAAUA,CAAI,CAAC,EACjC,IAEA,EAEX,CAEA,MAAO,CACL,GAAI,KAAK,SAAS,EAChB,OAAAC,EAAO,IAAI,uDAAuD,KAAK,SAAS,GAAG,EAC5E,GACF,CACL,IAAMC,EAAkB,CAAC,GAAGhB,GAAW,GAAG,KAAK,SAAS,cAAgB,CAAC,CAAC,EAC1E,OAAAe,EAAO,IAAI,uCAAuC,KAAK,SAAS,oBAAoBC,GAAiB,EACjG,KAAK,WAAa,KAAK,uBAAuB,EAClD,KAAK,UAAY,IAAIC,GAAS,UAAU,KAAK,SAAS,IAAKD,CAAe,EAC1E,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,MAAM,EACZ,EACT,CACF,CAEA,MAAM,CAAC,eAAAE,CAAc,EAAI,CAAC,eAAgB,EAAI,EAAG,CAG/C,GAFKA,GAAkB,KAAK,QAAQ,KAAK,EAErC,KAAK,OAAO,EACd,OAAO,KAAK,UAAU,MAAM,CAEhC,CAEA,QAAS,CAEP,GADAH,EAAO,IAAI,yCAAyC,KAAK,SAAS,GAAG,EACjE,KAAK,SAAS,EAChB,GAAI,CACF,OAAO,KAAK,MAAM,CACpB,OAASI,EAAP,CACAJ,EAAO,IAAI,6BAA8BI,CAAK,CAChD,QACA,CACEJ,EAAO,IAAI,0BAA0B,KAAK,YAAY,eAAe,EACrE,WAAW,KAAK,KAAM,KAAK,YAAY,WAAW,CACpD,KAEA,QAAO,KAAK,KAAK,CAErB,CAEA,aAAc,CACZ,GAAI,KAAK,UACP,OAAO,KAAK,UAAU,QAE1B,CAEA,QAAS,CACP,OAAO,KAAK,QAAQ,MAAM,CAC5B,CAEA,UAAW,CACT,OAAO,KAAK,QAAQ,OAAQ,YAAY,CAC1C,CAEA,kBAAmB,CACjB,OAAO,KAAK,QAAQ,kBAAoB,CAC1C,CAIA,qBAAsB,CACpB,OAAOb,GAAQ,KAAKD,GAAoB,KAAK,YAAY,CAAC,GAAK,CACjE,CAEA,WAAWmB,EAAQ,CACjB,OAAOlB,GAAQ,KAAKkB,EAAQ,KAAK,SAAS,CAAC,GAAK,CAClD,CAEA,UAAW,CACT,GAAI,KAAK,WACP,QAASC,KAASJ,GAAS,UACzB,GAAIA,GAAS,UAAUI,KAAW,KAAK,UAAU,WAC/C,OAAOA,EAAM,YAAY,EAI/B,OAAO,IACT,CAEA,sBAAuB,CACrB,QAASC,KAAa,KAAK,OAAQ,CACjC,IAAMC,EAAU,KAAK,OAAOD,GAAW,KAAK,IAAI,EAChD,KAAK,UAAU,KAAKA,KAAeC,CACrC,CACF,CAEA,wBAAyB,CACvB,QAASD,KAAa,KAAK,OACzB,KAAK,UAAU,KAAKA,KAAe,UAAW,CAAC,CAEnD,CAEF,EAEAnB,GAAW,YAAc,IAEzBA,GAAW,UAAU,OAAS,CAC5B,QAAQqB,EAAO,CACb,GAAI,CAAC,KAAK,oBAAoB,EAAK,OACnC,GAAM,CAAC,WAAAC,EAAY,QAAAC,EAAS,OAAAC,EAAQ,UAAAC,EAAW,KAAAC,CAAI,EAAI,KAAK,MAAML,EAAM,IAAI,EAC5E,OAAQK,QACD9B,GAAc,QACjB,OAAI,KAAK,iBAAiB,IACxB,KAAK,mBAAqB,IAE5B,KAAK,QAAQ,cAAc,EACpB,KAAK,cAAc,OAAO,OAC9BA,GAAc,WACjB,OAAAgB,EAAO,IAAI,0BAA0BY,GAAQ,EACtC,KAAK,MAAM,CAAC,eAAgBC,CAAS,CAAC,OAC1C7B,GAAc,KACjB,OAAO,KAAK,QAAQ,WAAW,OAC5BA,GAAc,aAEjB,OADA,KAAK,cAAc,oBAAoB0B,CAAU,EAC7C,KAAK,oBACP,KAAK,mBAAqB,GACnB,KAAK,cAAc,OAAOA,EAAY,YAAa,CAAC,YAAa,EAAI,CAAC,GAEtE,KAAK,cAAc,OAAOA,EAAY,YAAa,CAAC,YAAa,EAAK,CAAC,OAE7E1B,GAAc,UACjB,OAAO,KAAK,cAAc,OAAO0B,CAAU,UAE3C,OAAO,KAAK,cAAc,OAAOA,EAAY,WAAYC,CAAO,EAEtE,EAEA,MAAO,CAGL,GAFAX,EAAO,IAAI,kCAAkC,KAAK,YAAY,gBAAgB,EAC9E,KAAK,aAAe,GAChB,CAAC,KAAK,oBAAoB,EAC5B,OAAAA,EAAO,IAAI,8DAA8D,EAClE,KAAK,MAAM,CAAC,eAAgB,EAAK,CAAC,CAE7C,EAEA,MAAMS,EAAO,CAEX,GADAT,EAAO,IAAI,yBAAyB,EAChC,MAAK,aACT,YAAK,aAAe,GACpB,KAAK,QAAQ,iBAAiB,EACvB,KAAK,cAAc,UAAU,eAAgB,CAAC,qBAAsB,KAAK,QAAQ,UAAU,CAAC,CAAC,CACtG,EAEA,OAAQ,CACNA,EAAO,IAAI,yBAAyB,CACtC,CACF,EAEOX,GAAQD,KCnLf,IA0DM2B,GAUeC,GApErBC,GAAAC,GAAA,KA0DMH,GAAS,SAASI,EAAQC,EAAY,CAC1C,GAAIA,GAAc,KAChB,QAASC,KAAOD,EAAY,CAC1B,IAAME,EAAQF,EAAWC,GACzBF,EAAOE,GAAOC,CAChB,CAEF,OAAOH,CACT,EAEqBH,GAArB,KAAkC,CAChC,YAAYO,EAAUC,EAAS,CAAC,EAAGC,EAAO,CACxC,KAAK,SAAWF,EAChB,KAAK,WAAa,KAAK,UAAUC,CAAM,EACvCT,GAAO,KAAMU,CAAK,CACpB,CAGA,QAAQC,EAAQC,EAAO,CAAC,EAAG,CACzB,OAAAA,EAAK,OAASD,EACP,KAAK,KAAKC,CAAI,CACvB,CAEA,KAAKA,EAAM,CACT,OAAO,KAAK,SAAS,KAAK,CAAC,QAAS,UAAW,WAAY,KAAK,WAAY,KAAM,KAAK,UAAUA,CAAI,CAAC,CAAC,CACzG,CAEA,aAAc,CACZ,OAAO,KAAK,SAAS,cAAc,OAAO,IAAI,CAChD,CACF,ICxFA,IAKMC,GA4CCC,GAjDPC,GAAAC,GAAA,KAAAC,KAKMJ,GAAN,KAA4B,CAC1B,YAAYK,EAAe,CACzB,KAAK,cAAgBA,EACrB,KAAK,qBAAuB,CAAC,CAC/B,CAEA,UAAUC,EAAc,CACnB,KAAK,qBAAqB,QAAQA,CAAY,GAAK,IACpDC,EAAO,IAAI,sCAAsCD,EAAa,YAAY,EAC1E,KAAK,qBAAqB,KAAKA,CAAY,GAG3CC,EAAO,IAAI,8CAA8CD,EAAa,YAAY,EAEpF,KAAK,kBAAkB,CACzB,CAEA,OAAOA,EAAc,CACnBC,EAAO,IAAI,oCAAoCD,EAAa,YAAY,EACxE,KAAK,qBAAwB,KAAK,qBAAqB,OAAQE,GAAMA,IAAMF,CAAY,CACzF,CAEA,mBAAoB,CAClB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,CACxB,CAEA,kBAAmB,CACjB,aAAa,KAAK,YAAY,CAChC,CAEA,kBAAmB,CACjB,KAAK,aAAe,WAAW,IAAM,CAC/B,KAAK,eAAiB,OAAO,KAAK,cAAc,WAAe,YACjE,KAAK,qBAAqB,IAAKA,GAAiB,CAC9CC,EAAO,IAAI,uCAAuCD,EAAa,YAAY,EAC3E,KAAK,cAAc,UAAUA,CAAY,CAC3C,CAAC,CAEL,EACE,GAAG,CACP,CACF,EAEOL,GAAQD,KCjDf,IAcqBS,GAdrBC,GAAAC,GAAA,KAAAC,KACAC,KACAC,KAYqBL,GAArB,KAAmC,CACjC,YAAYM,EAAU,CACpB,KAAK,SAAWA,EAChB,KAAK,UAAY,IAAIC,GAAsB,IAAI,EAC/C,KAAK,cAAgB,CAAC,CACxB,CAEA,OAAOC,EAAaC,EAAO,CACzB,IAAMC,EAAUF,EACVG,EAAS,OAAOD,GAAY,SAAWA,EAAU,CAAC,QAAAA,CAAO,EACzDE,EAAe,IAAIC,GAAa,KAAK,SAAUF,EAAQF,CAAK,EAClE,OAAO,KAAK,IAAIG,CAAY,CAC9B,CAIA,IAAIA,EAAc,CAChB,YAAK,cAAc,KAAKA,CAAY,EACpC,KAAK,SAAS,uBAAuB,EACrC,KAAK,OAAOA,EAAc,aAAa,EACvC,KAAK,UAAUA,CAAY,EACpBA,CACT,CAEA,OAAOA,EAAc,CACnB,YAAK,OAAOA,CAAY,EACnB,KAAK,QAAQA,EAAa,UAAU,EAAE,QACzC,KAAK,YAAYA,EAAc,aAAa,EAEvCA,CACT,CAEA,OAAOE,EAAY,CACjB,OAAO,KAAK,QAAQA,CAAU,EAAE,IAAKF,IACnC,KAAK,OAAOA,CAAY,EACxB,KAAK,OAAOA,EAAc,UAAU,EAC7BA,EACR,CACH,CAEA,OAAOA,EAAc,CACnB,YAAK,UAAU,OAAOA,CAAY,EAClC,KAAK,cAAiB,KAAK,cAAc,OAAQG,GAAMA,IAAMH,CAAY,EAClEA,CACT,CAEA,QAAQE,EAAY,CAClB,OAAO,KAAK,cAAc,OAAQC,GAAMA,EAAE,aAAeD,CAAU,CACrE,CAEA,QAAS,CACP,OAAO,KAAK,cAAc,IAAKF,GAC7B,KAAK,UAAUA,CAAY,CAAC,CAChC,CAEA,UAAUI,KAAiBC,EAAM,CAC/B,OAAO,KAAK,cAAc,IAAKL,GAC7B,KAAK,OAAOA,EAAcI,EAAc,GAAGC,CAAI,CAAC,CACpD,CAEA,OAAOL,EAAcI,KAAiBC,EAAM,CAC1C,IAAIC,EACJ,OAAI,OAAON,GAAiB,SAC1BM,EAAgB,KAAK,QAAQN,CAAY,EAEzCM,EAAgB,CAACN,CAAY,EAGxBM,EAAc,IAAKN,GACvB,OAAOA,EAAaI,IAAkB,WAAaJ,EAAaI,GAAc,GAAGC,CAAI,EAAI,MAAU,CACxG,CAEA,UAAUL,EAAc,CAClB,KAAK,YAAYA,EAAc,WAAW,GAC5C,KAAK,UAAU,UAAUA,CAAY,CAEzC,CAEA,oBAAoBE,EAAY,CAC9BK,EAAO,IAAI,0BAA0BL,GAAY,EACjD,KAAK,QAAQA,CAAU,EAAE,IAAKF,GAC5B,KAAK,UAAU,OAAOA,CAAY,CAAC,CACvC,CAEA,YAAYA,EAAcQ,EAAS,CACjC,GAAM,CAAC,WAAAN,CAAU,EAAIF,EACrB,OAAO,KAAK,SAAS,KAAK,CAAC,QAAAQ,EAAS,WAAAN,CAAU,CAAC,CACjD,CACF,ICtCO,SAASO,GAAmBC,EAAK,CAKtC,GAJI,OAAOA,GAAQ,aACjBA,EAAMA,EAAI,GAGRA,GAAO,CAAC,UAAU,KAAKA,CAAG,EAAG,CAC/B,IAAMC,EAAI,SAAS,cAAc,GAAG,EACpC,OAAAA,EAAE,KAAOD,EAETC,EAAE,KAAOA,EAAE,KACXA,EAAE,SAAWA,EAAE,SAAS,QAAQ,OAAQ,IAAI,EACrCA,EAAE,IACX,KACE,QAAOD,CAEX,CA/EA,IA6BqBE,GA7BrBC,GAAAC,GAAA,KAAAC,KACAC,KA4BqBJ,GAArB,KAA8B,CAC5B,YAAYF,EAAK,CACf,KAAK,KAAOA,EACZ,KAAK,cAAgB,IAAIO,GAAc,IAAI,EAC3C,KAAK,WAAa,IAAIC,GAAW,IAAI,EACrC,KAAK,aAAe,CAAC,CACvB,CAEA,IAAI,KAAM,CACR,OAAOT,GAAmB,KAAK,IAAI,CACrC,CAEA,KAAKU,EAAM,CACT,OAAO,KAAK,WAAW,KAAKA,CAAI,CAClC,CAEA,SAAU,CACR,OAAO,KAAK,WAAW,KAAK,CAC9B,CAEA,YAAa,CACX,OAAO,KAAK,WAAW,MAAM,CAAC,eAAgB,EAAK,CAAC,CACtD,CAEA,wBAAyB,CACvB,GAAI,CAAC,KAAK,WAAW,SAAS,EAC5B,OAAO,KAAK,WAAW,KAAK,CAEhC,CAEA,eAAeC,EAAa,CAC1B,KAAK,aAAe,CAAC,GAAG,KAAK,aAAcA,CAAW,CACxD,CACF,IC9DA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,gBAAAE,GAAA,sBAAAC,GAAA,aAAAC,GAAA,aAAAC,GAAA,iBAAAC,GAAA,0BAAAC,GAAA,kBAAAC,GAAA,aAAAC,GAAA,mBAAAC,GAAA,uBAAAC,GAAA,cAAAC,GAAA,WAAAC,IAuBO,SAASH,GAAeI,EAAMF,GAAU,KAAK,GAAKP,GAAS,mBAAoB,CACpF,OAAO,IAAID,GAASU,CAAG,CACzB,CAEO,SAASF,GAAUG,EAAM,CAC9B,IAAMC,EAAU,SAAS,KAAK,cAAc,2BAA2BD,KAAQ,EAC/E,GAAIC,EACF,OAAOA,EAAQ,aAAa,SAAS,CAEzC,CAhCA,IAAAC,GAAAC,GAAA,KAAAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,OCRA,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAEA,OAAO,eAAeD,GAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACD,IAAIE,GAAS,CAEX,IAAK,SAAaC,EAAM,CACtB,IAAIC,EAAQ,SAAS,OAAO,MAAM,UAAYD,EAAO,eAAe,EAChEE,EAAQD,GAAQ,SAASA,EAAM,EAAE,EACrC,GAAI,CACFC,EAAQ,KAAK,MAAMA,CAAK,CAC1B,MAAE,CAAW,CACb,OAAOA,CACT,EAEA,IAAK,SAAaF,EAAME,EAAO,CAC7B,IAAIC,EAAU,UAAU,QAAU,GAAK,UAAU,KAAO,OAAY,CAAC,EAAI,UAAU,GAE/EC,EAASJ,EAAO,IAAM,OAAO,KAAK,UAAUE,CAAK,CAAC,EAAI,WAAaC,EAAQ,KAAO,OAAOA,EAAQ,IAAI,EAAI,KAC7G,OAAIA,EAAQ,SAAQC,GAAU,YAAc,OAAOD,EAAQ,MAAM,GAC7DA,EAAQ,SAAQC,GAAU,YAC1BD,EAAQ,UAASC,GAAU,aAAeD,EAAQ,SAClDA,EAAQ,OAAMC,GAAU,aAAeC,GAAgBF,EAAQ,IAAI,GACvE,SAAS,OAASC,EACXF,CACT,EAEA,OAAQ,SAAgBF,EAAM,CAC5B,IAAIE,EAAQ,KAAK,IAAIF,CAAI,EACzB,YAAK,IAAIA,EAAME,EAAO,CAAE,KAAM,EAAG,CAAC,EAC3BA,CACT,CAEF,EAEA,SAASG,GAAgBC,EAAM,CAC7B,IAAIC,EAAO,IAAI,KACf,OAAAA,EAAK,QAAQA,EAAK,QAAQ,EAAI,SAASD,CAAI,CAAC,EAC5CC,EAAK,WAAWA,EAAK,WAAW,EAAIA,EAAK,kBAAkB,CAAC,EACrDA,EAAK,YAAY,CAC1B,CAEAV,GAAQ,QAAaE,GACrBD,GAAO,QAAUD,GAAQ,WCxCxB,UAAY,CACT,GAAI,OAAO,UAAY,QACnB,OAAO,iBAAmB,QAC1B,OAAO,eAAe,0BACtB,OAEJ,IAAMW,EAAqB,YACrBC,EAAoB,CACtB,YAAa,UAAuB,CAChC,OAAO,QAAQ,UAAUD,EAAoB,CAAC,EAAG,KAAK,WAAW,CACrE,CACJ,EACA,OAAO,YAAcC,EAAkB,YACvC,YAAY,UAAYD,EAAmB,UAC3C,YAAY,UAAU,YAAc,YACpC,OAAO,eAAe,YAAaA,CAAkB,CACzD,GAAG,GA0BF,SAASE,EAAW,CACnB,GAAI,OAAOA,EAAU,eAAiB,WAAY,OAElDA,EAAU,cAAgB,SAASC,EAAW,CACxCA,GACFC,EAAkBD,EAAW,IAAI,EACjCA,EAAU,MAAM,IAEhBA,EAAY,SAAS,cAAc,OAAO,EAC1CA,EAAU,KAAO,SACjBA,EAAU,OAAS,GACnB,KAAK,YAAYA,CAAS,EAC1BA,EAAU,MAAM,EAChB,KAAK,YAAYA,CAAS,EAE9B,EAEA,SAASC,EAAkBD,EAAWE,EAAM,CAC1CF,aAAqB,aAAeG,EAAM,UAAW,0CAA0C,EAC/FH,EAAU,MAAQ,UAAYG,EAAM,UAAW,8CAA8C,EAC7FH,EAAU,MAAQE,GAAQC,EAAM,aAAc,0DAA2D,eAAe,CAC1H,CAEA,SAASA,EAAMC,EAAkBC,EAASC,EAAM,CAC9C,MAAM,IAAIF,EAAiB,2DAA6DC,EAAU,IAAKC,CAAI,CAC7G,CACF,GAAG,gBAAgB,SAAS,EAE5B,IAAMC,GAAmB,IAAI,QAC7B,SAASC,GAA6BC,EAAQ,CAC1C,IAAMC,EAAUD,aAAkB,QAAUA,EAASA,aAAkB,KAAOA,EAAO,cAAgB,KAC/FE,EAAYD,EAAUA,EAAQ,QAAQ,eAAe,EAAI,KAC/D,OAA8DC,GAAU,MAAS,SAAWA,EAAY,IAC5G,CACA,SAASC,GAAcC,EAAO,CAC1B,IAAMb,EAAYQ,GAA6BK,EAAM,MAAM,EACvDb,GAAaA,EAAU,MACvBO,GAAiB,IAAIP,EAAU,KAAMA,CAAS,CAEtD,EACC,UAAY,CACT,GAAI,cAAe,MAAM,UACrB,OACJ,IAAID,EAAY,OAAO,MAAM,UAC7B,GAAI,gBAAiB,QAAU,iBAAiB,KAAK,UAAU,MAAM,EACjEA,EAAY,OAAO,YAAY,kBAE1B,gBAAiB,OACtB,OAEJ,iBAAiB,QAASa,GAAe,EAAI,EAC7C,OAAO,eAAeb,EAAW,YAAa,CAC1C,KAAM,CACF,GAAI,KAAK,MAAQ,UAAY,KAAK,kBAAkB,gBAChD,OAAOQ,GAAiB,IAAI,KAAK,MAAM,CAE/C,CACJ,CAAC,CACL,GAAG,EAEH,IAAIO,IACH,SAAUA,EAAmB,CAC1BA,EAAkB,MAAW,QAC7BA,EAAkB,KAAU,MAChC,GAAGA,KAAsBA,GAAoB,CAAC,EAAE,EAChD,IAAMC,GAAN,cAA2B,WAAY,CACnC,WAAW,oBAAqB,CAC5B,MAAO,CAAC,WAAY,WAAY,UAAW,KAAK,CACpD,CACA,aAAc,CACV,MAAM,EACN,KAAK,OAAS,QAAQ,QAAQ,EAC9B,KAAK,SAAW,IAAIA,GAAa,oBAAoB,IAAI,CAC7D,CACA,mBAAoB,CAChB,KAAK,SAAS,QAAQ,CAC1B,CACA,sBAAuB,CACnB,KAAK,SAAS,WAAW,CAC7B,CACA,QAAS,CACL,OAAO,KAAK,SAAS,kBAAkB,CAC3C,CACA,yBAAyBT,EAAM,CACvBA,GAAQ,UACR,KAAK,SAAS,oBAAoB,EAE7BA,GAAQ,WACb,KAAK,SAAS,gBAAgB,EAEzBA,GAAQ,MACb,KAAK,SAAS,iBAAiB,EAG/B,KAAK,SAAS,gBAAgB,CAEtC,CACA,IAAI,KAAM,CACN,OAAO,KAAK,aAAa,KAAK,CAClC,CACA,IAAI,IAAIU,EAAO,CACPA,EACA,KAAK,aAAa,MAAOA,CAAK,EAG9B,KAAK,gBAAgB,KAAK,CAElC,CACA,IAAI,SAAU,CACV,OAAOC,GAA4B,KAAK,aAAa,SAAS,GAAK,EAAE,CACzE,CACA,IAAI,QAAQD,EAAO,CACXA,EACA,KAAK,aAAa,UAAWA,CAAK,EAGlC,KAAK,gBAAgB,SAAS,CAEtC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,aAAa,UAAU,CACvC,CACA,IAAI,SAASA,EAAO,CACZA,EACA,KAAK,aAAa,WAAY,EAAE,EAGhC,KAAK,gBAAgB,UAAU,CAEvC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,aAAa,YAAY,CACzC,CACA,IAAI,WAAWA,EAAO,CACdA,EACA,KAAK,aAAa,aAAc,EAAE,EAGlC,KAAK,gBAAgB,YAAY,CAEzC,CACA,IAAI,UAAW,CACX,MAAO,CAAC,KAAK,SAAS,SAC1B,CACA,IAAI,UAAW,CACX,OAAO,KAAK,gBAAkB,UAAY,CAAC,KAAK,SACpD,CACA,IAAI,WAAY,CACZ,IAAIE,EAAIC,EACR,OAAQA,GAAMD,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,mBAAqB,MAAQC,IAAO,OAAS,OAASA,EAAG,aAAa,oBAAoB,CAC7K,CACJ,EACA,SAASF,GAA4BG,EAAO,CACxC,OAAQA,EAAM,YAAY,OACjB,OACD,OAAON,GAAkB,aAEzB,OAAOA,GAAkB,MAErC,CAEA,SAASO,GAAUC,EAAW,CAC1B,OAAO,IAAI,IAAIA,EAAU,SAAS,EAAG,SAAS,OAAO,CACzD,CACA,SAASC,GAAUC,EAAK,CACpB,IAAIC,EACJ,GAAID,EAAI,KACJ,OAAOA,EAAI,KAAK,MAAM,CAAC,EAEtB,GAAKC,EAAcD,EAAI,KAAK,MAAM,QAAQ,EAC3C,OAAOC,EAAY,EAE3B,CACA,SAASC,GAAUxB,EAAMF,EAAW,CAChC,IAAM2B,EAAgE3B,GAAU,aAAa,YAAY,GAAME,EAAK,aAAa,QAAQ,GAAKA,EAAK,OACnJ,OAAOmB,GAAUM,CAAM,CAC3B,CACA,SAASC,GAAaJ,EAAK,CACvB,OAAQK,GAAqBL,CAAG,EAAE,MAAM,UAAU,GAAK,CAAC,GAAG,IAAM,EACrE,CACA,SAASM,GAAON,EAAK,CACjB,MAAO,CAAC,CAACI,GAAaJ,CAAG,EAAE,MAAM,iCAAiC,CACtE,CACA,SAASO,GAAaC,EAASR,EAAK,CAChC,IAAMS,EAASC,GAAUV,CAAG,EAC5B,OAAOQ,EAAQ,OAASX,GAAUY,CAAM,EAAE,MAAQD,EAAQ,KAAK,WAAWC,CAAM,CACpF,CACA,SAASE,GAAoBC,EAAUC,EAAc,CACjD,OAAON,GAAaK,EAAUC,CAAY,GAAKP,GAAOM,CAAQ,CAClE,CACA,SAASE,GAAcd,EAAK,CACxB,IAAMe,EAAShB,GAAUC,CAAG,EAC5B,OAAOe,GAAU,KAAOf,EAAI,KAAK,MAAM,EAAG,EAAEe,EAAO,OAAS,EAAE,EAAIf,EAAI,IAC1E,CACA,SAASgB,GAAWhB,EAAK,CACrB,OAAOc,GAAcd,CAAG,CAC5B,CACA,SAASiB,GAAaC,EAAMC,EAAO,CAC/B,OAAOtB,GAAUqB,CAAI,EAAE,MAAQrB,GAAUsB,CAAK,EAAE,IACpD,CACA,SAASC,GAAkBpB,EAAK,CAC5B,OAAOA,EAAI,SAAS,MAAM,GAAG,EAAE,MAAM,CAAC,CAC1C,CACA,SAASK,GAAqBL,EAAK,CAC/B,OAAOoB,GAAkBpB,CAAG,EAAE,MAAM,EAAE,EAAE,EAC5C,CACA,SAASU,GAAUV,EAAK,CACpB,OAAOqB,GAAiBrB,EAAI,OAASA,EAAI,QAAQ,CACrD,CACA,SAASqB,GAAiB7B,EAAO,CAC7B,OAAOA,EAAM,SAAS,GAAG,EAAIA,EAAQA,EAAQ,GACjD,CAEA,IAAM8B,GAAN,KAAoB,CAChB,YAAYC,EAAU,CAClB,KAAK,SAAWA,CACpB,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,SAAS,EACzB,CACA,IAAI,QAAS,CACT,MAAO,CAAC,KAAK,SACjB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,YAAc,KAAO,KAAK,YAAc,GACxD,CACA,IAAI,aAAc,CACd,OAAO,KAAK,YAAc,KAAO,KAAK,YAAc,GACxD,CACA,IAAI,YAAa,CACb,OAAO,KAAK,SAAS,UACzB,CACA,IAAI,UAAW,CACX,OAAO1B,GAAU,KAAK,SAAS,GAAG,CACtC,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAe,KAAK,YAAY,MAAM,wDAAwD,CAC9G,CACA,IAAI,YAAa,CACb,OAAO,KAAK,SAAS,MACzB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,cAAc,CACrC,CACA,IAAI,cAAe,CACf,OAAO,KAAK,SAAS,MAAM,EAAE,KAAK,CACtC,CACA,IAAI,cAAe,CACf,OAAI,KAAK,OACE,KAAK,SAAS,MAAM,EAAE,KAAK,EAG3B,QAAQ,QAAQ,MAAS,CAExC,CACA,OAAOf,EAAM,CACT,OAAO,KAAK,SAAS,QAAQ,IAAIA,CAAI,CACzC,CACJ,EAEA,SAAS0C,GAAsBtC,EAAS,CACpC,GAAIA,EAAQ,aAAa,iBAAiB,GAAK,QAC3C,OAAOA,EAEN,CACD,IAAMuC,EAAuB,SAAS,cAAc,QAAQ,EACtDC,EAAWC,GAAe,WAAW,EAC3C,OAAID,IACAD,EAAqB,MAAQC,GAEjCD,EAAqB,YAAcvC,EAAQ,YAC3CuC,EAAqB,MAAQ,GAC7BG,GAAsBH,EAAsBvC,CAAO,EAC5CuC,CACX,CACJ,CACA,SAASG,GAAsBC,EAAoBC,EAAe,CAC9D,OAAW,CAAE,KAAAhD,EAAM,MAAAU,CAAM,IAAKsC,EAAc,WACxCD,EAAmB,aAAa/C,EAAMU,CAAK,CAEnD,CACA,SAASuC,GAAuBC,EAAM,CAClC,IAAMC,EAAW,SAAS,cAAc,UAAU,EAClD,OAAAA,EAAS,UAAYD,EACdC,EAAS,OACpB,CACA,SAASC,GAASC,EAAW,CAAE,OAAAlD,EAAQ,WAAAmD,EAAY,OAAAC,CAAO,EAAI,CAAC,EAAG,CAC9D,IAAMhD,EAAQ,IAAI,YAAY8C,EAAW,CACrC,WAAAC,EACA,QAAS,GACT,SAAU,GACV,OAAAC,CACJ,CAAC,EACD,OAAIpD,GAAUA,EAAO,YACjBA,EAAO,cAAcI,CAAK,EAG1B,SAAS,gBAAgB,cAAcA,CAAK,EAEzCA,CACX,CACA,SAASiD,IAAqB,CAC1B,OAAO,IAAI,QAASC,GAAY,sBAAsB,IAAMA,EAAQ,CAAC,CAAC,CAC1E,CACA,SAASC,IAAoB,CACzB,OAAO,IAAI,QAASD,GAAY,WAAW,IAAMA,EAAQ,EAAG,CAAC,CAAC,CAClE,CACA,SAASE,IAAgB,CACrB,OAAO,QAAQ,QAAQ,CAC3B,CACA,SAASC,GAAkBV,EAAO,GAAI,CAClC,OAAO,IAAI,UAAU,EAAE,gBAAgBA,EAAM,WAAW,CAC5D,CACA,SAASW,GAASC,KAAYC,EAAQ,CAClC,IAAMC,EAAQC,GAAYH,EAASC,CAAM,EAAE,QAAQ,MAAO,EAAE,EAAE,MAAM;AAAA,CAAI,EAClEG,EAAQF,EAAM,GAAG,MAAM,MAAM,EAC7BG,EAASD,EAAQA,EAAM,GAAG,OAAS,EACzC,OAAOF,EAAM,IAAKI,GAASA,EAAK,MAAMD,CAAM,CAAC,EAAE,KAAK;AAAA,CAAI,CAC5D,CACA,SAASF,GAAYH,EAASC,EAAQ,CAClC,OAAOD,EAAQ,OAAO,CAACO,EAAQC,EAAQC,IAAM,CACzC,IAAM7D,EAAQqD,EAAOQ,IAAM,KAAY,GAAKR,EAAOQ,GACnD,OAAOF,EAASC,EAAS5D,CAC7B,EAAG,EAAE,CACT,CACA,SAAS8D,IAAO,CACZ,OAAO,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,EAC3B,IAAI,CAACC,EAAGF,IACLA,GAAK,GAAKA,GAAK,IAAMA,GAAK,IAAMA,GAAK,GAC9B,IAEFA,GAAK,GACH,IAEFA,GAAK,IACF,KAAK,MAAM,KAAK,OAAO,EAAI,CAAC,EAAI,GAAG,SAAS,EAAE,EAG/C,KAAK,MAAM,KAAK,OAAO,EAAI,EAAE,EAAE,SAAS,EAAE,CAExD,EACI,KAAK,EAAE,CAChB,CACA,SAASG,GAAaC,KAAkBC,EAAU,CAC9C,QAAWlE,KAASkE,EAAS,IAAKxE,GAA8DA,GAAQ,aAAauE,CAAa,CAAC,EAC/H,GAAI,OAAOjE,GAAS,SAChB,OAAOA,EAEf,OAAO,IACX,CACA,SAASmE,GAAaF,KAAkBC,EAAU,CAC9C,OAAOA,EAAS,KAAMxE,GAAYA,GAAWA,EAAQ,aAAauE,CAAa,CAAC,CACpF,CACA,SAASG,MAAcF,EAAU,CAC7B,QAAWxE,KAAWwE,EACdxE,EAAQ,WAAa,eACrBA,EAAQ,aAAa,OAAQ,EAAE,EAEnCA,EAAQ,aAAa,YAAa,MAAM,CAEhD,CACA,SAAS2E,MAAkBH,EAAU,CACjC,QAAWxE,KAAWwE,EACdxE,EAAQ,WAAa,eACrBA,EAAQ,gBAAgB,MAAM,EAElCA,EAAQ,gBAAgB,WAAW,CAE3C,CACA,SAAS4E,GAAY5E,EAAS6E,EAAwB,IAAM,CACxD,OAAO,IAAI,QAASxB,GAAY,CAC5B,IAAMyB,EAAa,IAAM,CACrB9E,EAAQ,oBAAoB,QAAS8E,CAAU,EAC/C9E,EAAQ,oBAAoB,OAAQ8E,CAAU,EAC9CzB,EAAQ,CACZ,EACArD,EAAQ,iBAAiB,OAAQ8E,EAAY,CAAE,KAAM,EAAK,CAAC,EAC3D9E,EAAQ,iBAAiB,QAAS8E,EAAY,CAAE,KAAM,EAAK,CAAC,EAC5D,WAAWzB,EAASwB,CAAqB,CAC7C,CAAC,CACL,CACA,SAASE,GAA0B9D,EAAQ,CACvC,OAAQA,OACC,UACD,OAAO,QAAQ,iBACd,cACA,UACD,OAAO,QAAQ,UAE3B,CACA,SAAS+D,GAAS/D,EAAQ,CACtB,OAAOA,GAAU,WAAaA,GAAU,WAAaA,GAAU,SACnE,CACA,SAASgE,MAAkBT,EAAU,CACjC,IAAMvD,EAASqD,GAAa,oBAAqB,GAAGE,CAAQ,EAC5D,OAAOQ,GAAS/D,CAAM,EAAIA,EAAS,IACvC,CACA,SAASiE,GAAetF,EAAM,CAC1B,OAAO,SAAS,cAAc,cAAcA,KAAQ,CACxD,CACA,SAAS6C,GAAe7C,EAAM,CAC1B,IAAMI,EAAUkF,GAAetF,CAAI,EACnC,OAAOI,GAAWA,EAAQ,OAC9B,CACA,SAASmF,GAAevF,EAAMwF,EAAS,CACnC,IAAIpF,EAAUkF,GAAetF,CAAI,EACjC,OAAKI,IACDA,EAAU,SAAS,cAAc,MAAM,EACvCA,EAAQ,aAAa,OAAQJ,CAAI,EACjC,SAAS,KAAK,YAAYI,CAAO,GAErCA,EAAQ,aAAa,UAAWoF,CAAO,EAChCpF,CACX,CACA,SAASqF,GAAuBrF,EAASsF,EAAU,CAC/C,IAAI9E,EACJ,GAAIR,aAAmB,QACnB,OAAQA,EAAQ,QAAQsF,CAAQ,GAC5BD,GAAuBrF,EAAQ,gBAAkBQ,EAAKR,EAAQ,YAAY,KAAO,MAAQQ,IAAO,OAAS,OAASA,EAAG,MAAO8E,CAAQ,CAEhJ,CAEA,IAAIC,IACH,SAAUA,EAAa,CACpBA,EAAYA,EAAY,IAAS,GAAK,MACtCA,EAAYA,EAAY,KAAU,GAAK,OACvCA,EAAYA,EAAY,IAAS,GAAK,MACtCA,EAAYA,EAAY,MAAW,GAAK,QACxCA,EAAYA,EAAY,OAAY,GAAK,QAC7C,GAAGA,KAAgBA,GAAc,CAAC,EAAE,EACpC,SAASC,GAAsBC,EAAQ,CACnC,OAAQA,EAAO,YAAY,OAClB,MACD,OAAOF,GAAY,QAClB,OACD,OAAOA,GAAY,SAClB,MACD,OAAOA,GAAY,QAClB,QACD,OAAOA,GAAY,UAClB,SACD,OAAOA,GAAY,OAE/B,CACA,IAAMG,GAAN,KAAmB,CACf,YAAYC,EAAUF,EAAQ/D,EAAUkE,EAAO,IAAI,gBAAmB7F,EAAS,KAAM,CACjF,KAAK,gBAAkB,IAAI,gBAC3B,KAAK,sBAAyB8F,GAAW,CAAE,EAC3C,KAAK,SAAWF,EAChB,KAAK,OAASF,EACd,KAAK,QAAU,KAAK,eACpB,KAAK,KAAOG,EACZ,KAAK,IAAMlE,EACX,KAAK,OAAS3B,CAClB,CACA,IAAI,UAAW,CACX,OAAO,KAAK,GAChB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,IAAI,YACpB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,KAAO,MAAM,KAAK,KAAK,KAAK,QAAQ,CAAC,EAAI,CAAC,CAC1D,CACA,QAAS,CACL,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAM,SAAU,CACZ,GAAM,CAAE,aAAA+F,CAAa,EAAI,KACzB,KAAK,SAAS,eAAe,IAAI,EACjC,MAAM,KAAK,4BAA4BA,CAAY,EACnD,GAAI,CACA,KAAK,SAAS,eAAe,IAAI,EACjC,IAAMzD,EAAW,MAAM,MAAM,KAAK,IAAI,KAAMyD,CAAY,EACxD,OAAO,MAAM,KAAK,QAAQzD,CAAQ,CACtC,OACO0D,EAAP,CACI,GAAIA,EAAM,OAAS,aACf,MAAI,KAAK,0BAA0BA,CAAK,GACpC,KAAK,SAAS,eAAe,KAAMA,CAAK,EAEtCA,CAEd,QACA,CACI,KAAK,SAAS,gBAAgB,IAAI,CACtC,CACJ,CACA,MAAM,QAAQ1D,EAAU,CACpB,IAAM2D,EAAgB,IAAI5D,GAAcC,CAAQ,EAMhD,OALcW,GAAS,8BAA+B,CAClD,WAAY,GACZ,OAAQ,CAAE,cAAAgD,CAAc,EACxB,OAAQ,KAAK,MACjB,CAAC,EACS,iBACN,KAAK,SAAS,iCAAiC,KAAMA,CAAa,EAE7DA,EAAc,UACnB,KAAK,SAAS,6BAA6B,KAAMA,CAAa,EAG9D,KAAK,SAAS,0BAA0B,KAAMA,CAAa,EAExDA,CACX,CACA,IAAI,cAAe,CACf,IAAIxF,EACJ,MAAO,CACH,OAAQ+E,GAAY,KAAK,QAAQ,YAAY,EAC7C,YAAa,cACb,QAAS,KAAK,QACd,SAAU,SACV,KAAM,KAAK,OAAS,KAAO,KAAK,KAChC,OAAQ,KAAK,YACb,UAAW/E,EAAK,KAAK,SAAS,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,IACpF,CACJ,CACA,IAAI,gBAAiB,CACjB,MAAO,CACH,OAAQ,kCACZ,CACJ,CACA,IAAI,QAAS,CACT,OAAO,KAAK,SAAW+E,GAAY,GACvC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,gBAAgB,MAChC,CACA,mBAAmBU,EAAU,CACzB,KAAK,QAAQ,OAAY,CAACA,EAAU,KAAK,QAAQ,MAAS,EAAE,KAAK,IAAI,CACzE,CACA,MAAM,4BAA4BH,EAAc,CAC5C,IAAMI,EAAsB,IAAI,QAAS7C,GAAa,KAAK,sBAAwBA,CAAQ,EAC7EL,GAAS,6BAA8B,CACjD,WAAY,GACZ,OAAQ,CACJ,aAAA8C,EACA,IAAK,KAAK,IACV,OAAQ,KAAK,qBACjB,EACA,OAAQ,KAAK,MACjB,CAAC,EACS,kBACN,MAAMI,CACd,CACA,0BAA0BH,EAAO,CAM7B,MAAO,CALO/C,GAAS,4BAA6B,CAChD,OAAQ,KAAK,OACb,WAAY,GACZ,OAAQ,CAAE,QAAS,KAAM,MAAO+C,CAAM,CAC1C,CAAC,EACa,gBAClB,CACJ,EAEMI,GAAN,KAAyB,CACrB,YAAYR,EAAU3F,EAAS,CAC3B,KAAK,QAAU,GACf,KAAK,UAAaoG,GAAY,CAC1B,IAAMC,EAAYD,EAAQ,MAAM,EAAE,EAAE,GACsBC,GAAU,gBAChE,KAAK,SAAS,0BAA0B,KAAK,OAAO,CAE5D,EACA,KAAK,SAAWV,EAChB,KAAK,QAAU3F,EACf,KAAK,qBAAuB,IAAI,qBAAqB,KAAK,SAAS,CACvE,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,qBAAqB,QAAQ,KAAK,OAAO,EAEtD,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,qBAAqB,UAAU,KAAK,OAAO,EAExD,CACJ,EAEMsG,GAAN,KAAoB,CAChB,OAAO,KAAK3G,EAAS,CACjB,OAAI,OAAOA,GAAW,SACX,IAAI,KAAKkD,GAAuBlD,CAAO,CAAC,EAGxCA,CAEf,CACA,YAAY4G,EAAU,CAClB,KAAK,SAAWC,GAAqBD,CAAQ,CACjD,CACJ,EACAD,GAAc,YAAc,6BAC5B,SAASE,GAAqBD,EAAU,CACpC,QAAWvG,KAAWuG,EAAS,iBAAiB,cAAc,EAAG,CAC7D,IAAME,EAAgB,SAAS,WAAWzG,EAAS,EAAI,EACvD,QAAW0G,KAAsBD,EAAc,gBAAgB,QAAQ,iBAAiB,QAAQ,EAC5FC,EAAmB,YAAYpE,GAAsBoE,CAAkB,CAAC,EAE5E1G,EAAQ,YAAYyG,CAAa,CACrC,CACA,OAAOF,CACX,CAEA,IAAII,IACH,SAAUA,EAAqB,CAC5BA,EAAoBA,EAAoB,YAAiB,GAAK,cAC9DA,EAAoBA,EAAoB,WAAgB,GAAK,aAC7DA,EAAoBA,EAAoB,QAAa,GAAK,UAC1DA,EAAoBA,EAAoB,UAAe,GAAK,YAC5DA,EAAoBA,EAAoB,SAAc,GAAK,WAC3DA,EAAoBA,EAAoB,QAAa,GAAK,SAC9D,GAAGA,KAAwBA,GAAsB,CAAC,EAAE,EACpD,IAAIC,IACH,SAAUA,EAAa,CACpBA,EAAY,WAAgB,oCAC5BA,EAAY,UAAe,sBAC3BA,EAAY,MAAW,YAC3B,GAAGA,KAAgBA,GAAc,CAAC,EAAE,EACpC,SAASC,GAAsBC,EAAU,CACrC,OAAQA,EAAS,YAAY,QACpBF,GAAY,UACb,OAAOA,GAAY,eAClBA,GAAY,MACb,OAAOA,GAAY,cAEnB,OAAOA,GAAY,WAE/B,CACA,IAAMG,GAAN,KAAqB,CACjB,OAAO,cAAcpH,EAASqH,EAAUC,EAAY,CAChD,OAAO,QAAQ,QAAQ,QAAQtH,CAAO,CAAC,CAC3C,CACA,YAAYgG,EAAUuB,EAAa5H,EAAW6H,EAAe,GAAO,CAChE,KAAK,MAAQR,GAAoB,YACjC,KAAK,SAAWhB,EAChB,KAAK,YAAcuB,EACnB,KAAK,UAAY5H,EACjB,KAAK,SAAW8H,GAAcF,EAAa5H,CAAS,EACpD,KAAK,SAAWqB,GAAU,KAAK,MAAM,EACjC,KAAK,QAAU4E,GAAY,KAC3B8B,GAAqB,KAAK,SAAU,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,EAEhE,KAAK,aAAe,IAAI3B,GAAa,KAAM,KAAK,OAAQ,KAAK,SAAU,KAAK,KAAM,KAAK,WAAW,EAClG,KAAK,aAAeyB,CACxB,CACA,IAAI,QAAS,CACT,IAAI3G,EACJ,IAAMiF,IAAWjF,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,aAAa,YAAY,IAAM,KAAK,YAAY,aAAa,QAAQ,GAAK,GACxJ,OAAOgF,GAAsBC,EAAO,YAAY,CAAC,GAAKF,GAAY,GACtE,CACA,IAAI,QAAS,CACT,IAAI/E,EACJ,IAAM8G,EAAoB,OAAO,KAAK,YAAY,QAAW,SAAW,KAAK,YAAY,OAAS,KAClG,MAAK,GAAA9G,EAAK,KAAK,aAAe,MAAQA,IAAO,SAAkBA,EAAG,aAAa,YAAY,EAChF,KAAK,UAAU,aAAa,YAAY,GAAK,GAG7C,KAAK,YAAY,aAAa,QAAQ,GAAK8G,GAAqB,EAE/E,CACA,IAAI,MAAO,CACP,OAAI,KAAK,SAAWV,GAAY,YAAc,KAAK,QAAUrB,GAAY,IAC9D,IAAI,gBAAgB,KAAK,cAAc,EAGvC,KAAK,QAEpB,CACA,IAAI,SAAU,CACV,IAAI/E,EACJ,OAAOqG,KAAwBrG,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,aAAa,aAAa,IAAM,KAAK,YAAY,OAAO,CACxJ,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAa,MAC7B,CACA,IAAI,gBAAiB,CACjB,MAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,OAAO,CAAC4F,EAAS,CAACxG,EAAMU,CAAK,IAC5C8F,EAAQ,OAAO,OAAO9F,GAAS,SAAW,CAAC,CAACV,EAAMU,CAAK,CAAC,EAAI,CAAC,CAAC,EACtE,CAAC,CAAC,CACT,CACA,MAAM,OAAQ,CACV,GAAM,CAAE,YAAAiH,EAAa,WAAAC,CAAW,EAAIb,GAC9Bc,EAAsBnD,GAAa,qBAAsB,KAAK,UAAW,KAAK,WAAW,EAC/F,GAAI,SAAOmD,GAAwB,UAE3B,CADW,MAAMV,GAAe,cAAcU,EAAqB,KAAK,YAAa,KAAK,SAAS,IAKvG,KAAK,OAASF,EACd,YAAK,MAAQC,EACN,KAAK,aAAa,QAAQ,CAEzC,CACA,MAAO,CACH,GAAM,CAAE,SAAAE,EAAU,QAAAC,CAAQ,EAAIhB,GAC9B,GAAI,KAAK,OAASe,GAAY,KAAK,OAASC,EACxC,YAAK,MAAQD,EACb,KAAK,aAAa,OAAO,EAClB,EAEf,CACA,eAAeE,EAAS,CACpB,GAAI,CAACA,EAAQ,OAAQ,CACjB,IAAMC,EAAQC,GAAerF,GAAe,YAAY,CAAC,GAAKA,GAAe,YAAY,EACrFoF,IACAD,EAAQ,QAAQ,gBAAkBC,EAE1C,CACI,KAAK,kCAAkCD,CAAO,GAC9CA,EAAQ,mBAAmBtB,GAAc,WAAW,CAE5D,CACA,eAAeyB,EAAU,CACrB,IAAIvH,EACJ,KAAK,MAAQmG,GAAoB,SAChCnG,EAAK,KAAK,aAAe,MAAQA,IAAO,QAAkBA,EAAG,aAAa,WAAY,EAAE,EACzF,KAAK,eAAe,EACpBwC,GAAS,qBAAsB,CAC3B,OAAQ,KAAK,YACb,OAAQ,CAAE,eAAgB,IAAK,CACnC,CAAC,EACD,KAAK,SAAS,sBAAsB,IAAI,CAC5C,CACA,iCAAiC4E,EAASvF,EAAU,CAChD,KAAK,OAAS,CAAE,QAASA,EAAS,UAAW,cAAeA,CAAS,CACzE,CACA,6BAA6BuF,EAASvF,EAAU,CAC5C,GAAIA,EAAS,aAAeA,EAAS,YACjC,KAAK,SAAS,iCAAiC,KAAMA,CAAQ,UAExD,KAAK,oBAAoBuF,CAAO,GAAKI,GAAiC3F,CAAQ,EAAG,CACtF,IAAM0D,EAAQ,IAAI,MAAM,kDAAkD,EAC1E,KAAK,SAAS,sBAAsB,KAAMA,CAAK,CACnD,MAEI,KAAK,MAAQY,GAAoB,UACjC,KAAK,OAAS,CAAE,QAAS,GAAM,cAAetE,CAAS,EACvD,KAAK,SAAS,oCAAoC,KAAMA,CAAQ,CAExE,CACA,0BAA0BuF,EAASvF,EAAU,CACzC,KAAK,OAAS,CAAE,QAAS,GAAO,cAAeA,CAAS,EACxD,KAAK,SAAS,iCAAiC,KAAMA,CAAQ,CACjE,CACA,eAAeuF,EAAS7B,EAAO,CAC3B,KAAK,OAAS,CAAE,QAAS,GAAO,MAAAA,CAAM,EACtC,KAAK,SAAS,sBAAsB,KAAMA,CAAK,CACnD,CACA,gBAAgBgC,EAAU,CACtB,IAAIvH,EACJ,KAAK,MAAQmG,GAAoB,SAChCnG,EAAK,KAAK,aAAe,MAAQA,IAAO,QAAkBA,EAAG,gBAAgB,UAAU,EACxF,KAAK,mBAAmB,EACxBwC,GAAS,mBAAoB,CACzB,OAAQ,KAAK,YACb,OAAQ,OAAO,OAAO,CAAE,eAAgB,IAAK,EAAG,KAAK,MAAM,CAC/D,CAAC,EACD,KAAK,SAAS,uBAAuB,IAAI,CAC7C,CACA,gBAAiB,CACb,GAAI,GAAC,KAAK,WAAa,CAAC,KAAK,cAE7B,GAAI,KAAK,UAAU,QAAQ,QAAQ,EAC/B,KAAK,mBAAqB,KAAK,UAAU,UACzC,KAAK,UAAU,UAAY,KAAK,oBAE3B,KAAK,UAAU,QAAQ,OAAO,EAAG,CACtC,IAAMiF,EAAQ,KAAK,UACnB,KAAK,mBAAqBA,EAAM,MAChCA,EAAM,MAAQ,KAAK,WACvB,EACJ,CACA,oBAAqB,CACjB,GAAI,GAAC,KAAK,WAAa,CAAC,KAAK,qBAE7B,GAAI,KAAK,UAAU,QAAQ,QAAQ,EAC/B,KAAK,UAAU,UAAY,KAAK,2BAE3B,KAAK,UAAU,QAAQ,OAAO,EAAG,CACtC,IAAMA,EAAQ,KAAK,UACnBA,EAAM,MAAQ,KAAK,kBACvB,EACJ,CACA,oBAAoBL,EAAS,CACzB,MAAO,CAACA,EAAQ,QAAU,KAAK,YACnC,CACA,kCAAkCA,EAAS,CACvC,MAAO,CAACA,EAAQ,QAAUnD,GAAa,oBAAqB,KAAK,UAAW,KAAK,WAAW,CAChG,CACA,IAAI,aAAc,CACd,IAAIjE,EACJ,OAAQA,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,aAAa,yBAAyB,CAC/G,CACJ,EACA,SAAS4G,GAAcF,EAAa5H,EAAW,CAC3C,IAAM4I,EAAW,IAAI,SAAShB,CAAW,EACnCtH,EAA6DN,GAAU,aAAa,MAAM,EAC1FgB,EAA8DhB,GAAU,aAAa,OAAO,EAClG,OAAIM,GACAsI,EAAS,OAAOtI,EAAMU,GAAS,EAAE,EAE9B4H,CACX,CACA,SAASJ,GAAeK,EAAY,CAChC,GAAIA,GAAc,KAAM,CAEpB,IAAMC,GADU,SAAS,OAAS,SAAS,OAAO,MAAM,IAAI,EAAI,CAAC,GAC1C,KAAMA,GAAWA,EAAO,WAAWD,CAAU,CAAC,EACrE,GAAIC,EAAQ,CACR,IAAM9H,EAAQ8H,EAAO,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EACjD,OAAO9H,EAAQ,mBAAmBA,CAAK,EAAI,MAC/C,CACJ,CACJ,CACA,SAAS0H,GAAiC3F,EAAU,CAChD,OAAOA,EAAS,YAAc,KAAO,CAACA,EAAS,UACnD,CACA,SAASgF,GAAqBvG,EAAKsF,EAAS,CACxC,IAAMiC,EAAe,IAAI,gBACzB,OAAW,CAACzI,EAAMU,CAAK,IAAK8F,EACpB9F,aAAiB,MAErB+H,EAAa,OAAOzI,EAAMU,CAAK,EAEnC,OAAAQ,EAAI,OAASuH,EAAa,SAAS,EAC5BvH,CACX,CAEA,IAAMwH,GAAN,KAAe,CACX,YAAYtI,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,QAAQ,cAAc,aACtC,CACA,IAAI,UAAW,CACX,MAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CACpC,CACA,UAAU6B,EAAQ,CACd,OAAO,KAAK,oBAAoBA,CAAM,GAAK,IAC/C,CACA,oBAAoBA,EAAQ,CACxB,OAAOA,EAAS,KAAK,QAAQ,cAAc,QAAQA,gBAAqBA,KAAU,EAAI,IAC1F,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,2BAA4B,CAC5B,IAAM0G,EAAwB,wEAC9B,QAAWvI,KAAW,KAAK,QAAQ,iBAAiB,aAAa,EAC7D,GAAIA,EAAQ,QAAQuI,CAAqB,GAAK,KAC1C,OAAOvI,EAIf,OAAO,IACX,CACA,IAAI,mBAAoB,CACpB,OAAOwI,GAA0B,KAAK,OAAO,CACjD,CACA,wBAAwBC,EAAI,CACxB,OAAOC,GAAwB,KAAK,QAASD,CAAE,CACnD,CACA,kCAAkCE,EAAU,CACxC,IAAMC,EAAsB,CAAC,EAC7B,QAAWC,KAA2B,KAAK,kBAAmB,CAC1D,GAAM,CAAE,GAAAJ,CAAG,EAAII,EACTC,EAAsBH,EAAS,wBAAwBF,CAAE,EAC3DK,IACAF,EAAoBH,GAAM,CAACI,EAAyBC,CAAmB,EAE/E,CACA,OAAOF,CACX,CACJ,EACA,SAASF,GAAwBK,EAAMN,EAAI,CACvC,OAAOM,EAAK,cAAc,IAAIN,yBAA0B,CAC5D,CACA,SAASD,GAA0BO,EAAM,CACrC,OAAOA,EAAK,iBAAiB,4BAA4B,CAC7D,CAEA,IAAMC,GAAN,KAAyB,CACrB,YAAYrD,EAAUsD,EAAa,CAC/B,KAAK,QAAU,GACf,KAAK,eAAiB,IAAM,CACxB,KAAK,YAAY,oBAAoB,SAAU,KAAK,cAAe,EAAK,EACxE,KAAK,YAAY,iBAAiB,SAAU,KAAK,cAAe,EAAK,CACzE,EACA,KAAK,cAAkB9I,GAAU,CAC7B,GAAI,CAACA,EAAM,iBAAkB,CACzB,IAAMX,EAAOW,EAAM,kBAAkB,gBAAkBA,EAAM,OAAS,OAChEb,EAAYa,EAAM,WAAa,OACjCX,GACA0J,GAA+B1J,EAAMF,CAAS,GAC9C6J,GAA8B3J,EAAMF,CAAS,GAC7C,KAAK,SAAS,eAAeE,EAAMF,CAAS,IAC5Ca,EAAM,eAAe,EACrBA,EAAM,yBAAyB,EAC/B,KAAK,SAAS,cAAcX,EAAMF,CAAS,EAEnD,CACJ,EACA,KAAK,SAAWqG,EAChB,KAAK,YAAcsD,CACvB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,YAAY,iBAAiB,SAAU,KAAK,eAAgB,EAAI,EACrE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,YAAY,oBAAoB,SAAU,KAAK,eAAgB,EAAI,EACxE,KAAK,QAAU,GAEvB,CACJ,EACA,SAASC,GAA+B1J,EAAMF,EAAW,CAErD,OADsEA,GAAU,aAAa,YAAY,GAAME,EAAK,aAAa,QAAQ,IACxH,QACrB,CACA,SAAS2J,GAA8B3J,EAAMF,EAAW,CACpD,GAA2DA,GAAU,aAAa,YAAY,GAAME,EAAK,aAAa,QAAQ,EAAG,CAC7H,IAAMO,EAAgET,GAAU,aAAa,YAAY,GAAME,EAAK,OACpH,QAAWQ,KAAW,SAAS,kBAAkBD,CAAM,EACnD,GAAIC,aAAmB,kBACnB,MAAO,GAEf,MAAO,EACX,KAEI,OAAO,EAEf,CAEA,IAAMoJ,GAAN,KAAW,CACP,YAAYzD,EAAU3F,EAAS,CAC3B,KAAK,qBAAwB6F,GAAW,CAAE,EAC1C,KAAK,2BAA8BA,GAAW,CAAE,EAChD,KAAK,SAAWF,EAChB,KAAK,QAAU3F,CACnB,CACA,eAAe6B,EAAQ,CACnB,IAAM7B,EAAU,KAAK,SAAS,oBAAoB6B,CAAM,EACpD7B,GACA,KAAK,gBAAgBA,CAAO,EAC5B,KAAK,aAAaA,CAAO,GAGzB,KAAK,iBAAiB,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,CAE5C,CACA,2BAA2B0B,EAAU,CACjC,KAAK,eAAeb,GAAUa,CAAQ,CAAC,CAC3C,CACA,gBAAgB1B,EAAS,CACrBA,EAAQ,eAAe,CAC3B,CACA,aAAaA,EAAS,CACdA,aAAmB,cACfA,EAAQ,aAAa,UAAU,EAC/BA,EAAQ,MAAM,GAGdA,EAAQ,aAAa,WAAY,IAAI,EACrCA,EAAQ,MAAM,EACdA,EAAQ,gBAAgB,UAAU,GAG9C,CACA,iBAAiB,CAAE,EAAAqJ,EAAG,EAAAC,CAAE,EAAG,CACvB,KAAK,WAAW,SAASD,EAAGC,CAAC,CACjC,CACA,aAAc,CACV,KAAK,iBAAiB,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,CACxC,CACA,IAAI,YAAa,CACb,OAAO,MACX,CACA,MAAM,OAAOC,EAAU,CACnB,GAAM,CAAE,UAAAC,EAAW,aAAAC,EAAc,YAAad,CAAS,EAAIY,EAC3D,GAAIE,EACA,GAAI,CACA,KAAK,cAAgB,IAAI,QAASpG,GAAa,KAAK,qBAAuBA,CAAQ,EACnF,KAAK,SAAWkG,EAChB,MAAM,KAAK,wBAAwBA,CAAQ,EAC3C,IAAMG,EAAqB,IAAI,QAASrG,GAAa,KAAK,2BAA6BA,CAAQ,EACzFsG,EAAU,CAAE,OAAQ,KAAK,2BAA4B,OAAQ,KAAK,SAAS,aAAc,EACvE,KAAK,SAAS,sBAAsBhB,EAAUgB,CAAO,GAEzE,MAAMD,EACV,MAAM,KAAK,eAAeH,CAAQ,EAClC,KAAK,SAAS,qBAAqBZ,EAAUa,CAAS,EACtD,KAAK,SAAS,0BAA0B,KAAK,OAAO,EACpD,KAAK,wBAAwBD,CAAQ,CACzC,QACA,CACI,OAAO,KAAK,SACZ,KAAK,qBAAqB,MAAS,EACnC,OAAO,KAAK,aAChB,MAGA,KAAK,WAAWA,EAAS,YAAY,CAE7C,CACA,WAAWK,EAAQ,CACf,KAAK,SAAS,gBAAgBA,CAAM,CACxC,CACA,MAAM,wBAAwBL,EAAU,CACpC,KAAK,cAAcA,EAAS,SAAS,EACrC,MAAMA,EAAS,gBAAgB,CACnC,CACA,cAAcC,EAAW,CACjBA,EACA,KAAK,QAAQ,aAAa,qBAAsB,EAAE,EAGlD,KAAK,QAAQ,gBAAgB,oBAAoB,CAEzD,CACA,MAAM,eAAeD,EAAU,CAC3B,MAAMA,EAAS,OAAO,CAC1B,CACA,wBAAwBA,EAAU,CAC9BA,EAAS,gBAAgB,CAC7B,CACJ,EAEMM,GAAN,cAAwBT,EAAK,CACzB,SAAU,CACN,KAAK,QAAQ,UAAY,4DAC7B,CACA,IAAI,UAAW,CACX,OAAO,IAAId,GAAS,KAAK,OAAO,CACpC,CACJ,EAEMwB,GAAN,KAAsB,CAClB,YAAYnE,EAAU3F,EAAS,CAC3B,KAAK,aAAgBG,GAAU,CACvB,KAAK,sBAAsBA,EAAM,MAAM,EACvC,KAAK,WAAaA,EAGlB,OAAO,KAAK,UAEpB,EACA,KAAK,YAAgBA,GAAU,CACvB,KAAK,YAAc,KAAK,sBAAsBA,EAAM,MAAM,GAAKA,EAAM,kBAAkB,SACnF,KAAK,SAAS,yBAAyBA,EAAM,OAAQA,EAAM,OAAO,IAAKA,EAAM,OAAO,aAAa,IACjG,KAAK,WAAW,eAAe,EAC/BA,EAAM,eAAe,EACrB,KAAK,SAAS,qBAAqBA,EAAM,OAAQA,EAAM,OAAO,IAAKA,EAAM,OAAO,aAAa,GAGrG,OAAO,KAAK,UAChB,EACA,KAAK,UAAc4J,GAAW,CAC1B,OAAO,KAAK,UAChB,EACA,KAAK,SAAWpE,EAChB,KAAK,QAAU3F,CACnB,CACA,OAAQ,CACJ,KAAK,QAAQ,iBAAiB,QAAS,KAAK,YAAY,EACxD,SAAS,iBAAiB,cAAe,KAAK,WAAW,EACzD,SAAS,iBAAiB,qBAAsB,KAAK,SAAS,CAClE,CACA,MAAO,CACH,KAAK,QAAQ,oBAAoB,QAAS,KAAK,YAAY,EAC3D,SAAS,oBAAoB,cAAe,KAAK,WAAW,EAC5D,SAAS,oBAAoB,qBAAsB,KAAK,SAAS,CACrE,CACA,sBAAsBD,EAAQ,CAC1B,IAAMC,EAAUD,aAAkB,QAAUA,EAASA,aAAkB,KAAOA,EAAO,cAAgB,KACrG,OAAOC,GAAWA,EAAQ,QAAQ,mBAAmB,GAAK,KAAK,OACnE,CACJ,EAEMgK,GAAN,KAAwB,CACpB,YAAYrE,EAAUsD,EAAa,CAC/B,KAAK,QAAU,GACf,KAAK,cAAgB,IAAM,CACvB,KAAK,YAAY,oBAAoB,QAAS,KAAK,aAAc,EAAK,EACtE,KAAK,YAAY,iBAAiB,QAAS,KAAK,aAAc,EAAK,CACvE,EACA,KAAK,aAAgB9I,GAAU,CAC3B,GAAIA,aAAiB,YAAc,KAAK,wBAAwBA,CAAK,EAAG,CACpE,IAAMJ,EAAUI,EAAM,cAAgBA,EAAM,aAAa,EAAE,IAAOA,EAAM,OAClE8J,EAAO,KAAK,wBAAwBlK,CAAM,EAChD,GAAIkK,GAAQC,GAAoBD,CAAI,EAAG,CACnC,IAAMvI,EAAW,KAAK,mBAAmBuI,CAAI,EACzC,KAAK,SAAS,yBAAyBA,EAAMvI,EAAUvB,CAAK,IAC5DA,EAAM,eAAe,EACrB,KAAK,SAAS,uBAAuB8J,EAAMvI,CAAQ,EAE3D,CACJ,CACJ,EACA,KAAK,SAAWiE,EAChB,KAAK,YAAcsD,CACvB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,YAAY,iBAAiB,QAAS,KAAK,cAAe,EAAI,EACnE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,YAAY,oBAAoB,QAAS,KAAK,cAAe,EAAI,EACtE,KAAK,QAAU,GAEvB,CACA,wBAAwB9I,EAAO,CAC3B,MAAO,EAAGA,EAAM,QAAUA,EAAM,OAAO,mBACnCA,EAAM,kBACNA,EAAM,MAAQ,GACdA,EAAM,QACNA,EAAM,SACNA,EAAM,SACNA,EAAM,SACd,CACA,wBAAwBJ,EAAQ,CAC5B,OAAOsF,GAAuBtF,EAAQ,0CAA0C,CACpF,CACA,mBAAmBkK,EAAM,CACrB,OAAOtJ,GAAUsJ,EAAK,aAAa,MAAM,GAAK,EAAE,CACpD,CACJ,EACA,SAASC,GAAoBrI,EAAQ,CACjC,GAAIA,EAAO,aAAa,QAAQ,EAAG,CAC/B,QAAW7B,KAAW,SAAS,kBAAkB6B,EAAO,MAAM,EAC1D,GAAI7B,aAAmB,kBACnB,MAAO,GAEf,MAAO,EACX,KAEI,OAAO,EAEf,CAEA,IAAMmK,GAAN,KAA4B,CACxB,YAAYxE,EAAU3F,EAAS,CAC3B,KAAK,SAAW2F,EAChB,KAAK,gBAAkB,IAAIqE,GAAkB,KAAMhK,CAAO,CAC9D,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,yBAAyBiK,EAAMvI,EAAU0I,EAAe,CACpD,OAAQ,KAAK,SAAS,6BAA6BH,EAAMvI,EAAU0I,CAAa,GAC5EH,EAAK,aAAa,mBAAmB,CAC7C,CACA,uBAAuBA,EAAMvI,EAAU,CACnC,IAAMlC,EAAO,SAAS,cAAc,MAAM,EACpC6K,EAAO,SACb,OAAW,CAACzK,EAAMU,CAAK,IAAKoB,EAAS,aACjClC,EAAK,OAAO,OAAO,OAAO,SAAS,cAAc,OAAO,EAAG,CAAE,KAAA6K,EAAM,KAAAzK,EAAM,MAAAU,CAAM,CAAC,CAAC,EAErF,IAAMW,EAAS,OAAO,OAAOS,EAAU,CAAE,OAAQ,EAAG,CAAC,EACrDlC,EAAK,aAAa,aAAc,MAAM,EACtCA,EAAK,aAAa,SAAUyB,EAAO,IAAI,EACvCzB,EAAK,aAAa,SAAU,EAAE,EAC9B,IAAMiG,EAASwE,EAAK,aAAa,mBAAmB,EAChDxE,GACAjG,EAAK,aAAa,SAAUiG,CAAM,EACtC,IAAM6E,EAAaL,EAAK,aAAa,kBAAkB,EACnDK,GACA9K,EAAK,aAAa,mBAAoB8K,CAAU,EACpD,IAAMC,EAActF,GAAegF,CAAI,EACnCM,GACA/K,EAAK,aAAa,oBAAqB+K,CAAW,EACtD,IAAMC,EAAeP,EAAK,aAAa,oBAAoB,EACvDO,GACAhL,EAAK,aAAa,qBAAsBgL,CAAY,EACpCP,EAAK,aAAa,mBAAmB,GAErDzK,EAAK,aAAa,oBAAqB,EAAE,EAC7C,KAAK,SAAS,4BAA4ByK,EAAMvI,EAAUlC,CAAI,EAC9D,SAAS,KAAK,YAAYA,CAAI,EAC9BA,EAAK,iBAAiB,mBAAoB,IAAMA,EAAK,OAAO,EAAG,CAAE,KAAM,EAAK,CAAC,EAC7E,sBAAsB,IAAMA,EAAK,cAAc,CAAC,CACpD,CACJ,EAEMiL,GAAN,KAAY,CACR,aAAa,4BAA4B9E,EAAUiD,EAAqB8B,EAAU,CAC9E,IAAMC,EAAQ,IAAI,KAAKhF,EAAUiD,CAAmB,EACpD+B,EAAM,MAAM,EACZ,MAAMD,EAAS,EACfC,EAAM,MAAM,CAChB,CACA,YAAYhF,EAAUiD,EAAqB,CACvC,KAAK,SAAWjD,EAChB,KAAK,oBAAsBiD,CAC/B,CACA,OAAQ,CACJ,QAAWH,KAAM,KAAK,oBAAqB,CACvC,GAAM,CAACI,EAAyBC,CAAmB,EAAI,KAAK,oBAAoBL,GAChF,KAAK,SAAS,cAAcI,EAAyBC,CAAmB,EACxE,KAAK,0CAA0CA,CAAmB,CACtE,CACJ,CACA,OAAQ,CACJ,QAAWL,KAAM,KAAK,oBAAqB,CACvC,GAAM,CAACI,CAAuB,EAAI,KAAK,oBAAoBJ,GAC3D,KAAK,wCAAwCI,CAAuB,EACpE,KAAK,uCAAuCA,CAAuB,EACnE,KAAK,SAAS,aAAaA,CAAuB,CACtD,CACJ,CACA,0CAA0C+B,EAAkB,CACxD,IAAMC,EAAcC,GAAqCF,CAAgB,EACzEA,EAAiB,YAAYC,CAAW,CAC5C,CACA,wCAAwCD,EAAkB,CACtD,IAAMG,EAAQH,EAAiB,UAAU,EAAI,EAC7CA,EAAiB,YAAYG,CAAK,CACtC,CACA,uCAAuCH,EAAkB,CACrD,IAAMC,EAAc,KAAK,mBAAmBD,EAAiB,EAAE,EACLC,GAAY,YAAYD,CAAgB,CACtG,CACA,mBAAmBnC,EAAI,CACnB,OAAO,KAAK,aAAa,KAAMzI,GAAYA,EAAQ,SAAWyI,CAAE,CACpE,CACA,IAAI,cAAe,CACf,MAAO,CAAC,GAAG,SAAS,iBAAiB,iDAAiD,CAAC,CAC3F,CACJ,EACA,SAASqC,GAAqCF,EAAkB,CAC5D,IAAM5K,EAAU,SAAS,cAAc,MAAM,EAC7C,OAAAA,EAAQ,aAAa,OAAQ,6BAA6B,EAC1DA,EAAQ,aAAa,UAAW4K,EAAiB,EAAE,EAC5C5K,CACX,CAEA,IAAMgL,GAAN,KAAe,CACX,YAAYC,EAAiBC,EAAaC,EAAe3B,EAAW4B,EAAa,GAAM,CACnF,KAAK,cAAgB,KACrB,KAAK,gBAAkBH,EACvB,KAAK,YAAcC,EACnB,KAAK,UAAY1B,EACjB,KAAK,WAAa4B,EAClB,KAAK,cAAgBD,EACrB,KAAK,QAAU,IAAI,QAAQ,CAAC9H,EAASgI,IAAY,KAAK,mBAAqB,CAAE,QAAAhI,EAAS,OAAAgI,CAAO,CAAE,CACnG,CACA,IAAI,cAAe,CACf,MAAO,EACX,CACA,IAAI,cAAe,CAEnB,CACA,iBAAkB,CAElB,CACA,iBAAkB,CACV,KAAK,qBACL,KAAK,mBAAmB,QAAQ,EAChC,OAAO,KAAK,mBAEpB,CACA,MAAM,4BAA4BX,EAAU,CACxC,MAAMD,GAAM,4BAA4B,KAAM,KAAK,oBAAqBC,CAAQ,CACpF,CACA,gCAAiC,CAC7B,IAAM1K,EAAU,KAAK,kBAAkB,0BACnCsL,GAAmBtL,CAAO,GAC1BA,EAAQ,MAAM,CAEtB,CACA,cAAc6I,EAAyB,CAC/B,KAAK,eAELA,EAAwB,SAAS,KAAK,gBAAgB,aAAa,IACnE,KAAK,cAAgB,KAAK,gBAAgB,cAElD,CACA,aAAaA,EAAyB,CAC9BA,EAAwB,SAAS,KAAK,aAAa,GAAK,KAAK,yBAAyB,cACtF,KAAK,cAAc,MAAM,EACzB,KAAK,cAAgB,KAE7B,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,YAAY,YAAc,KAAK,YAAc,KAAK,eAClE,CACA,IAAI,gBAAiB,CACjB,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,gBAAgB,kCAAkC,KAAK,WAAW,CAClF,CACJ,EACA,SAASyC,GAAmBtL,EAAS,CACjC,OAAOA,GAAW,OAAOA,EAAQ,OAAS,UAC9C,CAEA,IAAMuL,GAAN,cAA4BP,EAAS,CACjC,OAAO,cAAcQ,EAAgBC,EAAY,CAC7C,IAAIjL,EACJ,IAAMkL,EAAmB,SAAS,YAAY,EAC9CA,EAAiB,mBAAmBF,CAAc,EAClDE,EAAiB,eAAe,EAChC,IAAMC,EAAeF,EACfG,GAAepL,EAAKmL,EAAa,iBAAmB,MAAQnL,IAAO,OAAS,OAASA,EAAG,YAAY,EACtGoL,IACAA,EAAY,mBAAmBD,CAAY,EAC3CH,EAAe,YAAYI,EAAY,gBAAgB,CAAC,EAEhE,CACA,YAAYjG,EAAUsF,EAAiBC,EAAaC,EAAe3B,EAAW4B,EAAa,GAAM,CAC7F,MAAMH,EAAiBC,EAAaC,EAAe3B,EAAW4B,CAAU,EACxE,KAAK,SAAWzF,CACpB,CACA,IAAI,cAAe,CACf,MAAO,EACX,CACA,MAAM,QAAS,CACX,MAAMvC,GAAmB,EACzB,KAAK,4BAA4B,IAAM,CACnC,KAAK,iBAAiB,CAC1B,CAAC,EACD,KAAK,oBAAoB,EACzB,MAAMA,GAAmB,EACzB,KAAK,+BAA+B,EACpC,MAAMA,GAAmB,EACzB,KAAK,uBAAuB,CAChC,CACA,kBAAmB,CACf,KAAK,SAAS,gBAAgB,KAAK,eAAgB,KAAK,UAAU,EAClE,KAAK,cAAc,KAAK,eAAgB,KAAK,UAAU,CAC3D,CACA,qBAAsB,CAClB,GAAI,KAAK,eAAe,YAAc,KAAK,WAAW,WAAY,CAC9D,IAAMpD,EAAU,KAAK,eAAe,kBAC9B6L,EAAQC,GAA0B,KAAK,eAAe,aAAa,uBAAuB,EAAG,KAAK,EAClGC,EAAWC,GAAmB,KAAK,eAAe,aAAa,0BAA0B,EAAG,MAAM,EACxG,GAAIhM,EACA,OAAAA,EAAQ,eAAe,CAAE,MAAA6L,EAAO,SAAAE,CAAS,CAAC,EACnC,EAEf,CACA,MAAO,EACX,CACA,wBAAyB,CACrB,QAAWrF,KAAsB,KAAK,kBAAmB,CACrD,IAAMuF,EAAyB3J,GAAsBoE,CAAkB,EACvEA,EAAmB,YAAYuF,CAAsB,CACzD,CACJ,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,eAAe,iBAAiB,QAAQ,CACxD,CACJ,EACA,SAASH,GAA0BxL,EAAO4L,EAAc,CACpD,OAAI5L,GAAS,OAASA,GAAS,SAAWA,GAAS,UAAYA,GAAS,UAC7DA,EAGA4L,CAEf,CACA,SAASF,GAAmB1L,EAAO4L,EAAc,CAC7C,OAAI5L,GAAS,QAAUA,GAAS,SACrBA,EAGA4L,CAEf,CAEA,IAAMC,GAAN,KAAkB,CACd,WAAW,YAAa,CACpB,OAAO1I;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUG0I,GAAY;AAAA,oBACVA,GAAY,kBAAoB,OAAOA,GAAY,kBAAoB;AAAA;AAAA;AAAA,KAIvF,CACA,aAAc,CACV,KAAK,OAAS,GACd,KAAK,MAAQ,EACb,KAAK,QAAU,GACf,KAAK,QAAU,IAAM,CACjB,KAAK,SAAS,KAAK,MAAQ,KAAK,OAAO,EAAI,GAAG,CAClD,EACA,KAAK,kBAAoB,KAAK,wBAAwB,EACtD,KAAK,gBAAkB,KAAK,sBAAsB,EAClD,KAAK,yBAAyB,EAC9B,KAAK,SAAS,CAAC,CACnB,CACA,MAAO,CACE,KAAK,UACN,KAAK,QAAU,GACf,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EAE5B,CACA,MAAO,CACC,KAAK,SAAW,CAAC,KAAK,SACtB,KAAK,OAAS,GACd,KAAK,oBAAoB,IAAM,CAC3B,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,QAAU,GACf,KAAK,OAAS,EAClB,CAAC,EAET,CACA,SAAS7L,EAAO,CACZ,KAAK,MAAQA,EACb,KAAK,QAAQ,CACjB,CACA,0BAA2B,CACvB,SAAS,KAAK,aAAa,KAAK,kBAAmB,SAAS,KAAK,UAAU,CAC/E,CACA,wBAAyB,CACrB,KAAK,gBAAgB,MAAM,MAAQ,IACnC,KAAK,gBAAgB,MAAM,QAAU,IACrC,SAAS,gBAAgB,aAAa,KAAK,gBAAiB,SAAS,IAAI,EACzE,KAAK,QAAQ,CACjB,CACA,oBAAoBoK,EAAU,CAC1B,KAAK,gBAAgB,MAAM,QAAU,IACrC,WAAWA,EAAUyB,GAAY,kBAAoB,GAAG,CAC5D,CACA,0BAA2B,CACnB,KAAK,gBAAgB,YACrB,SAAS,gBAAgB,YAAY,KAAK,eAAe,CAEjE,CACA,gBAAiB,CACR,KAAK,kBACN,KAAK,gBAAkB,OAAO,YAAY,KAAK,QAASA,GAAY,iBAAiB,EAE7F,CACA,eAAgB,CACZ,OAAO,cAAc,KAAK,eAAe,EACzC,OAAO,KAAK,eAChB,CACA,SAAU,CACN,sBAAsB,IAAM,CACxB,KAAK,gBAAgB,MAAM,MAAQ,GAAG,GAAK,KAAK,MAAQ,KAC5D,CAAC,CACL,CACA,yBAA0B,CACtB,IAAMnM,EAAU,SAAS,cAAc,OAAO,EAC9C,OAAAA,EAAQ,KAAO,WACfA,EAAQ,YAAcmM,GAAY,WAC9B,KAAK,WACLnM,EAAQ,MAAQ,KAAK,UAElBA,CACX,CACA,uBAAwB,CACpB,IAAMA,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAAA,EAAQ,UAAY,qBACbA,CACX,CACA,IAAI,UAAW,CACX,OAAOyC,GAAe,WAAW,CACrC,CACJ,EACA0J,GAAY,kBAAoB,IAEhC,IAAMC,GAAN,cAA2B9D,EAAS,CAChC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,mBAAqB,KAAK,SAC1B,OAAQtI,GAAY,CAACqM,GAAkBrM,CAAO,CAAC,EAC/C,IAAKA,GAAYsM,GAAoBtM,CAAO,CAAC,EAC7C,OAAO,CAACiE,EAAQjE,IAAY,CAC7B,GAAM,CAAE,UAAAuM,CAAU,EAAIvM,EAChBwM,EAAUD,KAAatI,EACvBA,EAAOsI,GACP,CACE,KAAME,GAAYzM,CAAO,EACzB,QAAS0M,GAAiB1M,CAAO,EACjC,SAAU,CAAC,CACf,EACJ,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGiE,CAAM,EAAG,CAAE,CAACsI,GAAY,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGC,CAAO,EAAG,CAAE,SAAU,CAAC,GAAGA,EAAQ,SAAUxM,CAAO,CAAE,CAAC,CAAE,CAAC,CAC5J,EAAG,CAAC,CAAC,CACT,CACA,IAAI,yBAA0B,CAC1B,OAAO,OAAO,KAAK,KAAK,kBAAkB,EACrC,OAAQuM,GAAc,KAAK,mBAAmBA,GAAW,OAAO,EAChE,KAAK,EAAE,CAChB,CACA,+BAA+B5D,EAAU,CACrC,OAAO,KAAK,qCAAqC,SAAUA,CAAQ,CACvE,CACA,mCAAmCA,EAAU,CACzC,OAAO,KAAK,qCAAqC,aAAcA,CAAQ,CAC3E,CACA,qCAAqCgE,EAAahE,EAAU,CACxD,OAAO,OAAO,KAAK,KAAK,kBAAkB,EACrC,OAAQ4D,GAAc,EAAEA,KAAa5D,EAAS,mBAAmB,EACjE,IAAK4D,GAAc,KAAK,mBAAmBA,EAAU,EACrD,OAAO,CAAC,CAAE,KAAAlC,CAAK,IAAMA,GAAQsC,CAAW,EACxC,IAAI,CAAC,CAAE,SAAU,CAAC3M,CAAO,CAAE,IAAMA,CAAO,CACjD,CACA,IAAI,qBAAsB,CACtB,OAAO,OAAO,KAAK,KAAK,kBAAkB,EAAE,OAAO,CAACiE,EAAQsI,IAAc,CACtE,GAAM,CAAE,KAAAlC,EAAM,QAAAuC,EAAS,SAAApI,CAAS,EAAI,KAAK,mBAAmB+H,GAC5D,OAAIlC,GAAQ,MAAQ,CAACuC,EACV,CAAC,GAAG3I,EAAQ,GAAGO,CAAQ,EAEzBA,EAAS,OAAS,EAChB,CAAC,GAAGP,EAAQ,GAAGO,EAAS,MAAM,CAAC,CAAC,EAGhCP,CAEf,EAAG,CAAC,CAAC,CACT,CACA,aAAarE,EAAM,CACf,IAAMI,EAAU,KAAK,sBAAsBJ,CAAI,EAC/C,OAAOI,EAAUA,EAAQ,aAAa,SAAS,EAAI,IACvD,CACA,sBAAsBJ,EAAM,CACxB,OAAO,OAAO,KAAK,KAAK,kBAAkB,EAAE,OAAO,CAACqE,EAAQsI,IAAc,CACtE,GAAM,CAAE,SAAU,CAACvM,CAAO,CAAG,EAAI,KAAK,mBAAmBuM,GACzD,OAAOM,GAA6B7M,EAASJ,CAAI,EAAII,EAAUiE,CACnE,EAAG,MAAS,CAChB,CACJ,EACA,SAASwI,GAAYzM,EAAS,CAC1B,GAAI8M,GAAgB9M,CAAO,EACvB,MAAO,SAEN,GAAI+M,GAAoB/M,CAAO,EAChC,MAAO,YAEf,CACA,SAAS0M,GAAiB1M,EAAS,CAC/B,OAAOA,EAAQ,aAAa,kBAAkB,GAAK,QACvD,CACA,SAAS8M,GAAgB9M,EAAS,CAE9B,OADgBA,EAAQ,WACN,QACtB,CACA,SAASqM,GAAkBrM,EAAS,CAEhC,OADgBA,EAAQ,WACN,UACtB,CACA,SAAS+M,GAAoB/M,EAAS,CAClC,IAAMgN,EAAUhN,EAAQ,UACxB,OAAOgN,GAAW,SAAYA,GAAW,QAAUhN,EAAQ,aAAa,KAAK,GAAK,YACtF,CACA,SAAS6M,GAA6B7M,EAASJ,EAAM,CAEjD,OADgBI,EAAQ,WACN,QAAUA,EAAQ,aAAa,MAAM,GAAKJ,CAChE,CACA,SAAS0M,GAAoBtM,EAAS,CAClC,OAAIA,EAAQ,aAAa,OAAO,GAC5BA,EAAQ,aAAa,QAAS,EAAE,EAE7BA,CACX,CAEA,IAAMiN,GAAN,cAA2B3E,EAAS,CAChC,OAAO,eAAexF,EAAO,GAAI,CAC7B,OAAO,KAAK,aAAaU,GAAkBV,CAAI,CAAC,CACpD,CACA,OAAO,YAAY9C,EAAS,CACxB,OAAO,KAAK,aAAaA,EAAQ,aAAa,CAClD,CACA,OAAO,aAAa,CAAE,KAAAkN,EAAM,KAAAtH,CAAK,EAAG,CAChC,OAAO,IAAI,KAAKA,EAAM,IAAIwG,GAAac,CAAI,CAAC,CAChD,CACA,YAAYlN,EAASmN,EAAc,CAC/B,MAAMnN,CAAO,EACb,KAAK,aAAemN,CACxB,CACA,OAAQ,CACJ,IAAMC,EAAgB,KAAK,QAAQ,UAAU,EAAI,EAC3CC,EAAiB,KAAK,QAAQ,iBAAiB,QAAQ,EACvDC,EAAuBF,EAAc,iBAAiB,QAAQ,EACpE,OAAW,CAACG,EAAOC,CAAM,IAAKH,EAAe,QAAQ,EAAG,CACpD,IAAMtC,EAAQuC,EAAqBC,GACnC,QAAWE,KAAU1C,EAAM,gBACvB0C,EAAO,SAAW,GACtB,QAAWA,KAAUD,EAAO,gBACxBzC,EAAM,QAAQ0C,EAAO,OAAO,SAAW,EAC/C,CACA,QAAWC,KAAuBN,EAAc,iBAAiB,wBAAwB,EACrFM,EAAoB,MAAQ,GAEhC,OAAO,IAAIT,GAAaG,EAAe,KAAK,YAAY,CAC5D,CACA,IAAI,aAAc,CACd,OAAO,KAAK,aAAa,OAC7B,CACA,IAAI,cAAe,CACf,IAAI5M,EACJ,IAAMmN,GAAQnN,EAAK,KAAK,WAAW,MAAM,KAAO,MAAQA,IAAO,OAASA,EAAK,IAC7E,OAAOG,GAAUgN,CAAI,CACzB,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,WAAW,eAAe,CAC1C,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,mBAAqB,YACrC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,mBAAqB,UACrC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,WAAW,eAAe,GAAK,QAC/C,CACA,WAAW/N,EAAM,CACb,OAAO,KAAK,aAAa,aAAa,SAASA,GAAM,CACzD,CACJ,EAEIgO,IACH,SAAUA,EAAc,CACrBA,EAAa,WAAgB,aAC7BA,EAAa,aAAkB,eAC/BA,EAAa,WAAgB,aAC7BA,EAAa,SAAc,UAC/B,GAAGA,KAAiBA,GAAe,CAAC,EAAE,EACtC,IAAIC,IACH,SAAUA,EAAY,CACnBA,EAAW,YAAiB,cAC5BA,EAAW,QAAa,UACxBA,EAAW,SAAc,WACzBA,EAAW,OAAY,SACvBA,EAAW,UAAe,WAC9B,GAAGA,KAAeA,GAAa,CAAC,EAAE,EAClC,IAAMC,GAAiB,CACnB,OAAQ,UACR,eAAgB,GAChB,oBAAqB,IAAM,CAAE,EAC7B,WAAY,GACZ,cAAe,GACf,oBAAqB,GACrB,sBAAuB,EAC3B,EACIC,IACH,SAAUA,EAAkB,CACzBA,EAAiBA,EAAiB,eAAoB,GAAK,iBAC3DA,EAAiBA,EAAiB,eAAoB,IAAM,iBAC5DA,EAAiBA,EAAiB,oBAAyB,IAAM,qBACrE,GAAGA,KAAqBA,GAAmB,CAAC,EAAE,EAC9C,IAAMC,GAAN,KAAY,CACR,YAAYrI,EAAUjE,EAAUuM,EAAuBtE,EAAU,CAAC,EAAG,CACjE,KAAK,WAAavF,GAAK,EACvB,KAAK,cAAgB,CAAC,EACtB,KAAK,iBAAmB,GACxB,KAAK,eAAiB,GACtB,KAAK,SAAW,GAChB,KAAK,oBAAsB,GAC3B,KAAK,sBAAwB,GAC7B,KAAK,eAAiB,GACtB,KAAK,MAAQyJ,GAAW,YACxB,KAAK,SAAWlI,EAChB,KAAK,SAAWjE,EAChB,KAAK,sBAAwBuM,GAAyB7J,GAAK,EAC3D,GAAM,CAAE,OAAAnD,EAAQ,eAAAiN,EAAgB,SAAAC,EAAU,SAAAxF,EAAU,aAAAyF,EAAc,SAAA/L,EAAU,oBAAAgM,EAAqB,WAAAjD,EAAY,cAAAkD,EAAe,oBAAAC,EAAqB,sBAAAC,CAAuB,EAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGV,EAAc,EAAGnE,CAAO,EACpO,KAAK,OAAS1I,EACd,KAAK,eAAiBiN,EACtB,KAAK,SAAWC,EAChB,KAAK,SAAWxF,EAChB,KAAK,aAAeyF,EACpB,KAAK,SAAW/L,EAChB,KAAK,WAAa,KAAK,SAAS,6BAA6B,KAAK,SAAU,KAAK,MAAM,EACvF,KAAK,oBAAsBgM,EAC3B,KAAK,WAAajD,EAClB,KAAK,cAAgBkD,EACrB,KAAK,SAAW,CAAClD,EACjB,KAAK,oBAAsBmD,EAC3B,KAAK,sBAAwBC,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,SAAS,IACzB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,QAAQ,gCAAgC,KAAK,qBAAqB,CAClF,CACA,IAAI,QAAS,CACT,OAAO,KAAK,UAChB,CACA,OAAQ,CACA,KAAK,OAASX,GAAW,cACzB,KAAK,mBAAmBD,GAAa,UAAU,EAC/C,KAAK,MAAQC,GAAW,QACxB,KAAK,QAAQ,aAAa,IAAI,EAC9B,KAAK,SAAS,aAAa,IAAI,EAEvC,CACA,QAAS,CACD,KAAK,OAASA,GAAW,UACrB,KAAK,SACL,KAAK,QAAQ,OAAO,EAExB,KAAK,aAAa,EAClB,KAAK,MAAQA,GAAW,SAEhC,CACA,UAAW,CACH,KAAK,OAASA,GAAW,UACzB,KAAK,mBAAmBD,GAAa,QAAQ,EAC7C,KAAK,MAAQC,GAAW,UACxB,KAAK,eAAe,EACf,KAAK,mBACN,KAAK,QAAQ,eAAe,IAAI,EAChC,KAAK,SAAS,eAAe,IAAI,GAG7C,CACA,MAAO,CACC,KAAK,OAASA,GAAW,UACzB,KAAK,MAAQA,GAAW,OACxB,KAAK,QAAQ,YAAY,IAAI,EAErC,CACA,eAAgB,CACZ,IAAIrN,EACJ,GAAI,CAAC,KAAK,gBAAkB,KAAK,cAAe,CAC5C,IAAMiO,EAAmB,KAAK,SAAS,SAAWjO,EAAK,KAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,MAAQ,UAAY,KAAK,OACjIiF,EAASV,GAA0B0J,CAAgB,EACzD,KAAK,QAAQ,OAAOhJ,EAAQ,KAAK,SAAU,KAAK,qBAAqB,EACrE,KAAK,eAAiB,EAC1B,CACJ,CACA,cAAe,CACP,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAEhB,KAAK,mBAAmB,GAAK,CAAC,KAAK,UACxC,KAAK,QAAU,IAAIC,GAAa,KAAMH,GAAY,IAAK,KAAK,QAAQ,EACpE,KAAK,QAAQ,QAAQ,EAE7B,CACA,iBAAkB,CACV,KAAK,WACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EAE3B,CACA,cAAe,CACX,KAAK,mBAAmBqI,GAAa,YAAY,EACjD,KAAK,QAAQ,oBAAoB,IAAI,CACzC,CACA,eAAevL,EAAW,KAAK,SAAU,CAErC,GADA,KAAK,SAAWA,EACZA,EAAU,CACV,GAAM,CAAE,WAAAqM,CAAW,EAAIrM,EACnBsM,GAAaD,CAAU,EACvB,KAAK,QAAQ,sBAAsB,IAAI,EAGvC,KAAK,QAAQ,iCAAiC,KAAMA,CAAU,CAEtE,CACJ,CACA,eAAgB,CACZ,KAAK,mBAAmBd,GAAa,UAAU,EAC/C,KAAK,QAAQ,qBAAqB,IAAI,CAC1C,CACA,cAAe,CACX,GAAI,KAAK,SAAU,CACf,GAAM,CAAE,WAAAc,EAAY,aAAAE,CAAa,EAAI,KAAK,SAC1C,KAAK,OAAO,SAAY,CAChB,KAAK,qBACL,KAAK,cAAc,EACnB,KAAK,KAAK,eACV,MAAM,KAAK,KAAK,cAChBD,GAAaD,CAAU,GAAKE,GAAgB,MAC5C,MAAM,KAAK,KAAK,WAAW3B,GAAa,eAAe2B,CAAY,EAAG,GAAO,KAAK,WAAY,IAAI,EAClG,KAAK,cAAc,EACnB,KAAK,QAAQ,cAAc,IAAI,EAC/B,KAAK,SAAS,IAGd,MAAM,KAAK,KAAK,YAAY3B,GAAa,eAAe2B,CAAY,EAAG,IAAI,EAC3E,KAAK,QAAQ,cAAc,IAAI,EAC/B,KAAK,KAAK,EAElB,CAAC,CACL,CACJ,CACA,mBAAoB,CAChB,IAAMjG,EAAW,KAAK,KAAK,6BAA6B,KAAK,QAAQ,GAAK,KAAK,qBAAqB,EACpG,GAAIA,IAAa,CAAC9H,GAAU,KAAK,QAAQ,GAAK8H,EAAS,UAAU9H,GAAU,KAAK,QAAQ,CAAC,KACjF,KAAK,QAAU,WAAa8H,EAAS,eACrC,OAAOA,CAGnB,CACA,sBAAuB,CACnB,GAAI,KAAK,aACL,OAAOsE,GAAa,eAAe,KAAK,YAAY,CAE5D,CACA,mBAAoB,CAChB,OAAO,KAAK,kBAAkB,GAAK,IACvC,CACA,oBAAqB,CACjB,IAAMtE,EAAW,KAAK,kBAAkB,EACxC,GAAIA,EAAU,CACV,IAAMa,EAAY,KAAK,mBAAmB,EAC1C,KAAK,OAAO,SAAY,CACpB,KAAK,cAAc,EACf,KAAK,WACL,KAAK,QAAQ,cAAc,IAAI,GAG3B,KAAK,KAAK,eACV,MAAM,KAAK,KAAK,cACpB,MAAM,KAAK,KAAK,WAAWb,EAAUa,EAAW,KAAK,WAAY,IAAI,EACrE,KAAK,cAAc,EACnB,KAAK,QAAQ,cAAc,IAAI,EAC1BA,GACD,KAAK,SAAS,EAG1B,CAAC,CACL,CACJ,CACA,gBAAiB,CACb,IAAIhJ,EACA,KAAK,sBAAwB,CAAC,KAAK,oBAAsBA,EAAK,KAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,cACrH,KAAK,QAAQ,wBAAwB,KAAK,qBAAsB,CAC5D,OAAQ,UACR,SAAU,KAAK,SACf,oBAAqB,GACrB,WAAY,EAChB,CAAC,EACD,KAAK,iBAAmB,GAEhC,CACA,oBAAqB,CACb,KAAK,YACL,KAAK,OAAO,SAAY,CACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,cAAc,IAAI,CACnC,CAAC,CAET,CACA,eAAeoH,EAAS,CAChB,KAAK,uBACLA,EAAQ,mBAAmBtB,GAAc,WAAW,CAE5D,CACA,gBAAiB,CACb,KAAK,aAAa,CACtB,CACA,iCAAiCyB,EAAU8G,EAAW,CAAE,CACxD,MAAM,6BAA6BjH,EAASvF,EAAU,CAClD,IAAMuM,EAAe,MAAMvM,EAAS,aAC9B,CAAE,WAAAyM,EAAY,WAAAJ,CAAW,EAAIrM,EAC/BuM,GAAgB,KAChB,KAAK,eAAe,CAChB,WAAYb,GAAiB,oBAC7B,WAAAe,CACJ,CAAC,GAGD,KAAK,qBAAuBzM,EAAS,WAAaA,EAAS,SAAW,OACtE,KAAK,eAAe,CAAE,WAAYqM,EAAY,aAAAE,EAAc,WAAAE,CAAW,CAAC,EAEhF,CACA,MAAM,0BAA0BlH,EAASvF,EAAU,CAC/C,IAAMuM,EAAe,MAAMvM,EAAS,aAC9B,CAAE,WAAAyM,EAAY,WAAAJ,CAAW,EAAIrM,EAC/BuM,GAAgB,KAChB,KAAK,eAAe,CAChB,WAAYb,GAAiB,oBAC7B,WAAAe,CACJ,CAAC,EAGD,KAAK,eAAe,CAAE,WAAYJ,EAAY,aAAAE,EAAc,WAAAE,CAAW,CAAC,CAEhF,CACA,eAAe/G,EAAUgH,EAAQ,CAC7B,KAAK,eAAe,CAChB,WAAYhB,GAAiB,eAC7B,WAAY,EAChB,CAAC,CACL,CACA,iBAAkB,CACd,KAAK,cAAc,CACvB,CACA,eAAgB,CACR,CAAC,KAAK,UAAY,CAAC,KAAK,KAAK,gBACzB,KAAK,QAAU,UACf,KAAK,yBAAyB,GAAK,KAAK,eAAe,GAAK,KAAK,KAAK,YAAY,EAGlF,KAAK,eAAe,GAAK,KAAK,KAAK,YAAY,EAE/C,KAAK,YACL,KAAK,SAAS,gCAAgC,KAAK,KAAK,qBAAsB,KAAK,QAAQ,EAE/F,KAAK,SAAW,GAExB,CACA,0BAA2B,CACvB,GAAM,CAAE,eAAAiB,CAAe,EAAI,KAAK,gBAChC,GAAIA,EACA,YAAK,KAAK,iBAAiBA,CAAc,EAClC,EAEf,CACA,gBAAiB,CACb,IAAMnN,EAAShB,GAAU,KAAK,QAAQ,EACtC,GAAIgB,GAAU,KACV,YAAK,KAAK,eAAeA,CAAM,EACxB,EAEf,CACA,mBAAmBoN,EAAQ,CACvB,KAAK,cAAcA,GAAU,IAAI,KAAK,EAAE,QAAQ,CACpD,CACA,kBAAmB,CACf,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,aAAa,CAC/C,CACA,0BAA0BhO,EAAQ,CAC9B,OAAQA,OACC,UACD,OAAO,QAAQ,iBACd,cACA,UACD,OAAO,QAAQ,UAE3B,CACA,sBAAuB,CACnB,OAAO,OAAO,KAAK,UAAY,QACnC,CACA,oBAAqB,CACjB,OAAI,KAAK,WACE,GAEF,KAAK,QAAU,UACb,CAAC,KAAK,kBAAkB,EAGxB,KAAK,UAEpB,CACA,eAAgB,CACP,KAAK,iBACN,KAAK,KAAK,cAAc,KAAK,QAAQ,EAAE,KAAM0H,GAAaA,GAAY,KAAK,oBAAoBA,CAAQ,CAAC,EACxG,KAAK,eAAiB,GAE9B,CACA,MAAM,OAAO+B,EAAU,CACnB,KAAK,aAAa,EAClB,MAAM,IAAI,QAASrH,GAAY,CAC3B,KAAK,MAAQ,sBAAsB,IAAMA,EAAQ,CAAC,CACtD,CAAC,EACD,MAAMqH,EAAS,EACf,OAAO,KAAK,KAChB,CACA,cAAe,CACP,KAAK,QACL,qBAAqB,KAAK,KAAK,EAC/B,OAAO,KAAK,MAEpB,CACJ,EACA,SAASiE,GAAaD,EAAY,CAC9B,OAAOA,GAAc,KAAOA,EAAa,GAC7C,CAEA,IAAMQ,GAAN,KAAqB,CACjB,YAAYC,EAAS,CACjB,KAAK,YAAc,IAAIhD,GACvB,KAAK,gBAAkB,IAAM,CACzB,KAAK,YAAY,KAAK,CAC1B,EACA,KAAK,QAAUgD,CACnB,CACA,wBAAwBzN,EAAUiI,EAAS,CACvC,KAAK,UAAU,WAAWjI,EAA6DiI,GAAQ,uBAA0BvF,GAAK,EAAGuF,CAAO,CAC5I,CACA,aAAayF,EAAO,CAChB,KAAK,SAAWA,EAAM,SACtBA,EAAM,mBAAmB,EACzBA,EAAM,aAAa,EACnBA,EAAM,mBAAmB,CAC7B,CACA,oBAAoBA,EAAO,CACvB,KAAK,YAAY,SAAS,CAAC,EACvBA,EAAM,kBAAkB,GAAKA,EAAM,QAAU,UAC7C,KAAK,+BAA+B,EAGpC,KAAK,gBAAgB,CAE7B,CACA,sBAAsBA,EAAO,CACzBA,EAAM,aAAa,CACvB,CACA,iCAAiCA,EAAOV,EAAY,CAChD,OAAQA,QACCX,GAAiB,oBACjBA,GAAiB,oBACjBA,GAAiB,oBAClB,OAAO,KAAK,OAAO,CACf,OAAQ,iBACR,QAAS,CACL,WAAAW,CACJ,CACJ,CAAC,UAED,OAAOU,EAAM,aAAa,EAEtC,CACA,qBAAqBC,EAAQ,CACzB,KAAK,YAAY,SAAS,CAAC,EAC3B,KAAK,qBAAqB,CAC9B,CACA,eAAeA,EAAQ,CAAE,CACzB,gBAAgBzF,EAAQ,CACpB,KAAK,OAAOA,CAAM,CACtB,CACA,YAAYyF,EAAQ,CAAE,CACtB,cAAcA,EAAQ,CAAE,CACxB,sBAAsBC,EAAiB,CACnC,KAAK,YAAY,SAAS,CAAC,EAC3B,KAAK,8BAA8B,CACvC,CACA,uBAAuBA,EAAiB,CACpC,KAAK,YAAY,SAAS,CAAC,EAC3B,KAAK,oBAAoB,CAC7B,CACA,gCAAiC,CAC7B,KAAK,wBAA0B,OAAO,WAAW,KAAK,gBAAiB,KAAK,QAAQ,gBAAgB,CACxG,CACA,sBAAuB,CACnB,KAAK,YAAY,KAAK,EAClB,KAAK,yBAA2B,OAChC,OAAO,aAAa,KAAK,uBAAuB,EAChD,OAAO,KAAK,wBAEpB,CACA,+BAAgC,CACxB,KAAK,wBAA0B,OAC/B,KAAK,uBAAyB,OAAO,WAAW,KAAK,gBAAiB,KAAK,QAAQ,gBAAgB,EAE3G,CACA,qBAAsB,CAClB,KAAK,YAAY,KAAK,EAClB,KAAK,wBAA0B,OAC/B,OAAO,aAAa,KAAK,sBAAsB,EAC/C,OAAO,KAAK,uBAEpB,CACA,OAAO1F,EAAQ,CACX,IAAIpJ,EACJwC,GAAS,eAAgB,CAAE,OAAQ4G,CAAO,CAAC,EAC3C,OAAO,SAAS,OAASpJ,EAAK,KAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAS,IAAM,OAAO,SAAS,IACxH,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,QAAQ,SACxB,CACJ,EAEM+O,GAAN,KAAoB,CAChB,aAAc,CACV,KAAK,SAAW,yBAChB,KAAK,mBAAqB,2BAC1B,KAAK,QAAU,GACf,KAAK,wBAA4BxF,GAAW,CACxC,QAAW/J,KAAW,KAAK,kBACvBA,EAAQ,OAAO,CAEvB,CACJ,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,iBAAiB,qBAAsB,KAAK,wBAAyB,EAAK,EAElF,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,oBAAoB,qBAAsB,KAAK,wBAAyB,EAAK,EAErF,CACA,IAAI,mBAAoB,CACpB,MAAO,CAAC,GAAG,SAAS,iBAAiB,KAAK,QAAQ,EAAG,GAAG,KAAK,gCAAgC,CACjG,CACA,IAAI,kCAAmC,CACnC,IAAMwE,EAAW,SAAS,iBAAiB,KAAK,kBAAkB,EAClE,OAAIA,EAAS,QACT,QAAQ,KAAK,OAAO,KAAK,0FAA0F,KAAK,mBAAmB,EAExI,CAAC,GAAGA,CAAQ,CACvB,CACJ,EAEMgL,GAAN,KAAsB,CAClB,YAAYL,EAASnP,EAAS,CAC1B,KAAK,QAAUmP,EACf,KAAK,QAAUnP,EACf,KAAK,gBAAkB,IAAI8J,GAAgB,KAAM9J,CAAO,EACxD,KAAK,mBAAqB,IAAIgJ,GAAmB,KAAMhJ,CAAO,CAClE,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,EAC3B,KAAK,mBAAmB,MAAM,CAClC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,EAC1B,KAAK,mBAAmB,KAAK,CACjC,CACA,yBAAyBA,EAASyP,EAAW1F,EAAQ,CACjD,OAAO,KAAK,eAAe/J,CAAO,CACtC,CACA,qBAAqBA,EAASc,EAAKX,EAAO,CACtC,IAAMuP,EAAQ,KAAK,iBAAiB1P,CAAO,EACvC0P,GACAA,EAAM,SAAS,qBAAqB1P,EAASc,EAAKX,CAAK,CAE/D,CACA,eAAeH,EAASV,EAAW,CAC/B,OAAQU,EAAQ,QAAQ,aAAa,GAAK,MACtC,KAAK,aAAaA,EAASV,CAAS,GACpC,KAAK,eAAeU,EAASV,CAAS,CAC9C,CACA,cAAcU,EAASV,EAAW,CAC9B,IAAMoQ,EAAQ,KAAK,iBAAiB1P,EAASV,CAAS,EAClDoQ,GACAA,EAAM,SAAS,cAAc1P,EAASV,CAAS,CAEvD,CACA,aAAaE,EAAMF,EAAW,CAC1B,IAAIkB,EACJ,IAAMS,EAASD,GAAUxB,EAAMF,CAAS,EAClCqQ,EAAO,KAAK,QAAQ,cAAc,cAAc,yBAAyB,EACzEhO,EAAehB,IAAWH,EAAiDmP,GAAK,WAAa,MAAQnP,IAAO,OAASA,EAAK,GAAG,EACnI,OAAO,KAAK,eAAehB,EAAMF,CAAS,GAAKmC,GAAoBR,EAAQU,CAAY,CAC3F,CACA,eAAe3B,EAASV,EAAW,CAI/B,GAHsBU,aAAmB,gBACnC,KAAK,QAAQ,wBAAwBA,EAASV,CAAS,EACvD,KAAK,QAAQ,qBAAqBU,CAAO,EAC5B,CACf,IAAM0P,EAAQ,KAAK,iBAAiB1P,EAASV,CAAS,EACtD,OAAOoQ,EAAQA,GAAS1P,EAAQ,QAAQ,aAAa,EAAI,EAC7D,KAEI,OAAO,EAEf,CACA,iBAAiBA,EAASV,EAAW,CACjC,IAAMmJ,EAA4DnJ,GAAU,aAAa,kBAAkB,GAAMU,EAAQ,aAAa,kBAAkB,EACxJ,GAAIyI,GAAMA,GAAM,OAAQ,CACpB,IAAMiH,EAAQ,KAAK,QAAQ,cAAc,IAAIjH,mBAAoB,EACjE,GAAIiH,aAAiBrP,GACjB,OAAOqP,CAEf,CACJ,CACJ,EAEME,GAAN,KAAc,CACV,YAAYjK,EAAU,CAClB,KAAK,sBAAwBvB,GAAK,EAClC,KAAK,gBAAkB,CAAC,EACxB,KAAK,QAAU,GACf,KAAK,WAAa,GAClB,KAAK,WAAcjE,GAAU,CACzB,GAAI,KAAK,qBAAqB,EAAG,CAC7B,GAAM,CAAE,MAAA0P,CAAM,EAAI1P,EAAM,OAAS,CAAC,EAClC,GAAI0P,EAAO,CACP,KAAK,SAAW,IAAI,IAAI,OAAO,SAAS,IAAI,EAC5C,GAAM,CAAE,sBAAA5B,CAAsB,EAAI4B,EAClC,KAAK,sBAAwB5B,EAC7B,KAAK,SAAS,iDAAiD,KAAK,SAAUA,CAAqB,CACvG,CACJ,CACJ,EACA,KAAK,WAAa,MAAOlE,GAAW,CAChC,MAAMxG,GAAc,EACpB,KAAK,WAAa,EACtB,EACA,KAAK,SAAWoC,CACpB,CACA,OAAQ,CACC,KAAK,UACN,iBAAiB,WAAY,KAAK,WAAY,EAAK,EACnD,iBAAiB,OAAQ,KAAK,WAAY,EAAK,EAC/C,KAAK,QAAU,GACf,KAAK,QAAQ,IAAI,IAAI,OAAO,SAAS,IAAI,CAAC,EAElD,CACA,MAAO,CACC,KAAK,UACL,oBAAoB,WAAY,KAAK,WAAY,EAAK,EACtD,oBAAoB,OAAQ,KAAK,WAAY,EAAK,EAClD,KAAK,QAAU,GAEvB,CACA,KAAKjE,EAAUuM,EAAuB,CAClC,KAAK,OAAO,QAAQ,UAAWvM,EAAUuM,CAAqB,CAClE,CACA,QAAQvM,EAAUuM,EAAuB,CACrC,KAAK,OAAO,QAAQ,aAAcvM,EAAUuM,CAAqB,CACrE,CACA,OAAOxI,EAAQ/D,EAAUuM,EAAwB7J,GAAK,EAAG,CACrD,IAAM0L,EAAQ,CAAE,MAAO,CAAE,sBAAA7B,CAAsB,CAAE,EACjDxI,EAAO,KAAK,QAASqK,EAAO,GAAIpO,EAAS,IAAI,EAC7C,KAAK,SAAWA,EAChB,KAAK,sBAAwBuM,CACjC,CACA,gCAAgCA,EAAuB,CACnD,OAAO,KAAK,gBAAgBA,IAA0B,CAAC,CAC3D,CACA,sBAAsB8B,EAAgB,CAClC,GAAM,CAAE,sBAAA9B,CAAsB,EAAI,KAC5B+B,EAAkB,KAAK,gBAAgB/B,GAC7C,KAAK,gBAAgBA,GAAyB,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG+B,CAAe,EAAGD,CAAc,CAClH,CACA,kCAAmC,CAC/B,IAAIvP,EACC,KAAK,4BACN,KAAK,2BAA6BA,EAAK,QAAQ,qBAAuB,MAAQA,IAAO,OAASA,EAAK,OACnG,QAAQ,kBAAoB,SAEpC,CACA,sCAAuC,CAC/B,KAAK,4BACL,QAAQ,kBAAoB,KAAK,0BACjC,OAAO,KAAK,0BAEpB,CACA,sBAAuB,CACnB,OAAO,KAAK,aAAa,CAC7B,CACA,cAAe,CACX,OAAO,KAAK,YAAc,SAAS,YAAc,UACrD,CACJ,EAEMyP,GAAN,KAAgB,CACZ,YAAYtK,EAAU,CAClB,KAAK,SAAWA,CACpB,CACA,aAAajE,EAAUiI,EAAU,CAAC,EAAG,CAC7B,KAAK,SAAS,iCAAiCjI,EAAUiI,EAAQ,MAAM,IACnElI,GAAoBC,EAAU,KAAK,KAAK,SAAS,YAAY,EAC7D,KAAK,SAAS,wBAAwBA,EAAUiI,CAAO,EAGvD,OAAO,SAAS,KAAOjI,EAAS,SAAS,EAGrD,CACA,WAAWd,EAAWqN,EAAuBtE,EAAU,CAAC,EAAG,CACvD,KAAK,KAAK,EACV,KAAK,aAAe,IAAIqE,GAAM,KAAMrN,GAAUC,CAAS,EAAGqN,EAAuB,OAAO,OAAO,CAAE,SAAU,KAAK,QAAS,EAAGtE,CAAO,CAAC,EACpI,KAAK,aAAa,MAAM,CAC5B,CACA,WAAWnK,EAAMF,EAAW,CACxB,KAAK,KAAK,EACV,KAAK,eAAiB,IAAIyH,GAAe,KAAMvH,EAAMF,EAAW,EAAI,EACpE,KAAK,eAAe,MAAM,CAC9B,CACA,MAAO,CACC,KAAK,iBACL,KAAK,eAAe,KAAK,EACzB,OAAO,KAAK,gBAEZ,KAAK,eACL,KAAK,aAAa,OAAO,EACzB,OAAO,KAAK,aAEpB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,SAAS,IACzB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,sBAAsB4Q,EAAgB,CAC9B,OAAO,KAAK,QAAQ,uBAA0B,YAC9C,KAAK,QAAQ,sBAAsBA,CAAc,CAEzD,CACA,MAAM,oCAAoCA,EAAgBlK,EAAe,CACrE,GAAIkK,GAAkB,KAAK,eAAgB,CACvC,IAAMtB,EAAe,MAAM5I,EAAc,aACzC,GAAI4I,EAAc,CACd,IAAML,EAAsB2B,EAAe,OACtC3B,GACD,KAAK,KAAK,mBAAmB,EAEjC,GAAM,CAAE,WAAAG,EAAY,WAAAI,CAAW,EAAI9I,EAE7BmK,EAAe,CACjB,OAFW,KAAK,2BAA2BD,CAAc,EAGzD,oBAAA3B,EACA,SAAU,CAAE,WAAAG,EAAY,aAAAE,EAAc,WAAAE,CAAW,CACrD,EACA,KAAK,aAAa9I,EAAc,SAAUmK,CAAY,CAC1D,CACJ,CACJ,CACA,MAAM,iCAAiCD,EAAgBlK,EAAe,CAClE,IAAM4I,EAAe,MAAM5I,EAAc,aACzC,GAAI4I,EAAc,CACd,IAAMjG,EAAWsE,GAAa,eAAe2B,CAAY,EACrD5I,EAAc,YACd,MAAM,KAAK,KAAK,YAAY2C,EAAU,KAAK,YAAY,EAGvD,MAAM,KAAK,KAAK,WAAWA,EAAU,GAAO,GAAM,KAAK,YAAY,EAEvE,KAAK,KAAK,YAAY,EACtB,KAAK,KAAK,mBAAmB,CACjC,CACJ,CACA,sBAAsBuH,EAAgBnK,EAAO,CACzC,QAAQ,MAAMA,CAAK,CACvB,CACA,uBAAuBmK,EAAgB,CAC/B,OAAO,KAAK,QAAQ,wBAA2B,YAC/C,KAAK,QAAQ,uBAAuBA,CAAc,CAE1D,CACA,aAAad,EAAO,CAChB,KAAK,SAAS,aAAaA,CAAK,CACpC,CACA,eAAeA,EAAO,CAClB,KAAK,SAAS,eAAeA,CAAK,CACtC,CACA,6BAA6B1N,EAAUT,EAAQ,CAC3C,IAAMY,EAAShB,GAAUa,CAAQ,EAC3B0O,EAAgBvP,GAAU,KAAK,KAAK,oBAAoB,EACxDwP,EAAqBpP,IAAW,WAAa,OAAOY,EAAW,IACrE,OAAQZ,IAAW,WACfW,GAAcF,CAAQ,IAAME,GAAc,KAAK,KAAK,oBAAoB,IACvEyO,GAAuBxO,GAAU,MAAQA,IAAWuO,EAC7D,CACA,gCAAgCE,EAAQC,EAAQ,CAC5C,KAAK,SAAS,gCAAgCD,EAAQC,CAAM,CAChE,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,QACxB,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,QAAQ,qBACxB,CACA,2BAA2B,CAAE,UAAAjR,EAAW,YAAA4H,CAAY,EAAG,CACnD,OAAOjC,GAAe3F,EAAW4H,CAAW,GAAK,SACrD,CACJ,EAEIsJ,IACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,QAAa,GAAK,UACtCA,EAAUA,EAAU,QAAa,GAAK,UACtCA,EAAUA,EAAU,YAAiB,GAAK,cAC1CA,EAAUA,EAAU,SAAc,GAAK,UAC3C,GAAGA,KAAcA,GAAY,CAAC,EAAE,EAChC,IAAMC,GAAN,KAAmB,CACf,YAAY9K,EAAU,CAClB,KAAK,MAAQ6K,GAAU,QACvB,KAAK,QAAU,GACf,KAAK,oBAAsB,IAAM,CAC7B,GAAM,CAAE,WAAAE,CAAW,EAAI,KACnBA,GAAc,cACd,KAAK,kBAAkB,EAElBA,GAAc,YACnB,KAAK,eAAe,CAE5B,EACA,KAAK,eAAiB,IAAM,CACxB,KAAK,SAAS,eAAe,CACjC,EACA,KAAK,SAAW/K,CACpB,CACA,OAAQ,CACC,KAAK,UACF,KAAK,OAAS6K,GAAU,UACxB,KAAK,MAAQA,GAAU,SAE3B,SAAS,iBAAiB,mBAAoB,KAAK,oBAAqB,EAAK,EAC7E,iBAAiB,WAAY,KAAK,eAAgB,EAAK,EACvD,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,SAAS,oBAAoB,mBAAoB,KAAK,oBAAqB,EAAK,EAChF,oBAAoB,WAAY,KAAK,eAAgB,EAAK,EAC1D,KAAK,QAAU,GAEvB,CACA,mBAAoB,CACZ,KAAK,OAASA,GAAU,UACxB,KAAK,MAAQA,GAAU,YACvB,KAAK,SAAS,sBAAsB,EAE5C,CACA,gBAAiB,CACb,KAAK,kBAAkB,EACnB,KAAK,OAASA,GAAU,cACxB,KAAK,MAAQA,GAAU,SACvB,KAAK,SAAS,WAAW,EAEjC,CACA,IAAI,YAAa,CACb,OAAO,SAAS,UACpB,CACJ,EAEMG,GAAN,KAAqB,CACjB,YAAYhL,EAAU,CAClB,KAAK,QAAU,GACf,KAAK,SAAW,IAAM,CAClB,KAAK,eAAe,CAAE,EAAG,OAAO,YAAa,EAAG,OAAO,WAAY,CAAC,CACxE,EACA,KAAK,SAAWA,CACpB,CACA,OAAQ,CACC,KAAK,UACN,iBAAiB,SAAU,KAAK,SAAU,EAAK,EAC/C,KAAK,SAAS,EACd,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,oBAAoB,SAAU,KAAK,SAAU,EAAK,EAClD,KAAK,QAAU,GAEvB,CACA,eAAeiL,EAAU,CACrB,KAAK,SAAS,sBAAsBA,CAAQ,CAChD,CACJ,EAEMC,GAAN,KAA4B,CACxB,OAAO,CAAE,SAAAtK,CAAS,EAAG,CACjBkE,GAAM,4BAA4B,KAAMqG,GAAkCvK,CAAQ,EAAG,IAAM,SAAS,gBAAgB,YAAYA,CAAQ,CAAC,CAC7I,CACA,cAAcsC,EAAyBC,EAAqB,CACxDA,EAAoB,YAAYD,EAAwB,UAAU,EAAI,CAAC,CAC3E,CACA,cAAe,CAAE,CACrB,EACA,SAASiI,GAAkCvK,EAAU,CACjD,IAAMwK,EAA8BvI,GAA0B,SAAS,eAAe,EAChFI,EAAsB,CAAC,EAC7B,QAAWoI,KAA8BD,EAA6B,CAClE,GAAM,CAAE,GAAAtI,CAAG,EAAIuI,EACf,QAAWvK,KAAiBF,EAAS,iBAAiB,cAAc,EAAG,CACnE,IAAM0K,EAAkBvI,GAAwBjC,EAAc,gBAAgB,QAASgC,CAAE,EACrFwI,IACArI,EAAoBH,GAAM,CAACuI,EAA4BC,CAAe,EAE9E,CACJ,CACA,OAAOrI,CACX,CAEA,IAAMsI,GAAN,KAAqB,CACjB,YAAYvL,EAAU,CAClB,KAAK,QAAU,IAAI,IACnB,KAAK,QAAU,GACf,KAAK,qBAAyBxF,GAAU,CACpC,IAAMkC,EAAW8O,GAAuBhR,CAAK,EACzCkC,GAAY+O,GAAsB/O,CAAQ,IAC1ClC,EAAM,eAAe,EACrB,KAAK,uBAAuBkC,CAAQ,EAE5C,EACA,KAAK,oBAAuBlC,GAAU,CAC9B,KAAK,SAAW,OAAOA,EAAM,MAAQ,UACrC,KAAK,mBAAmBA,EAAM,IAAI,CAE1C,EACA,KAAK,SAAWwF,CACpB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,iBAAiB,8BAA+B,KAAK,qBAAsB,EAAK,EAExF,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,oBAAoB,8BAA+B,KAAK,qBAAsB,EAAK,EAE3F,CACA,oBAAoB6H,EAAQ,CACnB,KAAK,wBAAwBA,CAAM,IACpC,KAAK,QAAQ,IAAIA,CAAM,EACvBA,EAAO,iBAAiB,UAAW,KAAK,oBAAqB,EAAK,EAE1E,CACA,uBAAuBA,EAAQ,CACvB,KAAK,wBAAwBA,CAAM,IACnC,KAAK,QAAQ,OAAOA,CAAM,EAC1BA,EAAO,oBAAoB,UAAW,KAAK,oBAAqB,EAAK,EAE7E,CACA,wBAAwBA,EAAQ,CAC5B,OAAO,KAAK,QAAQ,IAAIA,CAAM,CAClC,CACA,MAAM,uBAAuBnL,EAAU,CACnC,IAAMS,EAAO,MAAMT,EAAS,aACxBS,GACA,KAAK,mBAAmBA,CAAI,CAEpC,CACA,mBAAmBA,EAAM,CACrB,KAAK,SAAS,0BAA0BwD,GAAc,KAAKxD,CAAI,CAAC,CACpE,CACJ,EACA,SAASqO,GAAuBhR,EAAO,CACnC,IAAIK,EACJ,IAAMwF,GAAiBxF,EAAKL,EAAM,UAAY,MAAQK,IAAO,OAAS,OAASA,EAAG,cAClF,GAAIwF,aAAyB5D,GACzB,OAAO4D,CAEf,CACA,SAASoL,GAAsB/O,EAAU,CACrC,IAAI7B,EAEJ,QADqBA,EAAK6B,EAAS,eAAiB,MAAQ7B,IAAO,OAASA,EAAK,IAC9D,WAAW8F,GAAc,WAAW,CAC3D,CAEA,IAAM+K,GAAN,cAA4BrG,EAAS,CACjC,OAAO,cAAcQ,EAAgBC,EAAY,CAC7C,GAAM,CAAE,gBAAA6F,EAAiB,KAAA1L,CAAK,EAAI,SAClC0L,EAAgB,aAAa7F,EAAY7F,CAAI,CACjD,CACA,MAAM,QAAS,CACX,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,CAChC,CACA,oBAAqB,CACjB,GAAM,CAAE,gBAAA0L,EAAiB,KAAApE,CAAK,EAAI,SAClCoE,EAAgB,aAAa,KAAK,QAASpE,CAAI,EAC/C,KAAK,cAAc,KAAK,eAAgB,KAAK,UAAU,CAC3D,CACA,wBAAyB,CACrB,QAAWqE,KAAsB,KAAK,eAAgB,CAClD,IAAMC,EAAaD,EAAmB,WACtC,GAAIC,EAAY,CACZ,IAAMxR,EAAUsC,GAAsBiP,CAAkB,EACxDC,EAAW,aAAaxR,EAASuR,CAAkB,CACvD,CACJ,CACJ,CACA,IAAI,SAAU,CACV,OAAO,KAAK,YAAY,aAAa,OACzC,CACA,IAAI,gBAAiB,CACjB,OAAO,SAAS,gBAAgB,iBAAiB,QAAQ,CAC7D,CACJ,EAEME,GAAN,cAA2BzG,EAAS,CAChC,OAAO,cAAcQ,EAAgBC,EAAY,CACzC,SAAS,MAAQA,aAAsB,gBACvC,SAAS,KAAK,YAAYA,CAAU,EAGpC,SAAS,gBAAgB,YAAYA,CAAU,CAEvD,CACA,IAAI,cAAe,CACf,OAAO,KAAK,YAAY,aAAe,KAAK,2BAChD,CACA,IAAI,cAAe,CACf,GAAI,CAAC,KAAK,YAAY,YAClB,MAAO,CACH,OAAQ,+BACZ,EAEJ,GAAI,CAAC,KAAK,4BACN,MAAO,CACH,OAAQ,0BACZ,CAER,CACA,MAAM,iBAAkB,CACpB,MAAM,KAAK,UAAU,CACzB,CACA,MAAM,QAAS,CACP,KAAK,YACL,MAAM,KAAK,YAAY,CAE/B,CACA,iBAAkB,CACd,MAAM,gBAAgB,EACjB,KAAK,WACN,KAAK,+BAA+B,CAE5C,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,gBAAgB,YAChC,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,YAAY,YAC5B,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,OAC5B,CACA,MAAM,WAAY,CACd,IAAMiG,EAAqB,KAAK,yBAAyB,EACnDC,EAAwB,KAAK,8BAA8B,EACjE,KAAK,0BAA0B,EAC/B,MAAMD,EACN,MAAMC,CACV,CACA,MAAM,aAAc,CAChB,MAAM,KAAK,4BAA4B,SAAY,CAC/C,KAAK,gBAAgB,EACrB,MAAM,KAAK,cAAc,CAC7B,CAAC,CACL,CACA,IAAI,6BAA8B,CAC9B,OAAO,KAAK,oBAAoB,yBAA2B,KAAK,gBAAgB,uBACpF,CACA,MAAM,+BAAgC,CAClC,IAAMC,EAAkB,CAAC,EACzB,QAAW5R,KAAW,KAAK,0BACvB4R,EAAgB,KAAKhN,GAAY5E,CAAO,CAAC,EACzC,SAAS,KAAK,YAAYA,CAAO,EAErC,MAAM,QAAQ,IAAI4R,CAAe,CACrC,CACA,2BAA4B,CACxB,QAAW5R,KAAW,KAAK,sBACvB,SAAS,KAAK,YAAYsC,GAAsBtC,CAAO,CAAC,CAEhE,CACA,MAAM,0BAA2B,CAC7B,IAAM6R,EAAkB,CAAC,GAAG,KAAK,0BAA0B,EAC3D,QAAW7R,KAAW,KAAK,+BAClB,KAAK,8BAA8BA,EAAS6R,CAAe,GAC5D,SAAS,KAAK,YAAY7R,CAAO,EAGzC,QAAWA,KAAW6R,EAClB,SAAS,KAAK,YAAY7R,CAAO,CAEzC,CACA,8BAA8BA,EAAS8R,EAAa,CAChD,OAAW,CAACvE,EAAO9B,CAAU,IAAKqG,EAAY,QAAQ,EAAG,CACrD,GAAI9R,EAAQ,SAAW,QAAS,CAC5B,GAAIyL,EAAW,SAAW,QACtB,SAEJ,GAAIzL,EAAQ,WAAayL,EAAW,UAChC,OAAAqG,EAAY,OAAOvE,EAAO,CAAC,EACpB,EAEf,CACA,GAAI9B,EAAW,YAAYzL,CAAO,EAC9B,OAAA8R,EAAY,OAAOvE,EAAO,CAAC,EACpB,EAEf,CACA,MAAO,EACX,CACA,sCAAuC,CACnC,QAAWvN,KAAW,KAAK,+BACvB,SAAS,KAAK,YAAYA,CAAO,CAEzC,CACA,gCAAiC,CAC7B,QAAWA,KAAW,KAAK,2BACvB,SAAS,KAAK,YAAYA,CAAO,CAEzC,CACA,iBAAkB,CACd,SAAS,UAAU,KAAK,UAAU,EAClC,KAAK,8BAA8B,CACvC,CACA,+BAAgC,CAC5B,QAAW0G,KAAsB,KAAK,sBAAuB,CACzD,IAAMuF,EAAyB3J,GAAsBoE,CAAkB,EACvEA,EAAmB,YAAYuF,CAAsB,CACzD,CACJ,CACA,MAAM,eAAgB,CAClB,MAAM,KAAK,cAAc,KAAK,eAAgB,KAAK,UAAU,CACjE,CACA,IAAI,2BAA4B,CAC5B,OAAO,KAAK,gBAAgB,mCAAmC,KAAK,mBAAmB,CAC3F,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,gBAAgB,+BAA+B,KAAK,mBAAmB,CACvF,CACA,IAAI,gCAAiC,CACjC,OAAO,KAAK,oBAAoB,mBACpC,CACA,IAAI,4BAA6B,CAC7B,OAAO,KAAK,gBAAgB,mBAChC,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,WAAW,iBAAiB,QAAQ,CACpD,CACJ,EAEM8F,GAAN,KAAoB,CAChB,YAAYC,EAAM,CACd,KAAK,KAAO,CAAC,EACb,KAAK,UAAY,CAAC,EAClB,KAAK,KAAOA,CAChB,CACA,IAAItQ,EAAU,CACV,OAAOI,GAAWJ,CAAQ,IAAK,KAAK,SACxC,CACA,IAAIA,EAAU,CACV,GAAI,KAAK,IAAIA,CAAQ,EAAG,CACpB,IAAMiH,EAAW,KAAK,KAAKjH,CAAQ,EACnC,YAAK,MAAMA,CAAQ,EACZiH,CACX,CACJ,CACA,IAAIjH,EAAUiH,EAAU,CACpB,YAAK,MAAMjH,EAAUiH,CAAQ,EAC7B,KAAK,MAAMjH,CAAQ,EACZiH,CACX,CACA,OAAQ,CACJ,KAAK,UAAY,CAAC,CACtB,CACA,KAAKjH,EAAU,CACX,OAAO,KAAK,UAAUI,GAAWJ,CAAQ,EAC7C,CACA,MAAMA,EAAUiH,EAAU,CACtB,KAAK,UAAU7G,GAAWJ,CAAQ,GAAKiH,CAC3C,CACA,MAAMjH,EAAU,CACZ,IAAMuQ,EAAMnQ,GAAWJ,CAAQ,EACzB6L,EAAQ,KAAK,KAAK,QAAQ0E,CAAG,EAC/B1E,EAAQ,IACR,KAAK,KAAK,OAAOA,EAAO,CAAC,EAC7B,KAAK,KAAK,QAAQ0E,CAAG,EACrB,KAAK,KAAK,CACd,CACA,MAAO,CACH,QAAWA,KAAO,KAAK,KAAK,OAAO,KAAK,IAAI,EACxC,OAAO,KAAK,UAAUA,EAE9B,CACJ,EAEMC,GAAN,cAAuB9I,EAAK,CACxB,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,cAAgB,IAAI2I,GAAc,EAAE,EACzC,KAAK,qBAAuB,IAAI,IAAI,SAAS,IAAI,EACjD,KAAK,cAAgB,EACzB,CACA,WAAWpJ,EAAUa,EAAY,GAAO4B,EAAa,GAAMgE,EAAO,CAC9D,IAAM7F,EAAW,IAAIkI,GAAa,KAAK,SAAU9I,EAAU8I,GAAa,cAAejI,EAAW4B,CAAU,EAC5G,OAAK7B,EAAS,aAIoC6F,GAAM,cAAc,EAHlE,KAAK,cAAgB,GAKlB,KAAK,OAAO7F,CAAQ,CAC/B,CACA,YAAYZ,EAAUyG,EAAO,CACqBA,GAAM,cAAc,EAClE,IAAM7F,EAAW,IAAI8H,GAAc,KAAK,SAAU1I,EAAU0I,GAAc,cAAe,EAAK,EAC9F,OAAO,KAAK,OAAO9H,CAAQ,CAC/B,CACA,oBAAqB,CACjB,KAAK,cAAc,MAAM,CAC7B,CACA,MAAM,cAAcZ,EAAW,KAAK,SAAU,CAC1C,GAAIA,EAAS,YAAa,CACtB,KAAK,SAAS,sBAAsB,EACpC,GAAM,CAAE,qBAAsBjH,CAAS,EAAI,KAC3C,MAAM4B,GAAkB,EACxB,IAAM6O,EAAiBxJ,EAAS,MAAM,EACtC,YAAK,cAAc,IAAIjH,EAAUyQ,CAAc,EACxCA,CACX,CACJ,CACA,6BAA6BzQ,EAAU,CACnC,OAAO,KAAK,cAAc,IAAIA,CAAQ,CAC1C,CACA,IAAI,UAAW,CACX,OAAOuL,GAAa,YAAY,KAAK,OAAO,CAChD,CACJ,EAEMmF,GAAN,KAAgB,CACZ,YAAYzM,EAAU,CAClB,KAAK,SAAW,wBAChB,KAAK,SAAWA,CACpB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,SAAS,UAAU,KAAK,aACxC,CACA,OAAQ,CACJ,GAAI,SAAS,aAAe,UACxB,OAAO,SAAS,iBAAiB,mBAAoB,IAAM,CACvD,KAAK,0BAA0B,SAAS,IAAI,CAChD,CAAC,EAGD,KAAK,0BAA0B,SAAS,IAAI,CAEpD,CACA,0BAA0B3F,EAAS,CAC/B,QAAWiK,KAAQjK,EAAQ,iBAAiB,KAAK,QAAQ,EACrD,KAAK,WAAWiK,CAAI,CAE5B,CACA,MAAM,WAAWA,EAAM,CACnB,IAAMvI,EAAW,IAAI,IAAIuI,EAAK,IAAI,EAClC,GAAI,MAAK,cAAc,IAAIvI,CAAQ,EAGnC,GAAI,CAEA,IAAM2Q,EAAe,MADJ,MAAM,MAAM3Q,EAAS,SAAS,EAAG,CAAE,QAAS,CAAE,eAAgB,OAAQ,OAAQ,WAAY,CAAE,CAAC,GAC1E,KAAK,EACnCiH,EAAWsE,GAAa,eAAeoF,CAAY,EACzD,KAAK,cAAc,IAAI3Q,EAAUiH,CAAQ,CAC7C,MACA,CACA,CACJ,CACJ,EAEM2J,GAAN,KAAc,CACV,aAAc,CACV,KAAK,UAAY,IAAIrC,GAAU,IAAI,EACnC,KAAK,QAAU,IAAIL,GAAQ,IAAI,EAC/B,KAAK,UAAY,IAAIwC,GAAU,IAAI,EACnC,KAAK,KAAO,IAAIF,GAAS,KAAM,SAAS,eAAe,EACvD,KAAK,QAAU,IAAIhD,GAAe,IAAI,EACtC,KAAK,aAAe,IAAIuB,GAAa,IAAI,EACzC,KAAK,cAAgB,IAAIlB,GACzB,KAAK,kBAAoB,IAAIvF,GAAkB,KAAM,MAAM,EAC3D,KAAK,mBAAqB,IAAIhB,GAAmB,KAAM,QAAQ,EAC/D,KAAK,eAAiB,IAAI2H,GAAe,IAAI,EAC7C,KAAK,eAAiB,IAAIO,GAAe,IAAI,EAC7C,KAAK,sBAAwB,IAAI/G,GAAsB,KAAM,SAAS,eAAe,EACrF,KAAK,gBAAkB,IAAIqF,GAAgB,KAAM,SAAS,eAAe,EACzE,KAAK,sBAAwB,IAAIqB,GACjC,KAAK,MAAQ,GACb,KAAK,QAAU,GACf,KAAK,iBAAmB,IACxB,KAAK,QAAU,GACf,KAAK,SAAW,IACpB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,aAAa,MAAM,EACxB,KAAK,cAAc,MAAM,EACzB,KAAK,sBAAsB,MAAM,EACjC,KAAK,kBAAkB,MAAM,EAC7B,KAAK,mBAAmB,MAAM,EAC9B,KAAK,eAAe,MAAM,EAC1B,KAAK,eAAe,MAAM,EAC1B,KAAK,gBAAgB,MAAM,EAC3B,KAAK,QAAQ,MAAM,EACnB,KAAK,UAAU,MAAM,EACrB,KAAK,QAAU,GACf,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,KAAK,QAAU,EACnB,CACA,MAAO,CACC,KAAK,UACL,KAAK,aAAa,KAAK,EACvB,KAAK,cAAc,KAAK,EACxB,KAAK,sBAAsB,KAAK,EAChC,KAAK,kBAAkB,KAAK,EAC5B,KAAK,mBAAmB,KAAK,EAC7B,KAAK,eAAe,KAAK,EACzB,KAAK,eAAe,KAAK,EACzB,KAAK,gBAAgB,KAAK,EAC1B,KAAK,QAAQ,KAAK,EAClB,KAAK,QAAU,GAEvB,CACA,gBAAgB0B,EAAS,CACrB,KAAK,QAAUA,CACnB,CACA,MAAM7Q,EAAUiI,EAAU,CAAC,EAAG,CAC1B,IAAMgC,EAAehC,EAAQ,MAAQ,SAAS,eAAeA,EAAQ,KAAK,EAAI,KAC1EgC,aAAwBtL,IACxBsL,EAAa,IAAMjK,EAAS,SAAS,EACrCiK,EAAa,QAGb,KAAK,UAAU,aAAahL,GAAUe,CAAQ,EAAGiI,CAAO,CAEhE,CACA,oBAAoB6D,EAAQ,CACxB,KAAK,eAAe,oBAAoBA,CAAM,CAClD,CACA,uBAAuBA,EAAQ,CAC3B,KAAK,eAAe,uBAAuBA,CAAM,CACrD,CACA,oBAAoB7N,EAAS,CACzB,KAAK,sBAAsB,OAAO2G,GAAc,KAAK3G,CAAO,CAAC,CACjE,CACA,YAAa,CACT,KAAK,KAAK,mBAAmB,CACjC,CACA,oBAAoB6S,EAAO,CACvB,KAAK,iBAAmBA,CAC5B,CACA,YAAYC,EAAM,CACd,KAAK,SAAWA,CACpB,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,QACxB,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,QAAQ,qBACxB,CACA,iDAAiD/Q,EAAUuM,EAAuB,CAC1E,KAAK,QACL,KAAK,UAAU,WAAWvM,EAAUuM,EAAuB,CACvD,OAAQ,UACR,eAAgB,EACpB,CAAC,EAGD,KAAK,QAAQ,gBAAgB,CACzB,OAAQ,gBACZ,CAAC,CAET,CACA,sBAAsB2C,EAAU,CAC5B,KAAK,QAAQ,sBAAsB,CAAE,eAAgBA,CAAS,CAAC,CACnE,CACA,6BAA6B3G,EAAMvI,EAAU,CACzC,OAAO,KAAK,qBAAqBuI,CAAI,GAAKxI,GAAoBC,EAAU,KAAK,SAAS,YAAY,CACtG,CACA,6BAA8B,CAAE,CAChC,yBAAyBuI,EAAMvI,EAAUvB,EAAO,CAC5C,OAAQ,KAAK,qBAAqB8J,CAAI,GAClCxI,GAAoBC,EAAU,KAAK,SAAS,YAAY,GACxD,KAAK,yCAAyCuI,EAAMvI,EAAUvB,CAAK,CAC3E,CACA,uBAAuB8J,EAAMvI,EAAU,CACnC,IAAMT,EAAS,KAAK,iBAAiBgJ,CAAI,EACnCuE,EAAwBvE,EAAK,aAAa,mBAAmB,EACnE,KAAK,MAAMvI,EAAS,KAAM,CAAE,OAAAT,EAAQ,sBAAAuN,CAAsB,CAAC,CAC/D,CACA,iCAAiC9M,EAAUT,EAAQ,CAC/C,OAAO,KAAK,6BAA6BS,EAAUT,CAAM,GAAK,KAAK,kCAAkCS,CAAQ,CACjH,CACA,wBAAwBA,EAAUiI,EAAS,CACvC+I,GAAkChR,CAAQ,EAC1C,KAAK,QAAQ,wBAAwBA,EAAUiI,CAAO,CAC1D,CACA,aAAayF,EAAO,CACXA,EAAM,uBACP1K,GAAW,SAAS,eAAe,EAEvCgO,GAAkCtD,EAAM,QAAQ,EAC3CA,EAAM,QACP,KAAK,uCAAuCA,EAAM,SAAUA,EAAM,MAAM,CAEhF,CACA,eAAeA,EAAO,CAClBzK,GAAe,SAAS,eAAe,EACvC,KAAK,+BAA+ByK,EAAM,iBAAiB,CAAC,CAChE,CACA,6BAA6B1N,EAAUT,EAAQ,CAC3C,OAAO,KAAK,UAAU,6BAA6BS,EAAUT,CAAM,CACvE,CACA,gCAAgCqP,EAAQC,EAAQ,CAC5C,KAAK,+CAA+CD,EAAQC,CAAM,CACtE,CACA,eAAe/Q,EAAMF,EAAW,CAC5B,IAAM2B,EAASD,GAAUxB,EAAMF,CAAS,EACxC,OAAQ,KAAK,wBAAwBE,EAAMF,CAAS,GAChDmC,GAAoBd,GAAUM,CAAM,EAAG,KAAK,SAAS,YAAY,CACzE,CACA,cAAczB,EAAMF,EAAW,CAC3B,KAAK,UAAU,WAAWE,EAAMF,CAAS,CAC7C,CACA,uBAAwB,CACpB,KAAK,KAAK,qBAAuB,KAAK,SACtC,KAAK,+BAA+B,CACxC,CACA,YAAa,CACT,KAAK,QAAQ,iCAAiC,CAClD,CACA,gBAAiB,CACb,KAAK,QAAQ,qCAAqC,CACtD,CACA,0BAA0BK,EAAS,CAC/B,KAAK,oBAAoBA,CAAO,CACpC,CACA,uBAAwB,CACpB,IAAIa,EACG,GAAAA,EAAK,KAAK,UAAU,gBAAkB,MAAQA,IAAO,SAAkBA,EAAG,QAC7E,KAAK,uCAAuC,CAEpD,CACA,sBAAsB,CAAE,QAAAR,CAAQ,EAAG2J,EAAS,CACxC,IAAMxJ,EAAQ,KAAK,8BAA8BH,EAAS2J,CAAO,EAC3D,CAAE,iBAAAgJ,EAAkB,OAAQ,CAAE,OAAAC,CAAO,CAAG,EAAIzS,EAClD,OAAI,KAAK,KAAK,UAAYyS,IACtB,KAAK,KAAK,SAAS,cAAgBA,GAEhC,CAACD,CACZ,CACA,qBAAqBE,EAAWC,EAAY,CACxC,KAAK,KAAK,qBAAuB,KAAK,QAAQ,SAC9C,KAAK,6BAA6B,CACtC,CACA,0BAA0B9S,EAAS,CAC/B,KAAK,UAAU,0BAA0BA,CAAO,CACpD,CACA,gBAAgB4J,EAAQ,CACpB,KAAK,QAAQ,gBAAgBA,CAAM,CACvC,CACA,YAAY8F,EAAO,CACf,KAAK,gCAAgCA,CAAK,CAC9C,CACA,cAAc1J,EAAe0J,EAAO,CAChC,KAAK,kCAAkC1J,EAAe0J,CAAK,CAC/D,CACA,yCAAyCzF,EAAMvI,EAAUqR,EAAI,CAEzD,MAAO,CADO,KAAK,6CAA6C9I,EAAMvI,EAAUqR,CAAE,EACpE,gBAClB,CACA,kCAAkCrR,EAAU,CAExC,MAAO,CADO,KAAK,wCAAwCA,CAAQ,EACrD,gBAClB,CACA,6CAA6CuI,EAAMvI,EAAUvB,EAAO,CAChE,OAAO6C,GAAS,cAAe,CAC3B,OAAQiH,EACR,OAAQ,CAAE,IAAKvI,EAAS,KAAM,cAAevB,CAAM,EACnD,WAAY,EAChB,CAAC,CACL,CACA,wCAAwCuB,EAAU,CAC9C,OAAOsB,GAAS,qBAAsB,CAClC,OAAQ,CAAE,IAAKtB,EAAS,IAAK,EAC7B,WAAY,EAChB,CAAC,CACL,CACA,uCAAuCA,EAAUT,EAAQ,CACrD,OAAO+B,GAAS,cAAe,CAAE,OAAQ,CAAE,IAAKtB,EAAS,KAAM,OAAAT,CAAO,CAAE,CAAC,CAC7E,CACA,wCAAyC,CACrC,OAAO+B,GAAS,oBAAoB,CACxC,CACA,8BAA8BgQ,EAASrJ,EAAS,CAC5C,OAAO3G,GAAS,sBAAuB,CACnC,OAAQ,OAAO,OAAO,CAAE,QAAAgQ,CAAQ,EAAGrJ,CAAO,EAC1C,WAAY,EAChB,CAAC,CACL,CACA,8BAA+B,CAC3B,OAAO3G,GAAS,cAAc,CAClC,CACA,+BAA+BiQ,EAAS,CAAC,EAAG,CACxC,OAAOjQ,GAAS,aAAc,CAC1B,OAAQ,CAAE,IAAK,KAAK,SAAS,KAAM,OAAAiQ,CAAO,CAC9C,CAAC,CACL,CACA,+CAA+C3C,EAAQC,EAAQ,CAC3D,cAAc,IAAI,gBAAgB,aAAc,CAC5C,OAAQD,EAAO,SAAS,EACxB,OAAQC,EAAO,SAAS,CAC5B,CAAC,CAAC,CACN,CACA,gCAAgCb,EAAO,CACnC,OAAO1M,GAAS,mBAAoB,CAAE,OAAQ0M,CAAM,CAAC,CACzD,CACA,kCAAkC1J,EAAe0J,EAAO,CACpD,OAAO1M,GAAS,qBAAsB,CAClC,OAAQ,CAAE,cAAAgD,CAAc,EACxB,OAAQ0J,EACR,WAAY,EAChB,CAAC,CACL,CACA,wBAAwBlQ,EAAMF,EAAW,CACrC,GAAI,KAAK,UAAY,MACjB,MAAO,GAEN,CACD,IAAM4T,EAAyB5T,EAAY,KAAK,qBAAqBA,CAAS,EAAI,GAClF,OAAI,KAAK,UAAY,QACV4T,GAA0B1T,EAAK,QAAQ,qBAAqB,GAAK,KAGjE0T,GAA0B,KAAK,qBAAqB1T,CAAI,CAEvE,CACJ,CACA,qBAAqBQ,EAAS,CAC1B,IAAMmT,EAAY9N,GAAuBrF,EAAS,cAAc,EAC1DoT,EAAc/N,GAAuBrF,EAAS,aAAa,EACjE,OAAI,KAAK,OAASoT,EACVD,EACOA,EAAU,aAAa,YAAY,GAAK,QAGxC,GAIPA,EACOA,EAAU,aAAa,YAAY,GAAK,OAGxC,EAGnB,CACA,iBAAiBlJ,EAAM,CACnB,OAAOhF,GAAegF,CAAI,GAAK,SACnC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,KAAK,QACrB,CACJ,EACA,SAASyI,GAAkC5R,EAAK,CAC5C,OAAO,iBAAiBA,EAAKuS,EAAqC,CACtE,CACA,IAAMA,GAAwC,CAC1C,YAAa,CACT,KAAM,CACF,OAAO,KAAK,SAAS,CACzB,CACJ,CACJ,EAEMC,GAAN,KAAY,CACR,YAAYnE,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,OAAQ,CACJ,KAAK,QAAQ,WAAW,CAC5B,CACA,mBAAoB,CAChB,KAAK,gBAAgB,EAAE,CAC3B,CACA,qBAAsB,CAClB,KAAK,gBAAgB,UAAU,CACnC,CACA,uBAAwB,CACpB,KAAK,gBAAgB,YAAY,CACrC,CACA,gBAAgB7O,EAAO,CACnB6E,GAAe,sBAAuB7E,CAAK,CAC/C,CACJ,EAEMiT,GAAgB,CAClB,OAAQ,CACJ,KAAK,eAAe,QAASC,GAAM,CAAE,IAAIhT,EAAI,OAAQA,EAAKgT,EAAE,iBAAmB,MAAQhT,IAAO,OAAS,OAASA,EAAG,aAAa,KAAK,gBAAiBgT,EAAE,WAAW,CAAG,CAAC,CAC3K,EACA,QAAS,CACL,KAAK,8BAA8B,EACnC,KAAK,eAAe,QAASA,GAAMA,EAAE,OAAO,KAAK,eAAe,CAAC,CACrE,EACA,QAAS,CACL,KAAK,eAAe,QAASA,GAAM,CAAE,IAAIhT,EAAI,OAAQA,EAAKgT,EAAE,iBAAmB,MAAQhT,IAAO,OAAS,OAASA,EAAG,aAAa,KAAK,gBAAiBgT,CAAC,CAAG,CAAC,CAC/J,EACA,SAAU,CACN,KAAK,8BAA8B,EACnC,KAAK,eAAe,QAASA,GAAMA,EAAE,QAAQ,KAAK,eAAe,CAAC,CACtE,EACA,QAAS,CACL,KAAK,eAAe,QAASA,GAAMA,EAAE,OAAO,CAAC,CACjD,EACA,SAAU,CACN,KAAK,eAAe,QAASA,GAAMA,EAAE,YAAY,KAAK,eAAe,CAAC,CAC1E,EACA,QAAS,CACL,KAAK,eAAe,QAASC,GAAkB,CAC3CA,EAAc,UAAY,GAC1BA,EAAc,OAAO,KAAK,eAAe,CAC7C,CAAC,CACL,CACJ,EAEMtE,EAAU,IAAImD,GACdoB,GAAQ,IAAIJ,GAAMnE,CAAO,EACzB,CAAE,UAAWwE,EAAY,EAAIxE,EACnC,SAASyE,IAAQ,CACbzE,EAAQ,MAAM,CAClB,CACA,SAAS0E,GAAgBtB,EAAS,CAC9BpD,EAAQ,gBAAgBoD,CAAO,CACnC,CACA,SAASnD,GAAM1N,EAAUiI,EAAS,CAC9BwF,EAAQ,MAAMzN,EAAUiI,CAAO,CACnC,CACA,SAASmK,GAAoBtG,EAAQ,CACjC2B,EAAQ,oBAAoB3B,CAAM,CACtC,CACA,SAASuG,GAAuBvG,EAAQ,CACpC2B,EAAQ,uBAAuB3B,CAAM,CACzC,CACA,SAASwG,GAAoBrU,EAAS,CAClCwP,EAAQ,oBAAoBxP,CAAO,CACvC,CACA,SAASsU,IAAa,CAClB,QAAQ,KAAK,yJAAyJ,EACtK9E,EAAQ,WAAW,CACvB,CACA,SAAS+E,GAAoB1B,EAAO,CAChCrD,EAAQ,oBAAoBqD,CAAK,CACrC,CACA,SAAS2B,GAAiBC,EAAe,CACrCrN,GAAe,cAAgBqN,CACnC,CACA,SAASC,GAAY5B,EAAM,CACvBtD,EAAQ,YAAYsD,CAAI,CAC5B,CAEA,IAAI6B,GAAqB,OAAO,OAAO,CACnC,UAAW,KACX,UAAWX,GACX,QAASxE,EACT,MAAOuE,GACP,aAAcjC,GACd,aAAcxE,GACd,cAAe1B,GACf,MAAOqI,GACP,gBAAiBC,GACjB,MAAOzE,GACP,oBAAqB0E,GACrB,uBAAwBC,GACxB,oBAAqBC,GACrB,WAAYC,GACZ,oBAAqBC,GACrB,iBAAkBC,GAClB,YAAaE,GACb,cAAed,EACnB,CAAC,EAEKgB,GAAN,cAAqC,KAAM,CAC3C,EAEMC,GAAN,KAAsB,CAClB,YAAYxU,EAAS,CACjB,KAAK,oBAAuByU,GAAmB,CAAE,EACjD,KAAK,oBAAsB,KAC3B,KAAK,oBAAsB,IAAM,CAAE,EACnC,KAAK,UAAY,GACjB,KAAK,cAAgB,GACrB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,OAAS,KACd,KAAK,oBAAsB,CAAC,CAAE,QAAAzU,CAAQ,IAAM,CACxC,IAAM0P,EAAQ1P,EAAQ,cAAc,IAAM,KAAK,QAAQ,EAAE,EACrD0P,GAAS,KAAK,sBACdA,EAAM,gBAAgB,GAAG,KAAK,qBAAqB,QAAQ,EAE/D,OAAO,KAAK,oBAChB,EACA,KAAK,QAAU1P,EACf,KAAK,KAAO,IAAI6J,GAAU,KAAM,KAAK,OAAO,EAC5C,KAAK,mBAAqB,IAAI1D,GAAmB,KAAM,KAAK,OAAO,EACnE,KAAK,sBAAwB,IAAIgE,GAAsB,KAAM,KAAK,OAAO,EACzE,KAAK,gBAAkB,IAAIL,GAAgB,KAAM,KAAK,OAAO,EAC7D,KAAK,sBAAwB1F,GAAK,EAClC,KAAK,mBAAqB,IAAI4E,GAAmB,KAAM,KAAK,OAAO,CACvE,CACA,SAAU,CACD,KAAK,YACN,KAAK,UAAY,GACb,KAAK,cAAgB5I,GAAkB,KACvC,KAAK,mBAAmB,MAAM,EAG9B,KAAK,cAAc,EAEvB,KAAK,sBAAsB,MAAM,EACjC,KAAK,gBAAgB,MAAM,EAC3B,KAAK,mBAAmB,MAAM,EAEtC,CACA,YAAa,CACL,KAAK,YACL,KAAK,UAAY,GACjB,KAAK,mBAAmB,KAAK,EAC7B,KAAK,sBAAsB,KAAK,EAChC,KAAK,gBAAgB,KAAK,EAC1B,KAAK,mBAAmB,KAAK,EAErC,CACA,iBAAkB,CACV,KAAK,cAAgBA,GAAkB,OACvC,KAAK,cAAc,CAE3B,CACA,kBAAmB,CACX,KAAK,oBAAoB,KAAK,IAE9B,KAAK,QAAQ,cACb,KAAK,SAAW,KAEhB,KAAK,cAAgBA,GAAkB,OAAS,KAAK,gBACrD,KAAK,cAAc,EAE3B,CACA,mBAAoB,CAChB,GAAM,CAAE,IAAAsU,CAAI,EAAI,KAAK,QACrB,YAAK,2BAA2B,WAAY,IAAM,CAC9C,KAAK,QAAQ,gBAAgB,UAAU,CAC3C,CAAC,EACD,KAAK,QAAQ,IAAM,KACnB,KAAK,QAAQ,IAAMA,EACZ,KAAK,QAAQ,MACxB,CACA,iBAAkB,CACV,KAAK,oBAAoB,UAAU,GAEvC,KAAK,cAAc,CACvB,CACA,qBAAsB,CACd,KAAK,cAAgBtU,GAAkB,KACvC,KAAK,mBAAmB,MAAM,GAG9B,KAAK,mBAAmB,KAAK,EAC7B,KAAK,cAAc,EAE3B,CACA,MAAM,eAAgB,CACd,KAAK,SAAW,KAAK,UAAY,CAAC,KAAK,UAAY,KAAK,YACxD,KAAK,QAAQ,OAAS,KAAK,MAAMO,GAAU,KAAK,SAAS,CAAC,EAC1D,KAAK,mBAAmB,KAAK,EAC7B,MAAM,KAAK,QAAQ,OACnB,KAAK,cAAgB,GAE7B,CACA,MAAM,aAAaqF,EAAe,EAC1BA,EAAc,YAAeA,EAAc,WAAaA,EAAc,UACtE,KAAK,UAAYA,EAAc,SAAS,KAE5C,GAAI,CACA,IAAMlD,EAAO,MAAMkD,EAAc,aACjC,GAAIlD,EAAM,CACN,IAAM6R,EAAWnR,GAAkBV,CAAI,EAClBmK,GAAa,aAAa0H,CAAQ,EACtC,YACb,MAAM,KAAK,kBAAkB3O,EAAe2O,CAAQ,EAGpD,MAAM,KAAK,+BAA+B3O,CAAa,CAE/D,CACJ,QACA,CACI,KAAK,oBAAsB,IAAM,CAAE,CACvC,CACJ,CACA,0BAA0BhG,EAAS,CAC/B,KAAK,kCAAkCA,EAASA,CAAO,EACvD,KAAK,cAAc,CACvB,CACA,6BAA6BiK,EAAM,CAC/B,OAAO,KAAK,0BAA0BA,CAAI,CAC9C,CACA,4BAA4BA,EAAMwF,EAAWjQ,EAAM,CAC/C,IAAMkQ,EAAQ,KAAK,iBAAiBzF,CAAI,EACpCyF,GACAlQ,EAAK,aAAa,mBAAoBkQ,EAAM,EAAE,CACtD,CACA,yBAAyB1P,EAASyP,EAAW1F,EAAQ,CACjD,OAAO,KAAK,0BAA0B/J,CAAO,CACjD,CACA,qBAAqBA,EAAS0B,EAAU,CACpC,KAAK,cAAc1B,EAAS0B,CAAQ,CACxC,CACA,eAAe1B,EAASV,EAAW,CAC/B,OAAOU,EAAQ,QAAQ,aAAa,GAAK,KAAK,SAAW,KAAK,0BAA0BA,EAASV,CAAS,CAC9G,CACA,cAAcU,EAASV,EAAW,CAC1B,KAAK,gBACL,KAAK,eAAe,KAAK,EAE7B,KAAK,eAAiB,IAAIyH,GAAe,KAAM/G,EAASV,CAAS,EACjE,GAAM,CAAE,aAAAsV,CAAa,EAAI,KAAK,eAC9B,KAAK,eAAeA,CAAY,EAChC,KAAK,eAAe,MAAM,CAC9B,CACA,eAAehN,EAAS,CACpB,IAAIpH,EACJoH,EAAQ,QAAQ,eAAiB,KAAK,GACjC,GAAApH,EAAK,KAAK,4BAA8B,MAAQA,IAAO,SAAkBA,EAAG,aAAa,mBAAmB,GAC7GoH,EAAQ,mBAAmBtB,GAAc,WAAW,CAE5D,CACA,eAAeyB,EAAU,CACrBrD,GAAW,KAAK,OAAO,CAC3B,CACA,iCAAiCqD,EAAU8G,EAAW,CAClD,KAAK,oBAAoB,CAC7B,CACA,MAAM,6BAA6BjH,EAASvF,EAAU,CAClD,MAAM,KAAK,aAAaA,CAAQ,EAChC,KAAK,oBAAoB,CAC7B,CACA,MAAM,0BAA0BuF,EAASvF,EAAU,CAC/C,MAAM,KAAK,aAAaA,CAAQ,EAChC,KAAK,oBAAoB,CAC7B,CACA,eAAeuF,EAAS7B,EAAO,CAC3B,QAAQ,MAAMA,CAAK,EACnB,KAAK,oBAAoB,CAC7B,CACA,gBAAgBgC,EAAU,CACtBpD,GAAe,KAAK,OAAO,CAC/B,CACA,sBAAsB,CAAE,YAAAuC,CAAY,EAAG,CACnCxC,GAAWwC,EAAa,KAAK,iBAAiBA,CAAW,CAAC,CAC9D,CACA,oCAAoCgJ,EAAgB7N,EAAU,CAC1D,IAAMqN,EAAQ,KAAK,iBAAiBQ,EAAe,YAAaA,EAAe,SAAS,EACxFR,EAAM,SAAS,kCAAkCA,EAAOQ,EAAe,YAAaA,EAAe,SAAS,EAC5GR,EAAM,SAAS,aAAarN,CAAQ,EAC/B6N,EAAe,QAChBf,EAAQ,WAAW,CAE3B,CACA,iCAAiCe,EAAgBlK,EAAe,CAC5D,KAAK,QAAQ,SAAS,aAAaA,CAAa,EAChDmJ,EAAQ,WAAW,CACvB,CACA,sBAAsBe,EAAgBnK,EAAO,CACzC,QAAQ,MAAMA,CAAK,CACvB,CACA,uBAAuB,CAAE,YAAAmB,CAAY,EAAG,CACpCvC,GAAeuC,EAAa,KAAK,iBAAiBA,CAAW,CAAC,CAClE,CACA,sBAAsB,CAAE,QAAS2N,CAAS,EAAGlL,EAAS,CAClD,IAAMxJ,EAAQ6C,GAAS,4BAA6B,CAChD,OAAQ,KAAK,QACb,OAAQ,OAAO,OAAO,CAAE,SAAA6R,CAAS,EAAGlL,CAAO,EAC3C,WAAY,EAChB,CAAC,EACK,CAAE,iBAAAgJ,EAAkB,OAAQ,CAAE,OAAAC,CAAO,CAAG,EAAIzS,EAClD,OAAI,KAAK,KAAK,UAAYyS,IACtB,KAAK,KAAK,SAAS,cAAgBA,GAEhC,CAACD,CACZ,CACA,qBAAqBE,EAAWC,EAAY,CAAE,CAC9C,0BAA0B9S,EAAS,CAC/BmP,EAAQ,0BAA0BnP,CAAO,CAC7C,CACA,iBAAkB,CAAE,CACpB,gBAAgBwL,EAAgBsJ,EAAa,CACzC,KAAK,qBAAuBtJ,EAAe,UAAU,EAAI,CAC7D,CACA,MAAM,kBAAkBxF,EAAe2O,EAAU,CAC7C,IAAMI,EAAkB,MAAM,KAAK,2BAA2BJ,EAAS,IAAI,EAC3E,GAAII,EAAiB,CACjB,IAAMpM,EAAW,IAAIL,GAASyM,CAAe,EACvCxL,EAAW,IAAIgC,GAAc,KAAM,KAAK,KAAK,SAAU5C,EAAU4C,GAAc,cAAe,GAAO,EAAK,EAC5G,KAAK,KAAK,eACV,MAAM,KAAK,KAAK,cACpB,KAAK,cAAc,EACnB,MAAM,KAAK,KAAK,OAAOhC,CAAQ,EAC/B,KAAK,SAAW,GAChB4F,EAAQ,cAAcnJ,EAAe,KAAK,OAAO,EACjDmJ,EAAQ,YAAY,KAAK,OAAO,EAChC,KAAK,oBAAoBnJ,CAAa,CAC1C,MACS,KAAK,mCAAmCA,CAAa,GAC1D,KAAK,+BAA+BA,CAAa,CAEzD,CACA,MAAM,MAAMlF,EAAK,CACb,IAAIN,EACJ,IAAMoH,EAAU,IAAIlC,GAAa,KAAMH,GAAY,IAAKzE,EAAK,IAAI,gBAAmB,KAAK,OAAO,EAChG,OAACN,EAAK,KAAK,uBAAyB,MAAQA,IAAO,QAAkBA,EAAG,OAAO,EAC/E,KAAK,oBAAsBoH,EACpB,IAAI,QAASvE,GAAY,CAC5B,KAAK,oBAAsB,IAAM,CAC7B,KAAK,oBAAsB,IAAM,CAAE,EACnC,KAAK,oBAAsB,KAC3BA,EAAQ,CACZ,EACAuE,EAAQ,QAAQ,CACpB,CAAC,CACL,CACA,cAAc5H,EAASc,EAAKxB,EAAW,CACnC,IAAMoQ,EAAQ,KAAK,iBAAiB1P,EAASV,CAAS,EACtDoQ,EAAM,SAAS,kCAAkCA,EAAO1P,EAASV,CAAS,EAC1E,KAAK,6BAA6BU,EAAS,IAAM,CAC7C0P,EAAM,IAAM5O,CAChB,CAAC,CACL,CACA,kCAAkC4O,EAAO1P,EAASV,EAAW,CAEzD,GADA,KAAK,OAAS2F,GAAe3F,EAAWU,EAAS0P,CAAK,EAClD,KAAK,OAAQ,CACb,IAAMsF,EAAe/H,GAAa,YAAYyC,CAAK,EAAE,MAAM,EACrD,CAAE,oBAAArB,CAAoB,EAAIqB,EAAM,SACtCA,EAAM,SAAS,oBAAuB1J,GAAkB,CACpD,GAAI0J,EAAM,IAAK,CACX,GAAM,CAAE,WAAAhB,EAAY,WAAAI,CAAW,EAAI9I,EAC7B4I,EAAec,EAAM,cAAc,gBAAgB,UAEnD/F,EAAU,CACZ,SAFa,CAAE,WAAA+E,EAAY,WAAAI,EAAY,aAAAF,CAAa,EAGpD,oBAAAP,EACA,WAAY,GACZ,cAAe,GACf,sBAAuB,KAAK,sBAC5B,SAAU2G,CACd,EACI,KAAK,SACLrL,EAAQ,OAAS,KAAK,QAC1BwF,EAAQ,MAAMO,EAAM,IAAK/F,CAAO,CACpC,CACJ,CACJ,CACJ,CACA,eAAgB,CACZ,GAAI,KAAK,OAAQ,CACb,IAAMlE,EAASV,GAA0B,KAAK,MAAM,EACpDoK,EAAQ,QAAQ,OAAO1J,EAAQ9E,GAAU,KAAK,QAAQ,KAAO,EAAE,EAAG,KAAK,qBAAqB,CAChG,CACJ,CACA,MAAM,+BAA+BqF,EAAe,CAChD,QAAQ,KAAK,iBAAiBA,EAAc,qCAAqC,KAAK,QAAQ,kEAAkE,EAChK,MAAM,KAAK,cAAcA,EAAc,QAAQ,CACnD,CACA,mCAAmCA,EAAe,CAC9C,KAAK,QAAQ,aAAa,WAAY,EAAE,EACxC,IAAM3D,EAAW2D,EAAc,SACzBoJ,EAAQ,MAAOtO,EAAK6I,EAAU,CAAC,IAAM,CACnC7I,aAAe,SACf,KAAK,cAAcA,CAAG,EAGtBqO,EAAQ,MAAMrO,EAAK6I,CAAO,CAElC,EAMA,MAAO,CALO3G,GAAS,sBAAuB,CAC1C,OAAQ,KAAK,QACb,OAAQ,CAAE,SAAAX,EAAU,MAAA+M,CAAM,EAC1B,WAAY,EAChB,CAAC,EACa,gBAClB,CACA,+BAA+BpJ,EAAe,CAC1C,KAAK,KAAK,QAAQ,EAClB,KAAK,uBAAuBA,CAAa,CAC7C,CACA,uBAAuBA,EAAe,CAClC,IAAMrG,EAAU,iBAAiBqG,EAAc,6DAA6D,KAAK,QAAQ,qGACzH,MAAM,IAAIuO,GAAuB5U,CAAO,CAC5C,CACA,MAAM,cAAc0C,EAAU,CAC1B,IAAM4S,EAAU,IAAI7S,GAAcC,CAAQ,EACpCuM,EAAe,MAAMqG,EAAQ,aAC7B,CAAE,SAAAvT,EAAU,WAAAoN,EAAY,WAAAJ,CAAW,EAAIuG,EAC7C,OAAO9F,EAAQ,MAAMzN,EAAU,CAAE,SAAU,CAAE,WAAAoN,EAAY,WAAAJ,EAAY,aAAAE,CAAa,CAAE,CAAC,CACzF,CACA,iBAAiB5O,EAASV,EAAW,CACjC,IAAIkB,EACJ,IAAMiI,EAAKnE,GAAa,mBAAoBhF,EAAWU,CAAO,GAAK,KAAK,QAAQ,aAAa,QAAQ,EACrG,OAAQQ,EAAK0U,GAAoBzM,CAAE,KAAO,MAAQjI,IAAO,OAASA,EAAK,KAAK,OAChF,CACA,MAAM,2BAA2B2S,EAAW,CACxC,IAAInT,EACEyI,EAAK,IAAI,OAAO,KAAK,EAAE,EAC7B,GAAI,CAEA,GADAzI,EAAUmV,GAAgBhC,EAAU,cAAc,eAAe1K,GAAI,EAAG,KAAK,SAAS,EAClFzI,EACA,OAAOA,EAGX,GADAA,EAAUmV,GAAgBhC,EAAU,cAAc,6BAA6B1K,IAAK,EAAG,KAAK,SAAS,EACjGzI,EACA,aAAMA,EAAQ,OACP,MAAM,KAAK,2BAA2BA,CAAO,CAE5D,OACO+F,EAAP,CACI,eAAQ,MAAMA,CAAK,EACZ,IAAI1F,EACf,CACA,OAAO,IACX,CACA,sBAAsBb,EAAMF,EAAW,CACnC,IAAM2B,EAASD,GAAUxB,EAAMF,CAAS,EACxC,OAAOmC,GAAoBd,GAAUM,CAAM,EAAG,KAAK,YAAY,CACnE,CACA,0BAA0BjB,EAASV,EAAW,CAC1C,IAAMmJ,EAAKnE,GAAa,mBAAoBhF,EAAWU,CAAO,GAAK,KAAK,QAAQ,aAAa,QAAQ,EAIrG,GAHIA,aAAmB,iBAAmB,CAAC,KAAK,sBAAsBA,EAASV,CAAS,GAGpF,CAAC,KAAK,SAAWmJ,GAAM,OACvB,MAAO,GAEX,GAAIA,EAAI,CACJ,IAAMkD,EAAeuJ,GAAoBzM,CAAE,EAC3C,GAAIkD,EACA,MAAO,CAACA,EAAa,QAE7B,CAIA,MAHI,GAACwD,EAAQ,qBAAqBnP,CAAO,GAGrCV,GAAa,CAAC6P,EAAQ,qBAAqB7P,CAAS,EAI5D,CACA,IAAI,IAAK,CACL,OAAO,KAAK,QAAQ,EACxB,CACA,IAAI,SAAU,CACV,MAAO,CAAC,KAAK,QAAQ,QACzB,CACA,IAAI,WAAY,CACZ,GAAI,KAAK,QAAQ,IACb,OAAO,KAAK,QAAQ,GAE5B,CACA,IAAI,UAAU8V,EAAW,CACrB,KAAK,2BAA2B,MAAO,IAAM,CACzC,KAAK,QAAQ,IAAMA,GAAyD,IAChF,CAAC,CACL,CACA,IAAI,cAAe,CACf,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,iBAAmB,QAAa,KAAK,oBAAoB,IAAM,MAC/E,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,aAAa,UAAU,CAC/C,CACA,IAAI,SAAS9U,EAAO,CAChB,KAAK,2BAA2B,WAAY,IAAM,CAC1CA,EACA,KAAK,QAAQ,aAAa,WAAY,EAAE,EAGxC,KAAK,QAAQ,gBAAgB,UAAU,CAE/C,CAAC,CACL,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,UAAY,KAAK,SACzC,CACA,IAAI,cAAe,CACf,IAAIE,EACJ,IAAMmP,EAAO,KAAK,QAAQ,cAAc,cAAc,yBAAyB,EACzEhC,GAAQnN,EAAiDmP,GAAK,WAAa,MAAQnP,IAAO,OAASA,EAAK,IAC9G,OAAOG,GAAUgN,CAAI,CACzB,CACA,oBAAoBpJ,EAAe,CAC/B,OAAO,KAAK,kBAAkB,IAAIA,CAAa,CACnD,CACA,2BAA2BA,EAAemG,EAAU,CAChD,KAAK,kBAAkB,IAAInG,CAAa,EACxCmG,EAAS,EACT,KAAK,kBAAkB,OAAOnG,CAAa,CAC/C,CACA,6BAA6BvE,EAAS0K,EAAU,CAC5C,KAAK,yBAA2B1K,EAChC0K,EAAS,EACT,OAAO,KAAK,wBAChB,CACJ,EACA,SAASwK,GAAoBzM,EAAI,CAC7B,GAAIA,GAAM,KAAM,CACZ,IAAMzI,EAAU,SAAS,eAAeyI,CAAE,EAC1C,GAAIzI,aAAmBK,GACnB,OAAOL,CAEf,CACJ,CACA,SAASmV,GAAgBnV,EAASqV,EAAY,CAC1C,GAAIrV,EAAS,CACT,IAAM0U,EAAM1U,EAAQ,aAAa,KAAK,EACtC,GAAI0U,GAAO,MAAQW,GAAc,MAAQtT,GAAa2S,EAAKW,CAAU,EACjE,MAAM,IAAI,MAAM,6BAA6BrV,EAAQ,uDAAuD,EAKhH,GAHIA,EAAQ,gBAAkB,WAC1BA,EAAU,SAAS,WAAWA,EAAS,EAAI,GAE3CA,aAAmBK,GACnB,OAAAL,EAAQ,kBAAkB,EAC1BA,EAAQ,qBAAqB,EACtBA,CAEf,CACJ,CAEA,IAAMsV,GAAN,cAA4B,WAAY,CACpC,aAAa,cAAc7J,EAAY,CACnC,MAAMA,EAAW,cAAc,CACnC,CACA,MAAM,mBAAoB,CACtB,GAAI,CACA,MAAM,KAAK,OAAO,CACtB,OACO1F,EAAP,CACI,QAAQ,MAAMA,CAAK,CACvB,QACA,CACI,KAAK,WAAW,CACpB,CACJ,CACA,MAAM,QAAS,CACX,IAAIvF,EACJ,OAASA,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAASA,EAAM,KAAK,eAAiB,SAAY,CAClG,IAAML,EAAQ,KAAK,kBACf,KAAK,cAAcA,CAAK,IACxB,MAAMiD,GAAmB,EACzB,MAAMjD,EAAM,OAAO,OAAO,IAAI,EAEtC,GAAG,CACP,CACA,YAAa,CACT,GAAI,CACA,KAAK,OAAO,CAChB,MACA,CAAa,CACjB,CACA,+BAAgC,CAC5B,KAAK,kBAAkB,QAASoV,GAAMA,EAAE,OAAO,CAAC,CACpD,CACA,IAAI,mBAAoB,CACpB,IAAI/U,EACJ,IAAMgV,EAAmB,KAAK,eAAe,QAAShC,GAAM,CAAC,GAAGA,EAAE,QAAQ,CAAC,EAAE,OAAQ+B,GAAM,CAAC,CAACA,EAAE,EAAE,EAC3FE,EAAiB,CAAC,KAAMjV,EAAK,KAAK,mBAAqB,MAAQA,IAAO,OAAS,OAASA,EAAG,WAAa,CAAC,CAAE,EAAE,OAAQ+U,GAAM,CAAC,CAACA,EAAE,EAAE,EAAE,IAAKA,GAAMA,EAAE,EAAE,EACxJ,OAAOC,EAAiB,OAAQD,GAAME,EAAe,SAASF,EAAE,EAAE,CAAC,CACvE,CACA,IAAI,eAAgB,CAChB,GAAI,KAAK,OAAQ,CACb,IAAMG,EAAiBnC,GAAc,KAAK,QAC1C,GAAImC,EACA,OAAOA,EAEX,KAAK,MAAM,gBAAgB,CAC/B,CACA,KAAK,MAAM,6BAA6B,CAC5C,CACA,IAAI,gBAAiB,CACjB,GAAI,KAAK,OACL,OAAO,KAAK,mBAEX,GAAI,KAAK,QACV,OAAO,KAAK,sBAGZ,KAAK,MAAM,wCAAwC,CAE3D,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,gBAAgB,QAAQ,UAAU,EAAI,CACtD,CACA,IAAI,iBAAkB,CAClB,GAAI,KAAK,oBAAsB,KAAM,CACjC,IAAM3S,EAAW,KAAK,cAAc,cAAc,UAAU,EAC5D,YAAK,YAAYA,CAAQ,EAClBA,CACX,SACS,KAAK,6BAA6B,oBACvC,OAAO,KAAK,kBAEhB,KAAK,MAAM,kDAAkD,CACjE,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAa,QAAQ,CACrC,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAa,QAAQ,CACrC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,aAAa,SAAS,CACtC,CACA,MAAMpD,EAAS,CACX,MAAM,IAAI,MAAM,GAAG,KAAK,gBAAgBA,GAAS,CACrD,CACA,IAAI,aAAc,CACd,IAAIa,EAAIC,EACR,OAAQA,IAAOD,EAAK,KAAK,UAAU,MAAM,SAAS,KAAO,MAAQA,IAAO,OAASA,EAAK,CAAC,GAAG,MAAQ,MAAQC,IAAO,OAASA,EAAK,gBACnI,CACA,IAAI,mBAAoB,CACpB,OAAO,IAAI,YAAY,6BAA8B,CACjD,QAAS,GACT,WAAY,GACZ,OAAQ,CAAE,UAAW,KAAM,OAAQ6U,GAAc,aAAc,CACnE,CAAC,CACL,CACA,IAAI,oBAAqB,CACrB,IAAI9U,EACJ,IAAMR,GAAWQ,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,eAAe,KAAK,MAAM,EAC5G,OAAIR,IAAY,KACL,CAACA,CAAO,EAGR,CAAC,CAEhB,CACA,IAAI,uBAAwB,CACxB,IAAIQ,EACJ,IAAMgE,GAAYhE,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,iBAAiB,KAAK,OAAO,EAChH,OAAIgE,EAAS,SAAW,EACb,MAAM,UAAU,MAAM,KAAKA,CAAQ,EAGnC,CAAC,CAEhB,CACJ,EAEMmR,GAAN,cAAkC,WAAY,CAC1C,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,aAAe,IACxB,CACA,mBAAoB,CAChB,KAAK,aAAe,KAAK,IAAI,MAAM,WAAW,EAAI,IAAI,UAAU,KAAK,GAAG,EAAI,IAAI,YAAY,KAAK,GAAG,EACpG7B,GAAoB,KAAK,YAAY,CACzC,CACA,sBAAuB,CACf,KAAK,cACLC,GAAuB,KAAK,YAAY,CAEhD,CACA,IAAI,KAAM,CACN,OAAO,KAAK,aAAa,KAAK,GAAK,EACvC,CACJ,EAEA1T,GAAa,oBAAsBmU,GAC/B,eAAe,IAAI,aAAa,IAAM,QACtC,eAAe,OAAO,cAAenU,EAAY,EAEjD,eAAe,IAAI,cAAc,IAAM,QACvC,eAAe,OAAO,eAAgBiV,EAAa,EAEnD,eAAe,IAAI,qBAAqB,IAAM,QAC9C,eAAe,OAAO,sBAAuBK,EAAmB,GAGnE,IAAM,CACH,IAAI3V,EAAU,SAAS,cACvB,GAAI,EAACA,GAED,CAAAA,EAAQ,aAAa,6BAA6B,EAGtD,IADAA,EAAUA,EAAQ,cACXA,GAAS,CACZ,GAAIA,GAAW,SAAS,KACpB,OAAO,QAAQ,KAAKyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASvBzD,EAAQ,SAAS,EAElBA,EAAUA,EAAQ,aACtB,CACJ,GAAG,EAEH,OAAO,MAAQsU,GACfV,GAAM,EC93HN,IAAIgC,GAEJ,eAAsBC,IAAc,CAClC,OAAOD,IAAYE,GAAYC,GAAe,EAAE,KAAKD,EAAW,CAAC,CACnE,CAEO,SAASA,GAAYE,EAAa,CACvC,OAAOJ,GAAWI,CACpB,CAEA,eAAsBD,IAAiB,CACrC,GAAM,CAAE,eAAAA,CAAe,EAAI,KAAM,uCACjC,OAAOA,EAAe,CACxB,CAEA,eAAsBE,GAAYC,EAASC,EAAO,CAChD,GAAM,CAAE,cAAAC,CAAc,EAAI,MAAMP,GAAY,EAC5C,OAAOO,EAAc,OAAOF,EAASC,CAAK,CAC5C,CCCe,SAARE,GAAuBC,EAAK,CAE/B,MADI,CAACA,GAAO,OAAOA,GAAQ,UACvBA,aAAe,MAAQA,aAAe,OAAeA,EACrD,MAAM,QAAQA,CAAG,EAAUA,EAAI,IAAID,EAAI,EACpC,OAAO,KAAKC,CAAG,EAAE,OAAO,SAAUC,EAAKC,EAAK,CAC/C,IAAIC,EAAQD,EAAI,GAAG,YAAY,EAAIA,EAAI,MAAM,CAAC,EAAE,QAAQ,YAAa,SAAUE,EAAGC,EAAG,CACjF,MAAO,IAAMA,EAAE,YAAY,CAC/B,CAAC,EACD,OAAAJ,EAAIE,GAASJ,GAAKC,EAAIE,EAAI,EACnBD,CACX,EAAG,CAAC,CAAC,CACT,CC1BA,IAAMK,GAAN,cAA4C,WAAY,CACtD,MAAM,mBAAoB,CACxBC,GAAoB,IAAI,EACxB,KAAK,aAAe,MAAMC,GAAY,KAAK,QAAS,CAClD,SAAU,KAAK,qBAAqB,KAAK,IAAI,EAC7C,UAAW,KAAK,sBAAsB,KAAK,IAAI,EAC/C,aAAc,KAAK,yBAAyB,KAAK,IAAI,CACvD,CAAC,CACH,CAEA,sBAAuB,CACrBC,GAAuB,IAAI,EACvB,KAAK,cAAc,KAAK,aAAa,YAAY,CACvD,CAEA,qBAAqBC,EAAM,CACzB,IAAMC,EAAQ,IAAI,aAAa,UAAW,CAAE,KAAAD,CAAK,CAAC,EAClD,OAAO,KAAK,cAAcC,CAAK,CACjC,CAEA,uBAAwB,CACtB,KAAK,aAAa,YAAa,EAAE,CACnC,CAEA,0BAA2B,CACzB,KAAK,gBAAgB,WAAW,CAClC,CAEA,IAAI,SAAU,CACZ,IAAMC,EAAU,KAAK,aAAa,SAAS,EACrCC,EAAqB,KAAK,aAAa,oBAAoB,EACjE,MAAO,CAAE,QAAAD,EAAS,mBAAAC,EAAoB,GAAGC,GAAS,CAAE,GAAG,KAAK,OAAQ,CAAC,CAAE,CACzE,CACF,EAGI,eAAe,IAAI,2BAA2B,IAAM,QACtD,eAAe,OAAO,4BAA6BR,EAA6B,ECzC3E,SAASS,GAA4BC,EAAO,CACjD,GAAIA,EAAM,kBAAkB,gBAAiB,CAC3C,GAAM,CAAE,OAAQC,EAAM,OAAQ,CAAE,aAAAC,CAAa,CAAE,EAAIF,EAEnDC,EAAK,iBAAiB,qBAAsB,CAAC,CAAE,OAAQ,CAAE,eAAgB,CAAE,UAAAE,CAAU,CAAE,CAAE,IAAM,CAC7F,IAAMC,EAAOC,GAAWH,EAAa,IAAI,EAAIA,EAAa,KAAO,IAAI,gBAC/DI,EAASC,GAAqBJ,EAAWC,EAAMH,CAAI,EAEpD,OAAO,KAAKK,CAAM,IACjB,QAAQ,KAAKA,CAAM,EACrBF,EAAK,OAAO,SAAS,EAErBA,EAAK,IAAI,UAAWE,CAAM,EAG5BJ,EAAa,OAAS,OAE1B,EAAG,CAAE,KAAM,EAAK,CAAC,CACnB,CACF,CAEA,SAASK,GAAqBJ,EAAWC,EAAMH,EAAM,CACnD,IAAMO,EAAaC,GAAoBN,CAAS,EAC1CO,EAAiBN,EAAK,IAAI,SAAS,EACnCE,EAASL,EAAK,aAAa,QAAQ,GAAK,MAE9C,OAAI,OAAOO,GAAc,SAChBA,EACE,OAAOE,GAAkB,SAC3BA,EAEAJ,CAEX,CAEA,SAASG,GAAoBN,EAAW,CACtC,OAAIA,aAAqB,mBAAqBA,aAAqB,mBAC7DA,EAAU,aAAa,YAAY,EAC9BA,EAAU,WAKZ,IAEX,CAEA,SAASE,GAAWD,EAAM,CACxB,OAAOA,aAAgB,UAAYA,aAAgB,eACrD,CCvCA,iBAAiB,6BAA8BO,EAA2B,ECN1E,IAAMC,GAAN,KAAoB,CAChB,YAAYC,EAAaC,EAAWC,EAAc,CAC9C,KAAK,YAAcF,EACnB,KAAK,UAAYC,EACjB,KAAK,aAAeC,EACpB,KAAK,kBAAoB,IAAI,GACjC,CACA,SAAU,CACN,KAAK,YAAY,iBAAiB,KAAK,UAAW,KAAM,KAAK,YAAY,CAC7E,CACA,YAAa,CACT,KAAK,YAAY,oBAAoB,KAAK,UAAW,KAAM,KAAK,YAAY,CAChF,CACA,iBAAiBC,EAAS,CACtB,KAAK,kBAAkB,IAAIA,CAAO,CACtC,CACA,oBAAoBA,EAAS,CACzB,KAAK,kBAAkB,OAAOA,CAAO,CACzC,CACA,YAAYC,EAAO,CACf,IAAMC,EAAgBC,GAAYF,CAAK,EACvC,QAAWD,KAAW,KAAK,SAAU,CACjC,GAAIE,EAAc,4BACd,MAGAF,EAAQ,YAAYE,CAAa,CAEzC,CACJ,CACA,aAAc,CACV,OAAO,KAAK,kBAAkB,KAAO,CACzC,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,EAAE,KAAK,CAACE,EAAMC,IAAU,CAC5D,IAAMC,EAAYF,EAAK,MAAOG,EAAaF,EAAM,MACjD,OAAOC,EAAYC,EAAa,GAAKD,EAAYC,EAAa,EAAI,CACtE,CAAC,CACL,CACJ,EACA,SAASJ,GAAYF,EAAO,CACxB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,GAAM,CAAE,yBAAAO,CAAyB,EAAIP,EACrC,OAAO,OAAO,OAAOA,EAAO,CACxB,4BAA6B,GAC7B,0BAA2B,CACvB,KAAK,4BAA8B,GACnCO,EAAyB,KAAK,IAAI,CACtC,CACJ,CAAC,CACL,CACJ,CAEA,IAAMC,GAAN,KAAiB,CACb,YAAYC,EAAa,CACrB,KAAK,YAAcA,EACnB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,QAAU,EACnB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,eAAe,QAASC,GAAkBA,EAAc,QAAQ,CAAC,EAE9E,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,eAAe,QAASA,GAAkBA,EAAc,WAAW,CAAC,EAEjF,CACA,IAAI,gBAAiB,CACjB,OAAO,MAAM,KAAK,KAAK,kBAAkB,OAAO,CAAC,EAAE,OAAO,CAACC,EAAWC,IAAQD,EAAU,OAAO,MAAM,KAAKC,EAAI,OAAO,CAAC,CAAC,EAAG,CAAC,CAAC,CAChI,CACA,iBAAiBb,EAAS,CACtB,KAAK,6BAA6BA,CAAO,EAAE,iBAAiBA,CAAO,CACvE,CACA,oBAAoBA,EAASc,EAAsB,GAAO,CACtD,KAAK,6BAA6Bd,CAAO,EAAE,oBAAoBA,CAAO,EAClEc,GACA,KAAK,8BAA8Bd,CAAO,CAClD,CACA,YAAYe,EAAOC,EAASC,EAAS,CAAC,EAAG,CACrC,KAAK,YAAY,YAAYF,EAAO,SAASC,IAAWC,CAAM,CAClE,CACA,8BAA8BjB,EAAS,CACnC,IAAMW,EAAgB,KAAK,6BAA6BX,CAAO,EAC1DW,EAAc,YAAY,IAC3BA,EAAc,WAAW,EACzB,KAAK,6BAA6BX,CAAO,EAEjD,CACA,6BAA6BA,EAAS,CAClC,GAAM,CAAE,YAAAH,EAAa,UAAAC,EAAW,aAAAC,CAAa,EAAIC,EAC3CkB,EAAmB,KAAK,oCAAoCrB,CAAW,EACvEsB,EAAW,KAAK,SAASrB,EAAWC,CAAY,EACtDmB,EAAiB,OAAOC,CAAQ,EAC5BD,EAAiB,MAAQ,GACzB,KAAK,kBAAkB,OAAOrB,CAAW,CACjD,CACA,6BAA6BG,EAAS,CAClC,GAAM,CAAE,YAAAH,EAAa,UAAAC,EAAW,aAAAC,CAAa,EAAIC,EACjD,OAAO,KAAK,mBAAmBH,EAAaC,EAAWC,CAAY,CACvE,CACA,mBAAmBF,EAAaC,EAAWC,EAAc,CACrD,IAAMmB,EAAmB,KAAK,oCAAoCrB,CAAW,EACvEsB,EAAW,KAAK,SAASrB,EAAWC,CAAY,EAClDY,EAAgBO,EAAiB,IAAIC,CAAQ,EACjD,OAAKR,IACDA,EAAgB,KAAK,oBAAoBd,EAAaC,EAAWC,CAAY,EAC7EmB,EAAiB,IAAIC,EAAUR,CAAa,GAEzCA,CACX,CACA,oBAAoBd,EAAaC,EAAWC,EAAc,CACtD,IAAMY,EAAgB,IAAIf,GAAcC,EAAaC,EAAWC,CAAY,EAC5E,OAAI,KAAK,SACLY,EAAc,QAAQ,EAEnBA,CACX,CACA,oCAAoCd,EAAa,CAC7C,IAAIqB,EAAmB,KAAK,kBAAkB,IAAIrB,CAAW,EAC7D,OAAKqB,IACDA,EAAmB,IAAI,IACvB,KAAK,kBAAkB,IAAIrB,EAAaqB,CAAgB,GAErDA,CACX,CACA,SAASpB,EAAWC,EAAc,CAC9B,IAAMqB,EAAQ,CAACtB,CAAS,EACxB,cAAO,KAAKC,CAAY,EACnB,KAAK,EACL,QAASsB,GAAQ,CAClBD,EAAM,KAAK,GAAGrB,EAAasB,GAAO,GAAK,MAAMA,GAAK,CACtD,CAAC,EACMD,EAAM,KAAK,GAAG,CACzB,CACJ,EAEME,GAAiC,CACnC,KAAK,CAAE,MAAArB,EAAO,MAAAsB,CAAM,EAAG,CACnB,OAAIA,GACAtB,EAAM,gBAAgB,EACnB,EACX,EACA,QAAQ,CAAE,MAAAA,EAAO,MAAAsB,CAAM,EAAG,CACtB,OAAIA,GACAtB,EAAM,eAAe,EAClB,EACX,EACA,KAAK,CAAE,MAAAA,EAAO,MAAAsB,EAAO,QAAAC,CAAQ,EAAG,CAC5B,OAAID,EACOC,IAAYvB,EAAM,OAGlB,EAEf,CACJ,EACMwB,GAAoB,+FAC1B,SAASC,GAA4BC,EAAkB,CAEnD,IAAMC,EADSD,EAAiB,KAAK,EACd,MAAMF,EAAiB,GAAK,CAAC,EAChD3B,EAAY8B,EAAQ,GACpBC,EAAYD,EAAQ,GACxB,OAAIC,GAAa,CAAC,CAAC,UAAW,QAAS,UAAU,EAAE,SAAS/B,CAAS,IACjEA,GAAa,IAAI+B,IACjBA,EAAY,IAET,CACH,YAAaC,GAAiBF,EAAQ,EAAE,EACxC,UAAA9B,EACA,aAAc8B,EAAQ,GAAKG,GAAkBH,EAAQ,EAAE,EAAI,CAAC,EAC5D,WAAYA,EAAQ,GACpB,WAAYA,EAAQ,GACpB,UAAWA,EAAQ,IAAMC,CAC7B,CACJ,CACA,SAASC,GAAiBE,EAAiB,CACvC,GAAIA,GAAmB,SACnB,OAAO,OAEN,GAAIA,GAAmB,WACxB,OAAO,QAEf,CACA,SAASD,GAAkBhC,EAAc,CACrC,OAAOA,EACF,MAAM,GAAG,EACT,OAAO,CAACkC,EAASC,IAAU,OAAO,OAAOD,EAAS,CAAE,CAACC,EAAM,QAAQ,KAAM,EAAE,GAAI,CAAC,KAAK,KAAKA,CAAK,CAAE,CAAC,EAAG,CAAC,CAAC,CAChH,CACA,SAASC,GAAqBtC,EAAa,CACvC,GAAIA,GAAe,OACf,MAAO,SAEN,GAAIA,GAAe,SACpB,MAAO,UAEf,CAEA,SAASuC,GAASb,EAAO,CACrB,OAAOA,EAAM,QAAQ,sBAAuB,CAACc,EAAGC,IAASA,EAAK,YAAY,CAAC,CAC/E,CACA,SAASC,GAAkBhB,EAAO,CAC9B,OAAOa,GAASb,EAAM,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,CAAC,CACjE,CACA,SAASiB,GAAWjB,EAAO,CACvB,OAAOA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,CACxD,CACA,SAASkB,GAAUlB,EAAO,CACtB,OAAOA,EAAM,QAAQ,WAAY,CAACc,EAAGC,IAAS,IAAIA,EAAK,YAAY,GAAG,CAC1E,CACA,SAASI,GAASnB,EAAO,CACrB,OAAOA,EAAM,MAAM,SAAS,GAAK,CAAC,CACtC,CAEA,SAASoB,GAAYC,EAAQ,CACzB,OAAOA,GAAW,IACtB,CACA,SAASC,GAAYD,EAAQE,EAAU,CACnC,OAAO,OAAO,UAAU,eAAe,KAAKF,EAAQE,CAAQ,CAChE,CAEA,IAAMC,GAAe,CAAC,OAAQ,OAAQ,MAAO,OAAO,EAC9CC,GAAN,KAAa,CACT,YAAYxB,EAASyB,EAAOC,EAAYC,EAAQ,CAC5C,KAAK,QAAU3B,EACf,KAAK,MAAQyB,EACb,KAAK,YAAcC,EAAW,aAAe1B,EAC7C,KAAK,UAAY0B,EAAW,WAAaE,GAA8B5B,CAAO,GAAKT,GAAM,oBAAoB,EAC7G,KAAK,aAAemC,EAAW,cAAgB,CAAC,EAChD,KAAK,WAAaA,EAAW,YAAcnC,GAAM,oBAAoB,EACrE,KAAK,WAAamC,EAAW,YAAcnC,GAAM,qBAAqB,EACtE,KAAK,UAAYmC,EAAW,WAAa,GACzC,KAAK,OAASC,CAClB,CACA,OAAO,SAASjB,EAAOiB,EAAQ,CAC3B,OAAO,IAAI,KAAKjB,EAAM,QAASA,EAAM,MAAOR,GAA4BQ,EAAM,OAAO,EAAGiB,CAAM,CAClG,CACA,UAAW,CACP,IAAME,EAAc,KAAK,UAAY,IAAI,KAAK,YAAc,GACtDxD,EAAc,KAAK,gBAAkB,IAAI,KAAK,kBAAoB,GACxE,MAAO,GAAG,KAAK,YAAYwD,IAAcxD,MAAgB,KAAK,cAAc,KAAK,YACrF,CACA,0BAA0BI,EAAO,CAC7B,GAAI,CAAC,KAAK,UACN,MAAO,GAEX,IAAMqD,EAAU,KAAK,UAAU,MAAM,GAAG,EACxC,GAAI,KAAK,sBAAsBrD,EAAOqD,CAAO,EACzC,MAAO,GAEX,IAAMC,EAAiBD,EAAQ,OAAQjC,GAAQ,CAAC0B,GAAa,SAAS1B,CAAG,CAAC,EAAE,GAC5E,OAAKkC,GAGAV,GAAY,KAAK,YAAaU,CAAc,GAC7CxC,GAAM,gCAAgC,KAAK,WAAW,EAEnD,KAAK,YAAYwC,GAAgB,YAAY,IAAMtD,EAAM,IAAI,YAAY,GALrE,EAMf,CACA,uBAAuBA,EAAO,CAC1B,GAAI,CAAC,KAAK,UACN,MAAO,GAEX,IAAMqD,EAAU,CAAC,KAAK,SAAS,EAC/B,MAAI,OAAK,sBAAsBrD,EAAOqD,CAAO,CAIjD,CACA,IAAI,QAAS,CACT,IAAME,EAAS,CAAC,EACVC,EAAU,IAAI,OAAO,SAAS,KAAK,yBAA0B,GAAG,EACtE,OAAW,CAAE,KAAAC,EAAM,MAAAnC,CAAM,IAAK,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAG,CAC/D,IAAMoC,EAAQD,EAAK,MAAMD,CAAO,EAC1BpC,EAAMsC,GAASA,EAAM,GACvBtC,IACAmC,EAAOpB,GAASf,CAAG,GAAKuC,GAASrC,CAAK,EAE9C,CACA,OAAOiC,CACX,CACA,IAAI,iBAAkB,CAClB,OAAOrB,GAAqB,KAAK,WAAW,CAChD,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,sBAAsBlC,EAAOqD,EAAS,CAClC,GAAM,CAACO,EAAMC,EAAMC,EAAKC,CAAK,EAAIjB,GAAa,IAAKkB,GAAaX,EAAQ,SAASW,CAAQ,CAAC,EAC1F,OAAOhE,EAAM,UAAY4D,GAAQ5D,EAAM,UAAY6D,GAAQ7D,EAAM,SAAW8D,GAAO9D,EAAM,WAAa+D,CAC1G,CACJ,EACME,GAAoB,CACtB,EAAG,IAAM,QACT,OAAQ,IAAM,QACd,KAAM,IAAM,SACZ,QAAS,IAAM,SACf,MAAQC,GAAOA,EAAE,aAAa,MAAM,GAAK,SAAW,QAAU,QAC9D,OAAQ,IAAM,SACd,SAAU,IAAM,OACpB,EACA,SAASf,GAA8B5B,EAAS,CAC5C,IAAM4C,EAAU5C,EAAQ,QAAQ,YAAY,EAC5C,GAAI4C,KAAWF,GACX,OAAOA,GAAkBE,GAAS5C,CAAO,CAEjD,CACA,SAAST,GAAMC,EAAS,CACpB,MAAM,IAAI,MAAMA,CAAO,CAC3B,CACA,SAAS4C,GAASrC,EAAO,CACrB,GAAI,CACA,OAAO,KAAK,MAAMA,CAAK,CAC3B,MACA,CACI,OAAOA,CACX,CACJ,CAEA,IAAM8C,GAAN,KAAc,CACV,YAAYC,EAASC,EAAQ,CACzB,KAAK,QAAUD,EACf,KAAK,OAASC,CAClB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,OAAO,KACvB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,IAAI,cAAe,CACf,OAAO,KAAK,OAAO,YACvB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,YAAYtE,EAAO,CACf,IAAMuE,EAAc,KAAK,mBAAmBvE,CAAK,EAC7C,KAAK,qBAAqBA,CAAK,GAAK,KAAK,oBAAoBuE,CAAW,GACxE,KAAK,gBAAgBA,CAAW,CAExC,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,OAAO,SACvB,CACA,IAAI,QAAS,CACT,IAAMC,EAAS,KAAK,WAAW,KAAK,YACpC,GAAI,OAAOA,GAAU,WACjB,OAAOA,EAEX,MAAM,IAAI,MAAM,WAAW,KAAK,wCAAwC,KAAK,aAAa,CAC9F,CACA,oBAAoBxE,EAAO,CACvB,GAAM,CAAE,QAAAuB,CAAQ,EAAI,KAAK,OACnB,CAAE,wBAAAkD,CAAwB,EAAI,KAAK,QAAQ,YAC3C,CAAE,WAAAC,CAAW,EAAI,KAAK,QACxBC,EAAS,GACb,OAAW,CAAClB,EAAMnC,CAAK,IAAK,OAAO,QAAQ,KAAK,YAAY,EACxD,GAAImC,KAAQgB,EAAyB,CACjC,IAAMG,EAASH,EAAwBhB,GACvCkB,EAASA,GAAUC,EAAO,CAAE,KAAAnB,EAAM,MAAAnC,EAAO,MAAAtB,EAAO,QAAAuB,EAAS,WAAAmD,CAAW,CAAC,CACzE,KAEI,UAGR,OAAOC,CACX,CACA,mBAAmB3E,EAAO,CACtB,OAAO,OAAO,OAAOA,EAAO,CAAE,OAAQ,KAAK,OAAO,MAAO,CAAC,CAC9D,CACA,gBAAgBA,EAAO,CACnB,GAAM,CAAE,OAAA6E,EAAQ,cAAAC,CAAc,EAAI9E,EAClC,GAAI,CACA,KAAK,OAAO,KAAK,KAAK,WAAYA,CAAK,EACvC,KAAK,QAAQ,iBAAiB,KAAK,WAAY,CAAE,MAAAA,EAAO,OAAA6E,EAAQ,cAAAC,EAAe,OAAQ,KAAK,UAAW,CAAC,CAC5G,OACOhE,EAAP,CACI,GAAM,CAAE,WAAAiE,EAAY,WAAAL,EAAY,QAAAnD,EAAS,MAAAyB,CAAM,EAAI,KAC7ChC,EAAS,CAAE,WAAA+D,EAAY,WAAAL,EAAY,QAAAnD,EAAS,MAAAyB,EAAO,MAAAhD,CAAM,EAC/D,KAAK,QAAQ,YAAYc,EAAO,oBAAoB,KAAK,UAAWE,CAAM,CAC9E,CACJ,CACA,qBAAqBhB,EAAO,CACxB,IAAMJ,EAAcI,EAAM,OAI1B,OAHIA,aAAiB,eAAiB,KAAK,OAAO,0BAA0BA,CAAK,GAG7EA,aAAiB,YAAc,KAAK,OAAO,uBAAuBA,CAAK,EAChE,GAEP,KAAK,UAAYJ,EACV,GAEFA,aAAuB,SAAW,KAAK,QAAQ,SAASA,CAAW,EACjE,KAAK,MAAM,gBAAgBA,CAAW,EAGtC,KAAK,MAAM,gBAAgB,KAAK,OAAO,OAAO,CAE7D,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,OAAO,UACvB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACJ,EAEMoF,GAAN,KAAsB,CAClB,YAAYzD,EAAS0D,EAAU,CAC3B,KAAK,qBAAuB,CAAE,WAAY,GAAM,UAAW,GAAM,QAAS,EAAK,EAC/E,KAAK,QAAU1D,EACf,KAAK,QAAU,GACf,KAAK,SAAW0D,EAChB,KAAK,SAAW,IAAI,IACpB,KAAK,iBAAmB,IAAI,iBAAkBC,GAAc,KAAK,iBAAiBA,CAAS,CAAC,CAChG,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,iBAAiB,QAAQ,KAAK,QAAS,KAAK,oBAAoB,EACrE,KAAK,QAAQ,EAErB,CACA,MAAMC,EAAU,CACR,KAAK,UACL,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,IAEnBA,EAAS,EACJ,KAAK,UACN,KAAK,iBAAiB,QAAQ,KAAK,QAAS,KAAK,oBAAoB,EACrE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,iBAAiB,YAAY,EAClC,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,GAAI,KAAK,QAAS,CACd,IAAMxD,EAAU,IAAI,IAAI,KAAK,oBAAoB,CAAC,EAClD,QAAWJ,KAAW,MAAM,KAAK,KAAK,QAAQ,EACrCI,EAAQ,IAAIJ,CAAO,GACpB,KAAK,cAAcA,CAAO,EAGlC,QAAWA,KAAW,MAAM,KAAKI,CAAO,EACpC,KAAK,WAAWJ,CAAO,CAE/B,CACJ,CACA,iBAAiB2D,EAAW,CACxB,GAAI,KAAK,QACL,QAAWE,KAAYF,EACnB,KAAK,gBAAgBE,CAAQ,CAGzC,CACA,gBAAgBA,EAAU,CAClBA,EAAS,MAAQ,aACjB,KAAK,uBAAuBA,EAAS,OAAQA,EAAS,aAAa,EAE9DA,EAAS,MAAQ,cACtB,KAAK,oBAAoBA,EAAS,YAAY,EAC9C,KAAK,kBAAkBA,EAAS,UAAU,EAElD,CACA,uBAAuB7D,EAAS8D,EAAe,CACvC,KAAK,SAAS,IAAI9D,CAAO,EACrB,KAAK,SAAS,yBAA2B,KAAK,aAAaA,CAAO,EAClE,KAAK,SAAS,wBAAwBA,EAAS8D,CAAa,EAG5D,KAAK,cAAc9D,CAAO,EAGzB,KAAK,aAAaA,CAAO,GAC9B,KAAK,WAAWA,CAAO,CAE/B,CACA,oBAAoB+D,EAAO,CACvB,QAAWC,KAAQ,MAAM,KAAKD,CAAK,EAAG,CAClC,IAAM/D,EAAU,KAAK,gBAAgBgE,CAAI,EACrChE,GACA,KAAK,YAAYA,EAAS,KAAK,aAAa,CAEpD,CACJ,CACA,kBAAkB+D,EAAO,CACrB,QAAWC,KAAQ,MAAM,KAAKD,CAAK,EAAG,CAClC,IAAM/D,EAAU,KAAK,gBAAgBgE,CAAI,EACrChE,GAAW,KAAK,gBAAgBA,CAAO,GACvC,KAAK,YAAYA,EAAS,KAAK,UAAU,CAEjD,CACJ,CACA,aAAaA,EAAS,CAClB,OAAO,KAAK,SAAS,aAAaA,CAAO,CAC7C,CACA,oBAAoBiE,EAAO,KAAK,QAAS,CACrC,OAAO,KAAK,SAAS,oBAAoBA,CAAI,CACjD,CACA,YAAYA,EAAMC,EAAW,CACzB,QAAWlE,KAAW,KAAK,oBAAoBiE,CAAI,EAC/CC,EAAU,KAAK,KAAMlE,CAAO,CAEpC,CACA,gBAAgBgE,EAAM,CAClB,GAAIA,EAAK,UAAY,KAAK,aACtB,OAAOA,CAEf,CACA,gBAAgBhE,EAAS,CACrB,OAAIA,EAAQ,aAAe,KAAK,QAAQ,YAC7B,GAGA,KAAK,QAAQ,SAASA,CAAO,CAE5C,CACA,WAAWA,EAAS,CACX,KAAK,SAAS,IAAIA,CAAO,GACtB,KAAK,gBAAgBA,CAAO,IAC5B,KAAK,SAAS,IAAIA,CAAO,EACrB,KAAK,SAAS,gBACd,KAAK,SAAS,eAAeA,CAAO,EAIpD,CACA,cAAcA,EAAS,CACf,KAAK,SAAS,IAAIA,CAAO,IACzB,KAAK,SAAS,OAAOA,CAAO,EACxB,KAAK,SAAS,kBACd,KAAK,SAAS,iBAAiBA,CAAO,EAGlD,CACJ,EAEMmE,GAAN,KAAwB,CACpB,YAAYnE,EAAS8D,EAAeJ,EAAU,CAC1C,KAAK,cAAgBI,EACrB,KAAK,SAAWJ,EAChB,KAAK,gBAAkB,IAAID,GAAgBzD,EAAS,IAAI,CAC5D,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,UAAW,CACX,MAAO,IAAI,KAAK,gBACpB,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAM4D,EAAU,CACZ,KAAK,gBAAgB,MAAMA,CAAQ,CACvC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,SAAU,CACN,KAAK,gBAAgB,QAAQ,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,aAAa5D,EAAS,CAClB,OAAOA,EAAQ,aAAa,KAAK,aAAa,CAClD,CACA,oBAAoBiE,EAAM,CACtB,IAAM9B,EAAQ,KAAK,aAAa8B,CAAI,EAAI,CAACA,CAAI,EAAI,CAAC,EAC5C7D,EAAU,MAAM,KAAK6D,EAAK,iBAAiB,KAAK,QAAQ,CAAC,EAC/D,OAAO9B,EAAM,OAAO/B,CAAO,CAC/B,CACA,eAAeJ,EAAS,CAChB,KAAK,SAAS,yBACd,KAAK,SAAS,wBAAwBA,EAAS,KAAK,aAAa,CAEzE,CACA,iBAAiBA,EAAS,CAClB,KAAK,SAAS,2BACd,KAAK,SAAS,0BAA0BA,EAAS,KAAK,aAAa,CAE3E,CACA,wBAAwBA,EAAS8D,EAAe,CACxC,KAAK,SAAS,8BAAgC,KAAK,eAAiBA,GACpE,KAAK,SAAS,6BAA6B9D,EAAS8D,CAAa,CAEzE,CACJ,EAEA,SAASM,GAAI/E,EAAKQ,EAAKE,EAAO,CAC1BsE,GAAMhF,EAAKQ,CAAG,EAAE,IAAIE,CAAK,CAC7B,CACA,SAASuE,GAAIjF,EAAKQ,EAAKE,EAAO,CAC1BsE,GAAMhF,EAAKQ,CAAG,EAAE,OAAOE,CAAK,EAC5BwE,GAAMlF,EAAKQ,CAAG,CAClB,CACA,SAASwE,GAAMhF,EAAKQ,EAAK,CACrB,IAAI2E,EAASnF,EAAI,IAAIQ,CAAG,EACxB,OAAK2E,IACDA,EAAS,IAAI,IACbnF,EAAI,IAAIQ,EAAK2E,CAAM,GAEhBA,CACX,CACA,SAASD,GAAMlF,EAAKQ,EAAK,CACrB,IAAM2E,EAASnF,EAAI,IAAIQ,CAAG,EACtB2E,GAAU,MAAQA,EAAO,MAAQ,GACjCnF,EAAI,OAAOQ,CAAG,CAEtB,CAEA,IAAM4E,GAAN,KAAe,CACX,aAAc,CACV,KAAK,YAAc,IAAI,GAC3B,CACA,IAAI,MAAO,CACP,OAAO,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAC7C,CACA,IAAI,QAAS,CAET,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,OAAO,CAACD,EAAQE,IAAQF,EAAO,OAAO,MAAM,KAAKE,CAAG,CAAC,EAAG,CAAC,CAAC,CAC1E,CACA,IAAI,MAAO,CAEP,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,OAAO,CAACC,EAAMD,IAAQC,EAAOD,EAAI,KAAM,CAAC,CACxD,CACA,IAAI7E,EAAKE,EAAO,CACZqE,GAAI,KAAK,YAAavE,EAAKE,CAAK,CACpC,CACA,OAAOF,EAAKE,EAAO,CACfuE,GAAI,KAAK,YAAazE,EAAKE,CAAK,CACpC,CACA,IAAIF,EAAKE,EAAO,CACZ,IAAMyE,EAAS,KAAK,YAAY,IAAI3E,CAAG,EACvC,OAAO2E,GAAU,MAAQA,EAAO,IAAIzE,CAAK,CAC7C,CACA,OAAOF,EAAK,CACR,OAAO,KAAK,YAAY,IAAIA,CAAG,CACnC,CACA,SAASE,EAAO,CAEZ,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,KAAM2E,GAAQA,EAAI,IAAI3E,CAAK,CAAC,CAC5C,CACA,gBAAgBF,EAAK,CACjB,IAAM2E,EAAS,KAAK,YAAY,IAAI3E,CAAG,EACvC,OAAO2E,EAAS,MAAM,KAAKA,CAAM,EAAI,CAAC,CAC1C,CACA,gBAAgBzE,EAAO,CACnB,OAAO,MAAM,KAAK,KAAK,WAAW,EAC7B,OAAO,CAAC,CAAC6E,EAAMJ,CAAM,IAAMA,EAAO,IAAIzE,CAAK,CAAC,EAC5C,IAAI,CAAC,CAACF,EAAKgF,CAAO,IAAMhF,CAAG,CACpC,CACJ,EA2BA,IAAMiF,GAAN,KAAuB,CACnB,YAAYC,EAASC,EAAUC,EAAUC,EAAS,CAC9C,KAAK,UAAYF,EACjB,KAAK,QAAUE,EACf,KAAK,gBAAkB,IAAIC,GAAgBJ,EAAS,IAAI,EACxD,KAAK,SAAWE,EAChB,KAAK,iBAAmB,IAAIG,EAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,SAChB,CACA,IAAI,SAASJ,EAAU,CACnB,KAAK,UAAYA,EACjB,KAAK,QAAQ,CACjB,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAMK,EAAU,CACZ,KAAK,gBAAgB,MAAMA,CAAQ,CACvC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,SAAU,CACN,KAAK,gBAAgB,QAAQ,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,aAAaN,EAAS,CAClB,GAAM,CAAE,SAAAC,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMM,EAAUP,EAAQ,QAAQC,CAAQ,EACxC,OAAI,KAAK,SAAS,qBACPM,GAAW,KAAK,SAAS,qBAAqBP,EAAS,KAAK,OAAO,EAEvEO,CACX,KAEI,OAAO,EAEf,CACA,oBAAoBC,EAAM,CACtB,GAAM,CAAE,SAAAP,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMQ,EAAQ,KAAK,aAAaD,CAAI,EAAI,CAACA,CAAI,EAAI,CAAC,EAC5CD,EAAU,MAAM,KAAKC,EAAK,iBAAiBP,CAAQ,CAAC,EAAE,OAAQQ,GAAU,KAAK,aAAaA,CAAK,CAAC,EACtG,OAAOA,EAAM,OAAOF,CAAO,CAC/B,KAEI,OAAO,CAAC,CAEhB,CACA,eAAeP,EAAS,CACpB,GAAM,CAAE,SAAAC,CAAS,EAAI,KACjBA,GACA,KAAK,gBAAgBD,EAASC,CAAQ,CAE9C,CACA,iBAAiBD,EAAS,CACtB,IAAMU,EAAY,KAAK,iBAAiB,gBAAgBV,CAAO,EAC/D,QAAWC,KAAYS,EACnB,KAAK,kBAAkBV,EAASC,CAAQ,CAEhD,CACA,wBAAwBD,EAASW,EAAgB,CAC7C,GAAM,CAAE,SAAAV,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMM,EAAU,KAAK,aAAaP,CAAO,EACnCY,EAAgB,KAAK,iBAAiB,IAAIX,EAAUD,CAAO,EAC7DO,GAAW,CAACK,EACZ,KAAK,gBAAgBZ,EAASC,CAAQ,EAEjC,CAACM,GAAWK,GACjB,KAAK,kBAAkBZ,EAASC,CAAQ,CAEhD,CACJ,CACA,gBAAgBD,EAASC,EAAU,CAC/B,KAAK,SAAS,gBAAgBD,EAASC,EAAU,KAAK,OAAO,EAC7D,KAAK,iBAAiB,IAAIA,EAAUD,CAAO,CAC/C,CACA,kBAAkBA,EAASC,EAAU,CACjC,KAAK,SAAS,kBAAkBD,EAASC,EAAU,KAAK,OAAO,EAC/D,KAAK,iBAAiB,OAAOA,EAAUD,CAAO,CAClD,CACJ,EAEMa,GAAN,KAAwB,CACpB,YAAYb,EAASE,EAAU,CAC3B,KAAK,QAAUF,EACf,KAAK,SAAWE,EAChB,KAAK,QAAU,GACf,KAAK,UAAY,IAAI,IACrB,KAAK,iBAAmB,IAAI,iBAAkBY,GAAc,KAAK,iBAAiBA,CAAS,CAAC,CAChG,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,iBAAiB,QAAQ,KAAK,QAAS,CAAE,WAAY,GAAM,kBAAmB,EAAK,CAAC,EACzF,KAAK,QAAQ,EAErB,CACA,MAAO,CACC,KAAK,UACL,KAAK,iBAAiB,YAAY,EAClC,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,GAAI,KAAK,QACL,QAAWC,KAAiB,KAAK,oBAC7B,KAAK,iBAAiBA,EAAe,IAAI,CAGrD,CACA,iBAAiBD,EAAW,CACxB,GAAI,KAAK,QACL,QAAWE,KAAYF,EACnB,KAAK,gBAAgBE,CAAQ,CAGzC,CACA,gBAAgBA,EAAU,CACtB,IAAMD,EAAgBC,EAAS,cAC3BD,GACA,KAAK,iBAAiBA,EAAeC,EAAS,QAAQ,CAE9D,CACA,iBAAiBD,EAAeE,EAAU,CACtC,IAAMC,EAAM,KAAK,SAAS,4BAA4BH,CAAa,EACnE,GAAIG,GAAO,KAAM,CACR,KAAK,UAAU,IAAIH,CAAa,GACjC,KAAK,kBAAkBG,EAAKH,CAAa,EAE7C,IAAMI,EAAQ,KAAK,QAAQ,aAAaJ,CAAa,EAIrD,GAHI,KAAK,UAAU,IAAIA,CAAa,GAAKI,GACrC,KAAK,sBAAsBA,EAAOD,EAAKD,CAAQ,EAE/CE,GAAS,KAAM,CACf,IAAMF,EAAW,KAAK,UAAU,IAAIF,CAAa,EACjD,KAAK,UAAU,OAAOA,CAAa,EAC/BE,GACA,KAAK,oBAAoBC,EAAKH,EAAeE,CAAQ,CAC7D,MAEI,KAAK,UAAU,IAAIF,EAAeI,CAAK,CAE/C,CACJ,CACA,kBAAkBD,EAAKH,EAAe,CAC9B,KAAK,SAAS,mBACd,KAAK,SAAS,kBAAkBG,EAAKH,CAAa,CAE1D,CACA,sBAAsBI,EAAOD,EAAKD,EAAU,CACpC,KAAK,SAAS,uBACd,KAAK,SAAS,sBAAsBE,EAAOD,EAAKD,CAAQ,CAEhE,CACA,oBAAoBC,EAAKH,EAAeE,EAAU,CAC1C,KAAK,SAAS,qBACd,KAAK,SAAS,oBAAoBC,EAAKH,EAAeE,CAAQ,CAEtE,CACA,IAAI,qBAAsB,CACtB,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK,sBAAsB,OAAO,KAAK,sBAAsB,CAAC,CAAC,CAC7F,CACA,IAAI,uBAAwB,CACxB,OAAO,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAE,IAAKG,GAAcA,EAAU,IAAI,CAChF,CACA,IAAI,wBAAyB,CACzB,OAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC,CAC3C,CACJ,EAEMC,GAAN,KAAwB,CACpB,YAAYrB,EAASe,EAAeb,EAAU,CAC1C,KAAK,kBAAoB,IAAIoB,GAAkBtB,EAASe,EAAe,IAAI,EAC3E,KAAK,SAAWb,EAChB,KAAK,gBAAkB,IAAIG,EAC/B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAMC,EAAU,CACZ,KAAK,kBAAkB,MAAMA,CAAQ,CACzC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,SAAU,CACN,KAAK,kBAAkB,QAAQ,CACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,kBAAkB,aAClC,CACA,wBAAwBN,EAAS,CAC7B,KAAK,cAAc,KAAK,qBAAqBA,CAAO,CAAC,CACzD,CACA,6BAA6BA,EAAS,CAClC,GAAM,CAACuB,EAAiBC,CAAa,EAAI,KAAK,wBAAwBxB,CAAO,EAC7E,KAAK,gBAAgBuB,CAAe,EACpC,KAAK,cAAcC,CAAa,CACpC,CACA,0BAA0BxB,EAAS,CAC/B,KAAK,gBAAgB,KAAK,gBAAgB,gBAAgBA,CAAO,CAAC,CACtE,CACA,cAAcyB,EAAQ,CAClBA,EAAO,QAASC,GAAU,KAAK,aAAaA,CAAK,CAAC,CACtD,CACA,gBAAgBD,EAAQ,CACpBA,EAAO,QAASC,GAAU,KAAK,eAAeA,CAAK,CAAC,CACxD,CACA,aAAaA,EAAO,CAChB,KAAK,SAAS,aAAaA,CAAK,EAChC,KAAK,gBAAgB,IAAIA,EAAM,QAASA,CAAK,CACjD,CACA,eAAeA,EAAO,CAClB,KAAK,SAAS,eAAeA,CAAK,EAClC,KAAK,gBAAgB,OAAOA,EAAM,QAASA,CAAK,CACpD,CACA,wBAAwB1B,EAAS,CAC7B,IAAM2B,EAAiB,KAAK,gBAAgB,gBAAgB3B,CAAO,EAC7D4B,EAAgB,KAAK,qBAAqB5B,CAAO,EACjD6B,EAAsBC,GAAIH,EAAgBC,CAAa,EAAE,UAAU,CAAC,CAACG,EAAeC,CAAY,IAAM,CAACC,GAAeF,EAAeC,CAAY,CAAC,EACxJ,OAAIH,GAAuB,GAChB,CAAC,CAAC,EAAG,CAAC,CAAC,EAGP,CAACF,EAAe,MAAME,CAAmB,EAAGD,EAAc,MAAMC,CAAmB,CAAC,CAEnG,CACA,qBAAqB7B,EAAS,CAC1B,IAAMe,EAAgB,KAAK,cACrBmB,EAAclC,EAAQ,aAAae,CAAa,GAAK,GAC3D,OAAOoB,GAAiBD,EAAalC,EAASe,CAAa,CAC/D,CACJ,EACA,SAASoB,GAAiBD,EAAalC,EAASe,EAAe,CAC3D,OAAOmB,EACF,KAAK,EACL,MAAM,KAAK,EACX,OAAQE,GAAYA,EAAQ,MAAM,EAClC,IAAI,CAACA,EAASC,KAAW,CAAE,QAAArC,EAAS,cAAAe,EAAe,QAAAqB,EAAS,MAAAC,CAAM,EAAE,CAC7E,CACA,SAASP,GAAIQ,EAAMC,EAAO,CACtB,IAAMC,EAAS,KAAK,IAAIF,EAAK,OAAQC,EAAM,MAAM,EACjD,OAAO,MAAM,KAAK,CAAE,OAAAC,CAAO,EAAG,CAACC,EAAGJ,IAAU,CAACC,EAAKD,GAAQE,EAAMF,EAAM,CAAC,CAC3E,CACA,SAASJ,GAAeK,EAAMC,EAAO,CACjC,OAAOD,GAAQC,GAASD,EAAK,OAASC,EAAM,OAASD,EAAK,SAAWC,EAAM,OAC/E,CAEA,IAAMG,GAAN,KAAwB,CACpB,YAAY1C,EAASe,EAAeb,EAAU,CAC1C,KAAK,kBAAoB,IAAImB,GAAkBrB,EAASe,EAAe,IAAI,EAC3E,KAAK,SAAWb,EAChB,KAAK,oBAAsB,IAAI,QAC/B,KAAK,uBAAyB,IAAI,OACtC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,SAAU,CACN,KAAK,kBAAkB,QAAQ,CACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,kBAAkB,aAClC,CACA,aAAawB,EAAO,CAChB,GAAM,CAAE,QAAA1B,CAAQ,EAAI0B,EACd,CAAE,MAAAP,CAAM,EAAI,KAAK,yBAAyBO,CAAK,EACjDP,IACA,KAAK,6BAA6BnB,CAAO,EAAE,IAAI0B,EAAOP,CAAK,EAC3D,KAAK,SAAS,oBAAoBnB,EAASmB,CAAK,EAExD,CACA,eAAeO,EAAO,CAClB,GAAM,CAAE,QAAA1B,CAAQ,EAAI0B,EACd,CAAE,MAAAP,CAAM,EAAI,KAAK,yBAAyBO,CAAK,EACjDP,IACA,KAAK,6BAA6BnB,CAAO,EAAE,OAAO0B,CAAK,EACvD,KAAK,SAAS,sBAAsB1B,EAASmB,CAAK,EAE1D,CACA,yBAAyBO,EAAO,CAC5B,IAAIiB,EAAc,KAAK,oBAAoB,IAAIjB,CAAK,EACpD,OAAKiB,IACDA,EAAc,KAAK,WAAWjB,CAAK,EACnC,KAAK,oBAAoB,IAAIA,EAAOiB,CAAW,GAE5CA,CACX,CACA,6BAA6B3C,EAAS,CAClC,IAAI4C,EAAgB,KAAK,uBAAuB,IAAI5C,CAAO,EAC3D,OAAK4C,IACDA,EAAgB,IAAI,IACpB,KAAK,uBAAuB,IAAI5C,EAAS4C,CAAa,GAEnDA,CACX,CACA,WAAWlB,EAAO,CACd,GAAI,CAEA,MAAO,CAAE,MADK,KAAK,SAAS,mBAAmBA,CAAK,CACrC,CACnB,OACOmB,EAAP,CACI,MAAO,CAAE,MAAAA,CAAM,CACnB,CACJ,CACJ,EAEMC,GAAN,KAAsB,CAClB,YAAYC,EAAS7C,EAAU,CAC3B,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,iBAAmB,IAAI,GAChC,CACA,OAAQ,CACC,KAAK,oBACN,KAAK,kBAAoB,IAAIwC,GAAkB,KAAK,QAAS,KAAK,gBAAiB,IAAI,EACvF,KAAK,kBAAkB,MAAM,EAErC,CACA,MAAO,CACC,KAAK,oBACL,KAAK,kBAAkB,KAAK,EAC5B,OAAO,KAAK,kBACZ,KAAK,qBAAqB,EAElC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,OAAO,eACvB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,QAAQ,MACxB,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,OAAO,CAAC,CACpD,CACA,cAAcM,EAAQ,CAClB,IAAMC,EAAU,IAAIC,GAAQ,KAAK,QAASF,CAAM,EAChD,KAAK,iBAAiB,IAAIA,EAAQC,CAAO,EACzC,KAAK,SAAS,iBAAiBA,CAAO,CAC1C,CACA,iBAAiBD,EAAQ,CACrB,IAAMC,EAAU,KAAK,iBAAiB,IAAID,CAAM,EAC5CC,IACA,KAAK,iBAAiB,OAAOD,CAAM,EACnC,KAAK,SAAS,oBAAoBC,CAAO,EAEjD,CACA,sBAAuB,CACnB,KAAK,SAAS,QAASA,GAAY,KAAK,SAAS,oBAAoBA,EAAS,EAAI,CAAC,EACnF,KAAK,iBAAiB,MAAM,CAChC,CACA,mBAAmBvB,EAAO,CACtB,IAAMsB,EAASG,GAAO,SAASzB,EAAO,KAAK,MAAM,EACjD,GAAIsB,EAAO,YAAc,KAAK,WAC1B,OAAOA,CAEf,CACA,oBAAoBhD,EAASgD,EAAQ,CACjC,KAAK,cAAcA,CAAM,CAC7B,CACA,sBAAsBhD,EAASgD,EAAQ,CACnC,KAAK,iBAAiBA,CAAM,CAChC,CACJ,EAEMI,GAAN,KAAoB,CAChB,YAAYL,EAASM,EAAU,CAC3B,KAAK,QAAUN,EACf,KAAK,SAAWM,EAChB,KAAK,kBAAoB,IAAIxC,GAAkB,KAAK,QAAS,IAAI,EACjE,KAAK,mBAAqB,KAAK,WAAW,kBAC9C,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,EAC7B,KAAK,uCAAuC,CAChD,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,4BAA4BE,EAAe,CACvC,GAAIA,KAAiB,KAAK,mBACtB,OAAO,KAAK,mBAAmBA,GAAe,IAEtD,CACA,kBAAkBG,EAAKH,EAAe,CAClC,IAAMuC,EAAa,KAAK,mBAAmBvC,GACtC,KAAK,SAASG,CAAG,GAClB,KAAK,sBAAsBA,EAAKoC,EAAW,OAAO,KAAK,SAASpC,EAAI,EAAGoC,EAAW,OAAOA,EAAW,YAAY,CAAC,CAEzH,CACA,sBAAsBnC,EAAOoC,EAAMtC,EAAU,CACzC,IAAMqC,EAAa,KAAK,uBAAuBC,GAC3CpC,IAAU,OAEVF,IAAa,OACbA,EAAWqC,EAAW,OAAOA,EAAW,YAAY,GAExD,KAAK,sBAAsBC,EAAMpC,EAAOF,CAAQ,EACpD,CACA,oBAAoBC,EAAKH,EAAeE,EAAU,CAC9C,IAAMqC,EAAa,KAAK,uBAAuBpC,GAC3C,KAAK,SAASA,CAAG,EACjB,KAAK,sBAAsBA,EAAKoC,EAAW,OAAO,KAAK,SAASpC,EAAI,EAAGD,CAAQ,EAG/E,KAAK,sBAAsBC,EAAKoC,EAAW,OAAOA,EAAW,YAAY,EAAGrC,CAAQ,CAE5F,CACA,wCAAyC,CACrC,OAAW,CAAE,IAAAC,EAAK,KAAAqC,EAAM,aAAAC,EAAc,OAAAC,CAAO,IAAK,KAAK,iBAC/CD,GAAgB,MAAa,CAAC,KAAK,WAAW,KAAK,IAAItC,CAAG,GAC1D,KAAK,sBAAsBqC,EAAME,EAAOD,CAAY,EAAG,MAAS,CAG5E,CACA,sBAAsBD,EAAMG,EAAUC,EAAa,CAC/C,IAAMC,EAAoB,GAAGL,WACvBM,EAAgB,KAAK,SAASD,GACpC,GAAI,OAAOC,GAAiB,WAAY,CACpC,IAAMP,EAAa,KAAK,uBAAuBC,GAC/C,GAAI,CACA,IAAMpC,EAAQmC,EAAW,OAAOI,CAAQ,EACpCzC,EAAW0C,EACXA,IACA1C,EAAWqC,EAAW,OAAOK,CAAW,GAE5CE,EAAc,KAAK,KAAK,SAAU1C,EAAOF,CAAQ,CACrD,OACO4B,EAAP,CACI,MAAIA,aAAiB,YACjBA,EAAM,QAAU,mBAAmB,KAAK,QAAQ,cAAcS,EAAW,WAAWT,EAAM,WAExFA,CACV,CACJ,CACJ,CACA,IAAI,kBAAmB,CACnB,GAAM,CAAE,mBAAAiB,CAAmB,EAAI,KAC/B,OAAO,OAAO,KAAKA,CAAkB,EAAE,IAAK5C,GAAQ4C,EAAmB5C,EAAI,CAC/E,CACA,IAAI,wBAAyB,CACzB,IAAM6C,EAAc,CAAC,EACrB,cAAO,KAAK,KAAK,kBAAkB,EAAE,QAAS7C,GAAQ,CAClD,IAAMoC,EAAa,KAAK,mBAAmBpC,GAC3C6C,EAAYT,EAAW,MAAQA,CACnC,CAAC,EACMS,CACX,CACA,SAAShD,EAAe,CACpB,IAAMuC,EAAa,KAAK,uBAAuBvC,GACzCiD,EAAgB,MAAMC,GAAWX,EAAW,IAAI,IACtD,OAAO,KAAK,SAASU,EACzB,CACJ,EAEME,GAAN,KAAqB,CACjB,YAAYnB,EAAS7C,EAAU,CAC3B,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,cAAgB,IAAIG,EAC7B,CACA,OAAQ,CACC,KAAK,oBACN,KAAK,kBAAoB,IAAIgB,GAAkB,KAAK,QAAS,KAAK,cAAe,IAAI,EACrF,KAAK,kBAAkB,MAAM,EAErC,CACA,MAAO,CACC,KAAK,oBACL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,KAAK,EAC5B,OAAO,KAAK,kBAEpB,CACA,aAAa,CAAE,QAAArB,EAAS,QAASuD,CAAK,EAAG,CACjC,KAAK,MAAM,gBAAgBvD,CAAO,GAClC,KAAK,cAAcA,EAASuD,CAAI,CAExC,CACA,eAAe,CAAE,QAAAvD,EAAS,QAASuD,CAAK,EAAG,CACvC,KAAK,iBAAiBvD,EAASuD,CAAI,CACvC,CACA,cAAcvD,EAASuD,EAAM,CACzB,IAAIY,EACC,KAAK,cAAc,IAAIZ,EAAMvD,CAAO,IACrC,KAAK,cAAc,IAAIuD,EAAMvD,CAAO,GACnCmE,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,gBAAgBnE,EAASuD,CAAI,CAAC,EAEtI,CACA,iBAAiBvD,EAASuD,EAAM,CAC5B,IAAIY,EACA,KAAK,cAAc,IAAIZ,EAAMvD,CAAO,IACpC,KAAK,cAAc,OAAOuD,EAAMvD,CAAO,GACtCmE,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,mBAAmBnE,EAASuD,CAAI,CAAC,EAEzI,CACA,sBAAuB,CACnB,QAAWA,KAAQ,KAAK,cAAc,KAClC,QAAWvD,KAAW,KAAK,cAAc,gBAAgBuD,CAAI,EACzD,KAAK,iBAAiBvD,EAASuD,CAAI,CAG/C,CACA,IAAI,eAAgB,CAChB,MAAO,QAAQ,KAAK,QAAQ,mBAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACJ,EAEA,SAASa,GAAiCC,EAAaC,EAAc,CACjE,IAAMC,EAAYC,GAA2BH,CAAW,EACxD,OAAO,MAAM,KAAKE,EAAU,OAAO,CAACE,EAAQJ,KACxCK,GAAwBL,EAAaC,CAAY,EAAE,QAASf,GAASkB,EAAO,IAAIlB,CAAI,CAAC,EAC9EkB,GACR,IAAI,GAAK,CAAC,CACjB,CACA,SAASE,GAAiCN,EAAaC,EAAc,CAEjE,OADkBE,GAA2BH,CAAW,EACvC,OAAO,CAACO,EAAOP,KAC5BO,EAAM,KAAK,GAAGC,GAAwBR,EAAaC,CAAY,CAAC,EACzDM,GACR,CAAC,CAAC,CACT,CACA,SAASJ,GAA2BH,EAAa,CAC7C,IAAME,EAAY,CAAC,EACnB,KAAOF,GACHE,EAAU,KAAKF,CAAW,EAC1BA,EAAc,OAAO,eAAeA,CAAW,EAEnD,OAAOE,EAAU,QAAQ,CAC7B,CACA,SAASG,GAAwBL,EAAaC,EAAc,CACxD,IAAMQ,EAAaT,EAAYC,GAC/B,OAAO,MAAM,QAAQQ,CAAU,EAAIA,EAAa,CAAC,CACrD,CACA,SAASD,GAAwBR,EAAaC,EAAc,CACxD,IAAMQ,EAAaT,EAAYC,GAC/B,OAAOQ,EAAa,OAAO,KAAKA,CAAU,EAAE,IAAK5D,GAAQ,CAACA,EAAK4D,EAAW5D,EAAI,CAAC,EAAI,CAAC,CACxF,CAEA,IAAM6D,GAAN,KAAqB,CACjB,YAAYhC,EAAS7C,EAAU,CAC3B,KAAK,QAAU,GACf,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,cAAgB,IAAIG,GACzB,KAAK,qBAAuB,IAAIA,GAChC,KAAK,oBAAsB,IAAI,IAC/B,KAAK,qBAAuB,IAAI,GACpC,CACA,OAAQ,CACC,KAAK,UACN,KAAK,kBAAkB,QAAS2E,GAAe,CAC3C,KAAK,+BAA+BA,CAAU,EAC9C,KAAK,gCAAgCA,CAAU,CACnD,CAAC,EACD,KAAK,QAAU,GACf,KAAK,kBAAkB,QAASjC,GAAYA,EAAQ,QAAQ,CAAC,EAErE,CACA,SAAU,CACN,KAAK,oBAAoB,QAASkC,GAAaA,EAAS,QAAQ,CAAC,EACjE,KAAK,qBAAqB,QAASA,GAAaA,EAAS,QAAQ,CAAC,CACtE,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAEpC,CACA,uBAAwB,CAChB,KAAK,oBAAoB,KAAO,IAChC,KAAK,oBAAoB,QAASA,GAAaA,EAAS,KAAK,CAAC,EAC9D,KAAK,oBAAoB,MAAM,EAEvC,CACA,wBAAyB,CACjB,KAAK,qBAAqB,KAAO,IACjC,KAAK,qBAAqB,QAASA,GAAaA,EAAS,KAAK,CAAC,EAC/D,KAAK,qBAAqB,MAAM,EAExC,CACA,gBAAgBjF,EAASkF,EAAW,CAAE,WAAAF,CAAW,EAAG,CAChD,IAAMG,EAAS,KAAK,UAAUnF,EAASgF,CAAU,EAC7CG,GACA,KAAK,cAAcA,EAAQnF,EAASgF,CAAU,CAEtD,CACA,kBAAkBhF,EAASkF,EAAW,CAAE,WAAAF,CAAW,EAAG,CAClD,IAAMG,EAAS,KAAK,iBAAiBnF,EAASgF,CAAU,EACpDG,GACA,KAAK,iBAAiBA,EAAQnF,EAASgF,CAAU,CAEzD,CACA,qBAAqBhF,EAAS,CAAE,WAAAgF,CAAW,EAAG,CAC1C,IAAM/E,EAAW,KAAK,SAAS+E,CAAU,EACnCI,EAAY,KAAK,UAAUpF,EAASgF,CAAU,EAC9CK,EAAsBrF,EAAQ,QAAQ,IAAI,KAAK,OAAO,wBAAwBgF,IAAa,EACjG,OAAI/E,EACOmF,GAAaC,GAAuBrF,EAAQ,QAAQC,CAAQ,EAG5D,EAEf,CACA,wBAAwBqF,EAAUvE,EAAe,CAC7C,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,6BAA6BM,EAAUvE,EAAe,CAClD,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,0BAA0BM,EAAUvE,EAAe,CAC/C,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,cAAcG,EAAQnF,EAASgF,EAAY,CACvC,IAAIb,EACC,KAAK,qBAAqB,IAAIa,EAAYhF,CAAO,IAClD,KAAK,cAAc,IAAIgF,EAAYG,CAAM,EACzC,KAAK,qBAAqB,IAAIH,EAAYhF,CAAO,GAChDmE,EAAK,KAAK,oBAAoB,IAAIa,CAAU,KAAO,MAAQb,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,gBAAgBgB,EAAQnF,EAASgF,CAAU,CAAC,EAEtK,CACA,iBAAiBG,EAAQnF,EAASgF,EAAY,CAC1C,IAAIb,EACA,KAAK,qBAAqB,IAAIa,EAAYhF,CAAO,IACjD,KAAK,cAAc,OAAOgF,EAAYG,CAAM,EAC5C,KAAK,qBAAqB,OAAOH,EAAYhF,CAAO,GACnDmE,EAAK,KAAK,oBACN,IAAIa,CAAU,KAAO,MAAQb,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,mBAAmBgB,EAAQnF,EAASgF,CAAU,CAAC,EAE/I,CACA,sBAAuB,CACnB,QAAWA,KAAc,KAAK,qBAAqB,KAC/C,QAAWhF,KAAW,KAAK,qBAAqB,gBAAgBgF,CAAU,EACtE,QAAWG,KAAU,KAAK,cAAc,gBAAgBH,CAAU,EAC9D,KAAK,iBAAiBG,EAAQnF,EAASgF,CAAU,CAIjE,CACA,gCAAgCA,EAAY,CACxC,IAAMC,EAAW,KAAK,oBAAoB,IAAID,CAAU,EACpDC,IACAA,EAAS,SAAW,KAAK,SAASD,CAAU,EAEpD,CACA,+BAA+BA,EAAY,CACvC,IAAM/E,EAAW,KAAK,SAAS+E,CAAU,EACnCO,EAAmB,IAAIxF,GAAiB,SAAS,KAAME,EAAU,KAAM,CAAE,WAAA+E,CAAW,CAAC,EAC3F,KAAK,oBAAoB,IAAIA,EAAYO,CAAgB,EACzDA,EAAiB,MAAM,CAC3B,CACA,gCAAgCP,EAAY,CACxC,IAAMjE,EAAgB,KAAK,2BAA2BiE,CAAU,EAC1DQ,EAAoB,IAAIlE,GAAkB,KAAK,MAAM,QAASP,EAAe,IAAI,EACvF,KAAK,qBAAqB,IAAIiE,EAAYQ,CAAiB,EAC3DA,EAAkB,MAAM,CAC5B,CACA,SAASR,EAAY,CACjB,OAAO,KAAK,MAAM,QAAQ,yBAAyBA,CAAU,CACjE,CACA,2BAA2BA,EAAY,CACnC,OAAO,KAAK,MAAM,OAAO,wBAAwB,KAAK,WAAYA,CAAU,CAChF,CACA,qCAAqCjE,EAAe,CAChD,OAAO,KAAK,kBAAkB,KAAMiE,GAAe,KAAK,2BAA2BA,CAAU,IAAMjE,CAAa,CACpH,CACA,IAAI,oBAAqB,CACrB,IAAM0E,EAAe,IAAIpF,GACzB,YAAK,OAAO,QAAQ,QAASqF,GAAW,CACpC,IAAMrB,EAAcqB,EAAO,WAAW,sBACtBtB,GAAiCC,EAAa,SAAS,EAC/D,QAASc,GAAWM,EAAa,IAAIN,EAAQO,EAAO,UAAU,CAAC,CAC3E,CAAC,EACMD,CACX,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,UAAU,CAClE,CACA,IAAI,gCAAiC,CACjC,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,UAAU,CAClE,CACA,IAAI,mBAAoB,CACpB,IAAME,EAAc,KAAK,+BACzB,OAAO,KAAK,OAAO,SAAS,OAAQ5C,GAAY4C,EAAY,SAAS5C,EAAQ,UAAU,CAAC,CAC5F,CACA,UAAU/C,EAASgF,EAAY,CAC3B,MAAO,CAAC,CAAC,KAAK,UAAUhF,EAASgF,CAAU,GAAK,CAAC,CAAC,KAAK,iBAAiBhF,EAASgF,CAAU,CAC/F,CACA,UAAUhF,EAASgF,EAAY,CAC3B,OAAO,KAAK,YAAY,qCAAqChF,EAASgF,CAAU,CACpF,CACA,iBAAiBhF,EAASgF,EAAY,CAClC,OAAO,KAAK,cAAc,gBAAgBA,CAAU,EAAE,KAAMG,GAAWA,EAAO,UAAYnF,CAAO,CACrG,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,QAAQ,MACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACJ,EAEM4F,GAAN,KAAc,CACV,YAAYF,EAAQG,EAAO,CACvB,KAAK,iBAAmB,CAACC,EAAcC,EAAS,CAAC,IAAM,CACnD,GAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAI,KAC5C+F,EAAS,OAAO,OAAO,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAG+F,CAAM,EAClE,KAAK,YAAY,iBAAiB,KAAK,WAAYD,EAAcC,CAAM,CAC3E,EACA,KAAK,OAASL,EACd,KAAK,MAAQG,EACb,KAAK,WAAa,IAAIH,EAAO,sBAAsB,IAAI,EACvD,KAAK,gBAAkB,IAAI5C,GAAgB,KAAM,KAAK,UAAU,EAChE,KAAK,cAAgB,IAAIM,GAAc,KAAM,KAAK,UAAU,EAC5D,KAAK,eAAiB,IAAIc,GAAe,KAAM,IAAI,EACnD,KAAK,eAAiB,IAAIa,GAAe,KAAM,IAAI,EACnD,GAAI,CACA,KAAK,WAAW,WAAW,EAC3B,KAAK,iBAAiB,YAAY,CACtC,OACOlC,EAAP,CACI,KAAK,YAAYA,EAAO,yBAAyB,CACrD,CACJ,CACA,SAAU,CACN,KAAK,gBAAgB,MAAM,EAC3B,KAAK,cAAc,MAAM,EACzB,KAAK,eAAe,MAAM,EAC1B,KAAK,eAAe,MAAM,EAC1B,GAAI,CACA,KAAK,WAAW,QAAQ,EACxB,KAAK,iBAAiB,SAAS,CACnC,OACOA,EAAP,CACI,KAAK,YAAYA,EAAO,uBAAuB,CACnD,CACJ,CACA,SAAU,CACN,KAAK,eAAe,QAAQ,CAChC,CACA,YAAa,CACT,GAAI,CACA,KAAK,WAAW,WAAW,EAC3B,KAAK,iBAAiB,YAAY,CACtC,OACOA,EAAP,CACI,KAAK,YAAYA,EAAO,0BAA0B,CACtD,CACA,KAAK,eAAe,KAAK,EACzB,KAAK,eAAe,KAAK,EACzB,KAAK,cAAc,KAAK,EACxB,KAAK,gBAAgB,KAAK,CAC9B,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,OAAO,UACvB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,UAC5B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,QAAQ,aACxB,CACA,YAAYA,EAAOqD,EAASH,EAAS,CAAC,EAAG,CACrC,GAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAI,KAC5C+F,EAAS,OAAO,OAAO,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAG+F,CAAM,EAClE,KAAK,YAAY,YAAYlD,EAAO,SAASqD,IAAWH,CAAM,CAClE,CACA,gBAAgB/F,EAASuD,EAAM,CAC3B,KAAK,uBAAuB,GAAGA,mBAAuBvD,CAAO,CACjE,CACA,mBAAmBA,EAASuD,EAAM,CAC9B,KAAK,uBAAuB,GAAGA,sBAA0BvD,CAAO,CACpE,CACA,gBAAgBmF,EAAQnF,EAASuD,EAAM,CACnC,KAAK,uBAAuB,GAAG4C,GAAkB5C,CAAI,mBAAoB4B,EAAQnF,CAAO,CAC5F,CACA,mBAAmBmF,EAAQnF,EAASuD,EAAM,CACtC,KAAK,uBAAuB,GAAG4C,GAAkB5C,CAAI,sBAAuB4B,EAAQnF,CAAO,CAC/F,CACA,uBAAuBoG,KAAeC,EAAM,CACxC,IAAMJ,EAAa,KAAK,WACpB,OAAOA,EAAWG,IAAe,YACjCH,EAAWG,GAAY,GAAGC,CAAI,CAEtC,CACJ,EAEA,SAASC,GAAMjC,EAAa,CACxB,OAAOkC,GAAOlC,EAAamC,GAAqBnC,CAAW,CAAC,CAChE,CACA,SAASkC,GAAOlC,EAAaoC,EAAY,CACrC,IAAMC,EAAoBC,GAAOtC,CAAW,EACtCuC,EAAmBC,GAAoBxC,EAAY,UAAWoC,CAAU,EAC9E,cAAO,iBAAiBC,EAAkB,UAAWE,CAAgB,EAC9DF,CACX,CACA,SAASF,GAAqBnC,EAAa,CAEvC,OADkBD,GAAiCC,EAAa,WAAW,EAC1D,OAAO,CAACyC,EAAmBC,IAAa,CACrD,IAAMN,EAAaM,EAAS1C,CAAW,EACvC,QAAWnD,KAAOuF,EAAY,CAC1B,IAAMnD,EAAawD,EAAkB5F,IAAQ,CAAC,EAC9C4F,EAAkB5F,GAAO,OAAO,OAAOoC,EAAYmD,EAAWvF,EAAI,CACtE,CACA,OAAO4F,CACX,EAAG,CAAC,CAAC,CACT,CACA,SAASD,GAAoBG,EAAWP,EAAY,CAChD,OAAOQ,GAAWR,CAAU,EAAE,OAAO,CAACG,EAAkB1F,IAAQ,CAC5D,IAAMoC,EAAa4D,GAAsBF,EAAWP,EAAYvF,CAAG,EACnE,OAAIoC,GACA,OAAO,OAAOsD,EAAkB,CAAE,CAAC1F,GAAMoC,CAAW,CAAC,EAElDsD,CACX,EAAG,CAAC,CAAC,CACT,CACA,SAASM,GAAsBF,EAAWP,EAAYvF,EAAK,CACvD,IAAMiG,EAAsB,OAAO,yBAAyBH,EAAW9F,CAAG,EAE1E,GAAI,EADoBiG,GAAuB,UAAWA,GACpC,CAClB,IAAM7D,EAAa,OAAO,yBAAyBmD,EAAYvF,CAAG,EAAE,MACpE,OAAIiG,IACA7D,EAAW,IAAM6D,EAAoB,KAAO7D,EAAW,IACvDA,EAAW,IAAM6D,EAAoB,KAAO7D,EAAW,KAEpDA,CACX,CACJ,CACA,IAAM2D,IAAc,IACZ,OAAO,OAAO,uBAAyB,WAC/BG,GAAW,CAAC,GAAG,OAAO,oBAAoBA,CAAM,EAAG,GAAG,OAAO,sBAAsBA,CAAM,CAAC,EAG3F,OAAO,qBAEnB,EACGT,IAAU,IAAM,CAClB,SAASU,EAAkBhD,EAAa,CACpC,SAASiD,GAAW,CAChB,OAAO,QAAQ,UAAUjD,EAAa,UAAW,UAAU,CAC/D,CACA,OAAAiD,EAAS,UAAY,OAAO,OAAOjD,EAAY,UAAW,CACtD,YAAa,CAAE,MAAOiD,CAAS,CACnC,CAAC,EACD,QAAQ,eAAeA,EAAUjD,CAAW,EACrCiD,CACX,CACA,SAASC,GAAuB,CAI5B,IAAMC,EAAIH,EAHA,UAAY,CAClB,KAAK,EAAE,KAAK,IAAI,CACpB,CAC6B,EAC7B,OAAAG,EAAE,UAAU,EAAI,UAAY,CAAE,EACvB,IAAIA,CACf,CACA,GAAI,CACA,OAAAD,EAAqB,EACdF,CACX,MACA,CACI,OAAQhD,GAAgB,cAAuBA,CAAY,CAC3D,CACJ,CACJ,GAAG,EAEH,SAASoD,GAAgB3C,EAAY,CACjC,MAAO,CACH,WAAYA,EAAW,WACvB,sBAAuBwB,GAAMxB,EAAW,qBAAqB,CACjE,CACJ,CAEA,IAAM4C,GAAN,KAAa,CACT,YAAYC,EAAa7C,EAAY,CACjC,KAAK,YAAc6C,EACnB,KAAK,WAAaF,GAAgB3C,CAAU,EAC5C,KAAK,gBAAkB,IAAI,QAC3B,KAAK,kBAAoB,IAAI,GACjC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,WAAW,UAC3B,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,WAAW,qBAC3B,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,CAC5C,CACA,uBAAuBe,EAAO,CAC1B,IAAM9C,EAAU,KAAK,qBAAqB8C,CAAK,EAC/C,KAAK,kBAAkB,IAAI9C,CAAO,EAClCA,EAAQ,QAAQ,CACpB,CACA,0BAA0B8C,EAAO,CAC7B,IAAM9C,EAAU,KAAK,gBAAgB,IAAI8C,CAAK,EAC1C9C,IACA,KAAK,kBAAkB,OAAOA,CAAO,EACrCA,EAAQ,WAAW,EAE3B,CACA,qBAAqB8C,EAAO,CACxB,IAAI9C,EAAU,KAAK,gBAAgB,IAAI8C,CAAK,EAC5C,OAAK9C,IACDA,EAAU,IAAI6C,GAAQ,KAAMC,CAAK,EACjC,KAAK,gBAAgB,IAAIA,EAAO9C,CAAO,GAEpCA,CACX,CACJ,EAEM6E,GAAN,KAAe,CACX,YAAY/B,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAItC,EAAM,CACN,OAAO,KAAK,KAAK,IAAI,KAAK,WAAWA,CAAI,CAAC,CAC9C,CACA,IAAIA,EAAM,CACN,OAAO,KAAK,OAAOA,CAAI,EAAE,EAC7B,CACA,OAAOA,EAAM,CACT,IAAMrB,EAAc,KAAK,KAAK,IAAI,KAAK,WAAWqB,CAAI,CAAC,GAAK,GAC5D,OAAOsE,GAAS3F,CAAW,CAC/B,CACA,iBAAiBqB,EAAM,CACnB,OAAO,KAAK,KAAK,uBAAuB,KAAK,WAAWA,CAAI,CAAC,CACjE,CACA,WAAWA,EAAM,CACb,MAAO,GAAGA,SACd,CACA,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACtB,CACJ,EAEMuE,GAAN,KAAc,CACV,YAAYjC,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI3E,EAAK,CACL,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,OAAO,KAAK,QAAQ,aAAaqC,CAAI,CACzC,CACA,IAAIrC,EAAKC,EAAO,CACZ,IAAMoC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,YAAK,QAAQ,aAAaqC,EAAMpC,CAAK,EAC9B,KAAK,IAAID,CAAG,CACvB,CACA,IAAIA,EAAK,CACL,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,OAAO,KAAK,QAAQ,aAAaqC,CAAI,CACzC,CACA,OAAOrC,EAAK,CACR,GAAI,KAAK,IAAIA,CAAG,EAAG,CACf,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,YAAK,QAAQ,gBAAgBqC,CAAI,EAC1B,EACX,KAEI,OAAO,EAEf,CACA,uBAAuBrC,EAAK,CACxB,MAAO,QAAQ,KAAK,cAAc6G,GAAU7G,CAAG,GACnD,CACJ,EAEM8G,GAAN,KAAY,CACR,YAAYC,EAAQ,CAChB,KAAK,mBAAqB,IAAI,QAC9B,KAAK,OAASA,CAClB,CACA,KAAKb,EAAQlG,EAAKgF,EAAS,CACvB,IAAIgC,EAAa,KAAK,mBAAmB,IAAId,CAAM,EAC9Cc,IACDA,EAAa,IAAI,IACjB,KAAK,mBAAmB,IAAId,EAAQc,CAAU,GAE7CA,EAAW,IAAIhH,CAAG,IACnBgH,EAAW,IAAIhH,CAAG,EAClB,KAAK,OAAO,KAAKgF,EAASkB,CAAM,EAExC,CACJ,EAEA,SAASe,GAA4BpH,EAAeW,EAAO,CACvD,MAAO,IAAIX,OAAmBW,KAClC,CAEA,IAAM0G,GAAN,KAAgB,CACZ,YAAYvC,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,MAAM,MACtB,CACA,IAAIwC,EAAY,CACZ,OAAO,KAAK,KAAKA,CAAU,GAAK,IACpC,CACA,QAAQC,EAAa,CACjB,OAAOA,EAAY,OAAO,CAACC,EAAQF,IAAeE,GAAU,KAAK,WAAWF,CAAU,GAAK,KAAK,iBAAiBA,CAAU,EAAG,MAAS,CAC3I,CACA,WAAWC,EAAa,CACpB,OAAOA,EAAY,OAAO,CAACE,EAASH,IAAe,CAC/C,GAAGG,EACH,GAAG,KAAK,eAAeH,CAAU,EACjC,GAAG,KAAK,qBAAqBA,CAAU,CAC3C,EAAG,CAAC,CAAC,CACT,CACA,WAAWA,EAAY,CACnB,IAAMpI,EAAW,KAAK,yBAAyBoI,CAAU,EACzD,OAAO,KAAK,MAAM,YAAYpI,CAAQ,CAC1C,CACA,eAAeoI,EAAY,CACvB,IAAMpI,EAAW,KAAK,yBAAyBoI,CAAU,EACzD,OAAO,KAAK,MAAM,gBAAgBpI,CAAQ,CAC9C,CACA,yBAAyBoI,EAAY,CACjC,IAAMtH,EAAgB,KAAK,OAAO,wBAAwB,KAAK,UAAU,EACzE,OAAOoH,GAA4BpH,EAAesH,CAAU,CAChE,CACA,iBAAiBA,EAAY,CACzB,IAAMpI,EAAW,KAAK,+BAA+BoI,CAAU,EAC/D,OAAO,KAAK,UAAU,KAAK,MAAM,YAAYpI,CAAQ,EAAGoI,CAAU,CACtE,CACA,qBAAqBA,EAAY,CAC7B,IAAMpI,EAAW,KAAK,+BAA+BoI,CAAU,EAC/D,OAAO,KAAK,MAAM,gBAAgBpI,CAAQ,EAAE,IAAKD,GAAY,KAAK,UAAUA,EAASqI,CAAU,CAAC,CACpG,CACA,+BAA+BA,EAAY,CACvC,IAAMI,EAAmB,GAAG,KAAK,cAAcJ,IAC/C,OAAOF,GAA4B,KAAK,OAAO,gBAAiBM,CAAgB,CACpF,CACA,UAAUzI,EAASqI,EAAY,CAC3B,GAAIrI,EAAS,CACT,GAAM,CAAE,WAAAgG,CAAW,EAAI,KACjBjF,EAAgB,KAAK,OAAO,gBAC5B2H,EAAuB,KAAK,OAAO,wBAAwB1C,CAAU,EAC3E,KAAK,MAAM,KAAKhG,EAAS,UAAUqI,IAAc,kBAAkBtH,MAAkBiF,KAAcqC,WAAoBK,MAAyBL,WACrItH,gFAA4F,CAC3G,CACA,OAAOf,CACX,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,MAAM,KACtB,CACJ,EAEM2I,GAAN,KAAgB,CACZ,YAAY9C,EAAO+C,EAAmB,CAClC,KAAK,MAAQ/C,EACb,KAAK,kBAAoB+C,CAC7B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,MAAM,MACtB,CACA,IAAI5D,EAAY,CACZ,OAAO,KAAK,KAAKA,CAAU,GAAK,IACpC,CACA,QAAQ6D,EAAa,CACjB,OAAOA,EAAY,OAAO,CAAC1D,EAAQH,IAAeG,GAAU,KAAK,WAAWH,CAAU,EAAG,MAAS,CACtG,CACA,WAAW6D,EAAa,CACpB,OAAOA,EAAY,OAAO,CAACC,EAAS9D,IAAe,CAAC,GAAG8D,EAAS,GAAG,KAAK,eAAe9D,CAAU,CAAC,EAAG,CAAC,CAAC,CAC3G,CACA,yBAAyBA,EAAY,CACjC,IAAMjE,EAAgB,KAAK,OAAO,wBAAwB,KAAK,WAAYiE,CAAU,EACrF,OAAO,KAAK,kBAAkB,aAAajE,CAAa,CAC5D,CACA,WAAWiE,EAAY,CACnB,IAAM/E,EAAW,KAAK,yBAAyB+E,CAAU,EACzD,GAAI/E,EACA,OAAO,KAAK,YAAYA,EAAU+E,CAAU,CACpD,CACA,eAAeA,EAAY,CACvB,IAAM/E,EAAW,KAAK,yBAAyB+E,CAAU,EACzD,OAAO/E,EAAW,KAAK,gBAAgBA,EAAU+E,CAAU,EAAI,CAAC,CACpE,CACA,YAAY/E,EAAU+E,EAAY,CAE9B,OADiB,KAAK,MAAM,cAAc/E,CAAQ,EAClC,OAAQD,GAAY,KAAK,eAAeA,EAASC,EAAU+E,CAAU,CAAC,EAAE,EAC5F,CACA,gBAAgB/E,EAAU+E,EAAY,CAElC,OADiB,KAAK,MAAM,cAAc/E,CAAQ,EAClC,OAAQD,GAAY,KAAK,eAAeA,EAASC,EAAU+E,CAAU,CAAC,CAC1F,CACA,eAAehF,EAASC,EAAU+E,EAAY,CAC1C,IAAM+D,EAAsB/I,EAAQ,aAAa,KAAK,MAAM,OAAO,mBAAmB,GAAK,GAC3F,OAAOA,EAAQ,QAAQC,CAAQ,GAAK8I,EAAoB,MAAM,GAAG,EAAE,SAAS/D,CAAU,CAC1F,CACJ,EAEMgE,GAAN,KAAY,CACR,YAAYC,EAAQjJ,EAASgG,EAAYiC,EAAQ,CAC7C,KAAK,QAAU,IAAIG,GAAU,IAAI,EACjC,KAAK,QAAU,IAAIR,GAAS,IAAI,EAChC,KAAK,KAAO,IAAIE,GAAQ,IAAI,EAC5B,KAAK,gBAAmB9H,GACbA,EAAQ,QAAQ,KAAK,kBAAkB,IAAM,KAAK,QAE7D,KAAK,OAASiJ,EACd,KAAK,QAAUjJ,EACf,KAAK,WAAagG,EAClB,KAAK,MAAQ,IAAIgC,GAAMC,CAAM,EAC7B,KAAK,QAAU,IAAIU,GAAU,KAAK,cAAe3I,CAAO,CAC5D,CACA,YAAYC,EAAU,CAClB,OAAO,KAAK,QAAQ,QAAQA,CAAQ,EAAI,KAAK,QAAU,KAAK,cAAcA,CAAQ,EAAE,KAAK,KAAK,eAAe,CACjH,CACA,gBAAgBA,EAAU,CACtB,MAAO,CACH,GAAI,KAAK,QAAQ,QAAQA,CAAQ,EAAI,CAAC,KAAK,OAAO,EAAI,CAAC,EACvD,GAAG,KAAK,cAAcA,CAAQ,EAAE,OAAO,KAAK,eAAe,CAC/D,CACJ,CACA,cAAcA,EAAU,CACpB,OAAO,MAAM,KAAK,KAAK,QAAQ,iBAAiBA,CAAQ,CAAC,CAC7D,CACA,IAAI,oBAAqB,CACrB,OAAOkI,GAA4B,KAAK,OAAO,oBAAqB,KAAK,UAAU,CACvF,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,UAAY,SAAS,eACrC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,gBACN,KACA,IAAIa,GAAM,KAAK,OAAQ,SAAS,gBAAiB,KAAK,WAAY,KAAK,MAAM,MAAM,CAC7F,CACJ,EAEME,GAAN,KAAoB,CAChB,YAAYlJ,EAASiJ,EAAQ/I,EAAU,CACnC,KAAK,QAAUF,EACf,KAAK,OAASiJ,EACd,KAAK,SAAW/I,EAChB,KAAK,kBAAoB,IAAIwC,GAAkB,KAAK,QAAS,KAAK,oBAAqB,IAAI,EAC3F,KAAK,4BAA8B,IAAI,QACvC,KAAK,qBAAuB,IAAI,OACpC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,OAAO,mBACvB,CACA,mBAAmBhB,EAAO,CACtB,GAAM,CAAE,QAAA1B,EAAS,QAASgG,CAAW,EAAItE,EACzC,OAAO,KAAK,kCAAkC1B,EAASgG,CAAU,CACrE,CACA,kCAAkChG,EAASgG,EAAY,CACnD,IAAMmD,EAAqB,KAAK,kCAAkCnJ,CAAO,EACrE6F,EAAQsD,EAAmB,IAAInD,CAAU,EAC7C,OAAKH,IACDA,EAAQ,KAAK,SAAS,mCAAmC7F,EAASgG,CAAU,EAC5EmD,EAAmB,IAAInD,EAAYH,CAAK,GAErCA,CACX,CACA,oBAAoB7F,EAASmB,EAAO,CAChC,IAAMiI,GAAkB,KAAK,qBAAqB,IAAIjI,CAAK,GAAK,GAAK,EACrE,KAAK,qBAAqB,IAAIA,EAAOiI,CAAc,EAC/CA,GAAkB,GAClB,KAAK,SAAS,eAAejI,CAAK,CAE1C,CACA,sBAAsBnB,EAASmB,EAAO,CAClC,IAAMiI,EAAiB,KAAK,qBAAqB,IAAIjI,CAAK,EACtDiI,IACA,KAAK,qBAAqB,IAAIjI,EAAOiI,EAAiB,CAAC,EACnDA,GAAkB,GAClB,KAAK,SAAS,kBAAkBjI,CAAK,EAGjD,CACA,kCAAkCnB,EAAS,CACvC,IAAImJ,EAAqB,KAAK,4BAA4B,IAAInJ,CAAO,EACrE,OAAKmJ,IACDA,EAAqB,IAAI,IACzB,KAAK,4BAA4B,IAAInJ,EAASmJ,CAAkB,GAE7DA,CACX,CACJ,EAEME,GAAN,KAAa,CACT,YAAY1B,EAAa,CACrB,KAAK,YAAcA,EACnB,KAAK,cAAgB,IAAIuB,GAAc,KAAK,QAAS,KAAK,OAAQ,IAAI,EACtE,KAAK,mBAAqB,IAAI7I,GAC9B,KAAK,oBAAsB,IAAI,GACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,OAAO,mBACvB,CACA,IAAI,SAAU,CACV,OAAO,MAAM,KAAK,KAAK,oBAAoB,OAAO,CAAC,CACvD,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,OAAO,CAACiJ,EAAU5D,IAAW4D,EAAS,OAAO5D,EAAO,QAAQ,EAAG,CAAC,CAAC,CACzF,CACA,OAAQ,CACJ,KAAK,cAAc,MAAM,CAC7B,CACA,MAAO,CACH,KAAK,cAAc,KAAK,CAC5B,CACA,eAAeZ,EAAY,CACvB,KAAK,iBAAiBA,EAAW,UAAU,EAC3C,IAAMY,EAAS,IAAIgC,GAAO,KAAK,YAAa5C,CAAU,EACtD,KAAK,cAAcY,CAAM,EACzB,IAAM6D,EAAYzE,EAAW,sBAAsB,UAC/CyE,GACAA,EAAU,KAAKzE,EAAW,sBAAuBA,EAAW,WAAY,KAAK,WAAW,CAEhG,CACA,iBAAiBkB,EAAY,CACzB,IAAMN,EAAS,KAAK,oBAAoB,IAAIM,CAAU,EAClDN,GACA,KAAK,iBAAiBA,CAAM,CAEpC,CACA,kCAAkC1F,EAASgG,EAAY,CACnD,IAAMN,EAAS,KAAK,oBAAoB,IAAIM,CAAU,EACtD,GAAIN,EACA,OAAOA,EAAO,SAAS,KAAM3C,GAAYA,EAAQ,SAAW/C,CAAO,CAE3E,CACA,6CAA6CA,EAASgG,EAAY,CAC9D,IAAMH,EAAQ,KAAK,cAAc,kCAAkC7F,EAASgG,CAAU,EAClFH,EACA,KAAK,cAAc,oBAAoBA,EAAM,QAASA,CAAK,EAG3D,QAAQ,MAAM,kDAAkDG,kBAA4BhG,CAAO,CAE3G,CACA,YAAY6C,EAAOqD,EAASH,EAAQ,CAChC,KAAK,YAAY,YAAYlD,EAAOqD,EAASH,CAAM,CACvD,CACA,mCAAmC/F,EAASgG,EAAY,CACpD,OAAO,IAAIgD,GAAM,KAAK,OAAQhJ,EAASgG,EAAY,KAAK,MAAM,CAClE,CACA,eAAeH,EAAO,CAClB,KAAK,mBAAmB,IAAIA,EAAM,WAAYA,CAAK,EACnD,IAAMH,EAAS,KAAK,oBAAoB,IAAIG,EAAM,UAAU,EACxDH,GACAA,EAAO,uBAAuBG,CAAK,CAE3C,CACA,kBAAkBA,EAAO,CACrB,KAAK,mBAAmB,OAAOA,EAAM,WAAYA,CAAK,EACtD,IAAMH,EAAS,KAAK,oBAAoB,IAAIG,EAAM,UAAU,EACxDH,GACAA,EAAO,0BAA0BG,CAAK,CAE9C,CACA,cAAcH,EAAQ,CAClB,KAAK,oBAAoB,IAAIA,EAAO,WAAYA,CAAM,EACvC,KAAK,mBAAmB,gBAAgBA,EAAO,UAAU,EACjE,QAASG,GAAUH,EAAO,uBAAuBG,CAAK,CAAC,CAClE,CACA,iBAAiBH,EAAQ,CACrB,KAAK,oBAAoB,OAAOA,EAAO,UAAU,EAClC,KAAK,mBAAmB,gBAAgBA,EAAO,UAAU,EACjE,QAASG,GAAUH,EAAO,0BAA0BG,CAAK,CAAC,CACrE,CACJ,EAEM2D,GAAgB,CAClB,oBAAqB,kBACrB,gBAAiB,cACjB,gBAAiB,cACjB,wBAA0BxD,GAAe,QAAQA,WACjD,wBAAyB,CAACA,EAAYb,IAAW,QAAQa,KAAcb,WACvE,YAAa,OAAO,OAAO,OAAO,OAAO,CAAE,MAAO,QAAS,IAAK,MAAO,IAAK,SAAU,MAAO,IAAK,GAAI,UAAW,KAAM,YAAa,KAAM,YAAa,MAAO,aAAc,KAAM,OAAQ,IAAK,MAAO,QAAS,SAAU,UAAW,UAAW,EAAGsE,GAAkB,6BAA6B,MAAM,EAAE,EAAE,IAAKC,GAAM,CAACA,EAAGA,CAAC,CAAC,CAAC,CAAC,EAAGD,GAAkB,aAAa,MAAM,EAAE,EAAE,IAAK,GAAM,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CACjY,EACA,SAASA,GAAkBE,EAAO,CAC9B,OAAOA,EAAM,OAAO,CAACC,EAAM,CAACC,EAAGC,CAAC,IAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAI,EAAG,CAAE,CAACC,GAAIC,CAAE,CAAC,EAAI,CAAC,CAAC,CAClG,CAEA,IAAMC,GAAN,KAAkB,CACd,YAAY/J,EAAU,SAAS,gBAAiBiJ,EAASO,GAAe,CACpE,KAAK,OAAS,QACd,KAAK,MAAQ,GACb,KAAK,iBAAmB,CAACxD,EAAYF,EAAcC,EAAS,CAAC,IAAM,CAC3D,KAAK,OACL,KAAK,oBAAoBC,EAAYF,EAAcC,CAAM,CAEjE,EACA,KAAK,QAAU/F,EACf,KAAK,OAASiJ,EACd,KAAK,WAAa,IAAIe,GAAW,IAAI,EACrC,KAAK,OAAS,IAAIX,GAAO,IAAI,EAC7B,KAAK,wBAA0B,OAAO,OAAO,CAAC,EAAGY,EAA8B,CACnF,CACA,OAAO,MAAMjK,EAASiJ,EAAQ,CAC1B,IAAMtB,EAAc,IAAI,KAAK3H,EAASiJ,CAAM,EAC5C,OAAAtB,EAAY,MAAM,EACXA,CACX,CACA,MAAM,OAAQ,CACV,MAAMuC,GAAS,EACf,KAAK,iBAAiB,cAAe,UAAU,EAC/C,KAAK,WAAW,MAAM,EACtB,KAAK,OAAO,MAAM,EAClB,KAAK,iBAAiB,cAAe,OAAO,CAChD,CACA,MAAO,CACH,KAAK,iBAAiB,cAAe,UAAU,EAC/C,KAAK,WAAW,KAAK,EACrB,KAAK,OAAO,KAAK,EACjB,KAAK,iBAAiB,cAAe,MAAM,CAC/C,CACA,SAASlE,EAAYmE,EAAuB,CACxC,KAAK,KAAK,CAAE,WAAAnE,EAAY,sBAAAmE,CAAsB,CAAC,CACnD,CACA,qBAAqB5G,EAAM6G,EAAQ,CAC/B,KAAK,wBAAwB7G,GAAQ6G,CACzC,CACA,KAAKC,KAASC,EAAM,EACI,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,EAAM,GAAGC,CAAI,GACnD,QAASxF,GAAe,CAC5BA,EAAW,sBAAsB,YACjC,KAAK,OAAO,eAAeA,CAAU,CAE7C,CAAC,CACL,CACA,OAAOuF,KAASC,EAAM,EACE,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,EAAM,GAAGC,CAAI,GACnD,QAAStE,GAAe,KAAK,OAAO,iBAAiBA,CAAU,CAAC,CAChF,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,SAAS,IAAKjD,GAAYA,EAAQ,UAAU,CACnE,CACA,qCAAqC/C,EAASgG,EAAY,CACtD,IAAMjD,EAAU,KAAK,OAAO,kCAAkC/C,EAASgG,CAAU,EACjF,OAAOjD,EAAUA,EAAQ,WAAa,IAC1C,CACA,YAAYF,EAAOqD,EAASH,EAAQ,CAChC,IAAI5B,EACJ,KAAK,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,IAAkB+B,EAASrD,EAAOkD,CAAM,GACzD5B,EAAK,OAAO,WAAa,MAAQA,IAAO,QAAkBA,EAAG,KAAK,OAAQ+B,EAAS,GAAI,EAAG,EAAGrD,CAAK,CACvG,CACA,oBAAoBmD,EAAYF,EAAcC,EAAS,CAAC,EAAG,CACvDA,EAAS,OAAO,OAAO,CAAE,YAAa,IAAK,EAAGA,CAAM,EACpD,KAAK,OAAO,eAAe,GAAGC,MAAeF,GAAc,EAC3D,KAAK,OAAO,IAAI,WAAY,OAAO,OAAO,CAAC,EAAGC,CAAM,CAAC,EACrD,KAAK,OAAO,SAAS,CACzB,CACJ,EACA,SAASmE,IAAW,CAChB,OAAO,IAAI,QAASK,GAAY,CACxB,SAAS,YAAc,UACvB,SAAS,iBAAiB,mBAAoB,IAAMA,EAAQ,CAAC,EAG7DA,EAAQ,CAEhB,CAAC,CACL,CAEA,SAASC,GAAwBnG,EAAa,CAE1C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAYgE,IACxB,OAAO,OAAOhE,EAAYiE,GAA6BD,CAAe,CAAC,EAC/E,CAAC,CAAC,CACT,CACA,SAASC,GAA6BxJ,EAAK,CACvC,MAAO,CACH,CAAC,GAAGA,UAAa,CACb,KAAM,CACF,GAAM,CAAE,QAAAyJ,CAAQ,EAAI,KACpB,GAAIA,EAAQ,IAAIzJ,CAAG,EACf,OAAOyJ,EAAQ,IAAIzJ,CAAG,EAErB,CACD,IAAME,EAAYuJ,EAAQ,iBAAiBzJ,CAAG,EAC9C,MAAM,IAAI,MAAM,sBAAsBE,IAAY,CACtD,CACJ,CACJ,EACA,CAAC,GAAGF,YAAe,CACf,KAAM,CACF,OAAO,KAAK,QAAQ,OAAOA,CAAG,CAClC,CACJ,EACA,CAAC,MAAM+C,GAAW/C,CAAG,UAAW,CAC5B,KAAM,CACF,OAAO,KAAK,QAAQ,IAAIA,CAAG,CAC/B,CACJ,CACJ,CACJ,CAEA,SAAS0J,GAAyBvG,EAAa,CAE3C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAYoE,IACxB,OAAO,OAAOpE,EAAYqE,GAA8BD,CAAgB,CAAC,EACjF,CAAC,CAAC,CACT,CACA,SAASE,GAAoB9E,EAAYjG,EAASgG,EAAY,CAC1D,OAAOC,EAAW,YAAY,qCAAqCjG,EAASgG,CAAU,CAC1F,CACA,SAASgF,GAAqC/E,EAAYjG,EAASgF,EAAY,CAC3E,IAAIiG,EAAmBF,GAAoB9E,EAAYjG,EAASgF,CAAU,EAK1E,GAJIiG,IAEJhF,EAAW,YAAY,OAAO,6CAA6CjG,EAASgF,CAAU,EAC9FiG,EAAmBF,GAAoB9E,EAAYjG,EAASgF,CAAU,EAClEiG,GACA,OAAOA,CACf,CACA,SAASH,GAA8BvH,EAAM,CACzC,IAAM2H,EAAgB/E,GAAkB5C,CAAI,EAC5C,MAAO,CACH,CAAC,GAAG2H,WAAwB,CACxB,KAAM,CACF,IAAMC,EAAgB,KAAK,QAAQ,KAAK5H,CAAI,EACtCtD,EAAW,KAAK,QAAQ,yBAAyBsD,CAAI,EAC3D,GAAI4H,EAAe,CACf,IAAMF,EAAmBD,GAAqC,KAAMG,EAAe5H,CAAI,EACvF,GAAI0H,EACA,OAAOA,EACX,MAAM,IAAI,MAAM,gEAAgE1H,oCAAuC,KAAK,aAAa,CAC7I,CACA,MAAM,IAAI,MAAM,2BAA2BA,2BAA8B,KAAK,iFAAiFtD,KAAY,CAC/K,CACJ,EACA,CAAC,GAAGiL,YAAyB,CACzB,KAAM,CACF,IAAMpC,EAAU,KAAK,QAAQ,QAAQvF,CAAI,EACzC,OAAIuF,EAAQ,OAAS,EACVA,EACF,IAAKqC,GAAkB,CACxB,IAAMF,EAAmBD,GAAqC,KAAMG,EAAe5H,CAAI,EACvF,GAAI0H,EACA,OAAOA,EACX,QAAQ,KAAK,gEAAgE1H,oCAAuC,KAAK,cAAe4H,CAAa,CACzJ,CAAC,EACI,OAAQlF,GAAeA,CAAU,EAEnC,CAAC,CACZ,CACJ,EACA,CAAC,GAAGiF,kBAA+B,CAC/B,KAAM,CACF,IAAMC,EAAgB,KAAK,QAAQ,KAAK5H,CAAI,EACtCtD,EAAW,KAAK,QAAQ,yBAAyBsD,CAAI,EAC3D,GAAI4H,EACA,OAAOA,EAGP,MAAM,IAAI,MAAM,2BAA2B5H,2BAA8B,KAAK,iFAAiFtD,KAAY,CAEnL,CACJ,EACA,CAAC,GAAGiL,mBAAgC,CAChC,KAAM,CACF,OAAO,KAAK,QAAQ,QAAQ3H,CAAI,CACpC,CACJ,EACA,CAAC,MAAMU,GAAWiH,CAAa,WAAY,CACvC,KAAM,CACF,OAAO,KAAK,QAAQ,IAAI3H,CAAI,CAChC,CACJ,CACJ,CACJ,CAEA,SAAS6H,GAAyB/G,EAAa,CAE3C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAY4E,IACxB,OAAO,OAAO5E,EAAY6E,GAA8BD,CAAgB,CAAC,EACjF,CAAC,CAAC,CACT,CACA,SAASC,GAA8B/H,EAAM,CACzC,MAAO,CACH,CAAC,GAAGA,WAAe,CACf,KAAM,CACF,IAAMgF,EAAS,KAAK,QAAQ,KAAKhF,CAAI,EACrC,GAAIgF,EACA,OAAOA,EAGP,MAAM,IAAI,MAAM,2BAA2BhF,WAAc,KAAK,wBAAwB,CAE9F,CACJ,EACA,CAAC,GAAGA,YAAgB,CAChB,KAAM,CACF,OAAO,KAAK,QAAQ,QAAQA,CAAI,CACpC,CACJ,EACA,CAAC,MAAMU,GAAWV,CAAI,WAAY,CAC9B,KAAM,CACF,OAAO,KAAK,QAAQ,IAAIA,CAAI,CAChC,CACJ,CACJ,CACJ,CAEA,SAASgI,GAAwBlH,EAAa,CAC1C,IAAMmH,EAAuB7G,GAAiCN,EAAa,QAAQ,EAC7EoH,EAAwB,CAC1B,mBAAoB,CAChB,KAAM,CACF,OAAOD,EAAqB,OAAO,CAACE,EAAQC,IAAwB,CAChE,IAAMC,EAAkBC,GAAyBF,EAAqB,KAAK,UAAU,EAC/E5K,EAAgB,KAAK,KAAK,uBAAuB6K,EAAgB,GAAG,EAC1E,OAAO,OAAO,OAAOF,EAAQ,CAAE,CAAC3K,GAAgB6K,CAAgB,CAAC,CACrE,EAAG,CAAC,CAAC,CACT,CACJ,CACJ,EACA,OAAOJ,EAAqB,OAAO,CAAC/E,EAAYkF,IACrC,OAAO,OAAOlF,EAAYqF,GAAiCH,CAAmB,CAAC,EACvFF,CAAqB,CAC5B,CACA,SAASK,GAAiCH,EAAqB1F,EAAY,CACvE,IAAMnB,EAAa+G,GAAyBF,EAAqB1F,CAAU,EACrE,CAAE,IAAA/E,EAAK,KAAAqC,EAAM,OAAQwI,EAAM,OAAQC,CAAM,EAAIlH,EACnD,MAAO,CACH,CAACvB,GAAO,CACJ,KAAM,CACF,IAAMpC,EAAQ,KAAK,KAAK,IAAID,CAAG,EAC/B,OAAIC,IAAU,KACH4K,EAAK5K,CAAK,EAGV2D,EAAW,YAE1B,EACA,IAAI3D,EAAO,CACHA,IAAU,OACV,KAAK,KAAK,OAAOD,CAAG,EAGpB,KAAK,KAAK,IAAIA,EAAK8K,EAAM7K,CAAK,CAAC,CAEvC,CACJ,EACA,CAAC,MAAM8C,GAAWV,CAAI,KAAM,CACxB,KAAM,CACF,OAAO,KAAK,KAAK,IAAIrC,CAAG,GAAK4D,EAAW,qBAC5C,CACJ,CACJ,CACJ,CACA,SAAS+G,GAAyB,CAACnK,EAAOuK,CAAc,EAAGhG,EAAY,CACnE,OAAOiG,GAAyC,CAC5C,WAAAjG,EACA,MAAAvE,EACA,eAAAuK,CACJ,CAAC,CACL,CACA,SAASE,GAAuBC,EAAU,CACtC,OAAQA,QACC,MACD,MAAO,aACN,QACD,MAAO,eACN,OACD,MAAO,cACN,OACD,MAAO,cACN,OACD,MAAO,SAEnB,CACA,SAASC,GAAsB7I,EAAc,CACzC,OAAQ,OAAOA,OACN,UACD,MAAO,cACN,SACD,MAAO,aACN,SACD,MAAO,SAEf,GAAI,MAAM,QAAQA,CAAY,EAC1B,MAAO,QACX,GAAI,OAAO,UAAU,SAAS,KAAKA,CAAY,IAAM,kBACjD,MAAO,QACf,CACA,SAAS8I,GAAqBC,EAAS,CACnC,GAAM,CAAE,WAAAtG,EAAY,MAAAvE,EAAO,WAAA8K,CAAW,EAAID,EACpCE,EAAUC,GAAYF,EAAW,IAAI,EACrCG,EAAaD,GAAYF,EAAW,OAAO,EAC3CI,EAAaH,GAAWE,EACxBE,EAAWJ,GAAW,CAACE,EACvBG,EAAc,CAACL,GAAWE,EAC1BI,EAAiBZ,GAAuBK,EAAW,IAAI,EACvDQ,EAAuBX,GAAsBE,EAAQ,WAAW,OAAO,EAC7E,GAAIM,EACA,OAAOE,EACX,GAAID,EACA,OAAOE,EACX,GAAID,IAAmBC,EAAsB,CACzC,IAAMC,EAAehH,EAAa,GAAGA,KAAcvE,IAAUA,EAC7D,MAAM,IAAI,MAAM,uDAAuDuL,mCAA8CF,sCAAmDP,EAAW,wBAAwBQ,KAAwB,CACvO,CACA,GAAIJ,EACA,OAAOG,CACf,CACA,SAASG,GAAyBX,EAAS,CACvC,GAAM,CAAE,WAAAtG,EAAY,MAAAvE,EAAO,eAAAuK,CAAe,EAAIM,EAExCQ,EAAiBT,GADJ,CAAE,WAAArG,EAAY,MAAAvE,EAAO,WAAYuK,CAAe,CACb,EAChDe,EAAuBX,GAAsBJ,CAAc,EAC3DkB,EAAmBhB,GAAuBF,CAAc,EACxDmB,EAAOL,GAAkBC,GAAwBG,EACvD,GAAIC,EACA,OAAOA,EACX,IAAMH,EAAehH,EAAa,GAAGA,KAAcgG,IAAmBvK,EACtE,MAAM,IAAI,MAAM,uBAAuBuL,WAAsBvL,UAAc,CAC/E,CACA,SAAS2L,GAA0BpB,EAAgB,CAC/C,IAAMG,EAAWD,GAAuBF,CAAc,EACtD,GAAIG,EACA,OAAOkB,GAAoBlB,GAC/B,IAAMO,EAAaY,GAAYtB,EAAgB,SAAS,EAClDQ,EAAUc,GAAYtB,EAAgB,MAAM,EAC5CO,EAAaP,EACnB,GAAIU,EACA,OAAOH,EAAW,QACtB,GAAIC,EAAS,CACT,GAAM,CAAE,KAAAW,CAAK,EAAIZ,EACXgB,EAAmBrB,GAAuBiB,CAAI,EACpD,GAAII,EACA,OAAOF,GAAoBE,EACnC,CACA,OAAOvB,CACX,CACA,SAASC,GAAyCK,EAAS,CACvD,GAAM,CAAE,MAAA7K,EAAO,eAAAuK,CAAe,EAAIM,EAC5BrL,EAAM,GAAG6G,GAAUrG,CAAK,UACxB0L,EAAOF,GAAyBX,CAAO,EAC7C,MAAO,CACH,KAAAa,EACA,IAAAlM,EACA,KAAMuM,GAASvM,CAAG,EAClB,IAAI,cAAe,CACf,OAAOmM,GAA0BpB,CAAc,CACnD,EACA,IAAI,uBAAwB,CACxB,OAAOI,GAAsBJ,CAAc,IAAM,MACrD,EACA,OAAQyB,GAAQN,GAChB,OAAQO,GAAQP,IAASO,GAAQ,OACrC,CACJ,CACA,IAAML,GAAsB,CACxB,IAAI,OAAQ,CACR,MAAO,CAAC,CACZ,EACA,QAAS,GACT,OAAQ,EACR,IAAI,QAAS,CACT,MAAO,CAAC,CACZ,EACA,OAAQ,EACZ,EACMI,GAAU,CACZ,MAAMvM,EAAO,CACT,IAAMwI,EAAQ,KAAK,MAAMxI,CAAK,EAC9B,GAAI,CAAC,MAAM,QAAQwI,CAAK,EACpB,MAAM,IAAI,UAAU,yDAAyDxI,eAAmBkL,GAAsB1C,CAAK,IAAI,EAEnI,OAAOA,CACX,EACA,QAAQxI,EAAO,CACX,MAAO,EAAEA,GAAS,KAAO,OAAOA,CAAK,EAAE,YAAY,GAAK,QAC5D,EACA,OAAOA,EAAO,CACV,OAAO,OAAOA,EAAM,QAAQ,KAAM,EAAE,CAAC,CACzC,EACA,OAAOA,EAAO,CACV,IAAMiG,EAAS,KAAK,MAAMjG,CAAK,EAC/B,GAAIiG,IAAW,MAAQ,OAAOA,GAAU,UAAY,MAAM,QAAQA,CAAM,EACpE,MAAM,IAAI,UAAU,0DAA0DjG,eAAmBkL,GAAsBjF,CAAM,IAAI,EAErI,OAAOA,CACX,EACA,OAAOjG,EAAO,CACV,OAAOA,CACX,CACJ,EACMwM,GAAU,CACZ,QAASC,GACT,MAAOC,GACP,OAAQA,EACZ,EACA,SAASA,GAAU1M,EAAO,CACtB,OAAO,KAAK,UAAUA,CAAK,CAC/B,CACA,SAASyM,GAAYzM,EAAO,CACxB,MAAO,GAAGA,GACd,CAEA,IAAM2M,EAAN,KAAiB,CACb,YAAY/K,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,WAAW,YAAa,CACpB,MAAO,EACX,CACA,OAAO,UAAUgL,EAAaC,EAAc,CAE5C,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACtB,CACA,YAAa,CACb,CACA,SAAU,CACV,CACA,YAAa,CACb,CACA,SAASC,EAAW,CAAE,OAAA1F,EAAS,KAAK,QAAS,OAAAxC,EAAS,CAAC,EAAG,OAAAmI,EAAS,KAAK,WAAY,QAAAC,EAAU,GAAM,WAAAC,EAAa,EAAM,EAAI,CAAC,EAAG,CAC3H,IAAMhB,EAAOc,EAAS,GAAGA,KAAUD,IAAcA,EAC3CI,EAAQ,IAAI,YAAYjB,EAAM,CAAE,OAAArH,EAAQ,QAAAoI,EAAS,WAAAC,CAAW,CAAC,EACnE,OAAA7F,EAAO,cAAc8F,CAAK,EACnBA,CACX,CACJ,EACAP,EAAW,UAAY,CACnBtD,GACAY,GACAG,GACAX,EACJ,EACAkD,EAAW,QAAU,CAAC,EACtBA,EAAW,QAAU,CAAC,EACtBA,EAAW,OAAS,CAAC,EC9/ErB,IAAMQ,GAAcC,GAAY,MAAM,EAEtCD,GAAY,MAAQ,GACpB,OAAO,SAAaA,GCDpB,IAAOE,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACRC,GAAM,sBAAsB,EAE5B,KAAK,iBAAmB,KAAK,KAAK,IAAI,oBAAoB,EAC1D,KAAK,YAAc,KAAK,KAAK,IAAI,cAAc,EAC/C,KAAK,OAAS,KAAK,KAAK,IAAI,gBAAgB,EAE5C,KAAK,aAAe,KAAK,YAAY,KAAK,IAAI,EAC9C,KAAK,YAAc,KAAK,WAAW,KAAK,IAAI,EAE5C,SAAS,iBAAiB,qBAAsB,KAAK,YAAY,EACjE,OAAO,iBAAiB,WAAY,KAAK,WAAW,EAEpD,KAAK,qBAAqB,SAAS,EACnC,KAAK,oBAAoB,CAC3B,CAEA,qBAAsB,CACpB,IAAMC,EAAmB,KAAK,iBAE9B,GAAI,KAAK,cAAgB,YAAa,CACpC,IAAMC,GAAU,OAAS,KAAK,QAAQ,UAAU,EAAG,EAAE,EAErD,CAAC,OAAO,0BAA4B,OAAO,wBAA0B,IAAM,CACzE,KAAK,SAAW,UAAU,OAAO,4BAA6B,CAC5D,QAASD,EACT,OAAQC,EACR,KAAM,SACN,SAAWC,GAAU,CAAE,KAAK,kBAAkBA,EAAOD,CAAM,CAAG,CAChE,CAAC,CACH,EACF,MAAW,KAAK,cAAgB,aAC9B,CAAC,OAAO,iBAAmB,OAAO,eAAiB,IAAM,CAAE,KAAK,kBAAkB,CAAG,EAEzF,CAEA,kBAAkBC,EAAOD,EAAQ,CAC/B,IAAME,EAAoB,SAAS,cAAc,6BAA6B,EACxEC,EAA0B,SAAS,cAAc,oCAAoC,EAEvFD,IAAqBA,EAAkB,MAAQD,GAC/CE,IAA2BA,EAAwB,MAAQ,GAAGH,KAElE,KAAK,qBAAqB,QAAQ,CACpC,CAEA,mBAAoB,CAClB,KAAK,qBAAqB,QAAQ,CACpC,CAEA,kBAAkBI,EAAO,CACvBA,EAAM,eAAe,EAErB,IAAML,EAAmB,KAAK,iBACxBC,EAAS,KAAK,OAEdK,EAASD,EAAM,cAAc,QAAQ,OACrCE,EAAO,SAAS,eAAeD,CAAM,EAI3C,GAFI,CAACC,GACDA,EAAK,QAAQ,YAAc,QAC3B,CAACA,EAAK,eAAe,EAAG,OAE5BA,EAAK,QAAQ,UAAY,OACzB,KAAK,qBAAqB,SAAS,EAEnC,IAAMC,EAAgB,SAAS,eAAe,GAAGF,YAAiB,EAE9DG,EAAcF,EAAK,cAAc,wBAAwB,EAa7D,GAXKE,IACHA,EAAc,SAAS,cAAc,OAAO,EAE5CA,EAAY,KAAO,SACnBA,EAAY,KAAO,WAEnBF,EAAK,YAAYE,CAAW,GAG9BA,EAAY,MAAQD,EAAgBA,EAAc,MAAQ,IAEtD,KAAK,cAAgB,YACvB,WAAW,MAAM,IAAM,CACrB,WAAW,QAAQR,EAAkB,CAAE,OAAQ,OAAOC,GAAS,CAAC,EAC7D,KAAMC,GAAU,CACf,IAAMQ,EAAqB,SAAS,iBAAiB,6BAA6B,EAC5EC,EAA2B,SAAS,iBAAiB,oCAAoC,EAE/FD,EAAmB,QAAQE,GAAS,CAAEA,EAAM,MAAQV,CAAO,CAAC,EAC5DS,EAAyB,QAAQC,GAAS,CAAEA,EAAM,MAAQ,OAAOX,GAAU,CAAC,EAE5EM,EAAK,OAAO,CACd,CAAC,EAAE,MAAM,IAAM,CACb,OAAOA,EAAK,QAAQ,UACpB,KAAK,qBAAqB,QAAQ,CACpC,CAAC,CACL,CAAC,UACQ,KAAK,cAAgB,YAC9B,GAAI,CACE,KAAK,UAAY,UAAU,OAAO,KAAK,QAAQ,EAEnD,IAAMM,EAAqB,SAAS,cAAc,2BAA2B,EACzEA,IAAsBA,EAAmB,UAAY,IAEzDN,EAAK,OAAO,CACd,MAAE,CACA,OAAOA,EAAK,QAAQ,UACpB,KAAK,qBAAqB,QAAQ,CACpC,MAEAA,EAAK,OAAO,CAEhB,CAEA,aAAc,CACZ,SAAS,iBAAiB,sBAAsB,EAAE,QAAQA,GAAQ,CAAE,OAAOA,EAAK,QAAQ,SAAW,CAAC,EACpG,KAAK,qBAAqB,QAAQ,CACpC,CAEA,WAAWF,EAAO,CACZ,CAACA,EAAM,YAEX,SAAS,iBAAiB,sBAAsB,EAAE,QAAQE,GAAQ,CAAE,OAAOA,EAAK,QAAQ,SAAW,CAAC,EACpG,KAAK,qBAAqB,QAAQ,EACpC,CAEA,qBAAqBO,EAAO,CAC1B,GAAI,KAAK,cAAgB,YAAa,CACpC,IAAMC,EAAiB,SAAS,eAAe,iBAAiB,EAE5DA,IAAkBA,EAAe,SAAWD,IAAU,UAC5D,MAAW,KAAK,cAAgB,aACN,SAAS,iBAAiB,kBAAkB,EAEpD,QAAQE,GAAW,CAAEA,EAAQ,SAAWF,IAAU,SAAW,CAAC,CAElF,CAEA,YAAa,CACX,SAAS,oBAAoB,qBAAsB,KAAK,YAAY,EACpE,OAAO,oBAAoB,WAAY,KAAK,WAAW,EAEnD,KAAK,UAAY,UAAU,OAAO,KAAK,QAAQ,EAEnD,IAAMD,EAAqB,SAAS,cAAc,2BAA2B,EACzEA,IAAsBA,EAAmB,UAAY,GAC3D,CACF,ECrJA,IAAOI,GAAP,cAA6BC,CAAW,CAKtC,SAAU,CACR,KAAK,OAAS,OAAO,KAAK,SAAU,CAAE,OAAQ,IAAK,CAAC,EACpD,KAAK,WAAa,GAElB,IAAMC,EAAe,SAAS,eAAe,YAAY,EACnDC,EAAgB,SAAS,eAAe,oBAAoB,EAC5DC,EAAc,SAAS,eAAe,sBAAsB,EAElE,GAAI,CAAC,SAAS,eAAe,cAAc,EAAG,OAE9C,IAAMC,EAAW,KAAK,OAAO,SAAS,CAAE,OAAQ,KAAM,SAAU,MAAO,KAAM,OAAQ,CAAC,EAEtF,KAAK,KAAOA,EAAS,OAAO,SAAS,EACrC,KAAK,KAAK,MAAM,eAAe,EAE/B,KAAK,KAAK,iBAAiB,SAAU,SAAUC,EAAO,CAChDA,EAAM,OACRF,EAAY,UAAU,OAAO,iBAAiB,EAC9CA,EAAY,YAAcE,EAAM,MAAM,QAEtCJ,EAAa,SAAW,GACxBC,EAAc,UAAU,IAAI,QAAQ,IAEpCC,EAAY,YAAc,GAC1BA,EAAY,UAAU,IAAI,iBAAiB,EAE/C,CAAC,EAED,IAAMG,EAAgB,SAAS,eAAe,sBAAsB,EAC9DC,EAAa,SAAS,eAAe,aAAa,EAEpDD,GACFA,EAAc,iBAAiB,SAAU,UAAY,CAC/CA,EAAc,UAChBA,EAAc,UAAU,OAAO,YAAY,EAEvCC,GACFA,EAAW,UAAU,IAAI,QAAQ,EAG/BJ,IACFA,EAAY,UAAU,IAAI,iBAAiB,EAC3CA,EAAY,YAAc,IAGhC,CAAC,CAEL,CAEA,aAAaE,EAAO,CAGlB,GAFAA,EAAM,eAAe,EAEjB,KAAK,WAAY,OAErB,IAAMG,EAAO,KACPP,EAAe,SAAS,eAAe,YAAY,EACnDC,EAAgB,SAAS,eAAe,oBAAoB,EAC5DC,EAAc,SAAS,eAAe,sBAAsB,EAC5DG,EAAgB,SAAS,eAAe,sBAAsB,EAC9DC,EAAa,SAAS,eAAe,aAAa,EAExDN,EAAa,SAAW,GACxBC,EAAc,UAAU,OAAO,QAAQ,EAEvCC,EAAY,UAAU,IAAI,iBAAiB,EAC3CA,EAAY,YAAc,GAE1BG,EAAc,UAAU,OAAO,YAAY,EACvCC,GAAcA,EAAW,UAAU,IAAI,QAAQ,EAEnD,KAAK,WAAa,GAElB,KAAK,OAAO,oBAAoB,OAAQ,KAAK,IAAI,EAAE,KAAK,SAAUE,EAAQ,CACxE,GAAIA,EAAO,MACTD,EAAK,WAAa,GAElBL,EAAY,UAAU,OAAO,iBAAiB,EAC9CA,EAAY,YAAcM,EAAO,MAAM,QAEvCR,EAAa,SAAW,GACxBC,EAAc,UAAU,IAAI,QAAQ,MAC/B,CACL,GAAI,CAACI,EAAc,QAAS,CAC1BE,EAAK,WAAa,GAElB,IAAME,EAAU,mEAEhB,OAAAJ,EAAc,UAAU,IAAI,YAAY,EACpCC,GAAYA,EAAW,UAAU,OAAO,QAAQ,EAEpDJ,EAAY,YAAcO,EAC1BP,EAAY,UAAU,OAAO,iBAAiB,EAE9CF,EAAa,SAAW,GACxBC,EAAc,UAAU,IAAI,QAAQ,EACpCI,EAAc,MAAM,EAEb,EACT,CAEAE,EAAK,mBAAmBC,EAAO,aAAa,CAC9C,CACF,CAAC,CACH,CAEA,mBAAmBE,EAAO,CACxB,IAAMC,EAAO,SAAS,eAAe,cAAc,EAC7CC,EAAgBD,EAAK,cAAc,iCAAiC,EAEtEC,GAAeA,EAAc,OAAO,EAExC,IAAMC,EAAc,SAAS,cAAc,OAAO,EAClDA,EAAY,aAAa,OAAQ,QAAQ,EACzCA,EAAY,aAAa,OAAQ,mBAAmB,EACpDA,EAAY,aAAa,QAASH,EAAM,EAAE,EAE1CC,EAAK,YAAYE,CAAW,EAE5BF,EAAK,cAAc,CACrB,CACF,EA5HEG,GADKhB,GACE,SAAS,CACd,IAAK,MACP,GCHF,IAAOiB,GAAP,cAA6BC,CAAW,CAItC,SAAU,CACJ,CAAC,KAAK,wBAEV,KAAK,QAAU,IAAI,UAAU,MAAM,KAAK,mBAAoB,CAAC,CAAC,EAChE,CAEA,OAAOC,EAAO,CACR,CAAC,KAAK,uBAEN,KAAK,kBACPA,EAAM,eAAe,EACrBA,EAAM,yBAAyB,EAE/B,KAAK,QAAQ,KAAK,EAEtB,CAEA,eAAeA,EAAO,CAChBA,EAAM,OAAO,UACf,KAAK,QAAQ,KAAK,EAElB,KAAK,gBAAkB,GAE3B,CACF,EA3BEC,GADKH,GACE,SAAS,CAAE,WAAY,OAAQ,GACtCG,GAFKH,GAEE,UAAU,CAAC,cAAc,GCLlC,SAASI,GAAkBC,EAAQC,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,GAAIC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeH,EAAQG,EAAW,IAAKA,CAAU,CAAG,CAAE,CAE5T,SAASC,GAAaC,EAAaC,EAAYC,EAAa,CAAE,OAAID,GAAYP,GAAkBM,EAAY,UAAWC,CAAU,EAAOC,GAAaR,GAAkBM,EAAaE,CAAW,EAAG,OAAO,eAAeF,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAQ5R,IAAIG,GAA+B,mCAC/BC,GAAU,EACVC,GAAU,EACVC,GAAO,EACPC,GAAS,EACTC,GAAY,EACZC,GAAW,EACXC,GAAY,EACZC,GAAS,CACX,QAASP,GACT,QAASC,GACT,KAAMC,GACN,OAAQC,GACR,UAAWC,GACX,SAAUC,GACV,UAAWC,EACb,EAEA,SAASE,GAAMC,EAAO,CACpBA,EAAM,OAAS,CACjB,CAEA,SAASC,GAAMC,EAAWC,EAAOC,EAAK,CACpC,OAAO,MAAM,UAAU,MAAM,KAAKF,EAAWC,EAAOC,CAAG,CACzD,CAEA,SAASC,EAAMC,EAAM,CACnB,OAAOA,EAAK,KAAK,MAAMA,EAAM,CAAC,IAAI,EAAE,OAAOL,GAAM,UAAW,CAAC,CAAC,CAAC,CACjE,CAEA,IAAIM,GAAW,WAEXC,GAAO,UAAgB,CAAC,EAE5B,SAASC,GAAIH,EAAM,CACjB,OAAO,sBAAsBA,CAAI,CACnC,CAEA,SAASI,GAAOC,EAAMC,EAAS,CAC7B,OAAO,OAAOA,IAAYD,CAC5B,CAEA,SAASE,GAASD,EAAS,CACzB,MAAO,CAACE,GAAOF,CAAO,GAAKF,GAAO,SAAUE,CAAO,CACrD,CAEA,IAAIG,GAAU,MAAM,QAChBC,GAAaX,EAAMK,GAAQ,UAAU,EACrCO,GAAWZ,EAAMK,GAAQ,QAAQ,EACjCQ,GAAcb,EAAMK,GAAQ,WAAW,EAE3C,SAASI,GAAOF,EAAS,CACvB,OAAOA,IAAY,IACrB,CAEA,SAASO,GAAcP,EAAS,CAC9B,GAAI,CACF,OAAOA,aAAoBA,EAAQ,cAAc,aAAe,QAAQ,WAC1E,MAAE,CACA,MAAO,EACT,CACF,CAEA,SAASQ,GAAQC,EAAO,CACtB,OAAON,GAAQM,CAAK,EAAIA,EAAQ,CAACA,CAAK,CACxC,CAEA,SAASC,GAAQC,EAAQC,EAAU,CACjCJ,GAAQG,CAAM,EAAE,QAAQC,CAAQ,CAClC,CAEA,SAASC,GAASzB,EAAOqB,EAAO,CAC9B,OAAOrB,EAAM,QAAQqB,CAAK,EAAI,EAChC,CAEA,SAASK,GAAK1B,EAAO2B,EAAO,CAC1B,OAAA3B,EAAM,KAAK,MAAMA,EAAOoB,GAAQO,CAAK,CAAC,EAC/B3B,CACT,CAEA,SAAS4B,GAAYC,EAAKC,EAASC,EAAK,CAClCF,GACFP,GAAQQ,EAAS,SAAUE,EAAM,CAC3BA,GACFH,EAAI,UAAUE,EAAM,MAAQ,UAAUC,CAAI,CAE9C,CAAC,CAEL,CAEA,SAASC,GAASJ,EAAKC,EAAS,CAC9BF,GAAYC,EAAKZ,GAASa,CAAO,EAAIA,EAAQ,MAAM,GAAG,EAAIA,EAAS,EAAI,CACzE,CAEA,SAASI,GAAOC,EAAQC,EAAU,CAChCd,GAAQc,EAAUD,EAAO,YAAY,KAAKA,CAAM,CAAC,CACnD,CAEA,SAASE,GAAOC,EAAOC,EAAK,CAC1BjB,GAAQgB,EAAO,SAAUE,EAAM,CAC7B,IAAIL,GAAUI,GAAOC,GAAM,WAEvBL,GACFA,EAAO,aAAaK,EAAMD,CAAG,CAEjC,CAAC,CACH,CAEA,SAASE,GAAQZ,EAAKa,EAAU,CAC9B,OAAOvB,GAAcU,CAAG,IAAMA,EAAI,mBAAwBA,EAAI,SAAS,KAAKA,EAAKa,CAAQ,CAC3F,CAEA,SAASN,GAASD,EAAQO,EAAU,CAClC,IAAIC,EAAYR,EAASlC,GAAMkC,EAAO,QAAQ,EAAI,CAAC,EACnD,OAAOO,EAAWC,EAAU,OAAO,SAAUC,EAAO,CAClD,OAAOH,GAAQG,EAAOF,CAAQ,CAChC,CAAC,EAAIC,CACP,CAEA,SAASC,GAAMT,EAAQO,EAAU,CAC/B,OAAOA,EAAWN,GAASD,EAAQO,CAAQ,EAAE,GAAKP,EAAO,iBAC3D,CAEA,IAAIU,GAAU,OAAO,KAErB,SAASC,GAAOC,EAAQvB,EAAUwB,EAAO,CACvC,OAAID,IACDC,EAAQH,GAAQE,CAAM,EAAE,QAAQ,EAAIF,GAAQE,CAAM,GAAG,QAAQ,SAAUE,EAAK,CAC3EA,IAAQ,aAAezB,EAASuB,EAAOE,GAAMA,CAAG,CAClD,CAAC,EAGIF,CACT,CAEA,SAASG,GAAOH,EAAQ,CACtB,OAAA9C,GAAM,UAAW,CAAC,EAAE,QAAQ,SAAUkD,EAAQ,CAC5CL,GAAOK,EAAQ,SAAU9B,EAAO4B,EAAK,CACnCF,EAAOE,GAAOE,EAAOF,EACvB,CAAC,CACH,CAAC,EACMF,CACT,CAEA,SAASK,GAAML,EAAQ,CACrB,OAAA9C,GAAM,UAAW,CAAC,EAAE,QAAQ,SAAUkD,EAAQ,CAC5CL,GAAOK,EAAQ,SAAU9B,EAAO4B,EAAK,CAC/BlC,GAAQM,CAAK,EACf0B,EAAOE,GAAO5B,EAAM,MAAM,EACjBR,GAASQ,CAAK,EACvB0B,EAAOE,GAAOG,GAAM,CAAC,EAAGvC,GAASkC,EAAOE,EAAI,EAAIF,EAAOE,GAAO,CAAC,EAAG5B,CAAK,EAEvE0B,EAAOE,GAAO5B,CAElB,CAAC,CACH,CAAC,EACM0B,CACT,CAEA,SAASM,GAAKN,EAAQO,EAAM,CAC1BhC,GAAQgC,GAAQT,GAAQE,CAAM,EAAG,SAAUE,EAAK,CAC9C,OAAOF,EAAOE,EAChB,CAAC,CACH,CAEA,SAASM,GAAgBC,EAAMC,EAAO,CACpCnC,GAAQkC,EAAM,SAAU3B,EAAK,CAC3BP,GAAQmC,EAAO,SAAUC,EAAM,CAC7B7B,GAAOA,EAAI,gBAAgB6B,CAAI,CACjC,CAAC,CACH,CAAC,CACH,CAEA,SAASC,EAAaH,EAAMC,EAAOpC,EAAO,CACpCR,GAAS4C,CAAK,EAChBX,GAAOW,EAAO,SAAUG,EAAQ5B,EAAM,CACpC2B,EAAaH,EAAMxB,EAAM4B,CAAM,CACjC,CAAC,EAEDtC,GAAQkC,EAAM,SAAU3B,EAAK,CAC3Bf,GAAOO,CAAK,GAAKA,IAAU,GAAKkC,GAAgB1B,EAAK4B,CAAK,EAAI5B,EAAI,aAAa4B,EAAO,OAAOpC,CAAK,CAAC,CACrG,CAAC,CAEL,CAEA,SAASwC,GAAOC,EAAKL,EAAOtB,EAAQ,CAClC,IAAIN,EAAM,SAAS,cAAciC,CAAG,EAEpC,OAAIL,IACFxC,GAASwC,CAAK,EAAIxB,GAASJ,EAAK4B,CAAK,EAAIE,EAAa9B,EAAK4B,CAAK,GAGlEtB,GAAUD,GAAOC,EAAQN,CAAG,EACrBA,CACT,CAEA,SAASkC,GAAMlC,EAAKmC,EAAM3C,EAAO,CAC/B,GAAIH,GAAYG,CAAK,EACnB,OAAO,iBAAiBQ,CAAG,EAAEmC,GAG1BlD,GAAOO,CAAK,IACfQ,EAAI,MAAMmC,GAAQ,GAAK3C,EAE3B,CAEA,SAAS4C,GAAQpC,EAAKqC,EAAU,CAC9BH,GAAMlC,EAAK,UAAWqC,CAAQ,CAChC,CAEA,SAASC,GAAMtC,EAAK,CAClBA,EAAI,WAAgBA,EAAI,UAAa,GAAKA,EAAI,MAAM,CAClD,cAAe,EACjB,CAAC,CACH,CAEA,SAASuC,GAAavC,EAAK6B,EAAM,CAC/B,OAAO7B,EAAI,aAAa6B,CAAI,CAC9B,CAEA,SAASW,GAASxC,EAAKyC,EAAW,CAChC,OAAOzC,GAAOA,EAAI,UAAU,SAASyC,CAAS,CAChD,CAEA,SAASC,GAAKzF,EAAQ,CACpB,OAAOA,EAAO,sBAAsB,CACtC,CAEA,SAAS0F,GAAOlC,EAAO,CACrBhB,GAAQgB,EAAO,SAAUE,EAAM,CACzBA,GAAQA,EAAK,YACfA,EAAK,WAAW,YAAYA,CAAI,CAEpC,CAAC,CACH,CAEA,SAASiC,GAAUC,EAAM,CACvB,OAAO9B,GAAM,IAAI,UAAU,EAAE,gBAAgB8B,EAAM,WAAW,EAAE,IAAI,CACtE,CAEA,SAASC,GAAQC,EAAGC,EAAiB,CACnCD,EAAE,eAAe,EAEbC,IACFD,EAAE,gBAAgB,EAClBA,EAAE,yBAAyB,EAE/B,CAEA,SAASE,GAAM3C,EAAQO,EAAU,CAC/B,OAAOP,GAAUA,EAAO,cAAcO,CAAQ,CAChD,CAEA,SAASqC,GAAS5C,EAAQO,EAAU,CAClC,OAAOA,EAAWzC,GAAMkC,EAAO,iBAAiBO,CAAQ,CAAC,EAAI,CAAC,CAChE,CAEA,SAASsC,GAAYnD,EAAKC,EAAS,CACjCF,GAAYC,EAAKC,EAAS,EAAK,CACjC,CAEA,SAASmD,GAAOL,EAAG,CACjB,OAAOA,EAAE,SACX,CAEA,SAASM,GAAK7D,EAAO,CACnB,OAAOJ,GAASI,CAAK,EAAIA,EAAQA,EAAQA,EAAQ,KAAO,EAC1D,CAEA,IAAI8D,GAAe,SACfC,GAAiB,QAAUD,GAE/B,SAASE,GAAOC,EAAWC,EAAS,CAClC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,IAAMH,GAAe,MAAQI,GAAW,GAAG,CAE/D,CAEA,IAAIC,GAAM,KAAK,IACXC,GAAM,KAAK,IACXC,GAAQ,KAAK,MACbC,GAAO,KAAK,KACZC,GAAM,KAAK,IAEf,SAASC,GAAmBC,EAAGC,EAAGC,EAAS,CACzC,OAAOJ,GAAIE,EAAIC,CAAC,EAAIC,CACtB,CAEA,SAASC,GAAQC,EAAQJ,EAAGC,EAAGI,EAAW,CACxC,IAAIC,EAAUZ,GAAIM,EAAGC,CAAC,EAClBM,EAAUZ,GAAIK,EAAGC,CAAC,EACtB,OAAOI,EAAYC,EAAUF,GAAUA,EAASG,EAAUD,GAAWF,GAAUA,GAAUG,CAC3F,CAEA,SAASC,GAAMJ,EAAQJ,EAAGC,EAAG,CAC3B,IAAIK,EAAUZ,GAAIM,EAAGC,CAAC,EAClBM,EAAUZ,GAAIK,EAAGC,CAAC,EACtB,OAAOP,GAAIC,GAAIW,EAASF,CAAM,EAAGG,CAAO,CAC1C,CAEA,SAASE,GAAKT,EAAG,CACf,MAAO,EAAEA,EAAI,GAAK,EAAEA,EAAI,EAC1B,CAMA,SAASU,GAAOC,EAAQC,EAAc,CACpC,OAAAC,GAAQD,EAAc,SAAUE,EAAa,CAC3CH,EAASA,EAAO,QAAQ,KAAM,GAAKG,CAAW,CAChD,CAAC,EACMH,CACT,CAEA,SAASI,GAAIC,EAAQ,CACnB,OAAOA,EAAS,GAAK,IAAMA,EAAS,GAAKA,CAC3C,CAEA,IAAIC,GAAM,CAAC,EAEX,SAASC,GAASC,EAAQ,CACxB,MAAO,GAAKA,EAASJ,GAAIE,GAAIE,IAAWF,GAAIE,IAAW,GAAK,CAAC,CAC/D,CAEA,SAASC,IAAc,CACrB,IAAIC,EAAY,CAAC,EAEjB,SAASC,EAAKC,EAASC,EAAQC,EAAUC,EAAS,CAChDC,EAAaJ,EAASC,EAAQ,SAAUI,EAAQC,EAAOC,EAAW,CAChE,IAAIC,EAAiB,qBAAsBH,EACvCI,EAAUD,EAAgBH,EAAO,oBAAoB,KAAKA,EAAQC,EAAOJ,EAAUC,CAAO,EAAIE,EAAO,eAAkB,KAAKA,EAAQH,CAAQ,EAChJM,EAAgBH,EAAO,iBAAiBC,EAAOJ,EAAUC,CAAO,EAAIE,EAAO,YAAeH,CAAQ,EAClGJ,EAAU,KAAK,CAACO,EAAQC,EAAOC,EAAWL,EAAUO,CAAO,CAAC,CAC9D,CAAC,CACH,CAEA,SAASC,EAAOV,EAASC,EAAQC,EAAU,CACzCE,EAAaJ,EAASC,EAAQ,SAAUI,EAAQC,EAAOC,EAAW,CAChET,EAAYA,EAAU,OAAO,SAAUa,EAAU,CAC/C,OAAIA,EAAS,KAAON,GAAUM,EAAS,KAAOL,GAASK,EAAS,KAAOJ,IAAc,CAACL,GAAYS,EAAS,KAAOT,IAChHS,EAAS,GAAG,EACL,IAGF,EACT,CAAC,CACH,CAAC,CACH,CAEA,SAASC,EAASP,EAAQQ,EAAMC,EAAQ,CACtC,IAAIC,EACAC,EAAU,GAEd,OAAI,OAAO,aAAgB,WACzBD,EAAI,IAAI,YAAYF,EAAM,CACxB,QAASG,EACT,OAAQF,CACV,CAAC,GAEDC,EAAI,SAAS,YAAY,aAAa,EACtCA,EAAE,gBAAgBF,EAAMG,EAAS,GAAOF,CAAM,GAGhDT,EAAO,cAAcU,CAAC,EACfA,CACT,CAEA,SAASX,EAAaJ,EAASC,EAAQgB,EAAU,CAC/C3B,GAAQU,EAAS,SAAUK,EAAQ,CACjCA,GAAUf,GAAQW,EAAQ,SAAUiB,EAAS,CAC3CA,EAAQ,MAAM,GAAG,EAAE,QAAQ,SAAUC,EAAS,CAC5C,IAAIC,EAAWD,EAAQ,MAAM,GAAG,EAChCF,EAASZ,EAAQe,EAAS,GAAIA,EAAS,EAAE,CAC3C,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAEA,SAASC,GAAU,CACjBvB,EAAU,QAAQ,SAAUwB,EAAM,CAChCA,EAAK,GAAG,CACV,CAAC,EACDC,GAAMzB,CAAS,CACjB,CAEA,MAAO,CACL,KAAMC,EACN,OAAQW,EACR,SAAUE,EACV,QAASS,CACX,CACF,CAEA,IAAIG,GAAgB,UAChBC,GAAc,QACdC,GAAa,OACbC,GAAc,QACdC,GAAc,QACdC,GAAe,SACfC,GAAiB,WACjBC,GAAgB,UAChBC,GAAe,SACfC,GAAgB,UAChBC,GAAgB,UAChBC,GAAe,SACfC,GAAgB,UAChBC,GAAa,OACbC,GAAiB,WACjBC,GAAgB,UAChBC,GAAe,SACfC,GAAiB,WACjBC,GAAiB,WACjBC,GAAgB,UAChBC,GAAuB,iBACvBC,GAAuB,iBACvBC,GAA2B,qBAC3BC,GAA2B,qBAC3BC,GAA2B,qBAC3BC,GAAsB,gBACtBC,GAAyB,mBACzBC,GAAuB,iBACvBC,GAAwB,kBACxBC,GAAsB,KACtBC,GAAgB,KAChBC,GAA0B,KAE9B,SAASC,EAAeC,EAAS,CAC/B,IAAIC,EAAMD,EAAUA,EAAQ,MAAM,IAAM,SAAS,uBAAuB,EACpEE,EAAS9D,GAAY,EAEzB,SAAS+D,EAAG3D,EAAQC,EAAU,CAC5ByD,EAAO,KAAKD,EAAKG,GAAQ5D,CAAM,EAAE,KAAK,GAAG,EAAG,SAAUc,EAAG,CACvDb,EAAS,MAAMA,EAAU4D,GAAQ/C,EAAE,MAAM,EAAIA,EAAE,OAAS,CAAC,CAAC,CAC5D,CAAC,CACH,CAEA,SAASgD,EAAKzD,EAAO,CACnBqD,EAAO,SAASD,EAAKpD,EAAO0D,GAAM,UAAW,CAAC,CAAC,CACjD,CAEA,OAAIP,GACFA,EAAQ,MAAM,GAAGd,GAAegB,EAAO,OAAO,EAGzCM,GAAON,EAAQ,CACpB,IAAKD,EACL,GAAIE,EACJ,IAAKM,EAAMP,EAAO,OAAQD,CAAG,EAC7B,KAAMK,CACR,CAAC,CACH,CAEA,SAASI,GAAgBC,EAAUC,EAAYC,EAAUC,EAAO,CAC9D,IAAIC,EAAM,KAAK,IACXC,EACAC,EAAO,EACPC,EACAC,EAAS,GACTC,EAAQ,EAEZ,SAASC,GAAS,CAChB,GAAI,CAACF,EAAQ,CAIX,GAHAF,EAAON,EAAWW,IAAKP,EAAI,EAAIC,GAAaL,EAAU,CAAC,EAAI,EAC3DE,GAAYA,EAASI,CAAI,EAErBA,GAAQ,IACVL,EAAW,EACXI,EAAYD,EAAI,EAEZD,GAAS,EAAEM,GAASN,GACtB,OAAOS,EAAM,EAIjBL,EAAKM,GAAIH,CAAM,CACjB,CACF,CAEA,SAASI,EAAMC,EAAQ,CACrBA,GAAUC,EAAO,EACjBX,EAAYD,EAAI,GAAKW,EAAST,EAAON,EAAW,GAChDQ,EAAS,GACTD,EAAKM,GAAIH,CAAM,CACjB,CAEA,SAASE,GAAQ,CACfJ,EAAS,EACX,CAEA,SAASS,GAAS,CAChBZ,EAAYD,EAAI,EAChBE,EAAO,EAEHJ,GACFA,EAASI,CAAI,CAEjB,CAEA,SAASU,GAAS,CAChBT,GAAM,qBAAqBA,CAAE,EAC7BD,EAAO,EACPC,EAAK,EACLC,EAAS,EACX,CAEA,SAASU,EAAIC,EAAM,CACjBnB,EAAWmB,CACb,CAEA,SAASC,GAAW,CAClB,OAAOZ,CACT,CAEA,MAAO,CACL,MAAOM,EACP,OAAQG,EACR,MAAOL,EACP,OAAQI,EACR,IAAKE,EACL,SAAUE,CACZ,CACF,CAEA,SAASC,GAAMC,EAAc,CAC3B,IAAIC,EAAQD,EAEZ,SAASJ,EAAIM,EAAO,CAClBD,EAAQC,CACV,CAEA,SAASC,EAAGC,EAAQ,CAClB,OAAOC,GAASlC,GAAQiC,CAAM,EAAGH,CAAK,CACxC,CAEA,MAAO,CACL,IAAKL,EACL,GAAIO,CACN,CACF,CAEA,SAASG,GAASC,EAAMC,EAAU,CAChC,IAAI9B,EAAWD,GAAgB+B,GAAY,EAAGD,EAAM,KAAM,CAAC,EAC3D,OAAO,UAAY,CACjB7B,EAAS,SAAS,GAAKA,EAAS,MAAM,CACxC,CACF,CAEA,SAAS+B,GAAM1C,EAAS2C,EAAajG,EAAS,CAC5C,IAAIwF,EAAQlC,EAAQ,MAChB4C,EAAclG,EAAQ,aAAe,CAAC,EACtCmG,EAAgBnG,EAAQ,eAAiB,CAAC,EAC1CwD,EAAS9D,GAAY,EACrB0G,EAAU,CAAC,EAEf,SAASC,GAAQ,CACf,IAAIC,EAAQtG,EAAQ,aAAe,MACnCuG,GAAQL,CAAW,EAAE,KAAK,SAAUM,EAAGC,EAAG,CACxC,OAAOH,EAAQ,CAACE,EAAI,CAACC,EAAI,CAACA,EAAI,CAACD,CACjC,CAAC,EAAE,QAAQ,SAAUE,EAAK,CACxBC,EAAST,EAAYQ,GAAM,KAAOJ,EAAQ,MAAQ,OAAS,UAAYI,EAAM,KAAK,CACpF,CAAC,EACDC,EAASR,EAAeS,EAA4B,EACpDjC,EAAO,CACT,CAEA,SAASzD,EAAQ2F,EAAY,CACvBA,GACFrD,EAAO,QAAQ,CAEnB,CAEA,SAASmD,EAASG,EAAUC,EAAO,CACjC,IAAIC,EAAY,WAAWD,CAAK,EAChCvD,EAAO,KAAKwD,EAAW,SAAUrC,CAAM,EACvCyB,EAAQ,KAAK,CAACU,EAAUE,CAAS,CAAC,CACpC,CAEA,SAASrC,GAAS,CAChB,IAAIsC,EAAYzB,EAAM,GAAG0B,EAAS,EAC9BC,EAAYnH,EAAQ,UACpBoH,EAAShB,EAAQ,OAAO,SAAUiB,EAASC,EAAO,CACpD,OAAOC,GAAMF,EAASC,EAAM,GAAG,QAAUA,EAAM,GAAK,CAAC,CAAC,CACxD,EAAG,CAAC,CAAC,EACLE,GAAKxH,CAAO,EACZmF,EAAIiC,CAAM,EAENpH,EAAQ,QACVsD,EAAQ,QAAQtD,EAAQ,UAAY,YAAY,EACvCiH,GACT/F,EAAQ,EAAI,EACZoC,EAAQ,MAAM,GAEd6D,IAAcnH,EAAQ,WAAasD,EAAQ,QAAQ,CAEvD,CAEA,SAASmE,EAAOC,EAAQ,CAClB,WAAWd,EAA4B,EAAE,UAC3Cc,EAASH,GAAMvH,EAASmG,CAAa,EAAIqB,GAAKxH,EAASuG,GAAQJ,CAAa,CAAC,EAEjF,CAEA,SAAShB,EAAIwC,EAAMC,EAAMC,EAAQ,CAC/BN,GAAMvH,EAAS2H,CAAI,EACnBC,GAAQL,GAAM,OAAO,eAAevH,CAAO,EAAG2H,CAAI,GAE9CE,GAAU,CAACrC,EAAM,GAAGsC,EAAO,IAC7BxE,EAAQ,KAAKvB,GAAe/B,CAAO,CAEvC,CAEA,MAAO,CACL,MAAOqG,EACP,QAASnF,EACT,OAAQuG,EACR,IAAKtC,CACP,CACF,CAEA,IAAI4C,GAAQ,QACRC,GAAaD,GAAQ,OACrBE,GAAcF,GAAQ,QACtBG,GAAWH,GAAQ,KACnBI,GAAaJ,GAAQ,OAEzB,IAAIK,GAAM,MACNC,GAAM,MACNC,GAAkB,CACpB,MAAO,CAAC,QAAQ,EAChB,KAAM,CAAC,MAAO,OAAO,EACrB,MAAO,CAAC,SAAU,MAAM,EACxB,EAAG,CAAC,GAAG,EACP,EAAG,CAAC,GAAG,EACP,EAAG,CAAC,GAAG,EACP,UAAW,CAACC,GAAUC,EAAW,EACjC,WAAY,CAACC,GAAYC,EAAU,CACrC,EAEA,SAASC,GAAUC,EAASC,EAAaC,EAAS,CAChD,SAASC,EAAQC,EAAMC,EAAUC,EAAW,CAC1CA,EAAYA,GAAaJ,EAAQ,UACjC,IAAIK,EAAQD,IAAcd,IAAO,CAACa,EAAW,EAAIC,IAAcb,GAAM,EAAI,GACzE,OAAOC,GAAgBU,IAASV,GAAgBU,GAAMG,IAAUH,EAAK,QAAQ,oBAAqB,SAAUI,EAAOC,EAAQ,CACzH,IAAIC,EAAchB,GAAgBc,EAAM,YAAY,GAAGD,IAAUC,EACjE,OAAOC,EAAS,EAAIC,EAAY,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAY,MAAM,CAAC,EAAIA,CACnF,CAAC,CACH,CAEA,SAASC,EAAOC,EAAO,CACrB,OAAOA,GAASV,EAAQ,YAAcV,GAAM,EAAI,GAClD,CAEA,MAAO,CACL,QAASW,EACT,OAAQQ,CACV,CACF,CAEA,IAAIE,GAAO,OACPC,GAAY,WACZC,GAAW,WACXC,GAAc,QACdC,GAAgBD,GAAc,WAC9BE,GAAeF,GAAc,UAC7BG,GAAgBH,GAAc,WAC9BI,GAAaJ,GAAc,QAC3BK,GAAkBL,GAAc,aAChCM,GAAcN,GAAc,SAC5BO,GAAmBP,GAAc,cACjCQ,GAAuBR,GAAc,kBACrCS,GAAYT,GAAc,OAC1BU,GAAYV,GAAc,OAC1BW,GAAcX,GAAc,SAC5BY,GAAiB,CAACf,GAAMC,GAAWC,GAAUE,GAAeC,GAAcE,GAAYC,GAAiBC,GAAaC,GAAkBC,EAAoB,EAC1JK,GAAeC,GAAe,KAC9BC,GAAsB,MACtBC,GAAaF,GACbG,GAAcJ,GAAe,QAC7BK,GAAaL,GAAe,OAC5BM,GAAcN,GAAe,QAC7BO,GAAcD,GAAc,UAC5BE,GAAkBF,GAAc,cAChCG,GAAeT,GAAe,SAC9BU,GAAcV,GAAe,QAC7BW,GAAmBD,GAAc,SACjCE,GAAmBF,GAAc,SACjCG,GAAmBb,GAAe,aAClCc,GAAwBD,GAAmB,SAC3CE,GAAiBf,GAAe,WAChCgB,GAAqBD,GAAiB,QACtCE,GAAejB,GAAe,SAC9BkB,GAAoBD,GAAe,SACnCE,GAAqBF,GAAe,UACpCG,GAAgBpB,GAAe,UAC/BqB,GAAWrB,GAAe,KAC1BsB,GAAoBpB,GAAsB,cAC1CqB,GAAerB,GAAsB,SACrCsB,GAAatB,GAAsB,OACnCuB,GAAavB,GAAsB,OACnCwB,GAAgBxB,GAAsB,UACtCyB,GAAgBzB,GAAsB,UACtC0B,GAAiB1B,GAAsB,WACvC2B,GAAiB3B,GAAsB,WACvC4B,GAAiB,CAACP,GAAcG,GAAeF,GAAYC,GAAYE,GAAeC,GAAgBC,EAAc,EACpHE,GAAU,CACZ,MAAOzB,GACP,MAAOC,GACP,OAAQE,GACR,MAAOC,GACP,KAAMC,GACN,KAAMC,GACN,WAAYC,GACZ,KAAMC,GACN,QAASM,EACX,EAEA,SAASY,GAAQC,EAAMC,EAAU,CAC/B,GAAIC,GAAWF,EAAK,OAAO,EACzB,OAAOA,EAAK,QAAQC,CAAQ,EAK9B,QAFIE,EAAMH,EAEHG,GAAOA,EAAI,WAAa,GACzB,CAAAC,GAAQD,EAAKF,CAAQ,GAIzBE,EAAMA,EAAI,cAGZ,OAAOA,CACT,CAEA,IAAIE,GAAW,EACXC,GAAe,IACfC,GAAsB,uBACtBC,GAAsB,sBACtBC,GAAoB,qCAExB,SAASC,GAASxE,EAASC,EAAaC,EAAS,CAC/C,IAAIuE,EAAkBC,EAAe1E,CAAO,EACxC2E,EAAKF,EAAgB,GACrBG,EAAOH,EAAgB,KAEvBI,EAAO7E,EAAQ,KACf8E,EAAO5E,EAAQ,KACf6E,EAAW,CAAC,EACZC,EAAS,CAAC,EACVC,EAAc,CAAC,EACfC,EAAe,CAAC,EAChBC,EACAC,EACAC,EAEJ,SAASC,GAAQ,CACfC,EAAQ,EACRC,EAAK,EACLC,EAAO,CACT,CAEA,SAASC,GAAQ,CACff,EAAGgB,GAAeC,CAAO,EACzBjB,EAAGgB,GAAeL,CAAK,EACvBX,EAAGkB,GAAeJ,CAAM,EACxBb,EAAK,SAAUP,GAAsB,WAAY,SAAUyB,EAAG,CAC5DT,EAAaS,EAAE,OAAS,SAC1B,EAAG,CACD,QAAS,EACX,CAAC,EACDlB,EAAKC,EAAM,UAAW,UAAY,CAChCkB,GAAYlB,EAAMpB,GAAgB,CAAC,CAAC4B,CAAU,CAChD,CAAC,CACH,CAEA,SAASO,EAAQI,EAAY,CAC3B,IAAIC,EAAQrE,GAAe,OAAO,OAAO,EACzCsE,GAAMlB,CAAM,EACZmB,GAAYtB,EAAMI,CAAW,EAC7BkB,GAAYhB,EAAOD,CAAY,EAC/BkB,GAAgB,CAACjB,EAAOC,CAAI,EAAGa,CAAK,EACpCG,GAAgBvB,EAAMmB,EAAaC,EAAQ,CAAC,QAASzE,EAAoB,CAAC,CAC5E,CAEA,SAASiE,GAAS,CAChBU,GAAYtB,EAAMI,CAAW,EAC7BkB,GAAYhB,EAAOD,CAAY,EAC/BD,EAAcoB,EAAWrE,EAAU,EACnCkD,EAAemB,EAAWpE,EAAW,EACrCqE,GAASzB,EAAMI,CAAW,EAC1BqB,GAASnB,EAAOD,CAAY,EAC5BqB,EAAa1B,EAAMzD,GAAYlB,EAAQ,KAAK,EAC5CqG,EAAa1B,EAAMxD,GAAiBnB,EAAQ,UAAU,CACxD,CAEA,SAASqF,GAAU,CACjBJ,EAAQqB,EAAK,IAAMvE,EAAW,EAC9BmD,EAAOqB,GAAMtB,EAAO,IAAMjD,EAAU,EACpCwE,GAAOvB,GAASC,EAAM,kCAAkC,EACxDuB,GAAK3B,EAAQ4B,GAASxB,EAAM,IAAMjD,GAAc,SAAWC,GAAc,GAAG,CAAC,EAC7EyE,GAAO,CACL,OAAQvE,GACR,WAAYI,GACZ,KAAMF,GACN,KAAMC,GACN,IAAKI,GACL,OAAQC,EACV,EAAG,SAAUgE,EAAWC,EAAK,CAC3BhC,EAASgC,GAAOP,EAAK,IAAMM,CAAS,CACtC,CAAC,EACDE,GAAOjC,EAAU,CACf,KAAMF,EACN,MAAOM,EACP,KAAMC,EACN,OAAQJ,CACV,CAAC,CACH,CAEA,SAASQ,GAAO,CACd,IAAIyB,EAAKpC,EAAK,IAAMqC,GAASpF,EAAY,EACrCqF,EAAOjH,EAAQ,KACnB2E,EAAK,GAAKoC,EACV9B,EAAM,GAAKA,EAAM,IAAM8B,EAAK,SAC5B7B,EAAK,GAAKA,EAAK,IAAM6B,EAAK,QAEtB,CAACG,GAAavC,EAAMhE,EAAI,GAAKgE,EAAK,UAAY,WAAasC,GAC7DZ,EAAa1B,EAAMhE,GAAMsG,CAAI,EAG/BZ,EAAa1B,EAAMrD,GAAsBsD,EAAK,QAAQ,EACtDyB,EAAanB,EAAMvE,GAAM,cAAc,CACzC,CAEA,SAAS2F,EAAKzC,EAAU,CACtB,IAAIE,EAAMoD,GAAMxC,EAAMd,CAAQ,EAC9B,OAAOE,GAAOJ,GAAQI,EAAK,IAAMjC,EAAU,IAAM6C,EAAOZ,EAAM,MAChE,CAEA,SAASoC,EAAWiB,EAAM,CACxB,MAAO,CAACA,EAAO,KAAOpH,EAAQ,KAAMoH,EAAO,KAAOpH,EAAQ,UAAWA,EAAQ,MAAQoH,EAAO,cAAepH,EAAQ,cAAgBoH,EAAO,QAASA,IAAStF,IAAcoB,EAAY,CACxL,CAEA,OAAO4D,GAAOjC,EAAU,CACtB,MAAOO,EACP,MAAOI,EACP,QAASE,CACX,CAAC,CACH,CAEA,IAAI2B,GAAQ,QACRC,GAAO,OACPC,GAAO,OAEX,SAASC,GAAQ1H,EAASO,EAAOoH,EAAYC,EAAO,CAClD,IAAIC,EAAQnD,EAAe1E,CAAO,EAC9B2E,EAAKkD,EAAM,GACXC,EAAOD,EAAM,KACbjD,EAAOiD,EAAM,KACbE,EAAa/H,EAAQ,WACrB6E,EAAO7E,EAAQ,KACfE,EAAUF,EAAQ,QAClBgI,EAAe9H,EAAQ,aACvB+H,EAAe/H,EAAQ,aACvB4E,EAAO5E,EAAQ,KACfgI,EAAahI,EAAQ,WACrBiI,EAAajI,EAAQ,WACrBC,EAAU4H,EAAW,UAAU,QAC/BK,EAAShB,GAAaQ,EAAO,OAAO,EACpCS,EAAQjB,GAAaQ,EAAOxG,EAAU,EACtCkH,EAAUX,EAAa,GACvBY,EAAY9B,GAAMmB,EAAO,IAAMvF,EAAe,EAC9CmG,EAEJ,SAAS9C,GAAQ,CACV4C,IACHV,EAAM,GAAK/C,EAAK,GAAK,SAAW4D,GAAIlI,EAAQ,CAAC,EAC7CgG,EAAaqB,EAAO/G,GAAMqH,EAAa,WAAa,OAAO,EAC3D3B,EAAaqB,EAAOpG,GAAsBsD,EAAK,KAAK,EACpDyB,EAAaqB,EAAOxG,GAAYiH,GAASK,GAAO5D,EAAK,WAAY,CAACvE,EAAQ,EAAGP,EAAQ,MAAM,CAAC,CAAC,GAG/F2I,EAAO,CACT,CAEA,SAASA,GAAS,CAChB/D,EAAKgD,EAAO,QAASgB,EAAMd,EAAMe,GAAaC,CAAI,CAAC,EACnDlE,EAAKgD,EAAO,UAAWgB,EAAMd,EAAMiB,GAAqBD,CAAI,CAAC,EAC7DnE,EAAG,CAACqE,GAAaC,GAAeC,EAAc,EAAGzD,CAAM,EACvDd,EAAGwE,GAA0BC,CAAc,EAEvCnB,GACFtD,EAAG0E,GAAYC,CAAM,CAEzB,CAEA,SAAS1D,GAAU,CACjB4C,EAAY,GACZX,EAAM,QAAQ,EACd1B,GAAYyB,EAAOjE,EAAc,EACjCyC,GAAgBwB,EAAOhG,EAAc,EACrC2E,EAAaqB,EAAO,QAASQ,CAAM,EACnC7B,EAAaqB,EAAOxG,GAAYiH,GAAS,EAAE,CAC7C,CAEA,SAASe,GAAiB,CACxB,IAAIG,EAAWvJ,EAAQ,QAAQ,IAAI,SAAUwJ,EAAQ,CACnD,IAAIC,EAASD,EAAO,OAAO,WAAW,OAAO,MAAMjJ,CAAK,EACxD,OAAOkJ,EAASA,EAAO,MAAM,GAAK,EACpC,CAAC,EAAE,KAAK,GAAG,EACXlD,EAAaqB,EAAOxG,GAAYsH,GAAO5D,EAAK,QAASwD,EAAUX,EAAapH,GAAS,CAAC,CAAC,EACvFgG,EAAaqB,EAAO3G,GAAesI,CAAQ,EAC3ChD,EAAaqB,EAAO/G,GAAMsH,EAAa,SAAW,EAAE,EACpDA,GAAc/B,GAAgBwB,EAAOpG,EAAoB,CAC3D,CAEA,SAAS8H,GAAS,CACXd,GACH/C,EAAO,CAEX,CAEA,SAASA,GAAS,CAChB,GAAI,CAAC+C,EAAW,CACd,IAAIkB,EAAO1J,EAAQ,MACnB2J,EAAe,EACfC,EAAiB,EACjB7D,GAAY6B,EAAOvE,GAAY9C,IAAUmJ,EAAO,CAAC,EACjD3D,GAAY6B,EAAOtE,GAAY/C,IAAUmJ,EAAO,CAAC,CACnD,CACF,CAEA,SAASC,GAAiB,CACxB,IAAIE,EAASC,EAAS,EAElBD,IAAWE,GAASnC,EAAOxE,EAAY,IACzC2C,GAAY6B,EAAOxE,GAAcyG,CAAM,EACvCtD,EAAaqB,EAAO1G,GAAc8G,GAAgB6B,GAAU,EAAE,EAC9D/B,EAAK+B,EAASG,GAAeC,GAAgBnB,CAAI,EAErD,CAEA,SAASc,GAAmB,CAC1B,IAAIM,EAAUC,GAAU,EACpBC,EAAS,CAACF,IAAY,CAACJ,EAAS,GAAKxB,GAiBzC,GAfKtI,EAAQ,MAAM,GAAG,CAACqK,GAAQC,EAAS,CAAC,GACvC/D,EAAaqB,EAAOtG,GAAa8I,GAAU,EAAE,EAG/C7D,EAAagE,GAAS3C,EAAO1H,EAAQ,gBAAkB,EAAE,EAAGY,GAAWsJ,EAAS,GAAK,EAAE,EAEnFjC,GACF5B,EAAaqB,EAAO9G,GAAWsJ,EAAS,GAAK,CAAC,EAG5CF,IAAYH,GAASnC,EAAOrE,EAAa,IAC3CwC,GAAY6B,EAAOrE,GAAe2G,CAAO,EACzCpC,EAAKoC,EAAUM,GAAgBC,GAAc3B,CAAI,GAG/C,CAACoB,GAAW,SAAS,gBAAkBtC,EAAO,CAChD,IAAI6B,EAAS1B,EAAW,OAAO,MAAM/H,EAAQ,KAAK,EAClDyJ,GAAUiB,GAAMjB,EAAO,KAAK,CAC9B,CACF,CAEA,SAASkB,EAAQvK,EAAMQ,EAAOgK,EAAc,CAC1CC,GAAMD,GAAgBrC,GAAaX,EAAOxH,EAAMQ,CAAK,CACvD,CAEA,SAASkJ,GAAW,CAClB,IAAIJ,EAAO1J,EAAQ,MACnB,OAAO0J,IAASnJ,GAASL,EAAQ,aAAewJ,IAAS/B,CAC3D,CAEA,SAASwC,IAAY,CACnB,GAAInK,EAAQ,GAAGyH,EAAI,EACjB,OAAOqC,EAAS,EAGlB,IAAIgB,EAAYC,GAAKhD,EAAW,SAAS,KAAK,EAC1CiD,EAAYD,GAAKnD,CAAK,EACtBqD,EAAO9K,EAAQ,OAAQ,EAAI,EAC3B+K,EAAQ/K,EAAQ,QAAS,EAAI,EACjC,OAAOgL,GAAML,EAAUG,EAAK,GAAKG,GAAKJ,EAAUC,EAAK,GAAKE,GAAMH,EAAUE,EAAM,GAAKE,GAAKN,EAAUI,EAAM,CAC5G,CAEA,SAASG,EAASvH,EAAMwH,EAAU,CAChC,IAAIC,EAAOC,GAAI1H,EAAOvD,CAAK,EAE3B,MAAI,CAAC+H,IAAYpI,EAAQ,QAAUF,EAAQ,GAAGwH,EAAI,KAChD+D,EAAOE,GAAIF,EAAMvL,EAAQ,OAASuL,CAAI,GAGjCA,GAAQD,CACjB,CAEA,IAAIxC,EAAO,CACT,MAAOvI,EACP,WAAYoH,EACZ,MAAOC,EACP,UAAWW,EACX,QAASD,EACT,MAAO5C,EACP,QAASE,EACT,OAAQH,EACR,MAAOkF,EACP,SAAUU,CACZ,EACA,OAAOvC,CACT,CAEA,SAAS4C,GAAO1L,EAASC,EAAaC,EAAS,CAC7C,IAAIyL,EAAmBjH,EAAe1E,CAAO,EACzC2E,EAAKgH,EAAiB,GACtB7D,EAAO6D,EAAiB,KACxB/G,EAAO+G,EAAiB,KAExBC,EAAwB3L,EAAY,SACpC+E,EAAS4G,EAAsB,OAC/BxG,EAAOwG,EAAsB,KAC7BC,EAAU,CAAC,EAEf,SAASnG,GAAQ,CACfF,EAAK,EACLb,EAAGgB,GAAeC,CAAO,EACzBjB,EAAGgB,GAAeH,CAAI,CACxB,CAEA,SAASA,GAAO,CACdR,EAAO,QAAQ,SAAU4C,EAAOrH,EAAO,CACrCuL,EAASlE,EAAOrH,EAAO,EAAE,CAC3B,CAAC,CACH,CAEA,SAASqF,GAAU,CACjBmG,EAAU,SAAUtC,EAAQ,CAC1BA,EAAO,QAAQ,CACjB,CAAC,EACDvD,GAAM2F,CAAO,CACf,CAEA,SAASpG,GAAS,CAChBsG,EAAU,SAAUtC,EAAQ,CAC1BA,EAAO,OAAO,CAChB,CAAC,CACH,CAEA,SAASqC,EAASlE,EAAOrH,EAAOoH,EAAY,CAC1C,IAAIqE,EAAStE,GAAQ1H,EAASO,EAAOoH,EAAYC,CAAK,EACtDoE,EAAO,MAAM,EACbH,EAAQ,KAAKG,CAAM,EACnBH,EAAQ,KAAK,SAAUI,EAAQxC,GAAQ,CACrC,OAAOwC,EAAO,MAAQxC,GAAO,KAC/B,CAAC,CACH,CAEA,SAASyC,EAAIC,EAAe,CAC1B,OAAOA,EAAgBC,EAAO,SAAU3C,EAAQ,CAC9C,MAAO,CAACA,EAAO,OACjB,CAAC,EAAIoC,CACP,CAEA,SAASQ,EAAMC,EAAM,CACnB,IAAIC,EAAatM,EAAY,WACzBM,EAAQgM,EAAW,QAAQD,CAAI,EAC/BE,EAAMD,EAAW,SAAS,EAAI,EAAIrM,EAAQ,QAC9C,OAAOkM,EAAO,SAAU3C,EAAQ,CAC9B,OAAOgD,GAAQhD,EAAO,MAAOlJ,EAAOA,EAAQiM,EAAM,CAAC,CACrD,CAAC,CACH,CAEA,SAASE,EAAMnM,EAAO,CACpB,OAAO6L,EAAO7L,CAAK,EAAE,EACvB,CAEA,SAASoM,EAAIC,EAAOrM,EAAO,CACzBsM,GAAQD,EAAO,SAAUhF,EAAO,CAK9B,GAJIkF,GAASlF,CAAK,IAChBA,EAAQmF,GAAUnF,CAAK,GAGrBoF,GAAcpF,CAAK,EAAG,CACxB,IAAIqF,EAAMjI,EAAOzE,GACjB0M,EAAMC,GAAOtF,EAAOqF,CAAG,EAAIE,GAAO/H,EAAMwC,CAAK,EAC7CtB,GAASsB,EAAO1H,EAAQ,QAAQ,KAAK,EACrCkN,EAAcxF,EAAOgB,EAAMd,EAAMuF,EAAY,CAAC,CAChD,CACF,CAAC,EACDvF,EAAKnC,EAAa,CACpB,CAEA,SAAS2H,EAASC,EAAS,CACzBC,GAAOpB,EAAOmB,CAAO,EAAE,IAAI,SAAU9D,EAAQ,CAC3C,OAAOA,EAAO,KAChB,CAAC,CAAC,EACF3B,EAAKnC,EAAa,CACpB,CAEA,SAASoG,EAAU0B,EAAUtB,EAAe,CAC1CD,EAAIC,CAAa,EAAE,QAAQsB,CAAQ,CACrC,CAEA,SAASrB,EAAOmB,EAAS,CACvB,OAAO1B,EAAQ,OAAO7H,GAAWuJ,CAAO,EAAIA,EAAU,SAAU9D,EAAQ,CACtE,OAAOqD,GAASS,CAAO,EAAIrJ,GAAQuF,EAAO,MAAO8D,CAAO,EAAIG,GAASC,GAAQJ,CAAO,EAAG9D,EAAO,KAAK,CACrG,CAAC,CACH,CAEA,SAASoB,EAAMzK,EAAMQ,EAAOgK,EAAc,CACxCmB,EAAU,SAAUtC,EAAQ,CAC1BA,EAAO,MAAMrJ,EAAMQ,EAAOgK,CAAY,CACxC,CAAC,CACH,CAEA,SAASwC,EAAcnJ,EAAK2J,EAAU,CACpC,IAAIC,EAAStD,GAAStG,EAAK,KAAK,EAC5B6J,EAASD,EAAO,OAEhBC,EACFD,EAAO,QAAQ,SAAUE,EAAK,CAC5BnJ,EAAKmJ,EAAK,aAAc,UAAY,CAC5B,EAAED,GACNF,EAAS,CAEb,CAAC,CACH,CAAC,EAEDA,EAAS,CAEb,CAEA,SAASI,EAAU7B,EAAe,CAChC,OAAOA,EAAgBnH,EAAO,OAAS6G,EAAQ,MACjD,CAEA,SAASoC,GAAW,CAClB,OAAOpC,EAAQ,OAAS3L,EAAQ,OAClC,CAEA,MAAO,CACL,MAAOwF,EACP,QAASE,EACT,OAAQH,EACR,SAAUqG,EACV,IAAKI,EACL,MAAOG,EACP,MAAOK,EACP,IAAKC,EACL,OAAQW,EACR,QAASvB,EACT,OAAQK,EACR,MAAOvB,EACP,UAAWmD,EACX,SAAUC,CACZ,CACF,CAEA,SAASC,GAAOlO,EAASC,EAAaC,EAAS,CAC7C,IAAIiO,EAAmBzJ,EAAe1E,CAAO,EACzC2E,EAAKwJ,EAAiB,GACtBvJ,EAAOuJ,EAAiB,KACxBrG,EAAOqG,EAAiB,KAExBzC,EAASzL,EAAY,OACrBE,EAAUF,EAAY,UAAU,QAChCmO,EAAyBnO,EAAY,SACrC4E,EAAOuJ,EAAuB,KAC9BjJ,EAAQiJ,EAAuB,MAC/BhJ,EAAOgJ,EAAuB,KAC9B1B,EAAQhB,EAAO,MACf2C,EAAc3C,EAAO,MACrB4C,EACAC,EACAC,EAEJ,SAAS9I,GAAQ,CACfF,EAAK,EACLZ,EAAK,OAAQ,cAAe6J,GAAS7F,EAAMd,EAAMuF,EAAY,CAAC,CAAC,EAC/D1I,EAAG,CAACkB,GAAeF,EAAa,EAAGH,CAAI,EACvCb,EAAG0I,GAAcqB,CAAM,CACzB,CAEA,SAASlJ,GAAO,CACd8I,EAAWpO,EAAQ,YAAcT,GACjCoL,GAAMhG,EAAM,WAAY8J,GAAKzO,EAAQ,KAAK,CAAC,EAC3C2K,GAAM1F,EAAOhF,EAAQ,aAAa,EAAGyO,EAAW,EAAK,CAAC,EACtD/D,GAAM1F,EAAOhF,EAAQ,cAAc,EAAGyO,EAAW,EAAI,CAAC,EACtDF,EAAO,EAAI,CACb,CAEA,SAASA,EAAOG,EAAO,CACrB,IAAIC,EAAU/D,GAAKlG,CAAI,GAEnBgK,GAASN,EAAS,QAAUO,EAAQ,OAASP,EAAS,SAAWO,EAAQ,UAC3EjE,GAAM1F,EAAO,SAAU4J,EAAe,CAAC,EACvCV,EAAYlO,EAAQ,aAAa,EAAGwO,GAAKzO,EAAQ,GAAG,CAAC,EACrDmO,EAAY,QAASW,EAAc,CAAC,EACpCX,EAAY,SAAUY,EAAe,EAAG,EAAI,EAC5CV,EAAWO,EACXhH,EAAKoH,EAAa,EAEdV,KAAcA,EAAWW,EAAW,KACtCpJ,GAAYlB,EAAMnB,GAAgB8K,CAAQ,EAC1C1G,EAAKsH,GAAgBZ,CAAQ,GAGnC,CAEA,SAASI,EAAW1D,EAAO,CACzB,IAAImE,EAAUnP,EAAQ,QAClBE,EAAOD,EAAQ+K,EAAQ,QAAU,MAAM,EAC3C,OAAOmE,GAAWV,GAAKU,EAAQjP,KAAUkP,GAASD,CAAO,EAAI,EAAIA,EAAQ,GAAK,KAChF,CAEA,SAASN,GAAiB,CACxB,IAAIQ,EAAS,GAEb,OAAIjB,IACFiB,EAASC,EAAU,EACnB9I,GAAO6I,EAAQ,mCAAmC,EAClDA,EAAS,QAAUA,EAAS,MAAQX,EAAW,EAAK,EAAI,MAAQA,EAAW,EAAI,EAAI,KAG9EW,CACT,CAEA,SAASC,GAAY,CACnB,OAAOb,GAAKzO,EAAQ,QAAU6K,GAAK3F,CAAI,EAAE,MAAQlF,EAAQ,WAAW,CACtE,CAEA,SAAS8O,GAAgB,CACvB,OAAO9O,EAAQ,UAAY,KAAOyO,GAAKzO,EAAQ,UAAU,IAAMoO,EAAW,GAAKmB,EAAa,EAC9F,CAEA,SAASR,GAAiB,CACxB,OAAON,GAAKzO,EAAQ,WAAW,IAAMoO,EAAWpO,EAAQ,WAAa,KAAOuP,EAAa,EAAID,EAAU,EACzG,CAEA,SAASC,GAAe,CACtB,IAAIC,EAAMf,GAAKzO,EAAQ,GAAG,EAC1B,MAAO,cAAgBwP,GAAO,MAAQA,GAAO,MAAQxP,EAAQ,SAAW,IAAMwP,GAAO,MAAQA,GAAO,GACtG,CAEA,SAASC,GAAW,CAClB,OAAO5E,GAAK3F,CAAI,EAAEjF,EAAQ,OAAO,EACnC,CAEA,SAASyP,EAAUrP,EAAOsP,EAAY,CACpC,IAAIC,EAAQpD,EAAMnM,GAAS,CAAC,EAC5B,OAAOuP,EAAQ/E,GAAK+E,EAAM,KAAK,EAAE3P,EAAQ,OAAO,IAAM0P,EAAa,EAAIE,EAAO,GAAK,CACrF,CAEA,SAASC,EAAUzP,EAAOsP,EAAY,CACpC,IAAIC,EAAQpD,EAAMnM,CAAK,EAEvB,GAAIuP,EAAO,CACT,IAAI5E,EAAQH,GAAK+E,EAAM,KAAK,EAAE3P,EAAQ,OAAO,GACzC8K,EAAOF,GAAK3F,CAAI,EAAEjF,EAAQ,MAAM,GACpC,OAAOqL,GAAIN,EAAQD,CAAI,GAAK4E,EAAa,EAAIE,EAAO,EACtD,CAEA,MAAO,EACT,CAEA,SAASE,EAAWJ,EAAY,CAC9B,OAAOG,EAAUhQ,EAAQ,OAAS,CAAC,EAAIgQ,EAAU,CAAC,EAAIJ,EAAU,EAAGC,CAAU,CAC/E,CAEA,SAASE,GAAS,CAChB,IAAID,EAAQpD,EAAM,CAAC,EACnB,OAAOoD,GAAS,WAAWjF,GAAMiF,EAAM,MAAO3P,EAAQ,aAAa,CAAC,CAAC,GAAK,CAC5E,CAEA,SAAS+P,GAAWhF,EAAO,CACzB,OAAO,WAAWL,GAAM1F,EAAOhF,EAAQ,WAAa+K,EAAQ,QAAU,OAAO,CAAC,CAAC,GAAK,CACtF,CAEA,SAASiE,GAAa,CACpB,OAAOnP,EAAQ,GAAGyH,EAAI,GAAKwI,EAAW,EAAI,EAAIN,EAAS,CACzD,CAEA,MAAO,CACL,MAAOjK,EACP,OAAQgJ,EACR,SAAUiB,EACV,UAAWC,EACX,WAAYK,EACZ,UAAWD,EACX,WAAYE,GACZ,WAAYf,CACd,CACF,CAEA,IAAIgB,GAAa,EAEjB,SAASC,GAAOpQ,EAASC,EAAaC,EAAS,CAC7C,IAAI2H,EAAQnD,EAAe1E,CAAO,EAC9B2E,EAAKkD,EAAM,GACXrD,EAAWvE,EAAY,SACvByL,EAASzL,EAAY,OACrBE,EAAUF,EAAY,UAAU,QAChCoQ,EAAS,CAAC,EACVC,EAEJ,SAAS5K,GAAQ,CACff,EAAGgB,GAAe4K,CAAO,EACzB5L,EAAG,CAACkB,GAAewH,EAAY,EAAGmD,CAAO,GAErCF,EAAaG,EAAkB,KACjCC,EAASJ,CAAU,EACnBrQ,EAAY,OAAO,OAAO,EAAI,EAElC,CAEA,SAASsQ,GAAU,CACjB3K,EAAQ,EACRF,EAAM,CACR,CAEA,SAASE,GAAU,CACjB4H,GAAO6C,CAAM,EACbnK,GAAMmK,CAAM,EACZxI,EAAM,QAAQ,CAChB,CAEA,SAAS2I,GAAU,CACjB,IAAIG,EAAQF,EAAkB,EAE1BH,IAAeK,IACbL,EAAaK,GAAS,CAACA,IACzB9I,EAAM,KAAKlC,EAAa,CAG9B,CAEA,SAAS+K,EAASC,EAAO,CACvB,IAAI3L,EAAS0G,EAAO,IAAI,EAAE,MAAM,EAC5BoC,EAAS9I,EAAO,OAEpB,GAAI8I,EAAQ,CACV,KAAO9I,EAAO,OAAS2L,GACrBhK,GAAK3B,EAAQA,CAAM,EAGrB2B,GAAK3B,EAAO,MAAM,CAAC2L,CAAK,EAAG3L,EAAO,MAAM,EAAG2L,CAAK,CAAC,EAAE,QAAQ,SAAUb,EAAOvP,EAAO,CACjF,IAAIqQ,EAASrQ,EAAQoQ,EACjBE,EAAQC,EAAUhB,EAAM,MAAOvP,CAAK,EACxCqQ,EAAS1D,GAAO2D,EAAO7L,EAAO,GAAG,KAAK,EAAImI,GAAO3I,EAAS,KAAMqM,CAAK,EACrElK,GAAK0J,EAAQQ,CAAK,EAClBnF,EAAO,SAASmF,EAAOtQ,EAAQoQ,GAASC,EAAS,EAAI9C,GAASgC,EAAM,KAAK,CAC3E,CAAC,CACH,CACF,CAEA,SAASgB,EAAU7M,EAAK1D,EAAO,CAC7B,IAAIsQ,EAAQ5M,EAAI,UAAU,EAAI,EAC9B,OAAAqC,GAASuK,EAAO3Q,EAAQ,QAAQ,KAAK,EACrC2Q,EAAM,GAAK7Q,EAAQ,KAAK,GAAK,SAAWyI,GAAIlI,EAAQ,CAAC,EAC9CsQ,CACT,CAEA,SAASJ,GAAoB,CAC3B,IAAIM,EAAU7Q,EAAQ,OAEtB,GAAI,CAACF,EAAQ,GAAGwH,EAAI,EAClBuJ,EAAU,UACDC,GAAYD,CAAO,EAAG,CAC/B,IAAIE,EAAY/Q,EAAQC,EAAQ,YAAY,IAAMF,EAAY,OAAO,UAAU,CAAC,EAC5EiR,EAAaD,GAAa7F,GAAKL,GAAKvG,EAAS,KAAK,EAAErE,EAAQ,OAAO,GAAK8Q,CAAS,EACrFF,EAAUG,GAAchR,EAAQC,EAAQ,WAAW,IAAMH,EAAQ,QAAUE,EAAQ,QAAUiQ,EAC/F,CAEA,OAAOY,CACT,CAEA,MAAO,CACL,MAAOrL,EACP,QAASE,CACX,CACF,CAEA,SAASuL,GAAKnR,EAASC,EAAaC,EAAS,CAC3C,IAAIkR,EAAmB1M,EAAe1E,CAAO,EACzC2E,EAAKyM,EAAiB,GACtBtJ,EAAOsJ,EAAiB,KAExBC,EAAMrR,EAAQ,MAAM,IACpBsR,EAAsBrR,EAAY,OAClC2P,EAAY0B,EAAoB,UAChCpB,EAAaoB,EAAoB,WACjCtB,EAAYsB,EAAoB,UAChC3B,EAAW2B,EAAoB,SAC/BrB,EAAaqB,EAAoB,WACjCC,EAAwBtR,EAAY,UACpCE,EAAUoR,EAAsB,QAChC5Q,EAAS4Q,EAAsB,OAC/BC,EAAyBvR,EAAY,SACrCmF,EAAOoM,EAAuB,KAC9BrM,EAAQqM,EAAuB,MAC/BC,EAEJ,SAAS/L,GAAQ,CACf+L,EAAaxR,EAAY,WACzB0E,EAAG,CAAC+M,GAAexC,GAAerJ,GAAeF,EAAa,EAAGgM,CAAU,CAC7E,CAEA,SAASA,GAAa,CACf1R,EAAY,WAAW,OAAO,IACjCA,EAAY,OAAO,OAAO,EAC1B2R,EAAK5R,EAAQ,KAAK,EAClBC,EAAY,OAAO,OAAO,EAE9B,CAEA,SAAS4R,EAAKC,EAAMvR,EAAOwR,EAAMnE,GAAU,CACrCkE,IAASvR,GAASyR,EAASF,EAAOC,CAAI,IACxCE,EAAO,EACPC,EAAUC,EAAMC,EAAY,EAAGN,EAAOC,CAAI,EAAG,EAAI,GAGnDV,EAAIhH,EAAM,EACVvC,EAAKuB,GAAY9I,EAAOwR,EAAMD,CAAI,EAClCL,EAAW,MAAMlR,EAAO,UAAY,CAClC8Q,EAAIgB,EAAI,EACRvK,EAAKkB,GAAazI,EAAOwR,EAAMD,CAAI,EACnClE,IAAYA,GAAS,CACvB,CAAC,CACH,CAEA,SAASgE,EAAKrR,EAAO,CACnB2R,EAAUI,EAAW/R,EAAO,EAAI,CAAC,CACnC,CAEA,SAAS2R,EAAUK,EAAUC,EAAa,CACxC,GAAI,CAACxS,EAAQ,GAAGyH,EAAI,EAAG,CACrB,IAAIgL,EAAcD,EAAcD,EAAWG,EAAKH,CAAQ,EACxD1H,GAAMzF,EAAM,YAAa,YAAcjF,EAAQ,GAAG,EAAI,IAAMsS,EAAc,KAAK,EAC/EF,IAAaE,GAAe3K,EAAKmB,EAAa,CAChD,CACF,CAEA,SAASyJ,EAAKH,EAAU,CACtB,GAAIvS,EAAQ,GAAGwH,EAAI,EAAG,CACpB,IAAIjH,EAAQoS,EAAQJ,CAAQ,EACxBK,EAAcrS,EAAQN,EAAY,WAAW,OAAO,EACpD4S,GAActS,EAAQ,GAEtBsS,IAAeD,KACjBL,EAAWJ,EAAMI,EAAUK,CAAW,EAE1C,CAEA,OAAOL,CACT,CAEA,SAASJ,EAAMI,EAAUO,EAAW,CAClC,IAAIC,EAASR,EAAWS,EAASF,CAAS,EACtCG,GAAOhD,EAAW,EACtB,OAAAsC,GAAY5R,EAAOsS,IAAQ7H,GAAKI,GAAIuH,CAAM,EAAIE,EAAI,GAAK,EAAE,GAAKH,EAAY,EAAI,IACvEP,CACT,CAEA,SAASN,GAAS,CAChBC,EAAUE,EAAY,EAAG,EAAI,EAC7BX,EAAW,OAAO,CACpB,CAEA,SAASkB,EAAQJ,EAAU,CAKzB,QAJI7G,EAASzL,EAAY,OAAO,IAAI,EAChCM,EAAQ,EACR2S,GAAc,IAETC,GAAI,EAAGA,GAAIzH,EAAO,OAAQyH,KAAK,CACtC,IAAIxL,GAAa+D,EAAOyH,IAAG,MACvB7H,EAAWE,GAAI8G,EAAW3K,GAAY,EAAI,EAAI4K,CAAQ,EAE1D,GAAIjH,GAAY4H,GACdA,GAAc5H,EACd/K,EAAQoH,OAER,MAEJ,CAEA,OAAOpH,CACT,CAEA,SAAS+R,EAAW/R,EAAO6S,EAAU,CACnC,IAAIb,EAAW5R,EAAOqP,EAAUzP,EAAQ,CAAC,EAAIE,GAAOF,CAAK,CAAC,EAC1D,OAAO6S,EAAWC,EAAKd,CAAQ,EAAIA,CACrC,CAEA,SAASH,GAAc,CACrB,IAAInH,EAAO9K,EAAQ,MAAM,EACzB,OAAO4K,GAAK3F,CAAI,EAAE6F,GAAQF,GAAK5F,CAAK,EAAE8F,GAAQtK,EAAOuP,EAAW,EAAK,CAAC,CACxE,CAEA,SAASmD,EAAKd,EAAU,CACtB,OAAIrS,EAAQ,WAAaF,EAAQ,GAAGuH,EAAK,IACvCgL,EAAWe,GAAMf,EAAU,EAAG5R,EAAOsP,EAAW,EAAI,EAAIN,EAAS,CAAC,CAAC,GAG9D4C,CACT,CAEA,SAAS9R,GAAOF,EAAO,CACrB,IAAImK,EAAQxK,EAAQ,MACpB,OAAOwK,IAAU,UAAYiF,EAAS,EAAIC,EAAUrP,EAAO,EAAI,GAAK,EAAI,CAACmK,EAAQkF,EAAUrP,CAAK,GAAK,CACvG,CAEA,SAASyS,EAASxG,EAAK,CACrB,OAAO8F,EAAW9F,EAAMvM,EAAY,WAAW,OAAO,EAAI,EAAG,CAAC,CAACC,EAAQ,SAAS,CAClF,CAEA,SAAS8R,EAASc,EAAW,CAC3B,IAAIS,EAAU5S,EAAOwR,EAAMC,EAAY,EAAGU,CAAS,CAAC,EACpD,OAAOA,EAAYS,GAAW,EAAIA,GAAWnO,EAAKjF,EAAQ,aAAa,GAAK4K,GAAK5F,CAAK,EAAEhF,EAAQ,OAAO,EACzG,CAEA,SAASqT,EAAchH,EAAK+F,EAAU,CACpCA,EAAWvB,GAAYuB,CAAQ,EAAIH,EAAY,EAAIG,EACnD,IAAIM,EAAcrG,IAAQ,IAAQ7L,EAAO4R,CAAQ,EAAI5R,EAAOqS,EAAS,EAAK,CAAC,EACvEJ,GAAcpG,IAAQ,IAAS7L,EAAO4R,CAAQ,EAAI5R,EAAOqS,EAAS,EAAI,CAAC,EAC3E,OAAOH,GAAeD,EACxB,CAEA,MAAO,CACL,MAAOlN,EACP,KAAMmM,EACN,KAAMD,EACN,UAAWM,EACX,MAAOC,EACP,OAAQF,EACR,QAASU,EACT,WAAYL,EACZ,YAAaF,EACb,SAAUY,EACV,cAAeQ,EACf,WAAY7B,CACd,CACF,CAEA,SAASpF,GAAWvM,EAASC,EAAaC,EAAS,CACjD,IAAIuT,EAAmB/O,EAAe1E,CAAO,EACzC2E,EAAK8O,EAAiB,GACtB3L,EAAO2L,EAAiB,KAExBtC,EAAOlR,EAAY,KACnBmS,EAAcjB,EAAK,YACnB6B,EAAW7B,EAAK,SAChBmB,EAAanB,EAAK,WAClBuC,EAAsBzT,EAAY,OAClCgO,EAAWyF,EAAoB,SAC/B1F,EAAY0F,EAAoB,UAChCC,EAAUzT,EAAQ,QAClB0T,EAAS5T,EAAQ,GAAGwH,EAAI,EACxBqM,EAAU7T,EAAQ,GAAGuH,EAAK,EAC1BuM,EAAUlL,EAAMmL,EAAa,EAAK,EAClCC,EAAUpL,EAAMmL,EAAa,EAAI,EACjCE,EAAY/T,EAAQ,OAAS,EAC7BgU,EACAC,EAAYF,EACZG,EACAC,EACAC,EAEJ,SAAS5O,GAAQ,CACfF,EAAK,EACLb,EAAG,CAACkB,GAAeF,GAAe4O,EAAuB,EAAG/O,CAAI,EAChEb,EAAGuK,GAAesF,CAAS,CAC7B,CAEA,SAAShP,GAAO,CACd4O,EAAapG,EAAU,EAAI,EAC3BqG,EAAUnU,EAAQ,QAClBoU,EAAUpU,EAAQ,QAClBgU,EAAWO,EAAO,EAClB,IAAIlU,EAAQ+S,GAAMW,EAAW,EAAGN,EAAUO,EAAWE,EAAa,CAAC,EAE/D7T,IAAU0T,IACZA,EAAY1T,EACZ4Q,EAAK,WAAW,EAEpB,CAEA,SAASqD,GAAY,CACfN,IAAaO,EAAO,GACtB3M,EAAKyM,EAAuB,CAEhC,CAEA,SAASG,EAAGC,EAASC,EAAgBhH,GAAU,CAC7C,GAAI,CAACiH,GAAO,EAAG,CACb,IAAI/C,GAAOgD,EAAMH,CAAO,EACpBpU,GAAQmS,EAAKZ,EAAI,EAEjBvR,GAAQ,KAAOqU,GAAkBrU,KAAU0T,KAC7Cc,EAASxU,EAAK,EACd4Q,EAAK,KAAKW,GAAMvR,GAAO4T,EAAWvG,EAAQ,EAE9C,CACF,CAEA,SAASoH,EAAOvC,EAAawC,EAAUC,GAAMtH,GAAU,CACrD3N,EAAY,OAAO,OAAOwS,EAAawC,EAAUC,GAAM,UAAY,CACjE,IAAI3U,GAAQmS,EAAKvB,EAAK,QAAQiB,EAAY,CAAC,CAAC,EAC5C2C,EAASpB,EAAUlI,GAAIlL,GAAO2T,CAAQ,EAAI3T,EAAK,EAC/CqN,IAAYA,GAAS,CACvB,CAAC,CACH,CAEA,SAASkH,EAAMH,EAAS,CACtB,IAAIpU,EAAQ0T,EAEZ,GAAInH,GAAS6H,CAAO,EAAG,CACrB,IAAIQ,GAAOR,EAAQ,MAAM,iBAAiB,GAAK,CAAC,EAC5CS,GAAYD,GAAK,GACjBE,GAASF,GAAK,GAEdC,KAAc,KAAOA,KAAc,IACrC7U,EAAQ+U,EAAiBrB,GAAY,EAAE,GAAKmB,IAAa,CAACC,IAAU,IAAKpB,CAAS,EACzEmB,KAAc,IACvB7U,EAAQ8U,GAAS1C,EAAQ,CAAC0C,EAAM,EAAIvB,EAAQ,EAAI,EACvCsB,KAAc,MACvB7U,EAAQyT,EAAQ,EAAI,EAExB,MACEzT,EAAQqT,EAASe,EAAUrB,GAAMqB,EAAS,EAAGT,CAAQ,EAGvD,OAAO3T,CACT,CAEA,SAASwT,EAAYhC,EAAMU,EAAa,CACtC,IAAI4C,GAAShB,IAAYkB,GAAS,EAAI,EAAIjB,GACtCxC,GAAOwD,EAAiBrB,EAAYoB,IAAUtD,EAAO,GAAK,GAAIkC,EAAW,EAAEI,GAAWkB,GAAS,EAAE,EAErG,OAAIzD,KAAS,IAAM+B,GACb,CAAC2B,GAAmBpD,EAAY,EAAGY,EAAS,CAACjB,CAAI,EAAG,CAAC,EAChDA,EAAO,EAAImC,EAIfzB,EAAcX,GAAOY,EAAKZ,EAAI,CACvC,CAEA,SAASwD,EAAiBxD,EAAMhO,EAAM2R,GAAU,CAC9C,GAAIxH,EAAS,GAAKsH,GAAS,EAAG,CAC5B,IAAIhV,GAAQmV,GAAwB5D,CAAI,EAEpCvR,KAAUuR,IACZhO,EAAOgO,EACPA,EAAOvR,GACPkV,GAAW,IAGT3D,EAAO,GAAKA,EAAOoC,EACjB,CAACG,IAAY5H,GAAQ,EAAGqF,EAAMhO,EAAM,EAAI,GAAK2I,GAAQyH,EAAUpQ,EAAMgO,EAAM,EAAI,GACjFA,EAAOa,EAAQgD,EAAO7D,CAAI,CAAC,EAEvB8B,EACF9B,EAAO2D,GAAW3D,EAAO,EAAI,EAAEsC,EAAaE,GAAWA,GAAWF,EAAatC,EACtE5R,EAAQ,OACjB4R,EAAOA,EAAO,EAAIoC,EAAW,EAE7BpC,EAAO,GAIP2D,IAAY3D,IAAShO,IACvBgO,EAAOa,EAAQgD,EAAO7R,CAAI,GAAKgO,EAAOhO,EAAO,GAAK,EAAE,EAG1D,MACEgO,EAAO,GAGT,OAAOA,CACT,CAEA,SAAS4D,GAAwB5D,EAAM,CACrC,GAAI+B,GAAW3T,EAAQ,YAAc,QAAU4R,IAASmC,EAGtD,QAFI1B,EAAWH,EAAY,EAEpBG,IAAaD,EAAWR,EAAM,EAAI,GAAKrF,GAAQqF,EAAM,EAAG9R,EAAQ,OAAS,EAAG,CAACE,EAAQ,MAAM,GAChG4R,EAAOmC,EAAY,EAAEnC,EAAO,EAAEA,EAIlC,OAAOA,CACT,CAEA,SAASY,EAAKnS,EAAO,CACnB,OAAOqT,GAAUrT,EAAQ6T,GAAcA,GAAc,EAAI7T,CAC3D,CAEA,SAASkU,GAAS,CAGhB,QAFImB,EAAMxB,GAAcmB,GAAS,GAAK3B,GAAUS,EAAU,EAAIC,GAEvDX,GAAWiC,KAAQ,GACxB,GAAItD,EAAW8B,EAAa,EAAG,EAAI,IAAM9B,EAAWsD,EAAK,EAAI,EAAG,CAC9DA,IACA,KACF,CAGF,OAAOtC,GAAMsC,EAAK,EAAGxB,EAAa,CAAC,CACrC,CAEA,SAASzB,EAAQrG,EAAM,CACrB,OAAOgH,GAAMiC,GAAS,EAAIjJ,EAAOgI,EAAUhI,EAAM,EAAG4H,CAAQ,CAC9D,CAEA,SAASyB,EAAOpV,EAAO,CACrB,OAAOgV,GAAS,EAAI9J,GAAIlL,EAAO2T,CAAQ,EAAI/I,IAAO5K,GAAS2T,EAAWE,EAAa,EAAI7T,GAAS+T,CAAO,CACzG,CAEA,SAASuB,EAAOpD,EAAa,CAC3B,IAAI5O,EAAUsN,EAAK,QAAQsB,CAAW,EACtC,OAAOoB,EAAUP,GAAMzP,EAAS,EAAGqQ,CAAQ,EAAIrQ,CACjD,CAEA,SAASkR,EAASxU,EAAO,CACnBA,IAAU0T,IACZE,EAAYF,EACZA,EAAY1T,EAEhB,CAEA,SAASuV,GAAS/D,EAAM,CACtB,OAAOA,EAAOoC,EAAYF,CAC5B,CAEA,SAASsB,IAAW,CAClB,MAAO,CAACvE,GAAY9Q,EAAQ,KAAK,GAAKA,EAAQ,YAChD,CAEA,SAAS2U,IAAS,CAChB,OAAO7U,EAAQ,MAAM,GAAG,CAACqK,GAAQC,EAAS,CAAC,GAAK,CAAC,CAACpK,EAAQ,iBAC5D,CAEA,MAAO,CACL,MAAOwF,EACP,GAAIgP,EACJ,OAAQM,EACR,QAASlB,EACT,QAASE,EACT,YAAaD,EACb,OAAQU,EACR,SAAUM,EACV,SAAUe,GACV,QAASnD,EACT,OAAQgD,EACR,OAAQE,EACR,SAAUN,GACV,OAAQV,EACV,CACF,CAEA,IAAIkB,GAAiB,6BACjBC,GAAO,wFACPC,GAAO,GAEX,SAASC,GAAOlW,EAASC,EAAaC,EAAS,CAC7C,IAAI2H,EAAQnD,EAAe1E,CAAO,EAC9B2E,EAAKkD,EAAM,GACXjD,EAAOiD,EAAM,KACbC,EAAOD,EAAM,KACbsO,EAAUjW,EAAQ,QAClB4E,EAAO5E,EAAQ,KACfsE,EAAWvE,EAAY,SACvBsM,EAAatM,EAAY,WACzBmW,EAAc5R,EAAS,OACvBW,EAAQX,EAAS,MACjB6R,EAAUD,EACVrE,EAAOvN,EAAS,KAChB8R,EAAO9R,EAAS,KAChB+R,EACAC,EACAC,EAAS,CAAC,EAEd,SAAS/Q,GAAQ,CACfF,EAAK,EACLb,EAAGkB,GAAe0K,CAAO,CAC3B,CAEA,SAASA,GAAU,CACjB3K,EAAQ,EACRF,EAAM,CACR,CAEA,SAASF,GAAO,CACd,IAAIkR,EAAUxW,EAAQ,OAElBwW,GAAW,EAAE3E,GAAQuE,IACvBK,EAAa,EAGX5E,GAAQuE,IACVtP,GAAOyP,EAAQ,CACb,KAAM1E,EACN,KAAMuE,CACR,CAAC,EACDM,GAAQP,EAASK,EAAU,GAAK,MAAM,EACtCpQ,GAAS+P,EAASG,EAAiBlU,GAAe,KAAOpC,EAAQ,SAAS,EAEtEwW,IACF/N,EAAO,EACPlD,EAAO,EACPc,EAAa,CAACwL,EAAMuE,CAAI,EAAGrV,GAAekE,EAAM,EAAE,EAClD2C,EAAK+O,GAAsB9E,EAAMuE,CAAI,GAG3C,CAEA,SAAS1Q,GAAU,CACjBiC,EAAM,QAAQ,EACd1B,GAAYkQ,EAASG,CAAc,EAE/BD,GACF/I,GAAO4I,EAAc,CAACrE,EAAMuE,CAAI,EAAID,CAAO,EAC3CtE,EAAOuE,EAAO,MAEdlQ,GAAgB,CAAC2L,EAAMuE,CAAI,EAAG1U,EAAc,CAEhD,CAEA,SAAS+G,GAAS,CAChBhE,EAAG,CAAC+M,GAAe1I,GAAarD,GAAeuD,GAAgBqL,EAAuB,EAAG9O,CAAM,EAC/Fb,EAAK0R,EAAM,QAAS1N,EAAM8L,EAAI,GAAG,CAAC,EAClC9P,EAAKmN,EAAM,QAASnJ,EAAM8L,EAAI,GAAG,CAAC,CACpC,CAEA,SAASA,EAAGC,EAAS,CACnBpI,EAAW,GAAGoI,EAAS,EAAI,CAC7B,CAEA,SAASgC,GAAe,CACtBN,EAAUD,GAAeU,GAAO,MAAOX,EAAQ,MAAM,EACrDpE,EAAOgF,EAAY,EAAI,EACvBT,EAAOS,EAAY,EAAK,EACxBR,EAAU,GACVpJ,GAAOkJ,EAAS,CAACtE,EAAMuE,CAAI,CAAC,EAC5B,CAACF,GAAelJ,GAAOmJ,EAASlR,CAAK,CACvC,CAEA,SAAS4R,EAAYC,EAAO,CAC1B,IAAIC,EAAQ,kBAAqBd,EAAQ,MAAQ,KAAOa,EAAQb,EAAQ,KAAOA,EAAQ,MAAQ,+BAAqCJ,GAAiB,kBAAsBE,GAAO,IAAMA,GAAO,YAAgBA,GAAO,aAAiBA,GAAO,iCAAuC/V,EAAQ,WAAa8V,IAAQ,OAClT,OAAOjJ,GAAUkK,CAAK,CACxB,CAEA,SAASxR,GAAS,CAChB,GAAIsM,GAAQuE,EAAM,CAChB,IAAI/V,EAAQP,EAAQ,MAChBmU,EAAY5H,EAAW,QAAQ,EAC/B2K,EAAY3K,EAAW,QAAQ,EAC/B4K,EAAYhD,EAAY,IAAM5T,EAAQ4T,EAAYrP,EAAK,KAAOA,EAAK,KACnEsS,GAAYF,EAAY,IAAM3W,EAAQ2W,EAAYpS,EAAK,MAAQA,EAAK,KACxEiN,EAAK,SAAWoC,EAAY,EAC5BmC,EAAK,SAAWY,EAAY,EAC5B3Q,EAAawL,EAAM3Q,GAAY+V,CAAS,EACxC5Q,EAAa+P,EAAMlV,GAAYgW,EAAS,EACxCtP,EAAKuP,GAAsBtF,EAAMuE,EAAMnC,EAAW+C,CAAS,CAC7D,CACF,CAEA,MAAO,CACL,OAAQT,EACR,MAAO/Q,EACP,QAASE,EACT,OAAQH,CACV,CACF,CAEA,IAAI6R,GAA0BC,GAAiB,YAE/C,SAASC,GAASxX,EAASC,EAAaC,EAAS,CAC/C,IAAIuX,EAAmB/S,EAAe1E,CAAO,EACzC2E,EAAK8S,EAAiB,GACtB7S,EAAO6S,EAAiB,KACxB3P,EAAO2P,EAAiB,KAExBC,EAAWC,GAAgBzX,EAAQ,SAAUF,EAAQ,GAAG,KAAKA,EAAS,GAAG,EAAG4X,CAAgB,EAC5FC,EAAWH,EAAS,SACpBlT,EAAWvE,EAAY,SACvB6X,EAAyB7X,EAAY,SACrC4E,EAAOiT,EAAuB,KAC9BC,EAASD,EAAuB,OAChCE,EAAW9X,EAAQ,SACnB+X,EACAC,EACAC,EAAUH,IAAa,QAE3B,SAAStS,GAAQ,CACXsS,IACFrP,EAAO,EACPoP,GAAUxR,EAAawR,EAAQ9W,GAAeuD,EAAS,MAAM,EAAE,EAC/D2T,GAAWC,EAAK,EAChB3S,EAAO,EAEX,CAEA,SAASkD,GAAS,CACZzI,EAAQ,cACV0E,EAAKC,EAAM,wBAAyB,SAAUiB,EAAG,CAC/CmS,EAAUnS,EAAE,OAAS,aACrBuS,EAAW,CACb,CAAC,EAGCnY,EAAQ,cACV0E,EAAKC,EAAM,mBAAoB,SAAUiB,EAAG,CAC1CoS,EAAUpS,EAAE,OAAS,UACrBuS,EAAW,CACb,CAAC,EAGCN,GACFnT,EAAKmT,EAAQ,QAAS,UAAY,CAChCI,EAAUC,EAAK,EAAIE,EAAM,EAAI,CAC/B,CAAC,EAGH3T,EAAG,CAAC0E,GAAYkP,GAAc5S,EAAa,EAAG+R,EAAS,MAAM,EAC7D/S,EAAG0E,GAAYC,CAAM,CACvB,CAEA,SAAS8O,GAAO,CACVP,EAAS,GAAK5X,EAAY,OAAO,SAAS,IAC5CyX,EAAS,MAAM,CAACxX,EAAQ,aAAa,EACrCgY,EAAUD,EAAUE,EAAU,GAC9B1S,EAAO,EACPqC,EAAK0Q,EAAmB,EAE5B,CAEA,SAASF,EAAMG,EAAM,CACfA,IAAS,SACXA,EAAO,IAGTN,EAAU,CAAC,CAACM,EACZhT,EAAO,EAEFoS,EAAS,IACZH,EAAS,MAAM,EACf5P,EAAK4Q,EAAoB,EAE7B,CAEA,SAASL,GAAa,CACfF,IACHF,GAAWC,EAAUI,EAAM,EAAK,EAAIF,EAAK,EAE7C,CAEA,SAAS3S,GAAS,CACZsS,IACFhS,GAAYgS,EAAQ3U,GAAc,CAAC+U,CAAO,EAC1C5R,EAAawR,EAAQ3W,GAAYlB,EAAQ,KAAKiY,EAAU,OAAS,QAAQ,EAE7E,CAEA,SAASP,EAAiBe,EAAM,CAC9B,IAAIC,EAAMpU,EAAS,IACnBoU,GAAO/N,GAAM+N,EAAK,QAASD,EAAO,IAAM,GAAG,EAC3C7Q,EAAK+Q,GAAwBF,CAAI,CACnC,CAEA,SAASrP,EAAO/I,EAAO,CACrB,IAAIuP,EAAQ7P,EAAY,OAAO,MAAMM,CAAK,EAC1CmX,EAAS,IAAI5H,GAAS,CAAC1I,GAAa0I,EAAM,MAAOwH,EAAuB,GAAKpX,EAAQ,QAAQ,CAC/F,CAEA,MAAO,CACL,MAAOwF,EACP,QAASgS,EAAS,OAClB,KAAMU,EACN,MAAOE,EACP,SAAUT,CACZ,CACF,CAEA,SAASiB,GAAM9Y,EAASC,EAAaC,EAAS,CAC5C,IAAI6Y,EAAmBrU,EAAe1E,CAAO,EACzC2E,EAAKoU,EAAiB,GAE1B,SAASrT,GAAQ,CACXxF,EAAQ,QACVyE,EAAGqU,GAAuBpQ,EAAMmP,EAAQ,EAAI,CAAC,EAC7CpT,EAAG,CAAC+M,GAAe7L,GAAeF,EAAa,EAAGiD,EAAMqQ,EAAO,EAAI,CAAC,EAExE,CAEA,SAASA,EAAMC,EAAQ,CACrBjZ,EAAY,OAAO,QAAQ,SAAU6P,EAAO,CAC1C,IAAI/B,EAAMtH,GAAMqJ,EAAM,WAAaA,EAAM,MAAO,KAAK,EAEjD/B,GAAOA,EAAI,KACbgK,EAAOmB,EAAQnL,EAAK+B,CAAK,CAE7B,CAAC,CACH,CAEA,SAASiI,EAAOmB,EAAQnL,EAAK+B,EAAO,CAClCA,EAAM,MAAM,aAAcoJ,EAAS,+BAAkCnL,EAAI,IAAM,KAAQ,GAAI,EAAI,EAC/F6I,GAAQ7I,EAAKmL,EAAS,OAAS,EAAE,CACnC,CAEA,MAAO,CACL,MAAOxT,EACP,QAASkD,EAAMqQ,EAAO,EAAK,CAC7B,CACF,CAEA,IAAIE,GAAwB,GACxBC,GAAkB,IAClBC,GAAkB,GAClBC,GAAgB,IAChBC,GAAe,IAEnB,SAASC,GAAOxZ,EAASC,EAAaC,EAAS,CAC7C,IAAIuZ,EAAmB/U,EAAe1E,CAAO,EACzC2E,EAAK8U,EAAiB,GACtB3R,EAAO2R,EAAiB,KAExBpI,EAAMrR,EAAQ,MAAM,IACpBmR,EAAOlR,EAAY,KACnBmS,EAAcjB,EAAK,YACnB6B,EAAW7B,EAAK,SAChBqC,EAAgBrC,EAAK,cACrBe,EAAYf,EAAK,UACjB0C,EAAU7T,EAAQ,GAAGuH,EAAK,EAC1BmQ,EACA9J,EACA8L,EAAW,EAEf,SAAShU,GAAQ,CACff,EAAG0E,GAAYsQ,CAAK,EACpBhV,EAAG,CAACkB,GAAeF,EAAa,EAAGsM,CAAM,CAC3C,CAEA,SAAS+C,EAAOvC,EAAawC,EAAUC,EAAM0E,EAAYC,EAAa,CACpE,IAAI/V,EAAOsO,EAAY,EAGvB,GAFAuH,EAAM,EAEFzE,IAAS,CAACrB,GAAW,CAACL,EAAc,GAAI,CAC1C,IAAIP,EAAOhT,EAAY,OAAO,WAAW,EACrCQ,EAASqZ,GAAKrH,CAAW,EAAIQ,EAAO9H,GAAMK,GAAIiH,CAAW,EAAIQ,CAAI,GAAK,EAC1ER,EAActB,EAAK,WAAWlR,EAAY,WAAW,OAAOwS,EAAcQ,CAAI,CAAC,EAAIxS,CACrF,CAEA,IAAIsZ,EAAavE,GAAmB1R,EAAM2O,EAAa,CAAC,EACxDiH,EAAW,EACXzE,EAAW8E,EAAa,EAAI9E,GAAYzI,GAAIhB,GAAIiH,EAAc3O,CAAI,EAAIwV,GAAeC,EAAY,EACjG3L,EAAWgM,EACXlC,EAAWC,GAAgB1C,EAAU+E,EAAOpR,EAAMnD,EAAQ3B,EAAM2O,EAAaoH,CAAW,EAAG,CAAC,EAC5FxI,EAAI/G,EAAS,EACbxC,EAAKyQ,EAAY,EACjBb,EAAS,MAAM,CACjB,CAEA,SAASsC,GAAQ,CACf3I,EAAIgB,EAAI,EACRzE,GAAYA,EAAS,EACrB9F,EAAKoB,EAAc,CACrB,CAEA,SAASzD,EAAO3B,EAAMmW,EAAIJ,EAAalB,EAAM,CAC3C,IAAIpG,EAAWH,EAAY,EACvB5I,EAAS1F,GAAQmW,EAAKnW,GAAQoW,EAAOvB,CAAI,EACzCpN,GAAQ/B,EAAS+I,GAAYmH,EACjCxH,EAAUK,EAAWhH,CAAI,EAErBsI,GAAW,CAACgG,GAAerG,EAAc,IAC3CkG,GAAYL,GAER7N,GAAID,CAAI,EAAI4N,IACdnE,EAAOhC,EAASQ,EAAc,EAAI,CAAC,EAAG4F,GAAiB,GAAOxL,EAAU,EAAI,EAGlF,CAEA,SAAS+L,GAAQ,CACXjC,GACFA,EAAS,OAAO,CAEpB,CAEA,SAASzF,GAAS,CACZyF,GAAY,CAACA,EAAS,SAAS,IACjCiC,EAAM,EACNK,EAAM,EAEV,CAEA,SAASE,EAAOC,EAAG,CACjB,IAAIC,EAAala,EAAQ,WACzB,OAAOka,EAAaA,EAAWD,CAAC,EAAI,EAAI,KAAK,IAAI,EAAIA,EAAG,CAAC,CAC3D,CAEA,MAAO,CACL,MAAOzU,EACP,QAASiU,EACT,OAAQ3E,EACR,OAAQ/C,CACV,CACF,CAEA,IAAIoI,GAA0B,CAC5B,QAAS,GACT,QAAS,EACX,EAEA,SAASC,GAAKta,EAASC,EAAaC,EAAS,CAC3C,IAAIqa,EAAmB7V,EAAe1E,CAAO,EACzC2E,EAAK4V,EAAiB,GACtBzS,EAAOyS,EAAiB,KACxB3V,EAAO2V,EAAiB,KACxBC,EAASD,EAAiB,OAE1BE,EAAQza,EAAQ,MAChBmR,EAAOlR,EAAY,KACnBuZ,EAASvZ,EAAY,OACrBsM,EAAatM,EAAY,WACzBkF,EAAQlF,EAAY,SAAS,MAC7Bya,EAASza,EAAY,MAAM,OAC3B0a,EAAyB1a,EAAY,UACrCE,EAAUwa,EAAuB,QACjCha,EAASga,EAAuB,OAChCvI,EAAcjB,EAAK,YACnBqC,EAAgBrC,EAAK,cACrByJ,EACAC,EACAC,EACAC,EACAC,EACAC,EAAW,GACXC,EACAC,EACA3R,EAEJ,SAAS9D,GAAQ,CACfd,EAAKO,EAAOb,GAAqB8W,GAAMf,EAAuB,EAC9DzV,EAAKO,EAAOZ,GAAmB6W,GAAMf,EAAuB,EAC5DzV,EAAKO,EAAOd,GAAqBgX,EAAehB,EAAuB,EACvEzV,EAAKO,EAAO,QAASmW,EAAS,CAC5B,QAAS,EACX,CAAC,EACD1W,EAAKO,EAAO,YAAaoW,EAAO,EAChC5W,EAAG,CAAC+M,GAAe7L,EAAa,EAAGL,CAAI,CACzC,CAEA,SAASA,GAAO,CACd,IAAIgW,EAAOtb,EAAQ,KACnBub,GAAQ,CAACD,CAAI,EACbT,EAASS,IAAS,MACpB,CAEA,SAASH,EAAcvV,EAAG,CAGxB,GAFAoV,EAAiB,GAEb,CAACC,EAAU,CACb,IAAIO,EAAUC,GAAa7V,CAAC,EAExB8V,GAAY9V,EAAE,MAAM,IAAM4V,GAAW,CAAC5V,EAAE,UACrCyG,EAAW,OAAO,EAUrBgP,GAAQzV,EAAG,EAAI,GATf0D,EAASkS,EAAUvW,EAAQ,OAC3B6V,EAAWP,EAAM,GAAG,CAACpQ,GAAQC,EAAS,CAAC,EACvCwQ,EAAgB,KAChBlW,EAAK4E,EAAQlF,GAAqBuX,EAAexB,EAAuB,EACxEzV,EAAK4E,EAAQjF,GAAmBuX,GAAazB,EAAuB,EACpElJ,EAAK,OAAO,EACZqI,EAAO,OAAO,EACduC,EAAKjW,CAAC,GAKZ,CACF,CAEA,SAAS+V,EAAc/V,EAAG,CAMxB,GALK2U,EAAM,GAAGuB,EAAQ,IACpBvB,EAAM,IAAIuB,EAAQ,EAClBlU,EAAKmU,EAAU,GAGbnW,EAAE,WACJ,GAAIkV,EAAU,CACZ7J,EAAK,UAAUyJ,EAAesB,GAAUC,GAAUrW,CAAC,CAAC,CAAC,EACrD,IAAIsW,EAAUC,GAASvW,CAAC,EAAI1B,GACxBkY,GAAcrB,KAAcA,EAAWzH,EAAc,IAErD4I,GAAWE,KACbP,EAAKjW,CAAC,EAGRoV,EAAiB,GACjBpT,EAAKyU,EAAc,EACnBhB,GAAQzV,CAAC,CACX,MAAW0W,EAAkB1W,CAAC,IAC5BkV,EAAWyB,EAAY3W,CAAC,EACxByV,GAAQzV,CAAC,EAGf,CAEA,SAASgW,GAAYhW,EAAG,CAClB2U,EAAM,GAAGuB,EAAQ,IACnBvB,EAAM,IAAIpI,EAAI,EACdvK,EAAK4U,EAAa,GAGhB1B,IACFnJ,EAAK/L,CAAC,EACNyV,GAAQzV,CAAC,GAGX0U,EAAOhR,EAAQlF,GAAqBuX,CAAa,EACjDrB,EAAOhR,EAAQjF,GAAmBuX,EAAW,EAC7Cd,EAAW,EACb,CAEA,SAASM,EAAQxV,EAAG,CACd,CAACqV,GAAYD,GACfK,GAAQzV,EAAG,EAAI,CAEnB,CAEA,SAASiW,EAAKjW,EAAG,CACfgV,EAAgBD,EAChBA,EAAY/U,EACZ8U,EAAexI,EAAY,CAC7B,CAEA,SAASP,EAAK/L,EAAG,CACf,IAAI6W,EAAWC,EAAgB9W,CAAC,EAC5B2M,GAAcoK,GAAmBF,CAAQ,EACzCG,GAAS5c,EAAQ,QAAUA,EAAQ,aACvCwa,EAAO,EAAK,EAERK,EACFxO,EAAW,OAAOkG,GAAa,EAAGvS,EAAQ,IAAI,EACrCF,EAAQ,GAAGyH,EAAI,EACxB8E,EAAW,GAAG5L,EAAOmZ,GAAK6C,CAAQ,CAAC,EAAI,EAAIG,GAAS,IAAM,IAAMA,GAAS,IAAM,GAAG,EACzE9c,EAAQ,GAAGuH,EAAK,GAAK0T,GAAY6B,GAC1CvQ,EAAW,GAAGiH,EAAc,EAAI,EAAI,IAAM,GAAG,EAE7CjH,EAAW,GAAGA,EAAW,OAAOkG,EAAW,EAAG,EAAI,EAGpDiI,EAAO,EAAI,CACb,CAEA,SAAS+B,EAAY3W,EAAG,CACtB,IAAIiX,EAAa7c,EAAQ,iBACrB8c,GAAQ1N,GAASyN,CAAU,EAC3BE,GAAQD,IAASD,EAAW,OAAS,EACrCG,IAASF,GAAQD,EAAW,MAAQ,CAACA,IAAe,GACxD,OAAOvR,GAAI2Q,GAAUrW,CAAC,CAAC,GAAK6V,GAAa7V,CAAC,EAAIoX,GAAQD,GACxD,CAEA,SAAST,EAAkB1W,EAAG,CAC5B,OAAO0F,GAAI2Q,GAAUrW,CAAC,CAAC,EAAI0F,GAAI2Q,GAAUrW,EAAG,EAAI,CAAC,CACnD,CAEA,SAAS8W,EAAgB9W,EAAG,CAC1B,GAAI9F,EAAQ,GAAGwH,EAAI,GAAK,CAACyT,EAAU,CACjC,IAAIkC,EAAOd,GAASvW,CAAC,EAErB,GAAIqX,GAAQA,EAAO/Y,GACjB,OAAO+X,GAAUrW,CAAC,EAAIqX,CAE1B,CAEA,MAAO,EACT,CAEA,SAASN,GAAmBF,EAAU,CACpC,OAAOvK,EAAY,EAAI0H,GAAK6C,CAAQ,EAAIlR,GAAID,GAAImR,CAAQ,GAAKzc,EAAQ,YAAc,KAAM6a,EAAS,IAAW9a,EAAY,OAAO,SAAS,GAAKC,EAAQ,eAAiB,EAAE,CAC3K,CAEA,SAASic,GAAUrW,EAAGsX,EAAY,CAChC,OAAOC,EAAQvX,EAAGsX,CAAU,EAAIC,EAAQC,EAAaxX,CAAC,EAAGsX,CAAU,CACrE,CAEA,SAASf,GAASvW,EAAG,CACnB,OAAOyX,GAAOzX,CAAC,EAAIyX,GAAOD,EAAaxX,CAAC,CAAC,CAC3C,CAEA,SAASwX,EAAaxX,EAAG,CACvB,OAAO+U,IAAc/U,GAAKgV,GAAiBD,CAC7C,CAEA,SAASwC,EAAQvX,EAAGsX,EAAY,CAC9B,OAAQzB,GAAa7V,CAAC,EAAIA,EAAE,eAAe,GAAKA,GAAG,OAAS3F,EAAQid,EAAa,IAAM,GAAG,EAC5F,CAEA,SAASlB,GAAU3Q,EAAM,CACvB,OAAOA,GAAQ0P,GAAYjb,EAAQ,GAAGuH,EAAK,EAAIpD,GAAW,EAC5D,CAEA,SAASyX,GAAY4B,EAAS,CAC5B,IAAIC,EAASvd,EAAQ,OACrB,MAAO,CAACgE,GAAQsZ,EAAS,IAAM7a,GAAwB,MAAQJ,EAAW,IAAM,CAACkb,GAAU,CAACvZ,GAAQsZ,EAASC,CAAM,EACrH,CAEA,SAAS9B,GAAa7V,EAAG,CACvB,OAAO,OAAO,WAAe,KAAeA,aAAa,UAC3D,CAEA,SAAS4X,IAAa,CACpB,OAAO1C,CACT,CAEA,SAASS,GAAQ7a,EAAO,CACtBua,EAAWva,CACb,CAEA,MAAO,CACL,MAAO8E,EACP,QAAS+V,GACT,WAAYiC,EACd,CACF,CAEA,IAAIC,GAAoB,CACtB,SAAU,IACV,MAAO/d,GACP,KAAME,GACN,GAAIH,GACJ,KAAME,EACR,EAEA,SAAS+d,GAAa7W,EAAK,CACzB,OAAAA,EAAM+F,GAAS/F,CAAG,EAAIA,EAAMA,EAAI,IACzB4W,GAAkB5W,IAAQA,CACnC,CAEA,IAAI8W,GAAiB,UAErB,SAASC,GAAS9d,EAASC,EAAaC,EAAS,CAC/C,IAAI6d,EAAoBrZ,EAAe1E,CAAO,EAC1C2E,EAAKoZ,EAAkB,GACvBnZ,EAAOmZ,EAAkB,KACzBvD,EAASuD,EAAkB,OAE3BlZ,EAAO7E,EAAQ,KACfG,EAAUF,EAAY,UAAU,QAChCuJ,EACA2R,EAEJ,SAASzV,GAAQ,CACfF,EAAK,EACLb,EAAGkB,GAAeD,CAAO,EACzBjB,EAAGkB,GAAeL,CAAI,EACtBb,EAAG0E,GAAYC,CAAM,CACvB,CAEA,SAAS9D,GAAO,CACd,IAAIwY,EAAW9d,EAAQ,SAEnB8d,IACFxU,EAASwU,IAAa,SAAW,OAASnZ,EAC1CD,EAAK4E,EAAQqU,GAAgBI,CAAS,EAE1C,CAEA,SAASrY,GAAU,CACjB4U,EAAOhR,EAAQqU,EAAc,CAC/B,CAEA,SAASpC,EAAQ7a,EAAO,CACtBua,EAAWva,CACb,CAEA,SAAS0I,GAAS,CAChB,IAAI4U,EAAY/C,EAChBA,EAAW,GACXgD,GAAS,UAAY,CACnBhD,EAAW+C,CACb,CAAC,CACH,CAEA,SAASD,EAAUnY,EAAG,CACpB,GAAI,CAACqV,EAAU,CACb,IAAIpU,EAAM6W,GAAa9X,CAAC,EAEpBiB,IAAQ5G,EAAQL,EAAU,EAC5BE,EAAQ,GAAG,GAAG,EACL+G,IAAQ5G,EAAQP,EAAW,GACpCI,EAAQ,GAAG,GAAG,CAElB,CACF,CAEA,MAAO,CACL,MAAO0F,EACP,QAASE,EACT,QAAS6V,CACX,CACF,CAEA,IAAI2C,GAAqB7G,GAAiB,QACtC8G,GAAwBD,GAAqB,UAC7CE,GAAiB,IAAMF,GAAqB,OAASC,GAAwB,IAEjF,SAASE,GAASve,EAASC,EAAaC,EAAS,CAC/C,IAAIse,EAAoB9Z,EAAe1E,CAAO,EAC1C2E,EAAK6Z,EAAkB,GACvBC,EAAMD,EAAkB,IACxB5Z,EAAO4Z,EAAkB,KACzB1W,EAAO0W,EAAkB,KAEzBE,EAAexe,EAAQ,WAAa,aACpCye,EAAS,CAAC3V,GAAaE,EAAc,EACrC0V,EAAU,CAAC,EAEf,SAASlZ,GAAQ,CACXxF,EAAQ,WACVsF,EAAK,EACLb,EAAGgB,GAAeH,CAAI,EAE1B,CAEA,SAASA,GAAO,CACdU,GAAM0Y,CAAO,EACb9S,EAAS,EAEL4S,EACFG,EAAS,GAETJ,EAAIE,CAAM,EACVha,EAAGga,EAAQG,CAAK,EAChBA,EAAM,EAEV,CAEA,SAAShT,GAAW,CAClB7L,EAAY,OAAO,QAAQ,SAAU6P,EAAO,CAC1CvF,GAASuF,EAAM,MAAOwO,EAAc,EAAE,QAAQ,SAAUvQ,EAAK,CAC3D,IAAIgR,EAAM3X,GAAa2G,EAAKqQ,EAAkB,EAC1CY,EAAS5X,GAAa2G,EAAKsQ,EAAqB,EAEpD,GAAIU,IAAQhR,EAAI,KAAOiR,IAAWjR,EAAI,OAAQ,CAC5C,IAAIjH,EAAY5G,EAAQ,QAAQ,QAC5B+e,EAASlR,EAAI,cACbmR,EAAUzY,GAAMwY,EAAQ,IAAMnY,CAAS,GAAKgQ,GAAO,OAAQhQ,EAAWmY,CAAM,EAChFL,EAAQ,KAAK,CAAC7Q,EAAK+B,EAAOoP,CAAO,CAAC,EAClCnR,EAAI,KAAO6I,GAAQ7I,EAAK,MAAM,CAChC,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAAS+Q,GAAQ,CACfF,EAAUA,EAAQ,OAAO,SAAUO,EAAM,CACvC,IAAI7T,EAAWpL,EAAQ,UAAYA,EAAQ,cAAgB,GAAK,GAAK,EACrE,OAAOif,EAAK,GAAG,SAASnf,EAAQ,MAAOsL,CAAQ,EAAI8T,EAAKD,CAAI,EAAI,EAClE,CAAC,EACDP,EAAQ,QAAUH,EAAIE,CAAM,CAC9B,CAEA,SAASS,EAAKD,EAAM,CAClB,IAAIpR,EAAMoR,EAAK,GACf7Y,GAAS6Y,EAAK,GAAG,MAAO3b,EAAa,EACrCoB,EAAKmJ,EAAK,aAAcnF,EAAMyW,EAAQF,CAAI,CAAC,EAC3C5Y,EAAawH,EAAK,MAAO3G,GAAa2G,EAAKqQ,EAAkB,CAAC,EAC9D7X,EAAawH,EAAK,SAAU3G,GAAa2G,EAAKsQ,EAAqB,CAAC,EACpEjY,GAAgB2H,EAAKqQ,EAAkB,EACvChY,GAAgB2H,EAAKsQ,EAAqB,CAC5C,CAEA,SAASgB,EAAOF,EAAMrZ,EAAG,CACvB,IAAIiI,EAAMoR,EAAK,GACXrP,EAAQqP,EAAK,GACjBhZ,GAAY2J,EAAM,MAAOtM,EAAa,EAElCsC,EAAE,OAAS,UACb0H,GAAO2R,EAAK,EAAE,EACdvI,GAAQ7I,EAAK,EAAE,EACfjG,EAAKkR,GAAuBjL,EAAK+B,CAAK,EACtChI,EAAKuF,EAAY,GAGnBqR,GAAgBG,EAAS,CAC3B,CAEA,SAASA,GAAW,CAClBD,EAAQ,QAAUQ,EAAKR,EAAQ,MAAM,CAAC,CACxC,CAEA,MAAO,CACL,MAAOlZ,EACP,QAASkD,EAAM1C,GAAO0Y,CAAO,EAC7B,MAAOE,CACT,CACF,CAEA,SAASQ,GAAWtf,EAASC,EAAaC,EAAS,CACjD,IAAI2H,EAAQnD,EAAe1E,CAAO,EAC9B2E,EAAKkD,EAAM,GACXC,EAAOD,EAAM,KACbjD,EAAOiD,EAAM,KACb6D,EAASzL,EAAY,OACrBuE,EAAWvE,EAAY,SACvBsM,EAAatM,EAAY,WACzBsV,EAAWhJ,EAAW,SACtBuJ,EAAWvJ,EAAW,SACtBmI,EAAKnI,EAAW,GAChBpM,EAAUF,EAAY,UAAU,QAChCmW,EAAc5R,EAAS,WACvBoI,EAAQ,CAAC,EACTxH,EACAma,EAEJ,SAAS7Z,GAAQ,CACfE,EAAQ,EACRjB,EAAG,CAACkB,GAAeF,GAAe4O,EAAuB,EAAG7O,CAAK,EACjE,IAAIgR,EAAUxW,EAAQ,WACtBkW,GAAeQ,GAAQR,EAAaM,EAAU,GAAK,MAAM,EAErDA,IACF/R,EAAG,CAAC0E,GAAYkP,GAAcrP,EAAc,EAAGzD,CAAM,EACrD+Z,EAAiB,EACjB/Z,EAAO,EACPqC,EAAK2X,GAA0B,CAC7B,KAAMra,EACN,MAAOwH,CACT,EAAGF,EAAM1M,EAAQ,KAAK,CAAC,EAE3B,CAEA,SAAS4F,GAAU,CACbR,IACFoI,GAAO4I,EAAcsJ,GAAMta,EAAK,QAAQ,EAAIA,CAAI,EAChDe,GAAYf,EAAMma,CAAiB,EACnCrZ,GAAM0G,CAAK,EACXxH,EAAO,MAGTyC,EAAM,QAAQ,CAChB,CAEA,SAAS2X,GAAmB,CAC1B,IAAI1R,EAAS9N,EAAQ,OACjBmW,EAAUjW,EAAQ,QAClB4E,EAAO5E,EAAQ,KACfoU,EAAUpU,EAAQ,QAClBsM,EAAM+I,EAAS,EAAIhJ,EAAW,OAAO,EAAI,EAAInB,GAAK0C,EAASwG,CAAO,EACtElP,EAAOgR,GAAeU,GAAO,KAAMX,EAAQ,WAAY3R,EAAS,MAAM,aAAa,EACnF8B,GAASlB,EAAMma,EAAoB7c,GAAmB,KAAOid,EAAa,CAAC,EAC3EpZ,EAAanB,EAAMvE,GAAM,SAAS,EAClC0F,EAAanB,EAAMhE,GAAY0D,EAAK,MAAM,EAC1CyB,EAAanB,EAAM7D,GAAkBoe,EAAa,IAAMlgB,GAAM,WAAa,EAAE,EAE7E,QAAS0T,EAAI,EAAGA,EAAI3G,EAAK2G,IAAK,CAC5B,IAAIyM,GAAK9I,GAAO,KAAM,KAAM1R,CAAI,EAC5Bya,EAAS/I,GAAO,SAAU,CAC5B,MAAOX,EAAQ,KACf,KAAM,QACR,EAAGyJ,EAAE,EACDrW,EAAWmC,EAAO,MAAMyH,CAAC,EAAE,IAAI,SAAUrD,EAAO,CAClD,OAAOA,EAAM,MAAM,EACrB,CAAC,EACGgQ,EAAO,CAACvK,EAAS,GAAKjB,EAAU,EAAIxP,EAAK,MAAQA,EAAK,OAC1DF,EAAKib,EAAQ,QAASjX,EAAM0S,EAASnI,CAAC,CAAC,EAEnCjT,EAAQ,oBACV0E,EAAKib,EAAQ,UAAWjX,EAAMqV,EAAW9K,CAAC,CAAC,EAG7C5M,EAAaqZ,GAAI/e,GAAM,cAAc,EACrC0F,EAAasZ,EAAQhf,GAAM,KAAK,EAChC0F,EAAasZ,EAAQ5e,GAAesI,EAAS,KAAK,GAAG,CAAC,EACtDhD,EAAasZ,EAAQze,GAAYsH,GAAOoX,EAAM3M,EAAI,CAAC,CAAC,EACpD5M,EAAasZ,EAAQ/e,GAAW,EAAE,EAClC8L,EAAM,KAAK,CACT,GAAIgT,GACJ,OAAQC,EACR,KAAM1M,CACR,CAAC,CACH,CACF,CAEA,SAASmI,EAAQhP,EAAM,CACrBoI,EAAG,IAAMpI,EAAM,EAAI,CACrB,CAEA,SAAS2R,EAAU3R,EAAMxG,EAAG,CAC1B,IAAIgI,EAASlB,EAAM,OACf7F,EAAM6W,GAAa9X,CAAC,EACpBia,EAAMJ,EAAa,EACnBK,EAAW,GAEXjZ,IAAQ5G,EAAQP,GAAa,GAAOmgB,CAAG,EACzCC,EAAW,EAAE1T,EAAOwB,EACX/G,IAAQ5G,EAAQL,GAAY,GAAOigB,CAAG,EAC/CC,GAAY,EAAE1T,EAAOwB,GAAUA,EACtB/G,IAAQ,OACjBiZ,EAAW,EACFjZ,IAAQ,QACjBiZ,EAAWlS,EAAS,GAGtB,IAAImS,GAAOrT,EAAMoT,GAEbC,KACFvV,GAAMuV,GAAK,MAAM,EACjBvL,EAAG,IAAMsL,CAAQ,EACjBzE,GAAQzV,EAAG,EAAI,EAEnB,CAEA,SAAS6Z,GAAe,CACtB,OAAOzf,EAAQ,qBAAuBA,EAAQ,SAChD,CAEA,SAASwM,EAAMnM,EAAO,CACpB,OAAOqM,EAAML,EAAW,OAAOhM,CAAK,EACtC,CAEA,SAASkF,GAAS,CAChB,IAAIsM,EAAOrF,EAAMoJ,EAAS,EAAI,CAAC,EAC3BpM,EAAOgD,EAAMoJ,EAAS,CAAC,EAE3B,GAAI/D,EAAM,CACR,IAAI8N,EAAS9N,EAAK,OAClB5L,GAAY0Z,EAAQzc,EAAY,EAChCgD,GAAgByZ,EAAQ1e,EAAa,EACrCoF,EAAasZ,EAAQ/e,GAAW,EAAE,CACpC,CAEA,GAAI4I,EAAM,CACR,IAAIwW,EAAUxW,EAAK,OACnBpD,GAAS4Z,EAAS9c,EAAY,EAC9BmD,EAAa2Z,EAAS/e,GAAe,EAAI,EACzCoF,EAAa2Z,EAASpf,GAAW,EAAE,CACrC,CAEAgH,EAAKqY,GAA0B,CAC7B,KAAM/a,EACN,MAAOwH,CACT,EAAGmF,EAAMrI,CAAI,CACf,CAEA,MAAO,CACL,MAAOkD,EACP,MAAOlH,EACP,QAASE,EACT,MAAO8G,EACP,OAAQjH,CACV,CACF,CAEA,IAAI2a,GAAe,CAAC,IAAK,OAAO,EAEhC,SAASC,GAAKrgB,EAASC,EAAaC,EAAS,CAC3C,IAAI8H,EAAe9H,EAAQ,aACvBiI,EAAajI,EAAQ,WACrBye,EAAS,CAAC,EAEd,SAASjZ,GAAQ,CACf1F,EAAQ,QAAQ,QAAQ,SAAUwJ,EAAQ,CACnCA,EAAO,WACV8W,EAAKtgB,EAASwJ,EAAO,MAAM,EAC3B8W,EAAK9W,EAAO,OAAQxJ,CAAO,EAE/B,CAAC,EAEGgI,GACFuY,EAAS,CAEb,CAEA,SAAS3a,GAAU,CACjB+Y,EAAO,QAAQ,SAAU9W,EAAO,CAC9BA,EAAM,QAAQ,CAChB,CAAC,EACD3B,GAAMyY,CAAM,CACd,CAEA,SAASpO,GAAU,CACjB3K,EAAQ,EACRF,EAAM,CACR,CAEA,SAAS4a,EAAKE,EAAQhX,EAAQ,CAC5B,IAAI3B,EAAQnD,EAAe8b,CAAM,EACjC3Y,EAAM,GAAGwB,GAAY,SAAU9I,EAAOwR,EAAMD,EAAM,CAChDtI,EAAO,GAAGA,EAAO,GAAGhC,EAAI,EAAIsK,EAAOvR,CAAK,CAC1C,CAAC,EACDoe,EAAO,KAAK9W,CAAK,CACnB,CAEA,SAAS0Y,GAAW,CAClB,IAAI1Y,EAAQnD,EAAe1E,CAAO,EAC9B2E,EAAKkD,EAAM,GACflD,EAAGkE,GAAayS,CAAO,EACvB3W,EAAGoE,GAAqBkV,CAAS,EACjCtZ,EAAG,CAAC+M,GAAe7L,EAAa,EAAGJ,CAAM,EACzCkZ,EAAO,KAAK9W,CAAK,EACjBA,EAAM,KAAKsB,GAA0BnJ,EAAQ,OAAO,CACtD,CAEA,SAASyF,GAAS,CAChBc,EAAatG,EAAY,SAAS,KAAMsB,GAAkBrB,EAAQ,YAAcT,GAAM,WAAa,EAAE,CACvG,CAEA,SAAS6b,EAAQxL,EAAO,CACtB9P,EAAQ,GAAG8P,EAAM,KAAK,CACxB,CAEA,SAASmO,EAAUnO,EAAOhK,EAAG,CACvB4H,GAAS0S,GAAcxC,GAAa9X,CAAC,CAAC,IACxCwV,EAAQxL,CAAK,EACbyL,GAAQzV,CAAC,EAEb,CAEA,MAAO,CACL,MAAO8C,EAAM3I,EAAY,MAAM,IAAK,CAClC,WAAY+Q,GAAY7I,CAAU,EAAIH,EAAeG,CACvD,EAAG,EAAI,EACP,MAAOzC,EACP,QAASE,EACT,QAAS2K,CACX,CACF,CAEA,SAASkQ,GAAMzgB,EAASC,EAAaC,EAAS,CAC5C,IAAIwgB,EAAoBhc,EAAe1E,CAAO,EAC1C4E,EAAO8b,EAAkB,KAEzBC,EAAW,EAEf,SAASjb,GAAQ,CACXxF,EAAQ,OACV0E,EAAK3E,EAAY,SAAS,MAAO,QAAS2gB,EAASvG,EAAuB,CAE9E,CAEA,SAASuG,EAAQ9a,EAAG,CAClB,GAAIA,EAAE,WAAY,CAChB,IAAI+a,EAAS/a,EAAE,OACXgN,EAAY+N,EAAS,EACrBC,EAAYvD,GAAOzX,CAAC,EAEpBib,EAAO7gB,EAAQ,mBAAqB,EAEpC8gB,EAAQ9gB,EAAQ,YAAc,EAE9BsL,GAAIqV,CAAM,EAAIE,GAAQD,EAAYH,EAAWK,IAC/ChhB,EAAQ,GAAG8S,EAAY,IAAM,GAAG,EAChC6N,EAAWG,GAGbG,EAAcnO,CAAS,GAAKyI,GAAQzV,CAAC,CACvC,CACF,CAEA,SAASmb,EAAcnO,EAAW,CAChC,MAAO,CAAC5S,EAAQ,cAAgBF,EAAQ,MAAM,GAAGqK,EAAM,GAAKpK,EAAY,WAAW,YAAY6S,CAAS,IAAM,EAChH,CAEA,MAAO,CACL,MAAOpN,CACT,CACF,CAEA,IAAIwb,GAAmB,GAEvB,SAASC,GAAKnhB,EAASC,EAAaC,EAAS,CAC3C,IAAIkhB,EAAoB1c,EAAe1E,CAAO,EAC1C2E,EAAKyc,EAAkB,GAEvBjc,EAAQlF,EAAY,SAAS,MAC7ByW,EAAUxW,EAAQ,MAAQ,CAACA,EAAQ,aACnCmhB,EAAKvK,GAAO,OAAQ5T,EAAQ,EAC5BwU,EAAWC,GAAgBuJ,GAAkBtY,EAAMmP,EAAQ,EAAK,CAAC,EAErE,SAASrS,GAAQ,CACXgR,IACF+E,EAAQ,CAACxb,EAAY,SAAS,SAAS,CAAC,EACxCsG,EAAapB,EAAOxD,GAAa,EAAI,EACrC0f,EAAG,YAAc,SACjB1c,EAAG6T,GAAqB5P,EAAM6S,EAAS,EAAI,CAAC,EAC5C9W,EAAG+T,GAAsB9P,EAAM6S,EAAS,EAAK,CAAC,EAC9C9W,EAAG,CAACqE,GAAaE,EAAc,EAAGN,EAAMmP,EAAQ,EAAI,CAAC,EAEzD,CAEA,SAASA,EAAOlO,EAAQ,CACtBtD,EAAapB,EAAOzD,GAAWmI,CAAM,EAEjCA,GACFsD,GAAOhI,EAAOkc,CAAE,EAChB3J,EAAS,MAAM,IAEflK,GAAO6T,CAAE,EACT3J,EAAS,OAAO,EAEpB,CAEA,SAAS9R,GAAU,CACjBQ,GAAgBjB,EAAO,CAAC1D,GAAWE,GAAaD,EAAS,CAAC,EAC1D8L,GAAO6T,CAAE,CACX,CAEA,SAAS5F,EAAQN,EAAU,CACrBzE,GACFnQ,EAAapB,EAAO1D,GAAW0Z,EAAW,MAAQ,QAAQ,CAE9D,CAEA,MAAO,CACL,MAAOzV,EACP,QAAS+V,EACT,QAAS7V,CACX,CACF,CAEA,IAAI0b,GAAqC,OAAO,OAAO,CACrD,UAAW,KACX,MAAOC,GACP,UAAWxhB,GACX,SAAUyE,GACV,OAAQkH,GACR,OAAQwC,GACR,OAAQkC,GACR,KAAMe,GACN,WAAY5E,GACZ,OAAQ2J,GACR,SAAUsB,GACV,MAAOsB,GACP,OAAQU,GACR,KAAMc,GACN,SAAUwD,GACV,SAAUS,GACV,WAAYe,GACZ,KAAMe,GACN,MAAOI,GACP,KAAMU,EACR,CAAC,EACGK,GAAO,CACT,KAAM,iBACN,KAAM,aACN,MAAO,oBACP,KAAM,mBACN,OAAQ,iBACR,MAAO,gBACP,KAAM,iBACN,MAAO,iBACP,SAAU,WACV,MAAO,QACP,OAAQ,yBACR,WAAY,UACd,EACIC,GAAW,CACb,KAAM,QACN,KAAM,SACN,MAAO,IACP,QAAS,EACT,YAAa,GACb,OAAQ,GACR,WAAY,GACZ,mBAAoB,GACpB,SAAU,IACV,aAAc,GACd,aAAc,GACd,cAAe,GACf,OAAQ,gCACR,KAAM,GACN,UAAW,MACX,UAAW,GACX,eAAgB,6CAChB,KAAM,GACN,QAAS7d,GACT,KAAM4d,GACN,cAAe,CACb,MAAO,EACP,YAAa,EACb,SAAU,OACZ,CACF,EAEA,SAASE,GAAK1hB,EAASC,EAAaC,EAAS,CAC3C,IAAIwL,EAASzL,EAAY,OAEzB,SAASyF,GAAQ,CACfhB,EAAe1E,CAAO,EAAE,GAAG,CAAC0R,GAAe/L,EAAa,EAAGH,CAAI,CACjE,CAEA,SAASA,GAAO,CACdkG,EAAO,QAAQ,SAAUoE,EAAO,CAC9BA,EAAM,MAAM,YAAa,eAAiB,IAAMA,EAAM,MAAQ,IAAI,CACpE,CAAC,CACH,CAEA,SAAS6R,EAAMphB,EAAOqhB,EAAM,CAC1BlW,EAAO,MAAM,aAAc,WAAaxL,EAAQ,MAAQ,MAAQA,EAAQ,MAAM,EAC9Eie,GAASyD,CAAI,CACf,CAEA,MAAO,CACL,MAAOlc,EACP,MAAOic,EACP,OAAQvG,EACV,CACF,CAEA,SAAStL,GAAM9P,EAASC,EAAaC,EAAS,CAC5C,IAAIiR,EAAOlR,EAAY,KACnBsM,EAAatM,EAAY,WACzBuZ,EAASvZ,EAAY,OACrBmF,EAAOnF,EAAY,SAAS,KAC5B4hB,EAAajZ,EAAMiC,GAAOzF,EAAM,YAAY,EAC5C0c,EAEJ,SAASpc,GAAQ,CACfhB,EAAe1E,CAAO,EAAE,KAAKoF,EAAM,gBAAiB,SAAUU,EAAG,CAC3DA,EAAE,SAAWV,GAAQ0c,IACvB7P,EAAO,EACP6P,EAAY,EAEhB,CAAC,CACH,CAEA,SAASH,EAAMphB,EAAOqhB,EAAM,CAC1B,IAAInP,EAActB,EAAK,WAAW5Q,EAAO,EAAI,EACzCgS,EAAWpB,EAAK,YAAY,EAC5B4Q,EAAQC,EAASzhB,CAAK,EAEtBiL,GAAIiH,EAAcF,CAAQ,GAAK,GAAKwP,GAAS,EAC3C7hB,EAAQ,UACVsZ,EAAO,OAAO/G,EAAasP,EAAO,GAAOH,CAAI,GAE7CC,EAAW,aAAeE,EAAQ,MAAQ7hB,EAAQ,MAAM,EACxDiR,EAAK,UAAUsB,EAAa,EAAI,EAChCqP,EAAcF,IAGhBzQ,EAAK,KAAK5Q,CAAK,EACfqhB,EAAK,EAET,CAEA,SAAS3P,GAAS,CAChB4P,EAAW,EAAE,EACbrI,EAAO,OAAO,CAChB,CAEA,SAASwI,EAASzhB,EAAO,CACvB,IAAI0hB,EAAc/hB,EAAQ,YAE1B,GAAIF,EAAQ,GAAGuH,EAAK,GAAK0a,EAAa,CACpC,IAAIlQ,EAAOxF,EAAW,SAAS,EAAI,EAC/BqJ,EAAMrJ,EAAW,OAAO,EAE5B,GAAIwF,IAAS,GAAKxR,GAASqV,GAAO7D,GAAQ6D,GAAOrV,IAAU,EACzD,OAAO0hB,CAEX,CAEA,OAAO/hB,EAAQ,KACjB,CAEA,MAAO,CACL,MAAOwF,EACP,MAAOic,EACP,OAAQ1P,CACV,CACF,CAEA,IAAIiQ,GAAuB,UAAY,CACrC,SAASA,EAAQ1Y,EAAQtJ,EAAS,CAChC,KAAK,MAAQwE,EAAe,EAC5B,KAAK,WAAa,CAAC,EACnB,KAAK,MAAQyd,GAAMC,EAAO,EAC1B,KAAK,QAAU,CAAC,EAChB,KAAK,GAAK,CAAC,EACX,KAAK,GAAK,CAAC,EACX,IAAIvd,EAAOiI,GAAStD,CAAM,EAAInC,GAAM,SAAUmC,CAAM,EAAIA,EACxD9C,GAAO7B,EAAMA,EAAO,cAAc,EAClC,KAAK,KAAOA,EACZ3E,EAAUmiB,GAAM,CACd,MAAOjb,GAAavC,EAAMzD,EAAU,GAAK,GACzC,WAAYgG,GAAavC,EAAMxD,EAAe,GAAK,EACrD,EAAGogB,GAAUS,EAAQ,SAAUhiB,GAAW,CAAC,CAAC,EAE5C,GAAI,CACFmiB,GAAMniB,EAAS,KAAK,MAAMkH,GAAavC,EAAM0S,EAAc,CAAC,CAAC,CAC/D,MAAE,CACA7Q,GAAO,GAAO,cAAc,CAC9B,CAEA,KAAK,GAAK,OAAO,OAAO2b,GAAM,CAAC,EAAGniB,CAAO,CAAC,CAC5C,CAEA,IAAIoiB,EAASJ,EAAQ,UAErB,OAAAI,EAAO,MAAQ,SAAeC,EAAY9Q,EAAY,CACpD,IAAI+Q,EAAQ,KAER/H,EAAQ,KAAK,MACbxa,EAAc,KAAK,WACvByG,GAAO+T,EAAM,GAAG,CAAC2H,GAASK,EAAS,CAAC,EAAG,kBAAkB,EACzDhI,EAAM,IAAI2H,EAAO,EACjB,KAAK,GAAKniB,EACV,KAAK,GAAKwR,GAAc,KAAK,KAAO,KAAK,GAAGhK,EAAI,EAAIia,GAAO5R,IAC3D,KAAK,GAAKyS,GAAc,KAAK,GAC7B,IAAIG,EAAe1b,GAAO,CAAC,EAAGsa,GAAuB,KAAK,GAAI,CAC5D,WAAY,KAAK,EACnB,CAAC,EACD,OAAAza,GAAO6b,EAAc,SAAUC,EAAW5b,EAAK,CAC7C,IAAI6b,EAAYD,EAAUH,EAAOviB,EAAauiB,EAAM,EAAE,EACtDviB,EAAY8G,GAAO6b,EACnBA,EAAU,OAASA,EAAU,MAAM,CACrC,CAAC,EACD/b,GAAO5G,EAAa,SAAU2iB,EAAW,CACvCA,EAAU,OAASA,EAAU,MAAM,CACrC,CAAC,EACD,KAAK,KAAKlR,EAAa,EACvBpL,GAAS,KAAK,KAAMnD,EAAiB,EACrCsX,EAAM,IAAIpI,EAAI,EACd,KAAK,KAAKwQ,EAAW,EACd,IACT,EAEAP,EAAO,KAAO,SAAc9B,EAAQ,CAClC,YAAK,QAAQ,KAAK,CAChB,OAAQA,CACV,CAAC,EACDA,EAAO,QAAQ,KAAK,CAClB,OAAQ,KACR,SAAU,EACZ,CAAC,EAEG,KAAK,MAAM,GAAGnO,EAAI,IACpB,KAAK,GAAG,KAAK,QAAQ,EAErBmO,EAAO,WAAW,KAAK,QAAQ,GAG1B,IACT,EAEA8B,EAAO,GAAK,SAAY3N,EAAS,CAC/B,YAAK,GAAG,WAAW,GAAGA,CAAO,EAEtB,IACT,EAEA2N,EAAO,GAAK,SAAY3D,EAAQ/Q,EAAU,CACxC,YAAK,MAAM,GAAG+Q,EAAQ/Q,CAAQ,EACvB,IACT,EAEA0U,EAAO,IAAM,SAAa3D,EAAQ,CAChC,YAAK,MAAM,IAAIA,CAAM,EACd,IACT,EAEA2D,EAAO,KAAO,SAAcza,EAAO,CACjC,IAAIib,EAEJ,OAACA,EAAc,KAAK,OAAO,KAAK,MAAMA,EAAa,CAACjb,CAAK,EAAE,OAAO6X,GAAM,UAAW,CAAC,CAAC,CAAC,EAE/E,IACT,EAEA4C,EAAO,IAAM,SAAatd,EAAQzE,EAAO,CACvC,YAAK,GAAG,OAAO,IAAIyE,EAAQzE,CAAK,EAEzB,IACT,EAEA+hB,EAAO,OAAS,SAAgB/U,EAAS,CACvC,YAAK,GAAG,OAAO,OAAOA,CAAO,EAEtB,IACT,EAEA+U,EAAO,GAAK,SAAYS,EAAM,CAC5B,OAAO,KAAK,GAAG,OAASA,CAC1B,EAEAT,EAAO,QAAU,UAAmB,CAClC,YAAK,KAAK3c,EAAa,EAChB,IACT,EAEA2c,EAAO,QAAU,SAAiBtc,EAAY,CACxCA,IAAe,SACjBA,EAAa,IAGf,IAAI6B,EAAQ,KAAK,MACb4S,EAAQ,KAAK,MAEjB,OAAIA,EAAM,GAAG2H,EAAO,EAClB1d,EAAe,IAAI,EAAE,GAAGme,GAAa,KAAK,QAAQ,KAAK,KAAM7c,CAAU,CAAC,GAExEa,GAAO,KAAK,GAAI,SAAU+b,EAAW,CACnCA,EAAU,SAAWA,EAAU,QAAQ5c,CAAU,CACnD,EAAG,EAAI,EACP6B,EAAM,KAAKmb,EAAa,EACxBnb,EAAM,QAAQ,EACd7B,GAAcE,GAAM,KAAK,OAAO,EAChCuU,EAAM,IAAIgI,EAAS,GAGd,IACT,EAEAQ,GAAaf,EAAS,CAAC,CACrB,IAAK,UACL,IAAK,UAAe,CAClB,OAAO,KAAK,EACd,EACA,IAAK,SAAahiB,EAAS,CACzB,KAAK,GAAG,MAAM,IAAIA,EAAS,GAAM,EAAI,CACvC,CACF,EAAG,CACD,IAAK,SACL,IAAK,UAAe,CAClB,OAAO,KAAK,GAAG,OAAO,UAAU,EAAI,CACtC,CACF,EAAG,CACD,IAAK,QACL,IAAK,UAAe,CAClB,OAAO,KAAK,GAAG,WAAW,SAAS,CACrC,CACF,CAAC,CAAC,EAEKgiB,CACT,EAAE,EAEEgB,GAAShB,GACbgB,GAAO,SAAW,CAAC,EACnBA,GAAO,OAASC,GC7kGhB,IAAOC,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACR,SAAS,iBAAiB,SAAS,EAAE,QAAQC,GAAY,IAAIC,GAAOD,EAAU,CAC5E,KAAM,OACN,MAAO,SACP,MAAO,EACP,SAAU,GACV,YAAa,CACX,IAAK,CACH,QAAS,CACX,CACF,CACF,CAAC,EAAE,MAAM,CAAC,CACZ,CACF,ECfA,IAAOE,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACR,KAAK,WAAW,CAClB,CAEA,YAAa,CACX,IAAMC,EAAc,SAAS,eAAe,eAAe,EAErDC,EADW,MAAM,KAAK,SAAS,iBAAiB,gBAAgB,CAAC,EAChD,OAAO,CAACC,EAAKC,IAC3BD,GAAO,WAAWC,EAAQ,SAAS,EACzC,CAAC,EAAE,QAAQ,CAAC,EAEfH,EAAY,UAAYC,CAC1B,CACF,ECdA,IAAOG,GAAP,cAA6BC,CAAW,CACtC,SAAU,CAEV,CAEA,UAAUC,EAAO,CACf,IAAMC,EAAS,SAAS,eAAe,QAAQ,EACzCC,EAAY,SAAS,eAAe,WAAW,EAGrD,OAFoBF,EAAM,aAGnBC,EACHC,EAAU,UAAU,OAAO,QAAQ,EACnCD,EAAO,UAAU,IAAI,QAAQ,EAC7B,WACGC,EACHD,EAAO,UAAU,OAAO,QAAQ,EAChCC,EAAU,UAAU,IAAI,QAAQ,EAChC,cAEA,MAEN,CACF,ECvBA,IAAOC,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACR,SAAS,eAAe,eAAe,EAAE,UAAU,OAAO,QAAQ,EAClE,SAAS,eAAe,cAAc,EAAE,UAAU,IAAI,QAAQ,EAC9D,SAAS,eAAe,kBAAkB,EAAE,UAAU,OAAO,QAAQ,CACvE,CAEA,YAAa,CACX,SAAS,eAAe,mBAAmB,EAAE,cAAc,CAC7D,CACF,ECVA,IAAOC,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACR,SAAS,eAAe,eAAe,EAAE,UAAU,OAAO,QAAQ,EAClE,SAAS,eAAe,cAAc,GAAK,SAAS,eAAe,cAAc,EAAE,UAAU,OAAO,QAAQ,EAC5G,SAAS,eAAe,kBAAkB,EAAE,UAAU,IAAI,QAAQ,EAElE,KAAK,WAAW,CAClB,CAEA,YAAa,CACX,IAAMC,EAAc,SAAS,eAAe,eAAe,EAErDC,EADW,MAAM,KAAK,SAAS,iBAAiB,gBAAgB,CAAC,EAChD,OAAO,CAACC,EAAKC,IAC3BD,GAAO,WAAWC,EAAQ,SAAS,EACzC,CAAC,EAAE,QAAQ,CAAC,EAEfH,EAAY,UAAYC,CAC1B,CAEA,eAAeG,EAAO,CACpB,IAAMC,EAAsBD,EAAM,OAAO,QAAQ,YAC3CE,EAAc,SAAS,eAAe,uBAAuB,EAC7DC,EAAiB,SAAS,eAAe,iBAAiB,EAIhE,OAFAD,EAAY,MAAQD,EAEZA,OACD,OACHE,EAAe,UAAY,WAC3B,UACG,OACHA,EAAe,UAAY,6BAE3B,MAEN,CACF,ECrCA,IAAOC,GAAP,cAA6BC,CAAW,CACtC,SAAU,CAEV,CAEA,iBAAiBC,EAAO,CACtB,IAAMC,EAAoB,SAAS,eAAe,qBAAqB,EACtDD,EAAM,cAEV,QACXC,EAAkB,UAAU,OAAO,QAAQ,EAE3CA,EAAkB,UAAU,IAAI,QAAQ,CAE5C,CAEA,iBAAiBD,EAAO,CACtB,IAAME,EAAkBF,EAAM,cAAc,QAAQ,IAAI,EAClDG,EAAkBH,EAAM,cAAc,cAAc,GAAG,EAEvDI,EAAaJ,EAAM,cAAc,QAAQ,SACzCK,EAAW,SAAS,eAAeD,CAAU,EAE7CE,EAAeN,EAAM,cAAc,QAAQ,WAC3CO,EAAa,SAAS,eAAeD,CAAY,EAEnD,CAACD,IAEL,SAAS,iBAAiB,8BAA8B,EAAE,QAAQG,GAAQ,CACxEA,EAAK,UAAU,OAAO,YAAY,EAElC,IAAMC,EAAaD,EAAK,cAAc,YAAY,EAElDC,EAAW,UAAU,OAAO,gBAAgB,EAC5CA,EAAW,UAAU,IAAI,kBAAkB,CAC7C,CAAC,EAED,SAAS,iBAAiB,0BAA0B,EAAE,QAAQD,GAAQ,CAChEA,EAAK,KAAOJ,GAAc,CAACI,EAAK,UAAU,SAAS,QAAQ,IAC7DA,EAAK,UAAU,IAAI,QAAQ,EAC3BA,EAAK,UAAU,OAAO,eAAe,EAEzC,CAAC,EAED,SAAS,iBAAiB,cAAc,EAAE,QAAQA,GAAQ,CACpDA,EAAK,KAAOF,GAAgB,CAACE,EAAK,UAAU,SAAS,QAAQ,IAC/DA,EAAK,UAAU,IAAI,QAAQ,EAC3BA,EAAK,UAAU,OAAO,cAAc,EAExC,CAAC,EAEGH,EAAS,UAAU,SAAS,QAAQ,GACtCA,EAAS,UAAU,OAAO,QAAQ,EAClCA,EAAS,UAAU,IAAI,eAAe,EAEtCH,EAAgB,UAAU,IAAI,YAAY,EAE1CC,EAAgB,UAAU,OAAO,kBAAkB,EACnDA,EAAgB,UAAU,IAAI,gBAAgB,IAE9CE,EAAS,UAAU,IAAI,QAAQ,EAE/BH,EAAgB,UAAU,OAAO,YAAY,EAE7CC,EAAgB,UAAU,OAAO,gBAAgB,EACjDA,EAAgB,UAAU,IAAI,kBAAkB,GAG7CI,IAEDA,EAAW,UAAU,SAAS,QAAQ,GACxCA,EAAW,UAAU,OAAO,QAAQ,EACpCA,EAAW,UAAU,IAAI,cAAc,GAEvCA,EAAW,UAAU,IAAI,QAAQ,GAErC,CACF,EC5EA,IAAOG,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACR,SAAS,eAAe,eAAe,EAAE,UAAU,IAAI,QAAQ,EAC/D,SAAS,eAAe,cAAc,GAAK,SAAS,eAAe,cAAc,EAAE,UAAU,OAAO,QAAQ,EAC5G,SAAS,eAAe,kBAAkB,EAAE,UAAU,OAAO,QAAQ,CACvE,CAEA,UAAUC,EAAO,CACf,IAAMC,EAAOD,EAAM,OAAO,QAAQ,IAAI,EAChCE,EAAUD,EAAK,iBAAiB,iBAAiB,EAAE,KAAK,CAAC,EACzDE,EAAQ,WAAWF,EAAK,iBAAiB,eAAe,EAAE,KAAK,CAAC,EAAE,SAAS,EAC3EG,EAAWH,EAAK,iBAAiB,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAC7DI,EAASF,EAAQC,EAEvBF,EAAQ,UAAYG,EAAO,QAAQ,CAAC,CACtC,CACF,EChBA,IAAOC,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACR,IAAMC,EAAU,SAAS,eAAe,SAAS,EACjDA,EAAQ,MAAM,EAEW,SAAS,eAAe,oBAAoB,EAEpD,iBAAiB,SAAWC,GAAU,CACrDD,EAAQ,MAAQA,EAAQ,MAAM,QAAQ,MAAO,EAAE,CACjD,CAAC,EAEI,SAAS,oBACZ,SAAS,iBAAiB,UAAYC,GAAU,CAC1CA,EAAM,MAAQ,MAChBA,EAAM,eAAe,EACrB,SAAS,eAAe,SAAS,EAAE,MAAM,EAE7C,CAAC,EAED,SAAS,kBAAoB,GAEjC,CAEA,aAAc,CACZ,SAAS,eAAe,gBAAgB,EAAE,UAAY,GACtD,SAAS,eAAe,cAAc,EAAE,UAAY,GACpD,SAAS,eAAe,aAAa,EAAE,UAAY,GACnD,SAAS,eAAe,YAAY,EAAE,UAAY,GAClD,SAAS,eAAe,SAAS,EAAE,MAAQ,GAC3C,SAAS,eAAe,SAAS,EAAE,MAAM,CAC3C,CAEA,iBAAiBA,EAAO,CACtB,IAAMC,EAAS,SAAS,eAAe,mBAAmB,EACpDC,EAAaF,EAAM,OAAO,QAAQ,OAAO,EAC1B,SAAS,uBAAuB,iBAAiB,EAEzD,QAASG,GAASA,EAAK,UAAU,OAAO,gBAAgB,CAAC,EAEtED,EAAW,UAAU,IAAI,gBAAgB,EACzCD,EAAO,UAAU,OAAO,UAAU,EAElC,SAAS,eAAe,eAAe,EAAE,MAAQD,EAAM,OAAO,EAChE,CACF,EC5CA,IAAOI,GAAP,cAA6BC,CAAW,CAGtC,SAAU,CACR,KAAK,QAAU,IAAI,UAAU,MAAM,KAAK,mBAAoB,CAAC,CAAC,EAE9D,IAAIC,EAAc,KAAK,mBAAmB,QAAQ,aAE9CA,GAAe,MAAQA,GAAe,UACxC,KAAK,QAAQ,KAAK,CAEtB,CAEA,WAAY,CACV,KAAK,QAAQ,KAAK,CACpB,CAEA,YAAa,CACX,KAAK,QAAQ,KAAK,CACpB,CACF,EAnBEC,GADKH,GACE,UAAU,CAAC,cAAc,GCDlC,IAAOI,GAAP,cAA6BC,CAAW,CAatC,SAAU,CAGR,GAFA,KAAK,OAAS,OAAO,KAAK,SAAU,CAAE,OAAQ,IAAK,CAAC,EAEhD,KAAK,mBACP,WAAW,IAAM,CAAE,OAAO,SAAS,KAAO,KAAK,eAAiB,EAAG,IAAI,UAC9D,KAAK,qBAAsB,CACpC,GAAI,KAAK,oBAAqB,CAC5B,GAAI,CAAC,KAAK,iBAAiB,YAAY,EAAK,OAE5C,KAAK,iBAAiB,cAAc,CACtC,CAEA,KAAK,UAAU,CACjB,CACF,CAEA,MAAM,WAAY,CAChB,IAAMC,EAAS,MAAM,KAAK,OAAO,iBAAiB,KAAK,iBAAiB,EAEpEA,EAAO,MACT,KAAK,eAAeA,EAAO,MAAM,OAAO,GAExC,KAAK,mBAAmB,EACxB,KAAK,iBAAiBA,EAAO,cAAc,EAAE,EAEjD,CAEA,iBAAiBC,EAAiB,CAChC,MAAM,KAAK,gBAAiB,CAC1B,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,eAAgB,SAAS,cAAc,yBAAyB,EAAE,OACpE,EACA,KAAM,KAAK,UAAU,CACnB,WAAY,KAAK,eACjB,kBAAmBA,CACrB,CAAC,CACH,CAAC,EAAE,KAAK,MAAMC,GAAY,CACxB,GAAIA,EAAS,GACP,KAAK,qBAAuB,KAAK,iBAAiB,oBAAoB,MACrE,CACL,IAAIC,EAAU,gCAEd,GAAI,CACF,IAAMC,EAAO,MAAMF,EAAS,KAAK,EAE7BE,EAAK,UAAWD,EAAUC,EAAK,QACrC,MAAE,CAAgB,CAElB,KAAK,eAAeD,CAAO,CAC7B,CACF,CAAC,EAAE,MAAME,GAAS,CAChB,KAAK,eAAe,+BAA4B,CAClD,CAAC,CACH,CAEA,oBAAqB,CACnB,KAAK,oBAAoB,UAAU,IAAI,QAAQ,EAC/C,KAAK,mBAAmB,UAAU,IAAI,QAAQ,EAC9C,KAAK,uBAAuB,UAAU,OAAO,QAAQ,EAErD,KAAK,aAAa,UAAU,OAAO,YAAY,EAC/C,KAAK,aAAa,UAAU,IAAI,YAAY,EAE5C,KAAK,YAAY,YAAc,sBACjC,CAEA,eAAeF,EAAS,CACtB,KAAK,oBAAoB,UAAU,IAAI,QAAQ,EAC/C,KAAK,uBAAuB,UAAU,IAAI,QAAQ,EAElD,KAAK,mBAAmB,YAAcA,EACtC,KAAK,mBAAmB,UAAU,OAAO,QAAQ,EAEjD,KAAK,aAAa,UAAU,OAAO,aAAc,YAAY,EAC7D,KAAK,aAAa,UAAU,IAAI,WAAW,EAE3C,KAAK,YAAY,YAAc,uBACjC,CACF,EA5FEG,GADKR,GACE,SAAS,CACd,IAAK,OACL,UAAW,OACX,aAAc,OACd,WAAY,OACZ,WAAY,MACd,GAEAQ,GATKR,GASE,UAAU,CAAC,aAAa,GAE/BQ,GAXKR,GAWE,UAAU,CAAC,gBAAiB,mBAAoB,eAAgB,eAAgB,SAAU,OAAO,GCd1G,IAAIS,GAAW,CACb,OAAQ,OAAO,QAAY,IAAc,QAAU,OACnD,UAAW,OAAO,UAAc,IAAc,UAAY,MAC5D,EAEIC,EAAS,CACX,OAAOC,EAAU,CACX,KAAK,UACPA,EAAS,KAAK,KAAK,IAAI,CAAC,EACxBF,GAAS,OAAO,IAAI,gBAAiB,GAAGE,CAAQ,EAEpD,CACF,EAEMC,GAAM,IAAO,IAAI,OAAM,QAAQ,EAE/BC,GAAeC,IAASF,GAAI,EAAIE,GAAQ,IAExCC,GAAN,KAAwB,CACtB,YAAYC,EAAY,CACtB,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,WAAaA,EAClB,KAAK,kBAAoB,CAC3B,CACA,OAAQ,CACD,KAAK,UAAU,IAClB,KAAK,UAAYJ,GAAI,EACrB,OAAO,KAAK,UACZ,KAAK,aAAa,EAClB,iBAAiB,mBAAoB,KAAK,mBAAmB,EAC7DF,EAAO,IAAI,gDAAgD,KAAK,YAAY,kBAAkB,EAElG,CACA,MAAO,CACD,KAAK,UAAU,IACjB,KAAK,UAAYE,GAAI,EACrB,KAAK,YAAY,EACjB,oBAAoB,mBAAoB,KAAK,mBAAmB,EAChEF,EAAO,IAAI,2BAA2B,EAE1C,CACA,WAAY,CACV,OAAO,KAAK,WAAa,CAAC,KAAK,SACjC,CACA,YAAa,CACX,KAAK,SAAWE,GAAI,CACtB,CACA,eAAgB,CACd,KAAK,kBAAoB,EACzB,KAAK,WAAW,EAChB,OAAO,KAAK,eACZF,EAAO,IAAI,oCAAoC,CACjD,CACA,kBAAmB,CACjB,KAAK,eAAiBE,GAAI,EAC1BF,EAAO,IAAI,uCAAuC,CACpD,CACA,cAAe,CACb,KAAK,YAAY,EACjB,KAAK,KAAK,CACZ,CACA,aAAc,CACZ,aAAa,KAAK,WAAW,CAC/B,CACA,MAAO,CACL,KAAK,YAAc,WAAY,IAAM,CACnC,KAAK,iBAAiB,EACtB,KAAK,KAAK,CACZ,EAAI,KAAK,gBAAgB,CAAC,CAC5B,CACA,iBAAkB,CAChB,GAAM,CAAC,eAAgBO,EAAgB,wBAAyBC,CAAuB,EAAI,KAAK,YAC1FC,EAAU,KAAK,IAAI,EAAID,EAAyB,KAAK,IAAI,KAAK,kBAAmB,EAAE,CAAC,EAEpFE,GADY,KAAK,oBAAsB,EAAI,EAAIF,GAC1B,KAAK,OAAO,EACvC,OAAOD,EAAiB,IAAME,GAAW,EAAIC,EAC/C,CACA,kBAAmB,CACb,KAAK,kBAAkB,IACzBV,EAAO,IAAI,oEAAoE,KAAK,mCAAmCG,GAAa,KAAK,WAAW,0BAA0B,KAAK,YAAY,kBAAkB,EACjN,KAAK,oBACD,KAAK,qBAAqB,EAC5BH,EAAO,IAAI,+EAA+EG,GAAa,KAAK,cAAc,KAAK,GAE/HH,EAAO,IAAI,6BAA6B,EACxC,KAAK,WAAW,OAAO,GAG7B,CACA,IAAI,aAAc,CAChB,OAAO,KAAK,SAAW,KAAK,SAAW,KAAK,SAC9C,CACA,mBAAoB,CAClB,OAAOG,GAAa,KAAK,WAAW,EAAI,KAAK,YAAY,cAC3D,CACA,sBAAuB,CACrB,OAAO,KAAK,gBAAkBA,GAAa,KAAK,cAAc,EAAI,KAAK,YAAY,cACrF,CACA,qBAAsB,CAChB,SAAS,kBAAoB,WAC/B,WAAY,IAAM,EACZ,KAAK,kBAAkB,GAAK,CAAC,KAAK,WAAW,OAAO,KACtDH,EAAO,IAAI,uFAAuF,SAAS,iBAAiB,EAC5H,KAAK,WAAW,OAAO,EAE3B,EAAI,GAAG,CAEX,CACF,EAEAK,GAAkB,eAAiB,EAEnCA,GAAkB,wBAA0B,IAE5C,IAAIM,GAAW,CACb,cAAe,CACb,QAAS,UACT,WAAY,aACZ,KAAM,OACN,aAAc,uBACd,UAAW,qBACb,EACA,mBAAoB,CAClB,aAAc,eACd,gBAAiB,kBACjB,eAAgB,iBAChB,OAAQ,QACV,EACA,mBAAoB,SACpB,UAAW,CAAE,sBAAuB,yBAA0B,CAChE,EAEM,CAAC,cAAeC,GAAe,UAAWC,EAAS,EAAIF,GAEvDG,GAAqBD,GAAU,MAAM,EAAGA,GAAU,OAAS,CAAC,EAE5DE,GAAU,CAAC,EAAE,QAEbC,GAAN,KAAiB,CACf,YAAYC,EAAU,CACpB,KAAK,KAAO,KAAK,KAAK,KAAK,IAAI,EAC/B,KAAK,SAAWA,EAChB,KAAK,cAAgB,KAAK,SAAS,cACnC,KAAK,QAAU,IAAIZ,GAAkB,IAAI,EACzC,KAAK,aAAe,EACtB,CACA,KAAKa,EAAM,CACT,OAAI,KAAK,OAAO,GACd,KAAK,UAAU,KAAK,KAAK,UAAUA,CAAI,CAAC,EACjC,IAEA,EAEX,CACA,MAAO,CACL,GAAI,KAAK,SAAS,EAChB,OAAAlB,EAAO,IAAI,uDAAuD,KAAK,SAAS,GAAG,EAC5E,GACF,CACL,IAAMmB,EAAkB,CAAE,GAAGN,GAAW,GAAG,KAAK,SAAS,cAAgB,CAAC,CAAE,EAC5E,OAAAb,EAAO,IAAI,uCAAuC,KAAK,SAAS,oBAAoBmB,GAAiB,EACjG,KAAK,WACP,KAAK,uBAAuB,EAE9B,KAAK,UAAY,IAAIpB,GAAS,UAAU,KAAK,SAAS,IAAKoB,CAAe,EAC1E,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,MAAM,EACZ,EACT,CACF,CACA,MAAM,CAAC,eAAgBC,CAAc,EAAI,CACvC,eAAgB,EAClB,EAAG,CAID,GAHKA,GACH,KAAK,QAAQ,KAAK,EAEhB,KAAK,OAAO,EACd,OAAO,KAAK,UAAU,MAAM,CAEhC,CACA,QAAS,CAEP,GADApB,EAAO,IAAI,yCAAyC,KAAK,SAAS,GAAG,EACjE,KAAK,SAAS,EAChB,GAAI,CACF,OAAO,KAAK,MAAM,CACpB,OAASqB,EAAP,CACArB,EAAO,IAAI,6BAA8BqB,CAAK,CAChD,QAAE,CACArB,EAAO,IAAI,0BAA0B,KAAK,YAAY,eAAe,EACrE,WAAW,KAAK,KAAM,KAAK,YAAY,WAAW,CACpD,KAEA,QAAO,KAAK,KAAK,CAErB,CACA,aAAc,CACZ,GAAI,KAAK,UACP,OAAO,KAAK,UAAU,QAE1B,CACA,QAAS,CACP,OAAO,KAAK,QAAQ,MAAM,CAC5B,CACA,UAAW,CACT,OAAO,KAAK,QAAQ,OAAQ,YAAY,CAC1C,CACA,kBAAmB,CACjB,OAAO,KAAK,QAAQ,kBAAoB,CAC1C,CACA,qBAAsB,CACpB,OAAOe,GAAQ,KAAKD,GAAoB,KAAK,YAAY,CAAC,GAAK,CACjE,CACA,WAAWQ,EAAQ,CACjB,OAAOP,GAAQ,KAAKO,EAAQ,KAAK,SAAS,CAAC,GAAK,CAClD,CACA,UAAW,CACT,GAAI,KAAK,WACP,QAASC,KAASxB,GAAS,UACzB,GAAIA,GAAS,UAAUwB,KAAW,KAAK,UAAU,WAC/C,OAAOA,EAAM,YAAY,EAI/B,OAAO,IACT,CACA,sBAAuB,CACrB,QAASC,KAAa,KAAK,OAAQ,CACjC,IAAMC,EAAU,KAAK,OAAOD,GAAW,KAAK,IAAI,EAChD,KAAK,UAAU,KAAKA,KAAeC,CACrC,CACF,CACA,wBAAyB,CACvB,QAASD,KAAa,KAAK,OACzB,KAAK,UAAU,KAAKA,KAAe,UAAW,CAAC,CAEnD,CACF,EAEAR,GAAW,YAAc,IAEzBA,GAAW,UAAU,OAAS,CAC5B,QAAQU,EAAO,CACb,GAAI,CAAC,KAAK,oBAAoB,EAC5B,OAEF,GAAM,CAAC,WAAYC,EAAY,QAASC,EAAS,OAAQC,EAAQ,UAAWC,EAAW,KAAMC,CAAI,EAAI,KAAK,MAAML,EAAM,IAAI,EAC1H,OAAQK,QACFnB,GAAc,QAClB,OAAI,KAAK,iBAAiB,IACxB,KAAK,mBAAqB,IAE5B,KAAK,QAAQ,cAAc,EACpB,KAAK,cAAc,OAAO,OAE7BA,GAAc,WAClB,OAAAZ,EAAO,IAAI,0BAA0B6B,GAAQ,EACtC,KAAK,MAAM,CAChB,eAAgBC,CAClB,CAAC,OAEGlB,GAAc,KAClB,OAAO,KAAK,QAAQ,WAAW,OAE3BA,GAAc,aAElB,OADA,KAAK,cAAc,oBAAoBe,CAAU,EAC7C,KAAK,oBACP,KAAK,mBAAqB,GACnB,KAAK,cAAc,OAAOA,EAAY,YAAa,CACxD,YAAa,EACf,CAAC,GAEM,KAAK,cAAc,OAAOA,EAAY,YAAa,CACxD,YAAa,EACf,CAAC,OAGCf,GAAc,UAClB,OAAO,KAAK,cAAc,OAAOe,CAAU,UAG3C,OAAO,KAAK,cAAc,OAAOA,EAAY,WAAYC,CAAO,EAEpE,EACA,MAAO,CAGL,GAFA5B,EAAO,IAAI,kCAAkC,KAAK,YAAY,gBAAgB,EAC9E,KAAK,aAAe,GAChB,CAAC,KAAK,oBAAoB,EAC5B,OAAAA,EAAO,IAAI,8DAA8D,EAClE,KAAK,MAAM,CAChB,eAAgB,EAClB,CAAC,CAEL,EACA,MAAM0B,EAAO,CAEX,GADA1B,EAAO,IAAI,yBAAyB,EAChC,MAAK,aAGT,YAAK,aAAe,GACpB,KAAK,QAAQ,iBAAiB,EACvB,KAAK,cAAc,UAAU,eAAgB,CAClD,qBAAsB,KAAK,QAAQ,UAAU,CAC/C,CAAC,CACH,EACA,OAAQ,CACNA,EAAO,IAAI,yBAAyB,CACtC,CACF,EAEA,IAAMgC,GAAS,SAASC,EAAQC,EAAY,CAC1C,GAAIA,GAAc,KAChB,QAASC,KAAOD,EAAY,CAC1B,IAAME,EAAQF,EAAWC,GACzBF,EAAOE,GAAOC,CAChB,CAEF,OAAOH,CACT,EAEMI,GAAN,KAAmB,CACjB,YAAYpB,EAAUqB,EAAS,CAAC,EAAGC,EAAO,CACxC,KAAK,SAAWtB,EAChB,KAAK,WAAa,KAAK,UAAUqB,CAAM,EACvCN,GAAO,KAAMO,CAAK,CACpB,CACA,QAAQC,EAAQtB,EAAO,CAAC,EAAG,CACzB,OAAAA,EAAK,OAASsB,EACP,KAAK,KAAKtB,CAAI,CACvB,CACA,KAAKA,EAAM,CACT,OAAO,KAAK,SAAS,KAAK,CACxB,QAAS,UACT,WAAY,KAAK,WACjB,KAAM,KAAK,UAAUA,CAAI,CAC3B,CAAC,CACH,CACA,aAAc,CACZ,OAAO,KAAK,SAAS,cAAc,OAAO,IAAI,CAChD,CACF,EAEMuB,GAAN,KAA4B,CAC1B,YAAYC,EAAe,CACzB,KAAK,cAAgBA,EACrB,KAAK,qBAAuB,CAAC,CAC/B,CACA,UAAUC,EAAc,CAClB,KAAK,qBAAqB,QAAQA,CAAY,GAAK,IACrD3C,EAAO,IAAI,sCAAsC2C,EAAa,YAAY,EAC1E,KAAK,qBAAqB,KAAKA,CAAY,GAE3C3C,EAAO,IAAI,8CAA8C2C,EAAa,YAAY,EAEpF,KAAK,kBAAkB,CACzB,CACA,OAAOA,EAAc,CACnB3C,EAAO,IAAI,oCAAoC2C,EAAa,YAAY,EACxE,KAAK,qBAAuB,KAAK,qBAAqB,OAAQC,GAAKA,IAAMD,CAAa,CACxF,CACA,mBAAoB,CAClB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,CACxB,CACA,kBAAmB,CACjB,aAAa,KAAK,YAAY,CAChC,CACA,kBAAmB,CACjB,KAAK,aAAe,WAAY,IAAM,CAChC,KAAK,eAAiB,OAAO,KAAK,cAAc,WAAc,YAChE,KAAK,qBAAqB,IAAKA,GAAgB,CAC7C3C,EAAO,IAAI,uCAAuC2C,EAAa,YAAY,EAC3E,KAAK,cAAc,UAAUA,CAAY,CAC3C,CAAE,CAEN,EAAI,GAAG,CACT,CACF,EAEME,GAAN,KAAoB,CAClB,YAAY5B,EAAU,CACpB,KAAK,SAAWA,EAChB,KAAK,UAAY,IAAIwB,GAAsB,IAAI,EAC/C,KAAK,cAAgB,CAAC,CACxB,CACA,OAAOK,EAAaP,EAAO,CACzB,IAAMQ,EAAUD,EACVR,EAAS,OAAOS,GAAY,SAAWA,EAAU,CACrD,QAASA,CACX,EACMJ,EAAe,IAAIN,GAAa,KAAK,SAAUC,EAAQC,CAAK,EAClE,OAAO,KAAK,IAAII,CAAY,CAC9B,CACA,IAAIA,EAAc,CAChB,YAAK,cAAc,KAAKA,CAAY,EACpC,KAAK,SAAS,uBAAuB,EACrC,KAAK,OAAOA,EAAc,aAAa,EACvC,KAAK,UAAUA,CAAY,EACpBA,CACT,CACA,OAAOA,EAAc,CACnB,YAAK,OAAOA,CAAY,EACnB,KAAK,QAAQA,EAAa,UAAU,EAAE,QACzC,KAAK,YAAYA,EAAc,aAAa,EAEvCA,CACT,CACA,OAAOhB,EAAY,CACjB,OAAO,KAAK,QAAQA,CAAU,EAAE,IAAKgB,IACnC,KAAK,OAAOA,CAAY,EACxB,KAAK,OAAOA,EAAc,UAAU,EAC7BA,EACP,CACJ,CACA,OAAOA,EAAc,CACnB,YAAK,UAAU,OAAOA,CAAY,EAClC,KAAK,cAAgB,KAAK,cAAc,OAAQC,GAAKA,IAAMD,CAAa,EACjEA,CACT,CACA,QAAQhB,EAAY,CAClB,OAAO,KAAK,cAAc,OAAQiB,GAAKA,EAAE,aAAejB,CAAW,CACrE,CACA,QAAS,CACP,OAAO,KAAK,cAAc,IAAKgB,GAAgB,KAAK,UAAUA,CAAY,CAAE,CAC9E,CACA,UAAUK,KAAiBC,EAAM,CAC/B,OAAO,KAAK,cAAc,IAAKN,GAAgB,KAAK,OAAOA,EAAcK,EAAc,GAAGC,CAAI,CAAE,CAClG,CACA,OAAON,EAAcK,KAAiBC,EAAM,CAC1C,IAAIP,EACJ,OAAI,OAAOC,GAAiB,SAC1BD,EAAgB,KAAK,QAAQC,CAAY,EAEzCD,EAAgB,CAAEC,CAAa,EAE1BD,EAAc,IAAKC,GAAgB,OAAOA,EAAaK,IAAkB,WAAaL,EAAaK,GAAc,GAAGC,CAAI,EAAI,MAAU,CAC/I,CACA,UAAUN,EAAc,CAClB,KAAK,YAAYA,EAAc,WAAW,GAC5C,KAAK,UAAU,UAAUA,CAAY,CAEzC,CACA,oBAAoBhB,EAAY,CAC9B3B,EAAO,IAAI,0BAA0B2B,GAAY,EACjD,KAAK,QAAQA,CAAU,EAAE,IAAKgB,GAAgB,KAAK,UAAU,OAAOA,CAAY,CAAE,CACpF,CACA,YAAYA,EAAcO,EAAS,CACjC,GAAM,CAAC,WAAYvB,CAAU,EAAIgB,EACjC,OAAO,KAAK,SAAS,KAAK,CACxB,QAASO,EACT,WAAYvB,CACd,CAAC,CACH,CACF,EAEMwB,GAAN,KAAe,CACb,YAAYC,EAAK,CACf,KAAK,KAAOA,EACZ,KAAK,cAAgB,IAAIP,GAAc,IAAI,EAC3C,KAAK,WAAa,IAAI7B,GAAW,IAAI,EACrC,KAAK,aAAe,CAAC,CACvB,CACA,IAAI,KAAM,CACR,OAAOqC,GAAmB,KAAK,IAAI,CACrC,CACA,KAAKnC,EAAM,CACT,OAAO,KAAK,WAAW,KAAKA,CAAI,CAClC,CACA,SAAU,CACR,OAAO,KAAK,WAAW,KAAK,CAC9B,CACA,YAAa,CACX,OAAO,KAAK,WAAW,MAAM,CAC3B,eAAgB,EAClB,CAAC,CACH,CACA,wBAAyB,CACvB,GAAI,CAAC,KAAK,WAAW,SAAS,EAC5B,OAAO,KAAK,WAAW,KAAK,CAEhC,CACA,eAAeoC,EAAa,CAC1B,KAAK,aAAe,CAAE,GAAG,KAAK,aAAcA,CAAY,CAC1D,CACF,EAEA,SAASD,GAAmBD,EAAK,CAI/B,GAHI,OAAOA,GAAQ,aACjBA,EAAMA,EAAI,GAERA,GAAO,CAAC,UAAU,KAAKA,CAAG,EAAG,CAC/B,IAAMG,EAAI,SAAS,cAAc,GAAG,EACpC,OAAAA,EAAE,KAAOH,EACTG,EAAE,KAAOA,EAAE,KACXA,EAAE,SAAWA,EAAE,SAAS,QAAQ,OAAQ,IAAI,EACrCA,EAAE,IACX,KACE,QAAOH,CAEX,CAEA,SAASI,GAAeJ,EAAMK,GAAU,KAAK,GAAK9C,GAAS,mBAAoB,CAC7E,OAAO,IAAIwC,GAASC,CAAG,CACzB,CAEA,SAASK,GAAUC,EAAM,CACvB,IAAMC,EAAU,SAAS,KAAK,cAAc,2BAA2BD,KAAQ,EAC/E,GAAIC,EACF,OAAOA,EAAQ,aAAa,SAAS,CAEzC,CCzfA,IAAOC,GAAP,cAA6BC,CAAW,CAMtC,SAAU,CAIR,KAAK,kBAAoB,GAEzB,KAAK,YAAc,GACnB,KAAK,kBAAoB,GAEzB,KAAK,SAAWC,GAAe,EAE/B,KAAK,mBAAmB,EAEpB,MAAK,mBAET,KAAK,aAAa,CACpB,CAEA,aAAc,CACZ,OAAO,KAAK,QAAQ,WACtB,CAEA,YAAa,CACP,KAAK,cAAgB,KAAK,aAAa,YAAY,EACnD,KAAK,UAAY,KAAK,SAAS,WAAW,EAE9C,KAAK,YAAY,CACnB,CAEA,oBAAqB,CACnB,KAAK,aAAe,KAAK,SAAS,cAAc,OAC9C,CACE,QAAS,uBACT,GAAI,KAAK,eACX,EACA,CACE,UAAW,IAAM,CACX,CAAC,KAAK,cAEV,KAAK,kBAAoB,GAEzB,KAAK,YAAY,EACnB,EACA,aAAc,IAAM,CACd,CAAC,KAAK,cAEV,KAAK,kBAAoB,GAEzB,KAAK,aAAa,EACpB,EACA,SAAWC,GAAS,CACd,CAAC,KAAK,cAEV,KAAK,YAAY,EAEb,OAAO,OAAS,OAAO,MAAM,oBAAoBA,CAAI,EAC3D,CACF,CACF,CACF,CAEA,cAAe,CACT,KAAK,UAET,KAAK,QAAU,YAAY,SAAY,CACrC,IAAMC,EAAW,MAAM,MAAM,GAAG,KAAK,iBAAkB,CAAE,QAAS,CAAE,OAAU,kBAAmB,CAAE,CAAC,EAEpG,GAAI,CAACA,EAAS,GAAM,OAEpB,IAAMD,EAAO,MAAMC,EAAS,KAAK,EAG7B,CAAC,KAAK,SAEN,CAAC,KAAK,aAEND,EAAK,SAAW,WAAcA,EAAK,SAAW,mBAAqB,KAAK,oBAE5E,KAAK,YAAY,EAEjB,KAAK,WAAWA,EAAK,IAAI,EAC3B,EAAG,GAAI,EACT,CAEA,aAAc,CACR,KAAK,UACP,cAAc,KAAK,OAAO,EAC1B,KAAK,QAAU,KAEnB,CAEA,aAAc,CACZ,MAAO,CAAC,KAAK,WACf,CAEA,eAAgB,CACd,KAAK,YAAc,EACrB,CAEA,UAAW,CACT,KAAK,YAAc,EACrB,CAEA,qBAAsB,CAChB,CAAC,KAAK,cAEV,KAAK,SAAS,EAEd,KAAK,kBAAoB,GAEzB,KAAK,YAAY,EAEb,MAAK,mBAET,KAAK,aAAa,EACpB,CAEA,WAAWE,EAAa,CACtB,GAAI,CAAC,OAAO,MAAS,OAErB,IAAMC,EAAgB;AAAA;AAAA;AAAA,YAGdD;AAAA;AAAA;AAAA,MAKR,OAAO,MAAM,oBAAoBC,CAAa,CAChD,CACF,EAvIEC,GADKP,GACE,SAAS,CACd,UAAW,OACX,WAAY,MACd,GCLF,IAAOQ,GAAP,cAA6BC,CAAW,CACtC,SAAU,CACM,IAAI,UAAU,MAAM,KAAK,OAAO,EAExC,KAAK,CACb,CACF,ECNA,IAAOC,GAAP,cAA6BC,CAAW,CAOtC,SAAU,CACJ,CAAC,KAAK,oBAAsB,CAAC,KAAK,sBAEtC,KAAK,SAAW,IAAI,iBAAiB,IAAM,KAAK,OAAO,CAAC,EAExD,KAAK,SAAS,QAAQ,KAAK,gBAAiB,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,EAE9E,KAAK,OAAO,EACd,CAEA,YAAa,CACP,KAAK,UAAY,KAAK,SAAS,WAAW,CAChD,CAEA,QAAS,CACP,IAAMC,EAAa,KAAK,gBAAgB,SAAS,OAAS,EAE1D,KAAK,iBAAiB,UAAU,OAAO,KAAK,iBAAkBA,CAAU,CAC1E,CACF,EAzBEC,GADKH,GACE,UAAU,CAAC,YAAa,YAAY,GAE3CG,GAHKH,GAGE,SAAS,CACd,YAAa,CAAE,KAAM,OAAQ,QAAS,QAAS,CACjD,GCLF,IAAOI,GAAP,cAA6BC,CAAW,CACtC,oCAAoCC,EAAO,CACzC,IAAMC,EAAO,SAAS,eAAe,mBAAmB,EAClDC,EAAW,SAAS,eAAe,uBAAuB,EAC1DC,EAAgB,SAAS,eAAe,gBAAgB,EACxDC,EAAU,SAAS,eAAe,sBAAsB,EACxDC,EAAM,SAAS,eAAe,kBAAkB,EAChDC,EAAK,SAAS,eAAe,iBAAiB,EAEhDN,EAAM,OAAO,OAAS,MACxBC,EAAK,gBAAgB,UAAU,EAC/BA,EAAK,MAAQ,GACbA,EAAK,SAAW,GAChBC,EAAS,gBAAgB,UAAU,EACnCA,EAAS,MAAQ,GACjBA,EAAS,SAAW,GACpBC,EAAc,SAAW,GACzBC,EAAQ,gBAAgB,UAAU,EAClCA,EAAQ,MAAQ,GAChBA,EAAQ,SAAW,GACnBC,EAAI,gBAAgB,UAAU,EAC9BA,EAAI,MAAQ,GACZA,EAAI,SAAW,GACfC,EAAG,gBAAgB,UAAU,EAC7BA,EAAG,MAAQ,GACXA,EAAG,SAAW,KAEdL,EAAK,aAAa,WAAY,EAAE,EAChCA,EAAK,SAAW,GAChBC,EAAS,aAAa,WAAY,EAAE,EACpCA,EAAS,SAAW,GACpBC,EAAc,SAAW,GACzBC,EAAQ,aAAa,WAAY,EAAE,EACnCA,EAAQ,SAAW,GACnBC,EAAI,aAAa,WAAY,EAAE,EAC/BA,EAAI,SAAW,GACfC,EAAG,aAAa,WAAY,EAAE,EAC9BA,EAAG,SAAW,GAElB,CACF,ECxCA,IAAOC,GAAP,cAA6BC,CAAW,CAGtC,SAAU,CACR,KAAK,OAAS,GAEd,KAAK,OAAS,YAAY,IAAM,CAC9B,KAAK,QAAU,EACf,KAAK,mBAAmB,UAAY,KAAK,OAAO,SAAS,EAErD,KAAK,SAAW,IAClB,cAAc,KAAK,MAAM,EACzB,SAAS,OAAO,EAEpB,EAAG,GAAI,CACT,CACF,EAfEC,GADKF,GACE,UAAU,CAAC,cAAc,GCGlCG,GAAY,SAAS,iBAAkBC,EAAuB,EAG9DD,GAAY,SAAS,OAAQE,EAAc,EAG3CF,GAAY,SAAS,aAAcG,EAAmB,EAGtDH,GAAY,SAAS,WAAYI,EAAkB,EAGnDJ,GAAY,SAAS,yBAA0BK,EAA8B,EAG7EL,GAAY,SAAS,yBAA0BM,EAA6B,EAG5EN,GAAY,SAAS,iCAAkCO,EAAqC,EAG5FP,GAAY,SAAS,4BAA6BQ,EAAiC,EAGnFR,GAAY,SAAS,mBAAoBS,EAAyB,EAGlET,GAAY,SAAS,yBAA0BU,EAA8B,EAG7EV,GAAY,SAAS,yBAA0BW,EAA8B,EAG7EX,GAAY,SAAS,QAASY,EAAe,EAG7CZ,GAAY,SAAS,SAAUa,EAAgB,EAG/Cb,GAAY,SAAS,cAAec,EAAoB,EAGxDd,GAAY,SAAS,QAASe,EAAe,EAG7Cf,GAAY,SAAS,oBAAqBgB,EAA0B,EAGpEhB,GAAY,SAAS,OAAQiB,EAAc,EAG3CjB,GAAY,SAAS,eAAgBkB,EAAqB,iBC1D7CC,GAAqB,yBAE5BC,GAAc,CAClBC,QAAS,CACPC,aAAc,UACdC,QAAS,CACPC,KAAAA,GACAC,KAAAA,EAAM,CAAA,EAGVC,KAAM,CACJH,QAAS,CACPE,KAAAA,EAAM,CAAA,CAAA,ECZNE,GAAa,CACjBC,QAAS,CACPC,QAAS,MACTC,MAAAA,EAAO,EAETC,MAAO,CACLF,QAAS,aACTG,SAAAA,EAAU,EAEZC,SAAU,CACRJ,QAAS,KACTK,SAAAA,GACAC,cAAAA,GACAC,MAAAA,EAAO,EAETC,KAAM,CACJR,QAAS,MACTK,SAAAA,GACAI,eAAgB,CAAE,UAAA,EAClBC,KAAM,CACJC,UAAAA,EAAW,CAAA,EAGfC,WAAY,CACVZ,QAAS,KACTC,MAAAA,EAAO,EAETY,OAAQ,CACNb,QAAS,KACTc,cAAe,aACfP,MAAAA,GACAJ,SAAAA,GACAY,KAAKC,EAAAA,CACH,OAAOhB,GAAQgB,EAAQC,UAAAA,IAAgBnB,GAAWoB,KAAKJ,eAAed,OACxE,CAAA,EAEFmB,WAAY,CACVnB,QAAS,KACTC,MAAAA,EAAO,EAETmB,OAAQ,CACNpB,QAAS,KACTc,cAAe,aACfP,MAAAA,GACAJ,SAAAA,GACAY,KAAKC,EAAAA,CACH,OAAOhB,GAAQgB,EAAQC,UAAAA,IAAgBnB,GAAWoB,KAAKJ,eAAed,OACxE,CAAA,EAEFqB,kBAAmB,CACjBrB,QAAS,MACTsB,UAAAA,GACAjB,SAAAA,GACAJ,MAAAA,GACAM,MAAAA,EAAO,CAAA,EAILP,GAAWgB,GAAAA,CAAO,IAAAO,EAAA,OAAKP,GAAAA,OAAOO,EAAPP,EAAShB,WAAO,MAAAuB,IAAPvB,OAAOuB,OAAhBA,EAAkBC,YAAAA,CAAa,EC1DtDC,GAAsBC,UAAUC,UAAUC,MAAM,4BAAA,EAChDC,GAAiBJ,IAAuBK,SAASL,GAAoB,EAAA,EAE5DM,GAAA,CAGbC,qBAAsB,kBAAkBjB,KAAKW,UAAUC,SAAAA,EAKvDM,cAAeJ,IAAkBA,GAAiB,GAClDK,eAAgBL,IAAkBH,UAAUC,UAAUC,MAAM,cAAA,EAG5DO,qBAAsB,iBAAiBpB,KAAKW,UAAUC,SAAAA,EAEtDS,oBAA2C,OAAfC,WAAe,KACzC,CAAE,OAAQ,kBAAmB,WAAA,EAAcC,MAAMC,GAAQA,KAAQF,WAAWG,SAAAA,CAAAA,EClBjEC,EAAA,CACbC,YAAa,eACbC,KAAM,OACNC,QAAS,UACTC,KAAM,OACNC,MAAO,QACPC,mBAAoB,sBACpBvC,KAAM,OACNJ,SAAU,UACV4C,OAAQ,iBACRC,OAAQ,SACRC,KAAM,OACNC,QAAS,UACTC,QAAS,iBACTlD,MAAO,QACPmD,KAAM,OACNC,OAAQ,SACRC,OAAQ,gBACRC,KAAM,OACNC,OAAQ,SACRC,IAAK,MACLC,eAAgB,oBAChBC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,IAAA,ECrBAC,GAAQ,CAAEC,EAAKpB,MAAOoB,EAAKL,GAAIK,EAAKJ,GAAII,EAAKN,GAAIM,EAAKF,GAAIE,EAAKH,EAAAA,EAEtDI,GAAA,CACbC,OAAQ,MACRC,UAAW,EAEXC,UAAUlD,EAAAA,CACR,OAAQA,OACD,GACH,MAAA,KAAAmD,OAAYL,EAAKpB,KAAAA,MACd,GACH,MAAA,KAAAyB,OAAYL,EAAKrB,IAAAA,UAEjB,IAAI2B,EAEAtD,KAAKkD,SAAW,KAClBI,EAAO,IACEtD,KAAKkD,SAAW,QACzBI,EAAO,MAGT,IAAMC,EAAMC,KAAKC,MAAMD,KAAKE,IAAIxD,CAAAA,EAAUsD,KAAKE,IAAIJ,CAAAA,CAAAA,EAG7CK,GAFYzD,EAASsD,KAAKI,IAAIN,EAAMC,CAAAA,GACjBM,QAAQ7D,KAAKmD,SAAAA,EACGW,QAAQ,MAAO,EAAA,EAAIA,QAAQ,MAAO,EAAA,EAC3E,MAAAT,GAAAA,OAAUM,EAAyB,GAAA,EAAAN,OAAIN,GAAMQ,EAAAA,EAEnD,CAAA,EChCWQ,GAAmB,SACnBC,GAAqB,OCDrBC,GAAS,SAASC,EAAAA,CAC7B,QAAWC,KAAOD,EAAY,CAC5B,IAAME,EAAQF,EAAWC,GACzBnE,KAAKmE,GAAOC,CACd,CACA,OAAOpE,IACT,ECDMqE,GAAOC,SAASC,gBAChB7D,GAAQ2D,GAAKG,QAENC,EAAc,SAASC,EAAAA,CAA+F,GAAA,CAApFC,UAAEA,EAASC,iBAAEA,EAAgBC,aAAEA,EAAYC,QAAEA,EAAOC,eAAEA,EAAcC,MAAEA,CAAAA,EAAOC,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACvHnF,EAAU6E,GAAwBN,GAClCe,EAAWR,EACXS,EAAaP,IAAY,YAEzBQ,EAAU,SAASC,EAAAA,CACnBP,GAAS,MAAoB,EAAVA,GAAU,GAC/BM,EAAQE,QAAAA,EAEV,IAAMC,EAASC,GAA2BH,EAAME,OAAQ,CAAEb,iBAAkBQ,CAAAA,CAAAA,EACxEK,GAAU,OACZZ,GAAcc,KAAKF,EAAQF,EAAOE,CAAAA,EAC9BV,GACFQ,EAAMR,eAAAA,EAAAA,EAQZ,OAHAO,EAAQE,QAAU,IAAM1F,EAAQ8F,oBAAoBlB,EAAWY,EAASD,CAAAA,EAExEvF,EAAQ+F,iBAAiBnB,EAAWY,EAASD,CAAAA,EACtCC,CACT,EAOaQ,GAAe,SAASpB,EAAAA,CAAgE,GAAA,CAArDC,UAAEA,EAASoB,QAAEA,EAAOC,WAAEA,EAAUpH,WAAEA,CAAAA,EAAYqG,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACzFnF,EAAU6E,GAAgCN,GAChD0B,EAAUA,IAAVA,GACAC,EAAaA,IAAbA,GAEA,IAAMT,EAAQjB,SAAS2B,YAAY,QAAA,EAKnC,OAJAV,EAAMW,UAAUxB,EAAWqB,EAASC,CAAAA,EAChCpH,GAAc,MAChBqF,GAAO0B,KAAKJ,EAAO3G,CAAAA,EAEdkB,EAAQqG,cAAcZ,CAAAA,CAC/B,EAEaa,GAAyB,SAAStG,EAASsF,EAAAA,CACtD,GAAItF,GAASuG,WAAa,EACxB,OAAO3F,GAAMiF,KAAK7F,EAASsF,CAAAA,CAE/B,EAEaM,GAA6B,SAASY,EAAAA,CAA4C,GAAA,CAAtC1B,iBAAEA,EAAgB2B,UAAEA,CAAAA,EAAWtB,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACzF,KAAOqB,GAAQA,EAAKD,WAAaG,KAAKC,cACpCH,EAAOA,EAAKvG,WAEd,GAAIuG,GAAQ,KAAZ,CAIA,GAAI1B,GAAoB,KAYtB,OAAO0B,EAXP,GAAIA,EAAKI,SAAWH,GAAa,KAC/B,OAAOD,EAAKI,QAAQ9B,CAAAA,EAEpB,KAAO0B,GAAQA,IAASC,GAAW,CACjC,GAAIH,GAAuBE,EAAM1B,CAAAA,EAC/B,OAAO0B,EAETA,EAAOA,EAAKvG,UACd,CAXJ,CAgBF,EASa4G,GAAwB7G,GACnCwE,SAASsC,gBAAkB9G,GAAW+G,GAAoB/G,EAASwE,SAASsC,aAAAA,EAEjEC,GAAsB,SAAS/G,EAASwG,EAAAA,CACnD,GAAKxG,GAAYwG,EAGjB,KAAOA,GAAM,CACX,GAAIA,IAASxG,EACX,MAAA,GAEFwG,EAAOA,EAAKvG,UACd,CACF,EAoBa+G,GAAuB,SAASR,EAAAA,CAAM,IAAAS,EACjD,IAAIA,EAACT,KAAI,MAAAS,IAAJT,QAAIS,CAAJA,EAAMhH,WACT,OAEF,IAAIiH,EAAa,EAEjB,IADAV,EAAOA,EAAKW,gBACLX,GACLU,IACAV,EAAOA,EAAKW,gBAEd,OAAOD,CACT,EAEaE,GAAcZ,GAAAA,CAAI,IAAAa,EAAA,OAAKb,GAAAA,OAAIa,EAAJb,EAAMvG,cAAU,MAAAoH,IAAVpH,OAAUoH,OAAhBA,EAAkBC,YAAYd,CAAAA,CAAK,EAE1De,GAAW,SAASC,EAAAA,CAAqE,GAAA,CAA/DC,gBAAEA,EAAeC,YAAEA,EAAWC,uBAAEA,CAAAA,EAAwBxC,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAC1FyC,GAAa,IAAA,CACjB,OAAQH,OACD,UACH,OAAOI,WAAWC,iBACf,OACH,OAAOD,WAAWE,cACf,UACH,OAAOF,WAAWG,qBAElB,OAAOH,WAAWI,SAEvB,GAXkB,EAanB,OAAOzD,SAAS0D,iBACdV,EACAI,EACAF,GAAoC,KACpCC,IADoC,EACpCA,CAEJ,EAEa3I,GAAWgB,GAAAA,CAAO,IAAAO,EAAA,OAAKP,GAAAA,OAAOO,EAAPP,EAAShB,WAAO,MAAAuB,IAAPvB,OAAOuB,OAAhBA,EAAkBC,YAAAA,CAAa,EAEtD2H,EAAc,SAASC,EAAAA,CAAmB,IACjD/D,EAAKC,EAD8B+D,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAE9B,OAARiD,GAAQ,UACjBC,EAAUD,EACVA,EAAMC,EAAQrJ,SAEdqJ,EAAU,CAAEvJ,WAAYuJ,CAAAA,EAG1B,IAAMrI,EAAUwE,SAAS8D,cAAcF,CAAAA,EASvC,GAPIC,EAAQE,UAAY,OAClBF,EAAQvJ,YAAc,OACxBuJ,EAAQvJ,WAAa,CAAA,GAEvBuJ,EAAQvJ,WAAW0J,gBAAkBH,EAAQE,UAG3CF,EAAQvJ,WACV,IAAKuF,KAAOgE,EAAQvJ,WAClBwF,EAAQ+D,EAAQvJ,WAAWuF,GAC3BrE,EAAQyI,aAAapE,EAAKC,CAAAA,EAI9B,GAAI+D,EAAQK,MACV,IAAKrE,KAAOgE,EAAQK,MAClBpE,EAAQ+D,EAAQK,MAAMrE,GACtBrE,EAAQ0I,MAAMrE,GAAOC,EAIzB,GAAI+D,EAAQM,KACV,IAAKtE,KAAOgE,EAAQM,KAClBrE,EAAQ+D,EAAQM,KAAKtE,GACrBrE,EAAQ4I,QAAQvE,GAAOC,EAoB3B,OAhBI+D,EAAQQ,WACVR,EAAQQ,UAAUC,MAAM,GAAA,EAAKC,QAASF,GAAAA,CACpC7I,EAAQgJ,UAAUC,IAAIJ,CAAAA,CAAU,CAAA,EAIhCR,EAAQa,cACVlJ,EAAQkJ,YAAcb,EAAQa,aAG5Bb,EAAQc,YACV,CAAA,EAAG5F,OAAO8E,EAAQc,UAAAA,EAAYJ,QAASK,GAAAA,CACrCpJ,EAAQqJ,YAAYD,CAAAA,CAAU,CAAA,EAI3BpJ,CACT,EAEIsJ,GAESC,GAAmB,UAAA,CAC9B,GAAID,IAAiB,KACnB,OAAOA,GAGTA,GAAgB,CAAA,EAChB,QAAWjF,KAAOmF,GAAiB,CACjC,IAAM1K,EAAa0K,GAAgBnF,GAC/BvF,EAAWE,SACbsK,GAAcG,KAAK3K,EAAWE,OAAAA,CAElC,CAEA,OAAOsK,EACT,EAEaI,GAAwBlD,GAASmD,GAAwBnD,GAAMoD,UAAAA,EAM/DC,GAAmB,SAASrD,EAAAA,CAAqC,GAAA,CAA/BsD,OAAEA,CAAAA,EAAQ3E,UAAAC,OAAA,GAAAD,UAAAE,KAAA,OAAAF,UAAG,GAAA,CAAE2E,OAAAA,EAAQ,EACpE,OAAIA,EACKH,GAAwBnD,CAAAA,EAG7BmD,GAAwBnD,CAAAA,GAAAA,CAAUmD,GAAwBnD,EAAKoD,UAAAA,GATzB,SAASpD,EAAAA,CACnD,OAAO+C,GAAAA,EAAmBQ,SAAS/K,GAAQwH,CAAAA,CAAAA,GAAAA,CAAW+C,GAAAA,EAAmBQ,SAAS/K,GAAQwH,EAAKoD,UAAAA,CAAAA,CACjG,EAOiHpD,CAAAA,CAGjH,EAEamD,GAA2BnD,GAASwD,GAAkBxD,CAAAA,GAASA,GAAMmC,OAAS,QAE9EqB,GAAqBxD,GAASA,GAAMD,WAAaG,KAAKuD,aAEtDC,GAAqB,SAAS1D,EAAAA,CAAqB,GAAA,CAAf7H,KAAEA,CAAAA,EAAMwG,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAC1D,GAAKqB,EAGL,OAAI2D,GAAe3D,CAAAA,EACbA,EAAKmC,OAAS1E,GAAAA,CACZtF,GACK6H,EAAKvG,WAAW2I,QAAQwB,mBAAqBzL,EAAAA,OAMjDuL,GAAmB1D,EAAKoD,UAAAA,CAEnC,EAEaS,GAA2B7D,GAASF,GAAuBE,EAAMlI,EAAAA,EAEjEgM,GAAuB9D,GAAS2D,GAAe3D,CAAAA,GAASA,GAAMmC,OAAS,GAEvEwB,GAAkB3D,GAASA,GAAMD,WAAaG,KAAK6D,UCjR1DC,GAAQ,CACZC,cAAAA,GAEAC,UAAAA,CACE,OAAIxK,KAAKuK,eAAiBE,GAAQvJ,oBACzB,EAEA,CAEV,EACDwJ,UAAUC,EAAAA,CACR,IAAML,EAAQrC,EAAY,QAAS,CAAE2C,KAAM,OAAQC,SAAAA,GAAgBC,OAAAA,GAAcC,GAAI/K,KAAKgL,WAAAA,CAAAA,EAE1FV,EAAMzE,iBAAiB,SAAU,IAAA,CAC/B8E,EAASL,EAAMW,KAAAA,EACf/D,GAAWoD,CAAAA,CAAM,CAAA,EAGnBpD,GAAW5C,SAAS4G,eAAelL,KAAKgL,WAAAA,CAAAA,EACxC1G,SAAS6G,KAAKhC,YAAYmB,CAAAA,EAC1BA,EAAMc,MAAAA,CACR,CAAA,EExBaC,GAAA,CACbC,sBAAAA,GACAC,mBAAoB,MACpBC,kBAAmB;CAAA,ECDNC,GAAA,CACbhK,KAAM,CACJ3C,QAAS,SACT4M,YAAAA,GACAL,OAAOvL,EAAAA,CACL,IAAM0I,EAAQmD,OAAOC,iBAAiB9L,CAAAA,EACtC,OAAO0I,EAAMqD,aAAe,QAAUrD,EAAMqD,YAAc,GAC5D,CAAA,EAEF9J,OAAQ,CACNjD,QAAS,KACT4M,YAAAA,GACAL,OAAOvL,GACS6L,OAAOC,iBAAiB9L,CAAAA,EACzBgM,YAAc,QAAdA,EAGjBC,KAAM,CACJC,aAAc,IACdX,OAAOvL,EAAAA,CACL,IAAM8E,EAAgB,SAAAvB,OAAYjF,GAAqB,GAAA,EACjD4D,EAAOlC,EAAQ4G,QAAQ9B,CAAAA,EAC7B,GAAI5C,EACF,OAAOA,EAAKiK,aAAa,MAAA,CAE7B,CAAA,EAEF5J,OAAQ,CACNvD,QAAS,MACT4M,YAAAA,EAAa,EAEfQ,OAAQ,CACN1D,MAAO,CAAE2D,gBAAiB,WAAA,CAAA,CAAA,EChCfC,GAAA,CACbC,eAAcA,IACZhJ;;iJAAAA,OAE6IL,EAAKvB,KAAI4B,kBAAAA,EAAAA,OAAmBL,EAAKvB,KAAI4B;oJAAAA,EAAAA,OACjCL,EAAKjB,OAAMsB,kBAAAA,EAAAA,OAAmBL,EAAKjB,OAAMsB;kIAAAA,EAAAA,OAC3DL,EAAKX,OAAMgB,kBAAAA,EAAAA,OAAmBL,EAAKX,OAAMgB;wKAAAA,EAAAA,OACHL,EAAKhB,KAAIqB,kBAAAA,EAAAA,OAAmBL,EAAKhB,KAAIqB;;;;uIAAAA,EAAAA,OAItEL,EAAK9D,SAAQmE,kBAAAA,EAAAA,OAAmBL,EAAK9D,SAAQmE;gIAAAA,EAAAA,OACpDL,EAAKhE,MAAKqE,kBAAAA,EAAAA,OAAmBL,EAAKhE,MAAKqE;8HAAAA,EAAAA,OACzCL,EAAK1D,KAAI+D,kBAAAA,EAAAA,OAAmBL,EAAK1D,KAAI+D;uIAAAA,EAAAA,OAC5BL,EAAKtB,QAAO2B,kBAAAA,EAAAA,OAAmBL,EAAKtB,QAAAA;uIAAAA,EAAO2B,OAC3CL,EAAKf,QAAAA,kBAAAA,EAAOoB,OAAmBL,EAAKf,QAAAA;6JAAAA,EAAOoB,OACrBL,EAAKd,QAAAA,kBAAAA,EAAOmB,OAAmBL,EAAKd,QAAAA;6JAAAA,EAAOmB,OAC3CL,EAAKlB,OAAAA,kBAAAA,EAAMuB,OAAmBL,EAAKlB,OAAAA;;;;oIAAAA,EAAMuB,OAIlEL,EAAKxB,YAAAA,kBAAAA,EAAW6B,OAAmBL,EAAKxB,YAAAA;;;;;;6IAAAA,EAAW6B,OAM1CL,EAAKV,KAAAA,kBAAAA,EAAIe,OAAmBL,EAAKV,KAAAA;mJAAAA,EAAIe,OAC/BL,EAAKb,KAAAA,kBAAAA,EAAIkB,OAAmBL,EAAKb,KAAAA;;;;;;;4FAAAA,EAAIkB,OAO5FL,EAAKP,eAAAA,gBAAAA,EAAcY,OAAiBL,EAAKR,IAAAA;;iFAAAA,EAAGa,OAEvDL,EAAKhB,KAAAA;iFAAAA,EAAIqB,OACTL,EAAKT,OAAM;;;;WAAA,CAAA,ECxCvFD,GAAO,CAAEgK,SAAU,GAAA,EAAAC,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,YAAAC,GAAA,gBAAAC,GAAA,QAAAC,GAAA,ICAV,CACbC,WAAY,aACZC,kBAAmB,sBACnBC,wBAAyB,6BACzBC,mBAAoB,uBACpBC,4BAA6B,iCAC7BC,eAAgB,mBAChBC,mBAAoB,uBACpBC,eAAgB,mBAChBC,kBAAmB,sBACnBhN,kBAAmB,oBAAA,EAAA,SAAAiN,GAAA,MAAAC,GAAA,SLVN,CACb,EAAG,YACH,EAAG,MACH,GAAI,SACJ,GAAI,SACJ,GAAI,OACJ,GAAI,QACJ,GAAI,SACJ,GAAI,IACJ,GAAI,IACJ,GAAI,GAAA,EAAA,KAAAC,EAAA,OAAAC,GAAA,eAAAC,GAAA,QAAAC,GAAA,KAAAC,EAAA,CAAA,EMVeC,GAAN,KAAMA,CACnB,OAAA,YAAmBC,EAAAA,CACjB,GAAA,CAAMnP,KAAEA,EAAIoP,SAAEA,EAAQC,WAAEA,EAAUC,SAAEA,CAAAA,EAAaC,GAA2BJ,CAAAA,EAE5E5N,KAAKsB,UAAU7C,GAAQ,UAAA,CACrB,IAAIwP,EACAC,EAGY,IAAAC,EASFC,EAVVP,SAEAK,EADEH,GACII,EAAGnO,KAAK6N,MAASM,MAAAA,IAATN,OAASM,OAAdA,EAAAxI,KAAAA,IAAAA,EAEA3F,KAAK6N,GAAAA,EAEPC,IACTI,EAASlO,KAAK8N,IAGZC,GACFE,GAAOG,EAAGF,KAAM,MAAAE,IAANF,OAAME,OAANA,EAAS3P,GACfwP,EACKI,GAAM1I,KAAKsI,EAASC,EAAQjJ,SAAAA,EAAAA,SAGrCgJ,EAAUC,EAAOzP,GACV4P,GAAM1I,KAAKsI,EAASC,EAAQjJ,SAAAA,EAAAA,CAGzC,CAAA,EAGI+I,GAA6B,SAASJ,EAAAA,CAC1C,IAAMlN,EAAQkN,EAAWlN,MAAM4N,EAAAA,EAC/B,GAAA,CAAK5N,EACH,MAAM,IAAI6N,MAAK,wCAAAlL,OAAyCuK,CAAAA,CAAAA,EAG1D,IAAMY,EAAO,CAAE/P,KAAMiC,EAAM,EAAA,EAY3B,OAVIA,EAAM,IAAM,KACd8N,EAAKX,SAAWnN,EAAM,GAEtB8N,EAAKV,WAAapN,EAAM,GAGtBA,EAAM,IAAM,OACd8N,EAAKT,SAAAA,IAGAS,CACT,EAAA,CAEMH,MAAEA,EAAAA,EAAUI,SAASnN,UAErBgN,GAA+B,IAAII,OAAO,gCAAA,EAAAC,GAAAC,GAAAC,GCpD3BC,GAAN,cAA0BnB,EAAAA,CACvC,OAAA,KAAOoB,CAAgB,IAAZ3K,EAAKa,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,GACjB,OAAIb,aAAiBpE,KACZoE,EAEApE,KAAKgP,eAAe5K,GAAO6K,SAAAA,CAAAA,CAEtC,CAEA,OAAA,eAAsBC,EAAAA,CACpB,OAAO,IAAIlP,KAAKkP,EAAYC,GAAWD,CAAAA,CAAAA,CACzC,CAEA,OAAA,eAAsBE,EAAAA,CACpB,OAAO,IAAIpP,KAAKqP,GAAWD,CAAAA,EAAaA,CAAAA,CAC1C,CAEAE,YAAYJ,EAAYE,EAAAA,CACtBG,MAAAA,GAAStK,SAAAA,EACTjF,KAAKkP,WAAaA,EAClBlP,KAAKoP,WAAaA,EAClBpP,KAAKkF,OAASlF,KAAKoP,WAAWlK,OAC9BlF,KAAKwP,WAAaxP,KAAKkP,WAAWhK,MACpC,CAEAuK,mBAAmBC,EAAAA,CACjB,OAAOL,GAAWrP,KAAKoP,WAAWO,MAAM,EAAGnM,KAAKoM,IAAI,EAAGF,CAAAA,CAAAA,CAAAA,EAAUxK,MACnE,CAEA2K,qBAAqBC,EAAAA,CACnB,OAAOX,GAAWnP,KAAKkP,WAAWS,MAAM,EAAGnM,KAAKoM,IAAI,EAAGE,CAAAA,CAAAA,CAAAA,EAAc5K,MACvE,CAEAyK,OAAAA,CACE,OAAO3P,KAAKsP,YAAYS,eAAe/P,KAAKoP,WAAWO,MAAAA,GAAS1K,SAAAA,CAAAA,CAClE,CAEA+K,OAAON,EAAAA,CACL,OAAO1P,KAAK2P,MAAMD,EAAQA,EAAS,CAAA,CACrC,CAEAO,UAAU7L,EAAAA,CACR,OAAOpE,KAAKsP,YAAYP,IAAI3K,CAAAA,EAAO8K,aAAelP,KAAKkP,UACzD,CAEAgB,QAAAA,CACE,OAAOlQ,KAAKkP,UACd,CAEAiB,aAAAA,CACE,OAAOnQ,KAAKkP,UACd,CAEAD,UAAAA,CACE,OAAOjP,KAAKkP,UACd,CAAA,EAGIkB,KAAeC,GAAAC,MAAMC,QAAI,MAAAF,KAAJE,OAAIF,OAAVA,GAAA1K,KAAA2K,MAAa,WAAA,EAAgBpL,UAAW,EACvDsL,KAAuBC,GAAA,IAAIC,eAAW,MAAAD,KAAXC,OAAWD,OAAfA,GAAA9K,KAAA,IAAkB,CAAA,IAAM,KAC/CgL,KAAyBC,GAAAC,OAAOC,iBAAa,MAAAF,KAAbE,OAAaF,OAApBA,GAAAjL,KAAAkL,OAAuB,GAAI,MAAA,KAAY,aAKlE1B,GAAYE,GAQdF,GADEiB,IAAgBI,GACJO,GAAWT,MAAMC,KAAKQ,CAAAA,EAAQC,IAAKC,GAASA,EAAKP,YAAY,CAAA,CAAA,EAE9D,SAASK,EAAAA,CACpB,IAAMG,EAAS,CAAA,EACXC,EAAU,EACd,CAAMjM,OAAEA,CAAAA,EAAW6L,EAEnB,KAAOI,EAAUjM,GAAQ,CACvB,IAAId,EAAQ2M,EAAOK,WAAWD,GAAAA,EAC9B,GAAI,OAAU/M,GAASA,GAAS,OAAU+M,EAAUjM,EAAQ,CAE1D,IAAMmM,EAAQN,EAAOK,WAAWD,GAAAA,GACnB,MAARE,IAAoB,MAEvBjN,IAAkB,KAARA,IAAkB,KAAe,KAARiN,GAAiB,MAIpDF,GAEJ,CACAD,EAAO3H,KAAKnF,CAAAA,CACd,CAEA,OAAO8M,CAAAA,EAMT7B,GADEsB,GACYW,GAAUT,OAAOC,cAAAA,GAAiBR,MAAMC,KAAKe,GAAS,CAAA,CAAA,CAAA,EAEvD,SAASA,EAAAA,CAiBpB,OAhBmB,IAAA,CACjB,IAAMC,EAAS,CAAA,EAYf,OAVAjB,MAAMC,KAAKe,CAAAA,EAAOzI,QAASzE,GAAAA,CACzB,IAAI8M,EAAS,GACT9M,EAAQ,QACVA,GAAS,MACT8M,GAAUL,OAAOW,aAAapN,IAAU,GAAK,KAAQ,KAAA,EACrDA,EAAQ,MAAiB,KAARA,GAEnBmN,EAAOhI,KAAK2H,EAASL,OAAOW,aAAapN,CAAAA,CAAAA,CAAO,CAAA,EAG3CmN,CACR,GAdkB,EAgBDE,KAAK,EAAA,CAAA,ECzH3B,IAAI1G,GAAK,EAEY2G,GAAN,cAAyB/D,EAAAA,CACtC,OAAA,eAAsBgE,EAAAA,CACpB,OAAO3R,KAAK4R,SAASC,KAAK9S,MAAM4S,CAAAA,CAAAA,CAClC,CAEArC,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAK+K,GAAAA,EAAOA,EACd,CAEA+G,qBAAqB5D,EAAAA,CACnB,OAAOlO,KAAKsP,cAAgBpB,GAAQoB,WACtC,CAEAW,UAAU/B,EAAAA,CACR,OAAOlO,OAASkO,CAClB,CAEA6D,SAAAA,CACE,IAAMC,EAAQ,CAAA,EACRC,EAAWjS,KAAKkS,sBAAAA,GAA2B,CAAA,EAEjD,QAAW/N,KAAO8N,EAAU,CAC1B,IAAM7N,EAAQ6N,EAAS9N,GACvB6N,EAAMzI,KAAI,GAAAlG,OAAIc,EAAG,GAAA,EAAAd,OAAIe,CAAAA,CAAAA,CACvB,CAEA,MAAA,KAAAf,OAAYrD,KAAKsP,YAAY7Q,KAAI,GAAA,EAAA4E,OAAIrD,KAAK+K,EAAAA,EAAE1H,OAAG2O,EAAM9M,OAAM,IAAA7B,OAAO2O,EAAMP,KAAK,IAAA,CAAA,EAAU,GAAE,GAAA,CAC3F,CAEAS,uBAAAA,CAAyB,CAEzBC,cAAAA,CACE,OAAON,KAAKO,UAAUpS,IAAAA,CACxB,CAEAqS,eAAAA,CACE,OAAOvD,GAAYC,IAAI/O,IAAAA,CACzB,CAEAmQ,aAAAA,CACE,OAAOnQ,KAAK+K,GAAGkE,SAAAA,CACjB,CAAA,EC5CWqD,GAAiB,UAAA,CAAyB,IAAhB5F,EAACzH,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAIsN,EAACtN,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACjD,GAAIyH,EAAExH,SAAWqN,EAAErN,OACjB,MAAA,GAEF,QAASsN,EAAQ,EAAGA,EAAQ9F,EAAExH,OAAQsN,IAEpC,GADc9F,EAAE8F,KACFD,EAAEC,GACd,MAAA,GAGJ,MAAA,EACF,EAIaC,GAAc,SAASnB,EAAAA,CAClC,IAAMC,EAASD,EAAM3B,MAAM,CAAA,EAAE,QAAA+C,EAAAzN,UAAAC,OADesJ,EAAAA,IAAI8B,MAAAoC,EAAAA,EAAAA,EAAAA,EAAAA,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJnE,EAAImE,EAAA1N,GAAAA,UAAA0N,GAGhD,OADApB,EAAOqB,OAAAA,GAAUpE,CAAAA,EACV+C,CACT,ECnBMsB,GACJ,qVAEWC,GAAgB,UAAA,CAC3B,IAAMxI,EAAQrC,EAAY,QAAS,CAAE8K,IAAK,OAAQtU,KAAM,IAAKuU,QAAS,OAAA,CAAA,EAChEC,EAAWhL,EAAY,WAAY,CAAE8K,IAAK,OAAQtU,KAAM,IAAKuU,QAAS,OAAA,CAAA,EACtEE,EAAOjL,EAAY,MAAA,EACzBiL,EAAK/J,YAAYmB,CAAAA,EACjB4I,EAAK/J,YAAY8J,CAAAA,EAEjB,IAAME,EAAmB,UAAA,CACvB,GAAA,CACE,OAAO,IAAIC,SAASF,CAAAA,EAAMG,IAAIJ,EAASD,OAAAA,CACxC,MAAC,CACA,MAAA,EACF,CACF,EANyB,EAQnBM,EAAuB,UAAA,CAC3B,GAAA,CACE,OAAOhJ,EAAM9F,QAAQ,qBAAA,CACtB,MAAC,CACA,MAAA,EACF,CACF,EAN6B,EAQ7B,OAAI2O,EACK,SAASpC,EAAAA,CAEd,OADAkC,EAAS7O,MAAQ2M,EACV,IAAIqC,SAASF,CAAAA,EAAMK,IAAIN,EAASD,OAAAA,CAAAA,EAEhCM,EACF,SAASvC,EAAAA,CAEd,OADAzG,EAAMlG,MAAQ2M,EACVzG,EAAM9F,QAAQ,WAAA,EACT,MAEA,KAAA,EAIJ,SAASuM,EAAAA,CACd,IAAME,EAAOF,EAAOyC,KAAAA,EAAOxD,OAAO,CAAA,EAClC,OAAI6C,GAAYhT,KAAKoR,CAAAA,EACZ,MAEA,KAAA,CAIf,EA/C6B,ECJzBwC,GAAoB,KACpBC,GAAsB,KACtBC,GAAqB,KACrBC,GAAqB,KAEZC,GAAuBA,KAC7BJ,KACHA,GAAoBK,GAAAA,EAAwBzQ,OAAO0Q,GAAAA,CAAAA,GAE9CN,IAGIO,GAAkBC,GAAkBC,GAAuBD,GAE3DF,GAAyBA,KAC/BL,KACHA,GAAsBS,OAAOC,KAAKF,EAAAA,GAE7BR,IAGIW,GAAiBJ,GAAkBC,GAAsBD,GAEzDH,GAAwBA,KAC9BH,KACHA,GAAqBQ,OAAOC,KAAKF,EAAAA,GAE5BP,IC3BIW,GAA8B,SAASxV,EAASyV,EAAAA,CACtCC,GAA6B1V,CAAAA,EACrCkK,YAAcuL,EAAWzQ,QAAQ,MAAOhF,CAAAA,CACvD,EAEM0V,GAA+B,SAAS1V,EAAAA,CAC5C,IAAMgB,EAAUwE,SAAS8D,cAAc,OAAA,EACvCtI,EAAQyI,aAAa,OAAQ,UAAA,EAC7BzI,EAAQyI,aAAa,gBAAiBzJ,EAAQwB,YAAAA,CAAAA,EAC9C,IAAMmU,EAAQC,GAAAA,EAKd,OAJID,GACF3U,EAAQyI,aAAa,QAASkM,CAAAA,EAEhCnQ,SAASqQ,KAAKC,aAAa9U,EAASwE,SAASqQ,KAAKjL,UAAAA,EAC3C5J,CACT,EAEM4U,GAAc,UAAA,CAClB,IAAM5U,EAAU+U,GAAe,gBAAA,GAAqBA,GAAe,WAAA,EACnE,GAAI/U,EACF,OAAOA,EAAQmM,aAAa,SAAA,CAEhC,EAEM4I,GAAkBpW,GAAS6F,SAASqQ,KAAKG,cAAazR,aAAAA,OAAc5E,EAAAA,GAAAA,CAAAA,EC1BpEsW,GAAmB,CAAE,uCAAwC,MAAA,EAEtDC,GAA0B,SAASC,EAAAA,CAC9C,IAAMzV,EAAOyV,EAAaC,QAAQ,YAAA,EAC5B7Q,EAAO4Q,EAAaC,QAAQ,WAAA,EAElC,GAAA,CAAI1V,GAAAA,CAAQ6E,EAMV,OAAO7E,GAAM0F,OANG,CAChB,GAAA,CAAMiG,KAAEA,CAAAA,EAAS,IAAIgK,YAAYC,gBAAgB/Q,EAAM,WAAA,EACvD,GAAI8G,EAAKnC,cAAgBxJ,EACvB,MAAA,CAAQ2L,EAAK2J,cAAc,GAAA,CAE/B,CAGF,EAkBaO,GACP,UAAUxV,KAAKW,UAAU8U,QAAAA,EACnB/P,GAAUA,EAAMgQ,QAEhBhQ,GAAUA,EAAMiQ,QCpCfC,GAASC,GAAOC,WAAWD,EAAI,CAAA,ECG/BE,GAAa,UAAA,CAAsB,IAAb1H,EAAMjJ,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACpCsM,EAAS,CAAA,EACf,QAAWpN,KAAO+J,EAAQ,CACxB,IAAM9J,EAAQ8J,EAAO/J,GACrBoN,EAAOpN,GAAOC,CAChB,CACA,OAAOmN,CACT,EAEasE,GAAkB,UAAA,CAAyB,IAAhBnJ,EAACzH,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAIsN,EAACtN,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAClD,GAAIkP,OAAOC,KAAK1H,CAAAA,EAAGxH,SAAWiP,OAAOC,KAAK7B,CAAAA,EAAGrN,OAC3C,MAAA,GAEF,QAAWf,KAAOuI,EAEhB,GADcA,EAAEvI,KACFoO,EAAEpO,GACd,MAAA,GAGJ,MAAA,EACF,ECrBa2R,EAAiB,SAASC,EAAAA,CACrC,GAAIA,GAAS,KAKb,OAHKzF,MAAM0F,QAAQD,CAAAA,IACjBA,EAAQ,CAAEA,EAAOA,CAAAA,GAEZ,CAAEE,GAAUF,EAAM,EAAA,EAAKE,GAAUF,EAAM,IAAM,KAAOA,EAAM,GAAKA,EAAM,EAAA,CAAA,CAC9E,EAEaG,GAAmB,SAASH,EAAAA,CACvC,GAAIA,GAAS,KAAM,OAEnB,GAAA,CAAQI,EAAOC,CAAAA,EAAQN,EAAeC,CAAAA,EACtC,OAAOM,GAAoBF,EAAOC,CAAAA,CACpC,EAEaE,GAAiB,SAASC,EAAWC,EAAAA,CAChD,GAAID,GAAa,MAAQC,GAAc,KAAM,OAE7C,GAAA,CAAQC,EAAWC,CAAAA,EAAYZ,EAAeS,CAAAA,EAAAA,CACtCI,EAAYC,CAAAA,EAAad,EAAeU,CAAAA,EAChD,OAAOH,GAAoBI,EAAWE,CAAAA,GAAeN,GAAoBK,EAASE,CAAAA,CACpF,EAEMX,GAAY,SAAS7R,EAAAA,CACzB,OAAqB,OAAVA,GAAU,SACZA,EAEAwR,GAAWxR,CAAAA,CAEtB,EAEMiS,GAAsB,SAASQ,EAAMC,EAAAA,CACzC,OAAoB,OAATD,GAAS,SACXA,IAASC,EAETjB,GAAgBgB,EAAMC,CAAAA,CAEjC,ECtCqBC,GAAN,cAAsCpJ,EAAAA,CACnD2B,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKgX,OAAShX,KAAKgX,OAAOC,KAAKjX,IAAAA,EAC/BA,KAAKkX,kBAAoB,CAAA,CAC3B,CAEAf,OAAAA,CACOnW,KAAKmX,UACRnX,KAAKmX,QAAAA,GACL7S,SAASuB,iBAAiB,kBAAmB7F,KAAKgX,OAAAA,EAAQ,EAE9D,CAEAI,MAAAA,CACE,GAAIpX,KAAKmX,QAEP,OADAnX,KAAKmX,QAAAA,GACE7S,SAASsB,oBAAoB,kBAAmB5F,KAAKgX,OAAAA,EAAQ,CAExE,CAEAK,yBAAyBC,EAAAA,CACvB,GAAA,CAAKtX,KAAKkX,kBAAkBrN,SAASyN,CAAAA,EAEnC,OADAtX,KAAKkX,kBAAkB3N,KAAK+N,CAAAA,EACrBtX,KAAKmW,MAAAA,CAEhB,CAEAoB,2BAA2BD,EAAAA,CAEzB,GADAtX,KAAKkX,kBAAoBlX,KAAKkX,kBAAkBM,OAAQC,GAAOA,IAAOH,CAAAA,EAClEtX,KAAKkX,kBAAkBhS,SAAW,EACpC,OAAOlF,KAAKoX,KAAAA,CAEhB,CAEAM,0CAAAA,CACE,OAAO1X,KAAKkX,kBAAkBlG,IAAKsG,GAAqBA,EAAiBK,mBAAAA,CAAAA,CAC3E,CAEAX,QAAAA,CACEhX,KAAK0X,yCAAAA,CACP,CAEAE,OAAAA,CACE5X,KAAKgX,OAAAA,CACP,CAAA,EAGWa,GAA0B,IAAId,GAE9Be,GAAkB,UAAA,CAC7B,IAAMC,EAAYpM,OAAOqM,aAAAA,EACzB,GAAID,EAAUE,WAAa,EACzB,OAAOF,CAEX,EAEaG,GAAc,UAAA,CAAW,IAAAC,EACpC,IAAMC,GAAQD,EAAGL,GAAAA,KAAiBK,MAAAA,IAAjBL,OAAiBK,OAAjBA,EAAmBE,WAAW,CAAA,EAC/C,GAAID,GAAAA,CACGE,GAAkBF,CAAAA,EACrB,OAAOA,CAGb,EAEaG,GAAc,SAASH,EAAAA,CAClC,IAAML,EAAYpM,OAAOqM,aAAAA,EAGzB,OAFAD,EAAUS,gBAAAA,EACVT,EAAUU,SAASL,CAAAA,EACZP,GAAwBb,OAAAA,CACjC,EAMMsB,GAAqBF,GAAaM,GAAcN,EAASO,cAAAA,GAAmBD,GAAcN,EAASQ,YAAAA,EAEnGF,GAAiBpS,GAAAA,CAAU6N,OAAO0E,eAAevS,CAAAA,EC1E1CwS,GAAmB/H,GAC9BA,EAAOjN,QAAQ,IAAI4K,OAAM,GAAArL,OAAIU,EAAAA,EAAoB,GAAA,EAAM,EAAA,EAAID,QAAQ,IAAI4K,OAAM,GAAArL,OAAIW,EAAAA,EAAsB,GAAA,EAAM,GAAA,EAIlG+U,GAA6B,IAAIrK,OAAAA,QAAMrL,OAASW,GAAkB,GAAA,CAAA,EAElEgV,GAA6BjI,GACxCA,EAEGjN,QAAQ,IAAI4K,OAAAA,GAAMrL,OAAI0V,GAA2BE,MAAAA,EAAU,GAAA,EAAM,GAAA,EAEjEnV,QAAQ,UAAW,GAAA,EAgBlBoV,GAAyB,SAASxM,EAAG6F,EAAAA,CACzC,GAAI7F,EAAEuD,UAAUsC,CAAAA,EACd,MAAO,CAAE,GAAI,EAAA,EAGf,IAAM4G,EAAQC,GAAsB1M,EAAG6F,CAAAA,EAAAA,CACjCrN,OAAEA,CAAAA,EAAWiU,EAAME,YAErBC,EAEJ,GAAIpU,EAAQ,CACV,GAAA,CAAMwK,OAAEA,CAAAA,EAAWyJ,EACb/J,EAAa1C,EAAE0C,WAAWO,MAAM,EAAGD,CAAAA,EAAQrM,OAAOqJ,EAAE0C,WAAWO,MAAMD,EAASxK,CAAAA,CAAAA,EACpFoU,EAAQF,GAAsB7G,EAAGzD,GAAYiB,eAAeX,CAAAA,CAAAA,CAC9D,MACEkK,EAAQF,GAAsB7G,EAAG7F,CAAAA,EAGnC,MAAO,CAAEyM,EAAME,YAAYpK,SAAAA,EAAYqK,EAAMD,YAAYpK,SAAAA,CAAAA,CAC3D,EAEMmK,GAAwB,SAAS1M,EAAG6F,EAAAA,CACxC,IAAIgH,EAAY,EACZC,EAAc9M,EAAExH,OAChBuU,EAAclH,EAAErN,OAEpB,KAAOqU,EAAYC,GAAe9M,EAAEsD,OAAOuJ,CAAAA,EAAWtJ,UAAUsC,EAAEvC,OAAOuJ,CAAAA,CAAAA,GACvEA,IAGF,KAAOC,EAAcD,EAAY,GAAK7M,EAAEsD,OAAOwJ,EAAc,CAAA,EAAGvJ,UAAUsC,EAAEvC,OAAOyJ,EAAc,CAAA,CAAA,GAC/FD,IACAC,IAGF,MAAO,CACLJ,YAAa3M,EAAEiD,MAAM4J,EAAWC,CAAAA,EAChC9J,OAAQ6J,CAAAA,CAEZ,ECvEqBG,GAAN,cAAmBhI,EAAAA,CAChC,OAAA,+BAAOiI,CAA4C,IAAdC,EAAO3U,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAC7C,GAAA,CAAK2U,EAAQ1U,OACX,OAAO,IAAIlF,KAEb,IAAI6Z,EAAO9K,GAAI6K,EAAQ,EAAA,EACnBxF,EAAOyF,EAAKC,QAAAA,EAOhB,OALAF,EAAQjK,MAAM,CAAA,EAAG9G,QAASqF,GAAAA,CACxBkG,EAAOyF,EAAKE,oBAAoBhL,GAAIb,CAAAA,CAAAA,EACpC2L,EAAOA,EAAKlK,MAAMyE,CAAAA,CAAK,CAAA,EAGlByF,CACT,CAEA,OAAA,IAAWG,EAAAA,CACT,OAAOjL,GAAIiL,CAAAA,CACb,CAEA1K,aAAAA,CAAyB,IAAb0K,EAAM/U,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACnBsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAKga,OAASC,GAAKD,CAAAA,CACrB,CAEAjR,IAAI5E,EAAKC,EAAAA,CACP,OAAOpE,KAAKka,MAAMhM,GAAO/J,EAAKC,CAAAA,CAAAA,CAChC,CAEAhC,OAAO+B,EAAAA,CACL,OAAO,IAAIuV,GAAKO,GAAKja,KAAKga,OAAQ7V,CAAAA,CAAAA,CACpC,CAEAoP,IAAIpP,EAAAA,CACF,OAAOnE,KAAKga,OAAO7V,EACrB,CAEAkP,IAAIlP,EAAAA,CACF,OAAOA,KAAOnE,KAAKga,MACrB,CAEAE,MAAMF,EAAAA,CACJ,OAAO,IAAIN,GAAKQ,GAAMla,KAAKga,OAAQG,GAAMH,CAAAA,CAAAA,CAAAA,CAC3C,CAEArK,MAAMyE,EAAAA,CACJ,IAAM4F,EAAS,CAAA,EAQf,OANA1J,MAAMC,KAAK6D,CAAAA,EAAMvL,QAAS1E,GAAAA,CACpBnE,KAAKqT,IAAIlP,CAAAA,IACX6V,EAAO7V,GAAOnE,KAAKga,OAAO7V,GAC5B,CAAA,EAGK,IAAIuV,GAAKM,CAAAA,CAClB,CAEAF,SAAAA,CACE,OAAO3F,OAAOC,KAAKpU,KAAKga,MAAAA,CAC1B,CAEAD,oBAAoBF,EAAAA,CAElB,OADAA,EAAO9K,GAAI8K,CAAAA,EACJ7Z,KAAK8Z,QAAAA,EAAUtC,OAAQrT,GAAQnE,KAAKga,OAAO7V,KAAS0V,EAAKG,OAAO7V,EAAAA,CACzE,CAEA8L,UAAU+J,EAAAA,CACR,OAAO1H,GAAetS,KAAKoa,QAAAA,EAAWrL,GAAIiL,CAAAA,EAAQI,QAAAA,CAAAA,CACpD,CAEAC,SAAAA,CACE,OAAOra,KAAK8Z,QAAAA,EAAU5U,SAAW,CACnC,CAEAkV,SAAAA,CACE,GAAA,CAAKpa,KAAKsR,MAAO,CACf,IAAMC,EAAS,CAAA,EACf,QAAWpN,KAAOnE,KAAKga,OAAQ,CAC7B,IAAM5V,EAAQpE,KAAKga,OAAO7V,GAC1BoN,EAAOhI,KAAKgI,EAAOhI,KAAKpF,EAAKC,CAAAA,CAAAA,CAC/B,CACApE,KAAKsR,MAAQC,EAAO5B,MAAM,CAAA,CAC5B,CAEA,OAAO3P,KAAKsR,KACd,CAEAgJ,UAAAA,CACE,OAAOL,GAAKja,KAAKga,MAAAA,CACnB,CAEA9J,QAAAA,CACE,OAAOlQ,KAAKsa,SAAAA,CACd,CAEApI,uBAAAA,CACE,MAAO,CAAE8H,OAAQnI,KAAKO,UAAUpS,KAAKga,MAAAA,CAAAA,CACvC,CAAA,EAGI9L,GAAS,SAAS/J,EAAKC,EAAAA,CAC3B,IAAMmN,EAAS,CAAA,EAEf,OADAA,EAAOpN,GAAOC,EACPmN,CACT,EAEM2I,GAAQ,SAAShM,EAAQ8L,EAAAA,CAC7B,IAAMzI,EAAS0I,GAAK/L,CAAAA,EACpB,QAAW/J,KAAO6V,EAAQ,CACxB,IAAM5V,EAAQ4V,EAAO7V,GACrBoN,EAAOpN,GAAOC,CAChB,CACA,OAAOmN,CACT,EAEM0I,GAAO,SAAS/L,EAAQqM,EAAAA,CAC5B,IAAMhJ,EAAS,CAAA,EASf,OARmB4C,OAAOC,KAAKlG,CAAAA,EAAQsM,KAAAA,EAE5B3R,QAAS1E,GAAAA,CACdA,IAAQoW,IACVhJ,EAAOpN,GAAO+J,EAAO/J,GACvB,CAAA,EAGKoN,CACT,EAEMxC,GAAM,SAASb,EAAAA,CACnB,OAAIA,aAAkBwL,GACbxL,EAEA,IAAIwL,GAAKxL,CAAAA,CAEpB,EAEMiM,GAAQ,SAASjM,EAAAA,CACrB,OAAIA,aAAkBwL,GACbxL,EAAO8L,OAEP9L,CAEX,ECjJqBuM,GAAN,KAAMA,CACnB,OAAA,cAAOC,CAA4D,IAC7Drb,EADcsb,EAAgB1V,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAA,CAAI2V,MAAEA,EAAKC,OAAEA,CAAAA,EAAQ5V,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAEzD4V,GACED,GAAS,OACXA,EAAQ,GAGZ,IAAMhB,EAAU,CAAA,EAuBhB,OArBAtJ,MAAMC,KAAKoK,CAAAA,EAAkB9R,QAASqF,GAAAA,CAAW,IAAA4M,EAC/C,GAAIzb,EAAO,CAAA,IAAA0b,EAAAC,EAAAC,EACT,IAAIF,EAAA7M,EAAOgN,gBAAY,MAAAH,IAAZG,QAAPH,EAAApV,KAAAuI,EAAsB0M,CAAAA,IAAMI,GAAIC,EAAA5b,EAAMA,EAAM6F,OAAS,IAAGiW,oBAAgBH,MAAAA,IAAhBG,QAAxBH,EAAArV,KAAAsV,EAA2C/M,EAAQ0M,CAAAA,EAErF,OAAA,KADAvb,EAAMkK,KAAK2E,CAAAA,EAGX0L,EAAQrQ,KAAK,IAAIvJ,KAAKX,EAAO,CAAEub,MAAAA,EAAOC,OAAAA,CAAAA,CAAAA,CAAAA,EACtCxb,EAAQ,IAEZ,EAEAyb,EAAI5M,EAAOgN,gBAFX,MAEuBJ,IAAZI,QAAPJ,EAAAnV,KAAAuI,EAAsB0M,CAAAA,EACxBvb,EAAQ,CAAE6O,CAAAA,EAEV0L,EAAQrQ,KAAK2E,CAAAA,CACf,CAAA,EAGE7O,GACFua,EAAQrQ,KAAK,IAAIvJ,KAAKX,EAAO,CAAEub,MAAAA,EAAOC,OAAAA,CAAAA,CAAAA,CAAAA,EAEjCjB,CACT,CAEAtK,aAAAA,CAA6C,IAAjCsK,EAAO3U,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAA,CAAI2V,MAAEA,EAAKC,OAAEA,CAAAA,EAAQ5V,UAAAC,OAAAD,EAAAA,UAAAA,GAAAA,OACzCjF,KAAK4Z,QAAUA,EACXiB,IACF7a,KAAK4a,MAAQA,EACb5a,KAAK4Z,QAAU5Z,KAAKsP,YAAYoL,aAAa1a,KAAK4Z,QAAS,CAAEiB,OAAAA,EAAQD,MAAO5a,KAAK4a,MAAQ,CAAA,CAAA,EAE7F,CAEAQ,YAAAA,CACE,OAAOpb,KAAK4Z,OACd,CAEAyB,UAAAA,CACE,OAAOrb,KAAK4a,KACd,CAEAzK,aAAAA,CACE,IAAMiE,EAAO,CAAE,aAAA,EAIf,OAHA9D,MAAMC,KAAKvQ,KAAKob,WAAAA,CAAAA,EAAcvS,QAASqF,GAAAA,CACrCkG,EAAK7K,KAAK2E,EAAOiC,YAAAA,CAAAA,CAAc,CAAA,EAE1BiE,EAAK3C,KAAK,GAAA,CACnB,CAAA,ECtDmB6J,GAAN,cAAwB3N,EAAAA,CACrC2B,aAAAA,CAA0B,IAAdsK,EAAO3U,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACpBsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAK4Z,QAAU,CAAA,EAEftJ,MAAMC,KAAKqJ,CAAAA,EAAS/Q,QAASqF,GAAAA,CAC3B,IAAM2L,EAAOhI,KAAKO,UAAUlE,CAAAA,EACxBlO,KAAK4Z,QAAQC,IAAS,OACxB7Z,KAAK4Z,QAAQC,GAAQ3L,EACvB,CAAA,CAEJ,CAEAqN,KAAKrN,EAAAA,CACH,IAAM2L,EAAOhI,KAAKO,UAAUlE,CAAAA,EAC5B,OAAOlO,KAAK4Z,QAAQC,EACtB,CAAA,EClBmB2B,GAAN,KAAMA,CACnBlM,YAAYmM,EAAAA,CACVzb,KAAK4X,MAAM6D,CAAAA,CACb,CAEA1S,IAAIjJ,EAAAA,CACF,IAAMqE,EAAMuX,GAAO5b,CAAAA,EACnBE,KAAKyb,SAAStX,GAAOrE,CACvB,CAEAsC,OAAOtC,EAAAA,CACL,IAAMqE,EAAMuX,GAAO5b,CAAAA,EACbsE,EAAQpE,KAAKyb,SAAStX,GAC5B,GAAIC,EAEF,OAAA,OADOpE,KAAKyb,SAAStX,GACdC,CAEX,CAEAwT,OAAAA,CAAqB,IAAf6D,EAAQxW,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAKf,OAJAjF,KAAKyb,SAAW,CAAA,EAChBnL,MAAMC,KAAKkL,CAAAA,EAAU5S,QAAS/I,GAAAA,CAC5BE,KAAK+I,IAAIjJ,CAAAA,CAAQ,CAAA,EAEZ2b,CACT,CAAA,EAGIC,GAAU5b,GAAYA,EAAQ4I,QAAQiT,aC1BvBC,GAAN,cAAwBjO,EAAAA,CACrCkO,cAAAA,CACE,OAAO7b,KAAK8b,aAAZ,EACF,CAEAC,cAAAA,CACE,OAAO/b,KAAKgc,YAAZ,EACF,CAEAC,cAAAA,CACE,OAAOjc,KAAKgc,WAAahc,KAAKkc,SAChC,CAEAC,WAAAA,CACE,OAAOnc,KAAKgc,WAAAA,CAAchc,KAAKkc,SACjC,CAEAE,YAAAA,CAkBE,OAjBKpc,KAAKqc,UACRrc,KAAKqc,QAAU,IAAIC,QAAQ,CAACC,EAASC,KACnCxc,KAAK8b,WAAAA,GACE9b,KAAKyc,QAAQ,CAACP,EAAW3K,IAAAA,CAC9BvR,KAAKkc,UAAYA,EACjBlc,KAAK8b,WAAAA,GACL9b,KAAKgc,UAAAA,GAEDhc,KAAKkc,UACPK,EAAQhL,CAAAA,EAERiL,EAAOjL,CAAAA,CACT,CAAA,EAAA,GAKCvR,KAAKqc,OACd,CAEAI,QAAQ9R,EAAAA,CACN,OAAOA,EAAAA,EAAS,CAClB,CAEA+R,SAAAA,CAAU,IAAAC,EAAAC,GACRD,EAAAA,KAAKN,WADGO,MACID,IAAPN,SAAOO,EAAZD,EAAcE,UAAM,MAAAD,IAANC,QAAdD,EAAAjX,KAAAgX,CAAAA,EACA3c,KAAKqc,QAAU,KACfrc,KAAK8b,WAAa,KAClB9b,KAAKgc,UAAY,KACjBhc,KAAKkc,UAAY,IACnB,CAAA,EAGFN,GAAUkB,YAAY,mBAAA,EACtBlB,GAAUkB,YAAY,oBAAA,ECnDP,IAAMC,GAAN,cAAyBpP,EAAAA,CACtC2B,YAAYpB,EAAAA,CAAsB,IAAd/F,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAC5BsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAKkO,OAASA,EACdlO,KAAKmI,QAAUA,EACfnI,KAAKgd,WAAa,CAAA,EAClBhd,KAAKid,SAAWjd,IAClB,CAEAkd,UAAAA,CAEE,OADKld,KAAKmd,QAASnd,KAAKmd,MAAQnd,KAAKod,YAAAA,GAC9Bpd,KAAKmd,MAAMnM,IAAK1K,GAASA,EAAK+W,UAAAA,EAAU,CAAA,CACjD,CAEAC,YAAAA,CAAa,IAAAC,EAGX,OAFAvd,KAAKmd,MAAQ,KACbnd,KAAKgd,WAAa,CAAA,GAClBO,EAAOvd,KAAKwd,cAAU,MAAAD,IAAVC,OAAUD,OAAfA,EAAiBD,WAAAA,CAC1B,CAEAG,wBAAwBvP,EAAAA,CAAQ,IAAAwP,EAC9B,OAAAA,EAAO1d,KAAK2d,kBAAkBzP,CAAAA,KAAO,MAAAwP,IAAPxP,OAAOwP,OAA9BA,EAAgCJ,WAAAA,CACzC,CAEAM,4BAA4BC,EAAW3P,EAAQ/F,EAAAA,CAC7C,IAAI2V,EAAO9d,KAAK+d,uBAAuB7P,CAAAA,EAOvC,OANI4P,EACF9d,KAAKge,gBAAgBF,CAAAA,GAErBA,EAAO9d,KAAKie,gBAAAA,GAAmBhZ,SAAAA,EAC/BjF,KAAKke,mBAAmBJ,EAAM5P,CAAAA,GAEzB4P,CACT,CAEAG,gBAAgBJ,EAAW3P,EAAAA,CAAsB,IAAd/F,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACvCiJ,aAAkBuM,KACpBtS,EAAQ0V,UAAYA,EACpBA,EAAYM,IAGd,IAAML,EAAO,IAAID,EAAU3P,EAAQ/F,CAAAA,EACnC,OAAOnI,KAAKge,gBAAgBF,CAAAA,CAC9B,CAEAE,gBAAgBF,EAAAA,CAId,OAHAA,EAAKN,WAAaxd,KAClB8d,EAAKb,SAAWjd,KAAKid,SACrBjd,KAAKgd,WAAWzT,KAAKuU,CAAAA,EACdA,CACT,CAEAM,kBAAAA,CACE,IAAIC,EAAQ,CAAA,EAOZ,OALAre,KAAKgd,WAAWnU,QAASyV,GAAAA,CACvBD,EAAM9U,KAAK+U,CAAAA,EACXD,EAAQA,EAAMhb,OAAOib,EAAUF,iBAAAA,CAAAA,CAAmB,CAAA,EAG7CC,CACT,CAEAE,aAAAA,CACE,OAAOve,KAAKwe,qBAAqBxe,KAAKkO,MAAAA,CACxC,CAEAsQ,qBAAqBtQ,EAAAA,CACnB,IAAMnD,EAAKmD,GAAQnD,GACnB,GAAIA,EACF,OAAO/K,KAAKid,SAASnd,QAAQgV,cAAa,kBAAAzR,OAAmB0H,EAAE,IAAA,CAAA,CAEnE,CAEA4S,kBAAkBzP,EAAAA,CAChB,QAAW4P,KAAQ9d,KAAKoe,iBAAAA,EACtB,GAAIN,EAAK5P,SAAWA,EAClB,OAAO4P,CAGb,CAEAW,cAAAA,CACE,OAAIze,KAAKid,WAAajd,KAMbA,KAAKid,SAASwB,aAAAA,EALjBze,KAAK0e,qBAAAA,GACF1e,KAAK2e,YAAa3e,KAAK2e,UAAY,CAAA,GACjC3e,KAAK2e,WAAAA,MAKlB,CAEAD,sBAAAA,CACE,OAAO1e,KAAK4e,mBAAZ,EACF,CAEAC,mBAAAA,CACE7e,KAAK4e,iBAAAA,EACP,CAEAE,oBAAAA,CACE9e,KAAK4e,iBAAAA,EACP,CAEAb,uBAAuB7P,EAAAA,CAAQ,IAAA6Q,EAC7B,OAAAA,EAAO/e,KAAKye,aAAAA,KAAc,MAAAM,IAAdN,OAAcM,OAAnBA,EAAsB7Q,EAAOiC,YAAAA,EACtC,CAEA+N,mBAAmBJ,EAAM5P,EAAAA,CACvB,IAAM8Q,EAAQhf,KAAKye,aAAAA,EACfO,IACFA,EAAM9Q,EAAOiC,YAAAA,GAAiB2N,EAElC,CAEAmB,2BAAAA,CACE,IAAMD,EAAQhf,KAAKye,aAAAA,EACnB,GAAIO,EAAO,CACT,IACME,EADQlf,KAAKoe,iBAAAA,EAAmB/a,OAAOrD,IAAAA,EACpBgR,IAAK8M,GAASA,EAAK5P,OAAOiC,YAAAA,CAAAA,EACnD,QAAWhM,KAAO6a,EACXE,EAAWrV,SAAS1F,CAAAA,GAAAA,OAChB6a,EAAM7a,EAGnB,CACF,CAAA,EAGWga,GAAN,cAA8BpB,EAAAA,CACnCzN,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKmf,YAAcnf,KAAKkO,OACxBlO,KAAK6d,UAAY7d,KAAKmI,QAAQ0V,UAAAA,OACvB7d,KAAKmI,QAAQ0V,SACtB,CAEAuB,eAAAA,CAME,OALKpf,KAAKgd,WAAW9X,QACnBoL,MAAMC,KAAKvQ,KAAKmf,YAAY/D,WAAAA,CAAAA,EAAcvS,QAASqF,GAAAA,CACjDlO,KAAK4d,4BAA4B5d,KAAK6d,UAAW3P,EAAQlO,KAAKmI,OAAAA,CAAQ,CAAA,EAGnEnI,KAAKgd,UACd,CAEAI,aAAAA,CACE,IAAMtd,EAAUE,KAAKqf,uBAAAA,EAQrB,OANArf,KAAKof,cAAAA,EAAgBvW,QAASiV,GAAAA,CAC5BxN,MAAMC,KAAKuN,EAAKZ,SAAAA,CAAAA,EAAYrU,QAASvC,GAAAA,CACnCxG,EAAQqJ,YAAY7C,CAAAA,CAAK,CAAA,CACzB,CAAA,EAGG,CAAExG,CAAAA,CACX,CAEAuf,wBAAAA,CAA4D,IAArCzE,EAAK3V,UAAAC,OAAA,GAAAD,UAAAE,KAAA,OAAAF,UAAAA,GAAGjF,KAAKmf,YAAY9D,SAAAA,EAC9C,OAAOrb,KAAKof,cAAAA,EAAgB,GAAGC,uBAAuBzE,CAAAA,CACxD,CAAA,EC/JF,CAAQ0E,IAAAA,EAAAA,EAAQpL,GAEKqL,GAAN,cAA6BxC,EAAAA,CAC1CzN,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAK2M,WAAa3M,KAAKkO,OACvBlO,KAAK2M,WAAW6S,uBAAyBxf,KACzCA,KAAKyf,gBAAkBzf,KAAKmI,QAAQuX,KACtC,CAEAC,oBAAAA,CACE,MAAO,CAAA,CACT,CAEAvC,aAAAA,CACE,IAAIwC,EACEC,EAASD,EAAe3X,EAAY,CACxCnJ,QAAS,SACT6J,UAAW3I,KAAK8f,aAAAA,EAChBrX,KAAMzI,KAAKkV,QAAAA,EACX7M,SAAAA,EAAU,CAAA,EAGN0D,EAAO/L,KAAK+f,QAAAA,EAiClB,OAhCIhU,IACF6T,EAAe3X,EAAY,CAAEnJ,QAAS,IAAKuJ,SAAAA,GAAiBzJ,WAAY,CAAEmN,KAAAA,EAAMiU,SAAAA,EAAW,CAAA,CAAA,EAC3FH,EAAO1W,YAAYyW,CAAAA,GAGjB5f,KAAK2M,WAAWsT,WAAAA,EAClBL,EAAaM,UAAYlgB,KAAK2M,WAAWwT,WAAAA,EAEzCngB,KAAK2f,mBAAAA,EAAqB9W,QAASvC,GAAAA,CACjCsZ,EAAazW,YAAY7C,CAAAA,CAAK,CAAA,EAIlCsZ,EAAazW,YAAYnJ,KAAKogB,qBAAAA,CAAAA,EAE1BpgB,KAAK2M,WAAW0T,UAAAA,IAClBrgB,KAAKsgB,gBAAkBrY,EAAY,CACjCnJ,QAAS,WACTF,WAAY,CACV2hB,MAAOjB,GAAIrS,mBACX7I,MAAOpE,KAAK2M,WAAW6T,kBAAAA,EACvB5Q,IAAK,GAAA,EAEPnH,KAAM,CACJgY,YAAAA,GACA9E,aAAc,CAAE,kBAAmB3b,KAAK2M,WAAW5B,EAAAA,EAAK0G,KAAK,GAAA,CAAA,CAAA,CAAA,EAIjEoO,EAAO1W,YAAYnJ,KAAKsgB,eAAAA,GAGnB,CAAEI,GAAmB,MAAA,EAASb,EAAQa,GAAmB,OAAA,CAAA,CAClE,CAEAN,sBAAAA,CACE,IAAMO,EAAa1Y,EAAY,CAAEnJ,QAAS,aAAc6J,UAAW2W,GAAI1S,iBAAAA,CAAAA,EACjEpO,EAAUwB,KAAKyf,gBAAgBmB,WAAAA,EACrC,GAAIpiB,EACFmiB,EAAW7X,UAAUC,IAAG,GAAA1F,OAAIic,GAAI1S,kBAAiB,UAAA,CAAA,EACjD+T,EAAW3X,YAAcxK,MACpB,CACL,IAAIC,EAAMC,EACJmiB,EAAgB7gB,KAAK8gB,iBAAAA,EAQ3B,GAPID,EAAcpiB,OAChBA,EAAOuB,KAAK2M,WAAWoU,YAAAA,GAErBF,EAAcniB,OAChBA,EAAOsB,KAAK2M,WAAWqU,qBAAAA,GAGrBviB,EAAM,CACR,IAAMwiB,EAAchZ,EAAY,CAAEnJ,QAAS,OAAQ6J,UAAW2W,GAAItS,eAAgBhE,YAAavK,CAAAA,CAAAA,EAC/FkiB,EAAWxX,YAAY8X,CAAAA,CACzB,CAEA,GAAIviB,EAAM,CACJD,GACFkiB,EAAWxX,YAAY7E,SAAS4c,eAAe,GAAA,CAAA,EAEjD,IAAMC,EAAclZ,EAAY,CAAEnJ,QAAS,OAAQ6J,UAAW2W,GAAIpS,eAAgBlE,YAAatK,CAAAA,CAAAA,EAC/FiiB,EAAWxX,YAAYgY,CAAAA,CACzB,CACF,CAEA,OAAOR,CACT,CAEAb,cAAAA,CACE,IAAMsB,EAAQ,CAAE9B,GAAI3S,WAAU,GAAAtJ,OAAKic,GAAI3S,WAAUtJ,IAAAA,EAAAA,OAAKrD,KAAK2M,WAAW0U,QAAAA,CAAAA,CAAAA,EAChEC,EAAYthB,KAAK2M,WAAW4U,aAAAA,EAIlC,OAHID,GACFF,EAAM7X,KAAIlG,GAAAA,OAAIic,GAAI3S,WAAUtJ,IAAAA,EAAAA,OAAKie,CAAAA,CAAAA,EAE5BF,EAAM3P,KAAK,GAAA,CACpB,CAEAyD,SAAAA,CACE,IAAMzM,EAAO,CACX+Y,eAAgB3P,KAAKO,UAAUpS,KAAK2M,UAAAA,EACpC8U,gBAAiBzhB,KAAK2M,WAAW+U,eAAAA,EACjCC,OAAQ3hB,KAAK2M,WAAW5B,EAAAA,EAAAA,CAGpBnM,WAAEA,CAAAA,EAAeoB,KAAKyf,gBAS5B,OARK7gB,EAAWyb,QAAAA,IACd5R,EAAKmZ,eAAiB/P,KAAKO,UAAUxT,CAAAA,GAGnCoB,KAAK2M,WAAW0T,UAAAA,IAClB5X,EAAKoZ,cAAAA,IAGApZ,CACT,CAEAsX,SAAAA,CACE,GAAA,CAAK+B,GAAoB9hB,KAAK2M,WAAWwT,WAAAA,EAAc,GAAA,EACrD,OAAOngB,KAAK2M,WAAWoT,QAAAA,CAE3B,CAEAe,kBAAAA,CAAmB,IAAAiB,EACjB,IAAMnX,EAAO5K,KAAK2M,WAAW0U,QAAAA,EACvBR,EAAgBjL,IAAUmM,EAAC7N,GAAmBtJ,MAAKmX,MAAAA,IAALnX,OAAKmX,OAAxBA,EAA0BvjB,OAAAA,EAI3D,OAHIoM,IAAS,SACXiW,EAAcpiB,KAAAA,IAEToiB,CACT,CAEAmB,qBAAAA,CAAsB,IAAAC,EACpB,OAAAA,EAAOjiB,KAAKue,YAAAA,KAAa0D,MAAAA,IAAb1D,OAAa0D,OAAlBA,EAAoBnN,cAAc,UAAA,CAC3C,CAIAoN,mCAAAA,CACE,IAAM9d,EAAQpE,KAAK2M,WAAW6T,kBAAAA,EACxBF,EAAkBtgB,KAAKgiB,oBAAAA,EACzB1B,IACFA,EAAgBlc,MAAQA,EAE5B,CAAA,EAGIsc,GAAsBjiB,GAC1BwJ,EAAY,CACVnJ,QAAS,OACTkK,YAAajF,GACb0E,KAAM,CACJyB,iBAAkBzL,EAClBojB,cAAAA,EAAe,CAAA,CAAA,EAIfC,GAAsB,SAASzd,EAAMvF,EAAAA,CACzC,IAAMqjB,EAAMla,EAAY,KAAA,EAExB,OADAka,EAAIjC,UAAY7b,GAAQ,GACjB8d,EAAIrN,cAAchW,CAAAA,CAC3B,ECpKqBsjB,GAAN,cAAwC7C,EAAAA,CACrDjQ,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAK2M,WAAW0V,gBAAkBriB,IACpC,CAEA2f,oBAAAA,CAYE,OAXA3f,KAAKsiB,MAAQra,EAAY,CACvBnJ,QAAS,MACTF,WAAY,CACV2jB,IAAK,EAAA,EAEP9Z,KAAM,CACJgY,YAAAA,EAAa,CAAA,CAAA,EAIjBzgB,KAAKwiB,QAAQxiB,KAAKsiB,KAAAA,EACX,CAAEtiB,KAAKsiB,KAAAA,CAChB,CAEAlC,sBAAAA,CACE,IAAMO,EAAapR,MAAM6Q,qBAAAA,GAAwBnb,SAAAA,EAIjD,OAHK0b,EAAW3X,aACd2X,EAAWpY,aAAa,wBAAyB2L,EAAYrS,kBAAAA,EAExD8e,CACT,CAEA6B,QAAQF,EAAAA,CACM,IAAAL,EACZ,GADKK,IAASA,GAAKL,EAAGjiB,KAAKue,YAAAA,KAAa0D,MAAAA,IAAb1D,OAAa0D,OAAlBA,EAAoBnN,cAAc,KAAA,GACpDwN,EACF,OAAOtiB,KAAKyiB,yBAAyBH,CAAAA,CAEzC,CAEAG,yBAAyBH,EAAAA,CACvB,IAAM9f,EAAMxC,KAAK2M,WAAW+V,OAAAA,EACtBC,EAAa3iB,KAAK2M,WAAWiW,cAAAA,EAGnC,GAFAN,EAAMC,IAAMI,GAAcngB,EAEtBmgB,IAAengB,EACjB8f,EAAMO,gBAAgB,iCAAA,MACjB,CACL,IAAMC,EAAuBjR,KAAKO,UAAU,CAAEmQ,IAAK/f,CAAAA,CAAAA,EACnD8f,EAAM/Z,aAAa,kCAAmCua,CAAAA,CACxD,CAEA,IAAMC,EAAQ/iB,KAAK2M,WAAWqW,SAAAA,EACxBC,EAASjjB,KAAK2M,WAAWuW,UAAAA,EAE3BH,GAAS,OACXT,EAAMS,MAAQA,GAEZE,GAAU,OACZX,EAAMW,OAASA,GAGjB,IAAME,EAAW,CAAE,eAAgBnjB,KAAK2M,WAAW5B,GAAIuX,EAAMC,IAAKD,EAAMS,MAAOT,EAAMW,MAAAA,EAASxR,KAAK,GAAA,EACnG6Q,EAAM5Z,QAAQiT,aAAewH,CAC/B,CAIAC,+BAAAA,CAEE,OADApjB,KAAKwiB,QAAQxiB,KAAKsiB,KAAAA,EACXtiB,KAAKwiB,QAAAA,CACd,CAAA,EC5DmBa,GAAN,cAAwBtG,EAAAA,CACrCzN,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAK0f,MAAQ1f,KAAKkO,OAClBlO,KAAKpB,WAAaoB,KAAK0f,MAAM4D,cAAAA,EAC7BtjB,KAAKujB,WAAavjB,KAAKmI,QAAQob,WAC/BvjB,KAAKwjB,QAAUxjB,KAAKmI,QAAQqb,QAExBxjB,KAAK0f,MAAM/S,WACb3M,KAAK2M,WAAa3M,KAAK0f,MAAM/S,WAE7B3M,KAAK+Q,OAAS/Q,KAAK0f,MAAMzQ,SAAAA,CAE7B,CAEAmO,aAAAA,CACE,IAAID,EAAQnd,KAAK2M,WAAa3M,KAAKyjB,sBAAAA,EAA0BzjB,KAAK0jB,kBAAAA,EAC5D5jB,EAAUE,KAAKoI,cAAAA,EACrB,GAAItI,EAAS,CACX,IAAM8f,E7BiDoB,SAAS9f,EAAAA,CACvC,MAAA6jB,EAAO7jB,KAAO,MAAA6jB,IAAP7jB,QAAA6jB,EAASC,mBAAmB,CAAA,IAAAD,EACjC7jB,EAAUA,EAAQ8jB,iBACpB,CACA,OAAO9jB,CACT,E6BtD4CA,CAAAA,EACtCwQ,MAAMC,KAAK4M,CAAAA,EAAOtU,QAASvC,GAAAA,CACzBsZ,EAAazW,YAAY7C,CAAAA,CAAK,CAAA,EAEhC6W,EAAQ,CAAErd,CAAAA,CACZ,CACA,OAAOqd,CACT,CAEAsG,uBAAAA,CACE,IAAMnU,EAActP,KAAK2M,WAAWkX,cAAAA,EAAkBzB,GAA4B7C,GAGlF,OADavf,KAAKie,gBAAgB3O,EAAatP,KAAK0f,MAAM/S,WAAY,CAAE+S,MAAO1f,KAAK0f,KAAAA,CAAAA,EACxExC,SAAAA,CACd,CAEAwG,mBAAAA,CAAoB,IAAAI,EAClB,IAAAA,EAAI9jB,KAAKujB,cAAUO,MAAAA,IAAVP,QAALO,EAAiBrkB,UACnB,MAAO,CAAE6E,SAAS4c,eAAelhB,KAAK+Q,MAAAA,CAAAA,EACjC,CACL,IAAMoM,EAAQ,CAAA,EACR4G,EAAW/jB,KAAK+Q,OAAOnI,MAAM;CAAA,EACnC,QAAS4J,EAAQ,EAAGA,EAAQuR,EAAS7e,OAAQsN,IAAS,CACpD,IAAMwR,EAAYD,EAASvR,GAC3B,GAAIA,EAAQ,EAAG,CACb,IAAM1S,EAAUmI,EAAY,IAAA,EAC5BkV,EAAM5T,KAAKzJ,CAAAA,CACb,CAEA,GAAIkkB,EAAU9e,OAAQ,CACpB,IAAMoB,EAAOhC,SAAS4c,eAAelhB,KAAKikB,eAAeD,CAAAA,CAAAA,EACzD7G,EAAM5T,KAAKjD,CAAAA,CACb,CACF,CACA,OAAO6W,CACT,CACF,CAEA/U,eAAAA,CACE,IAAItI,EAASqE,EAAKC,EACZ8f,EAAS,CAAA,EAEf,IAAK/f,KAAOnE,KAAKpB,WAAY,CAC3BwF,EAAQpE,KAAKpB,WAAWuF,GACxB,IAAM+P,EAASG,GAAclQ,CAAAA,EAC7B,GAAI+P,EAAQ,CACV,GAAIA,EAAOpV,QAAS,CAClB,IAAI8gB,EACJ,IAAMuE,EAAiBlc,EAAYiM,EAAOpV,OAAAA,EAEtC8gB,GACFA,EAAazW,YAAYgb,CAAAA,EACzBvE,EAAeuE,GAEfrkB,EAAU8f,EAAeuE,CAE7B,CAMA,GAJIjQ,EAAOkQ,gBACTF,EAAOhQ,EAAOkQ,eAAiBhgB,GAG7B8P,EAAO1L,MACT,IAAKrE,KAAO+P,EAAO1L,MACjBpE,EAAQ8P,EAAO1L,MAAMrE,GACrB+f,EAAO/f,GAAOC,CAGpB,CACF,CAEA,GAAI+P,OAAOC,KAAK8P,CAAAA,EAAQhf,OAEtB,IAAKf,KADArE,IAAWA,EAAUmI,EAAY,MAAA,GAC1Bic,EACV9f,EAAQ8f,EAAO/f,GACfrE,EAAQ0I,MAAMrE,GAAOC,EAGzB,OAAOtE,CACT,CAEAuf,wBAAAA,CACE,QAAWlb,KAAOnE,KAAKpB,WAAY,CACjC,IAAMwF,EAAQpE,KAAKpB,WAAWuF,GACxB+P,EAASG,GAAclQ,CAAAA,EAC7B,GAAI+P,GACEA,EAAOlI,aAAc,CACvB,IAAMpN,EAAa,CAAA,EAEnB,OADAA,EAAWuF,GAAOC,EACX6D,EAAYiM,EAAOlI,aAAcpN,CAAAA,CAC1C,CAEJ,CACF,CAEAqlB,eAAelT,EAAAA,CAcb,OAbI/Q,KAAKwjB,QAAQa,SACftT,EAASA,EAAOjN,QAAQ,MAAOE,EAAAA,GAGjC+M,EAASA,EACNjN,QAAQ,iBAAgBT,MAAAA,OAAQW,GAAuB,KAAA,CAAA,EACvDF,QAAQ,SAAQ,GAAAT,OAAKW,GAAkB,GAAA,CAAA,EACvCF,QAAQ,SAAQT,IAAAA,OAAMW,EAAAA,CAAAA,GAErBhE,KAAKwjB,QAAQc,SAAWtkB,KAAKwjB,QAAQe,qBACvCxT,EAASA,EAAOjN,QAAQ,MAAOE,EAAAA,GAG1B+M,CACT,CAAA,ECtImByT,GAAN,cAAuBzH,EAAAA,CACpCzN,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKR,KAAOQ,KAAKkO,OACjBlO,KAAKujB,WAAavjB,KAAKmI,QAAQob,UACjC,CAEAnG,aAAAA,CACE,IAAMD,EAAQ,CAAA,EACRsH,EAAShK,GAAYC,aAAa1a,KAAK0kB,UAAAA,CAAAA,EACvCC,EAAYF,EAAOvf,OAAS,EAElC,QAASsN,EAAQ,EAAGA,EAAQiS,EAAOvf,OAAQsN,IAAS,CAClD,IAAMkN,EAAQ+E,EAAOjS,GACfgR,EAAU,CAAA,EACZhR,IAAU,IACZgR,EAAQc,QAAAA,IAEN9R,IAAUmS,IACZnB,EAAQa,OAAAA,IAENO,GAAmBC,CAAAA,IACrBrB,EAAQe,kBAAAA,IAGV,IAAMzG,EAAO9d,KAAK4d,4BAA4ByF,GAAW3D,EAAO,CAAE6D,WAAYvjB,KAAKujB,WAAYC,QAAAA,CAAAA,CAAAA,EAC/FrG,EAAM5T,KAAAA,GAAQ+G,MAAMC,KAAKuN,EAAKZ,SAAAA,GAAc,CAAA,CAAA,CAAA,EAE5C,IAAI2H,EAAgBnF,CACtB,CACA,OAAOvC,CACT,CAEAuH,WAAAA,CACE,OAAOpU,MAAMC,KAAKvQ,KAAKR,KAAKklB,UAAAA,CAAAA,EAAalN,OAAQkI,GAAAA,CAAWA,EAAMoF,aAAa,YAAA,CAAA,CACjF,CAAA,EAGIF,GAAsBlF,GAAU,MAAM7f,KAAK6f,GAAOzQ,SAAAA,CAAAA,EAAAA,CCxChDqQ,IAAAA,EAAAA,EAAQpL,GAEK6Q,GAAN,cAAwBhI,EAAAA,CACrCzN,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKglB,MAAQhlB,KAAKkO,OAClBlO,KAAKpB,WAAaoB,KAAKglB,MAAM1B,cAAAA,CAC/B,CAEAlG,aAAAA,CACE,IACMD,EAAQ,CADE7Y,SAAS2gB,cAAc,OAAA,CAAA,EAEvC,GAAIjlB,KAAKglB,MAAM3K,QAAAA,EACb8C,EAAM5T,KAAKtB,EAAY,IAAA,CAAA,MAClB,CAAA,IAAAid,EACL,IAAM3B,GAAU2B,EAAGlR,GAAehU,KAAKglB,MAAMG,iBAAAA,CAAAA,KAAmB,MAAAD,IAAnBC,OAAmBD,OAA7CA,EAA+C1lB,KAC5D4lB,EAAWplB,KAAK4d,4BAA4B4G,GAAUxkB,KAAKglB,MAAMxlB,KAAM,CAAE+jB,WAAAA,CAAAA,CAAAA,EAC/EpG,EAAM5T,KAAAA,GAAQ+G,MAAMC,KAAK6U,EAASlI,SAAAA,GAAc,CAAA,CAAA,CAAA,EAC5Cld,KAAKqlB,6BAAAA,GACPlI,EAAM5T,KAAKtB,EAAY,IAAA,CAAA,CAE3B,CAEA,GAAIjI,KAAKpB,WAAWsG,OAClB,OAAOiY,EACF,CACL,IAAIve,EACJ,CAAME,QAAEA,CAAAA,EAAYoV,GAAuBrV,QACvCmB,KAAKglB,MAAMM,MAAAA,IACb1mB,EAAa,CAAEmU,IAAK,KAAA,GAGtB,IAAMjT,EAAUmI,EAAY,CAAEnJ,QAAAA,EAASF,WAAAA,CAAAA,CAAAA,EAEvC,OADAue,EAAMtU,QAASvC,GAASxG,EAAQqJ,YAAY7C,CAAAA,CAAAA,EACrC,CAAExG,CAAAA,CACX,CACF,CAEAuf,uBAAuBzE,EAAAA,CACrB,IAAMhc,EAAa,CAAA,EACf+J,EACEsL,EAAgBjU,KAAKpB,WAAWgc,GAAAA,CAEhC9b,QAAEA,EAAOS,eAAEA,EAAiB,CAAA,CAAA,EAAOyU,GAAeC,CAAAA,EAMxD,GAJI2G,IAAU,GAAK5a,KAAKglB,MAAMM,MAAAA,GAC5BnR,OAAOoR,OAAO3mB,EAAY,CAAEmU,IAAK,KAAA,CAAA,EAG/BkB,IAAkB,oBAAqB,CACzC,IAAMvV,EAAOsB,KAAKglB,MAAMQ,sBAAAA,EACxB7c,EAAAA,GAAStF,OAAMic,GAAInf,kBAAiBkD,GAAAA,EAAAA,OAAIic,GAAInf,kBAAiB,IAAA,EAAAkD,OAAK3E,CAAAA,CACpE,CAQA,OANAyV,OAAOsR,QAAQzlB,KAAKglB,MAAMzlB,cAAAA,EAAgBsJ,QAAQ6c,GAAAA,CAAqB,GAAA,CAAlBjnB,EAAM2F,CAAAA,EAAOshB,EAC5DnmB,EAAesK,SAASpL,CAAAA,IAC1BG,EAAWH,GAAQ2F,EACrB,CAAA,EAGK6D,EAAY,CAAEnJ,QAAAA,EAAS6J,UAAAA,EAAW/J,WAAAA,CAAAA,CAAAA,CAC3C,CAIAymB,8BAAAA,CACE,MAAO,QAAQxlB,KAAKG,KAAKglB,MAAM/V,SAAAA,CAAAA,CACjC,CAAA,EC/DmB0W,GAAN,cAA2B5I,EAAAA,CACxC,OAAA,OAAczY,EAAAA,CACZ,IAAMxE,EAAUmI,EAAY,KAAA,EACtB6V,EAAO,IAAI9d,KAAKsE,EAAU,CAAExE,QAAAA,CAAAA,CAAAA,EAGlC,OAFAge,EAAK8H,OAAAA,EACL9H,EAAK+H,KAAAA,EACE/lB,CACT,CAEAwP,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKF,QAAUE,KAAKmI,QAAQrI,QAC5BE,KAAK8lB,aAAe,IAAItK,GACxBxb,KAAK+lB,YAAY/lB,KAAKkO,MAAAA,CACxB,CAEA6X,YAAYzhB,EAAAA,CACLA,EAAS2L,UAAUjQ,KAAKsE,QAAAA,IAC3BtE,KAAKsE,SAAWtE,KAAKkO,OAAS5J,EAElC,CAEAshB,QAAAA,CAKE,GAJA5lB,KAAKgd,WAAa,CAAA,EAElBhd,KAAKgmB,cAAgB/d,EAAY,KAAA,EAAA,CAE5BjI,KAAKsE,SAAS+V,QAAAA,EAAW,CAC5B,IAAMT,EAAUa,GAAYC,aAAa1a,KAAKsE,SAAS2hB,UAAAA,EAAa,CAAEpL,OAAAA,EAAQ,CAAA,EAE9EvK,MAAMC,KAAKqJ,CAAAA,EAAS/Q,QAASqF,GAAAA,CAC3B,IAAM4P,EAAO9d,KAAK4d,4BAA4BmH,GAAW7W,CAAAA,EACzDoC,MAAMC,KAAKuN,EAAKZ,SAAAA,CAAAA,EAAYlM,IAAK1K,GAAStG,KAAKgmB,cAAc7c,YAAY7C,CAAAA,CAAAA,CAAM,CAAA,CAEnF,CACF,CAEA4f,UAAAA,CACE,OAAOC,GAAsBnmB,KAAKgmB,cAAehmB,KAAKF,OAAAA,CACxD,CAEA+lB,MAAAA,CACE,IAAMO,EAAWpmB,KAAKqmB,8BAAAA,EACtB,KAAOrmB,KAAKF,QAAQwmB,WAClBtmB,KAAKF,QAAQsH,YAAYpH,KAAKF,QAAQwmB,SAAAA,EAGxC,OADAtmB,KAAKF,QAAQqJ,YAAYid,CAAAA,EAClBpmB,KAAKumB,QAAAA,CACd,CAIAA,SAAAA,CAEE,OADAvmB,KAAK8lB,aAAalO,MAAM4O,GAAmBxmB,KAAKF,OAAAA,CAAAA,EACzC2V,GAAM,IAAMzV,KAAKif,0BAAAA,CAAAA,CAC1B,CAEAoH,+BAAAA,CACE,IAAMD,EAAW9hB,SAASmiB,uBAAAA,EAa1B,OAXAnW,MAAMC,KAAKvQ,KAAKgmB,cAAc/c,UAAAA,EAAYJ,QAASvC,GAAAA,CACjD8f,EAASjd,YAAY7C,EAAK+W,UAAAA,EAAU,CAAA,CAAM,CAAA,EAG5C/M,MAAMC,KAAKiW,GAAmBJ,CAAAA,CAAAA,EAAWvd,QAAS/I,GAAAA,CAChD,IAAM4mB,EAAgB1mB,KAAK8lB,aAAa1jB,OAAOtC,CAAAA,EAC3C4mB,GACF5mB,EAAQC,WAAW4mB,aAAaD,EAAe5mB,CAAAA,CACjD,CAAA,EAGKsmB,CACT,CAAA,EAGII,GAAsB1mB,GAAYA,EAAQ8mB,iBAAiB,uBAAA,EAE3DT,GAAwBA,CAACrmB,EAAS+mB,IACtCC,GAAahnB,EAAQogB,SAAAA,IAAe4G,GAAaD,EAAa3G,SAAAA,EAE1D4G,GAAgBziB,GAASA,EAAKP,QAAQ,UAAW,GAAA,EAAA,SAAAijB,GAAAC,EAAA,CAAA,IAAAC,EAAAza,EAAA,SAAAC,EAAAwa,EAAAza,EAAA,CAAA,GAAA,CAAA,IAAA0a,EAAAF,EAAAC,GAAAza,CAAA,EAAA2a,EAAAD,EAAA,MAAAxa,EAAAya,aAAAC,GAAA,QAAA,QAAA1a,EAAAya,EAAA,EAAAA,CAAA,EAAA,KAAA,SAAA3a,EAAA,CAAA,GAAAE,EAAA,CAAA,IAAAY,EAAA2Z,IAAA,SAAA,SAAA,OAAA,GAAA,CAAAE,EAAA,GAAA3a,EAAA,KAAA,OAAAC,EAAAa,EAAAd,CAAA,EAAAA,EAAAwa,EAAA1Z,GAAAd,CAAA,EAAA,KAAA,CAAA,EAAA0a,EAAA,KAAA,SAAA,SAAA1a,CAAA,CAAA,EAAA,SAAAwa,EAAA,CAAAva,EAAA,QAAAua,CAAA,CAAA,CAAA,CAAA,OAAAA,EAAA,CAAA,EAAA,QAAAA,CAAA,CAAA,CAAA,CAAA,SAAA,EAAAA,EAAAK,EAAA,CAAA,OAAAL,OAAA,SAAAC,EAAA,QAAA,CAAA,MAAAI,EAAA,KAAA,EAAA,CAAA,EAAA,UAAA,QAAAJ,EAAA,OAAAI,CAAA,EAAA,cAAAJ,EAAA,QAAA,CAAA,MAAAI,EAAA,KAAA,EAAA,CAAA,GAAAJ,EAAAA,EAAA,MAAAxa,EAAAwa,EAAA,IAAAA,EAAA,GAAA,EAAAza,EAAA,IAAA,CAAA,KAAA,QAAA,SAAAwa,EAAAK,EAAA,CAAA,OAAA,IAAA,QAAA,SAAAH,EAAAC,EAAA,CAAA,IAAAza,EAAA,CAAA,IAAAsa,EAAA,IAAAK,EAAA,QAAAH,EAAA,OAAAC,EAAA,KAAA,IAAA,EAAA3a,EAAAA,EAAAA,EAAA,KAAAE,GAAAua,EAAAza,EAAAE,EAAAD,EAAAua,EAAAK,CAAA,EAAA,CAAA,CAAA,EAAA,OAAAL,EAAA,QAAA,aAAA,KAAA,OAAA,OAAA,CAAA,SAAAI,GAAAJ,EAAAC,EAAA,CAAA,KAAA,EAAAD,EAAA,KAAA,EAAAC,CAAA,CAAA,SAAAK,GAAAN,EAAAC,EAAAza,EAAA,CAAA,OAAAya,EAAAM,GAAAN,CAAA,KAAAD,EAAA,OAAA,eAAAA,EAAAC,EAAA,CAAA,MAAAza,EAAA,WAAA,GAAA,aAAA,GAAA,SAAA,EAAA,CAAA,EAAAwa,EAAAC,GAAAza,EAAAwa,CAAA,CAAA,SAAAO,GAAAP,EAAA,CAAA,IAAAC,EAAA,SAAAD,EAAAC,EAAA,CAAA,GAAA,OAAAD,GAAA,UAAAA,IAAA,KAAA,OAAAA,EAAA,IAAAxa,EAAAwa,EAAA,OAAA,aAAA,GAAAxa,IAAA,OAAA,CAAA,IAAAC,EAAAD,EAAA,KAAAwa,EAAAC,GAAA,SAAA,EAAA,GAAA,OAAAxa,GAAA,SAAA,OAAAA,EAAA,MAAA,IAAA,UAAA,8CAAA,CAAA,CAAA,OAAAwa,IAAA,SAAA,OAAA,QAAAD,CAAA,CAAA,EAAAA,EAAA,QAAA,EAAA,OAAA,OAAAC,GAAA,SAAAA,EAAA,OAAAA,CAAA,CAAA,CAAAF,GAAA,UAAA,OAAA,QAAA,YAAA,OAAA,eAAA,mBAAA,UAAA,CAAA,OAAA,IAAA,EAAAA,GAAA,UAAA,KAAA,SAAAC,EAAA,CAAA,OAAA,KAAA,QAAA,OAAAA,CAAA,CAAA,EAAAD,GAAA,UAAA,MAAA,SAAAC,EAAA,CAAA,OAAA,KAAA,QAAA,QAAAA,CAAA,CAAA,EAAAD,GAAA,UAAA,OAAA,SAAAC,EAAA,CAAA,OAAA,KAAA,QAAA,SAAAA,CAAA,CAAA,ECtFxC,IAAMQ,GAAN,cAAoB9V,EAAAA,CAGjC,OAAA,aAAoB9G,EAAM0E,EAAAA,CACxBA,EAAY1E,KAAOA,EACnB5K,KAAKynB,MAAM7c,GAAQ0E,CACrB,CAEA,OAAA,SAAgBoY,EAAAA,CACd,IAAMpY,EAActP,KAAKynB,MAAMC,EAAU9c,MACzC,GAAI0E,EACF,OAAOA,EAAYsC,SAAS8V,CAAAA,CAEhC,CAEApY,YAAYlL,EAAAA,CAAwB,IAAjBxF,EAAUqG,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAC9BsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAKpB,WAAa8a,GAAK3K,IAAInQ,CAAAA,CAC7B,CAEA+oB,mBAAmB/oB,EAAAA,CACjB,OAAO,IAAIoB,KAAKsP,YAAYtP,KAAK4nB,SAAAA,EAAYhpB,CAAAA,CAC/C,CAEAipB,6BAA6BjpB,EAAAA,CAC3B,OAAOoB,KAAK2nB,mBAAmB3nB,KAAKpB,WAAWsb,MAAMtb,CAAAA,CAAAA,CACvD,CAEAkpB,qBAAqBC,EAAAA,CACnB,OAAO/nB,KAAK2nB,mBAAmB3nB,KAAKpB,WAAWwD,OAAO2lB,CAAAA,CAAAA,CACxD,CAEA9N,MAAAA,CACE,OAAOja,KAAK2nB,mBAAmB3nB,KAAKpB,UAAAA,CACtC,CAEAqN,aAAa8b,EAAAA,CACX,OAAO/nB,KAAKpB,WAAW2U,IAAIwU,CAAAA,CAC7B,CAEAC,mBAAAA,CACE,OAAOhoB,KAAKpB,UACd,CAEA0kB,eAAAA,CACE,OAAOtjB,KAAKpB,WAAW0b,SAAAA,CACzB,CAEAwK,aAAaiD,EAAAA,CACX,OAAO/nB,KAAKpB,WAAWyU,IAAI0U,CAAAA,CAC7B,CAEAE,0BAA0BvI,EAAAA,CACxB,OAAOA,GAAS1f,KAAKiP,SAAAA,IAAeyQ,EAAMzQ,SAAAA,CAC5C,CAEAiZ,yBAAyBxI,EAAAA,CACvB,OAAOA,IAAU1f,KAAKpB,aAAe8gB,EAAM9gB,YAAcoB,KAAKpB,WAAWqR,UAAUyP,EAAM9gB,UAAAA,EAC3F,CAEAupB,cAAAA,CACE,MAAA,EACF,CAEAlY,UAAUyP,EAAAA,CACR,OACEnQ,MAAMU,UAAAA,GAAahL,SAAAA,GACnBjF,KAAK8R,qBAAqB4N,CAAAA,GACxB1f,KAAKioB,0BAA0BvI,CAAAA,GAC/B1f,KAAKkoB,yBAAyBxI,CAAAA,CAEpC,CAEArF,SAAAA,CACE,OAAOra,KAAKkF,SAAW,CACzB,CAEAkjB,gBAAAA,CACE,MAAA,EACF,CAEAlY,QAAAA,CACE,MAAO,CACLtF,KAAM5K,KAAKsP,YAAY1E,KACvBhM,WAAYoB,KAAKsjB,cAAAA,CAAAA,CAErB,CAEApR,uBAAAA,CACE,MAAO,CACLtH,KAAM5K,KAAKsP,YAAY1E,KACvBhM,WAAYoB,KAAKpB,WAAWmT,QAAAA,CAAAA,CAEhC,CAIAmJ,cAAAA,CACE,OAAOlb,KAAK8kB,aAAa,MAAA,CAC3B,CAEA3J,iBAAiBuE,EAAAA,CACf,OAAO1f,KAAKiM,aAAa,MAAA,IAAYyT,EAAMzT,aAAa,MAAA,CAC1D,CAIAoc,WAAAA,CACE,OAAOroB,KAAKkF,MACd,CAEAojB,sBAAsB5I,EAAAA,CACpB,MAAA,EACF,CAAA,EACD6I,GAlHoBf,GACJ,QAAA,CAAA,CAAA,ECFF,IAAMgB,GAAN,cAAoC5M,EAAAA,CACjDtM,YAAY9M,EAAAA,CACV+M,MAAAA,GAAStK,SAAAA,EACTjF,KAAKwC,IAAMA,CACb,CAEAia,QAAQ9R,EAAAA,CACN,IAAM2X,EAAQ,IAAImG,MAElBnG,EAAMoG,OAAS,KACbpG,EAAMS,MAAQ/iB,KAAK+iB,MAAQT,EAAMqG,aACjCrG,EAAMW,OAASjjB,KAAKijB,OAASX,EAAMsG,cAC5Bje,EAAAA,GAAe2X,CAAAA,GAGxBA,EAAMuG,QAAU,IAAMle,EAAAA,EAAS,EAE/B2X,EAAMC,IAAMviB,KAAKwC,GACnB,CAAA,ECfmBsmB,GAAN,cAAyBpX,EAAAA,CAGtC,OAAA,kBAAyB/S,EAAAA,CACvB,IACMgO,EAAa,IAAI3M,KADJA,KAAK+oB,kBAAkBpqB,CAAAA,CAAAA,EAG1C,OADAgO,EAAWqc,QAAQrqB,CAAAA,EACZgO,CACT,CAEA,OAAA,kBAAyBhO,EAAAA,CACvB,OAAO,IAAI+a,GAAK,CACduP,SAAUtqB,EAAKF,KACfyqB,SAAUvqB,EAAKD,KACfyqB,YAAaxqB,EAAKiM,IAAAA,CAAAA,CAEtB,CAEA,OAAA,SAAgBwe,EAAAA,CACd,OAAO,IAAIppB,KAAKopB,CAAAA,CAClB,CAEA9Z,aAAAA,CAA6B,IAAjB1Q,EAAUqG,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACvBsK,MAAM3Q,CAAAA,EACNoB,KAAKqpB,YAAcrpB,KAAKqpB,YAAYpS,KAAKjX,IAAAA,EACzCA,KAAKpB,WAAa8a,GAAK3K,IAAInQ,CAAAA,EAC3BoB,KAAKspB,oBAAAA,CACP,CAEArd,aAAa8b,EAAAA,CACX,OAAO/nB,KAAKpB,WAAW2U,IAAIwU,CAAAA,CAC7B,CAEAjD,aAAaiD,EAAAA,CACX,OAAO/nB,KAAKpB,WAAWyU,IAAI0U,CAAAA,CAC7B,CAEAzE,eAAAA,CACE,OAAOtjB,KAAKpB,WAAW0b,SAAAA,CACzB,CAEAiP,eAAAA,CAA+B,IAAjB3qB,EAAUqG,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACnBukB,EAAgBxpB,KAAKpB,WAAWsb,MAAMtb,CAAAA,EACG,IAAA6qB,EAAAC,EAAAC,EAAAC,EAA/C,GAAA,CAAK5pB,KAAKpB,WAAWqR,UAAUuZ,CAAAA,EAI7B,OAHAxpB,KAAKpB,WAAa4qB,EAClBxpB,KAAKspB,oBAAAA,GACLG,EAAAA,KAAKpH,mBADAiH,MACeG,IAAfpH,SAAeqH,EAApBD,EAAsBrG,iCAA6BsG,MAAAA,IAA7BtG,QAAtBsG,EAAA/jB,KAAA8jB,EAAsDzpB,IAAAA,GACtD2pB,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQD,EAAbD,EAAevG,iCAA6B,MAAAwG,IAA7BxG,OAA6BwG,OAA5CA,EAAAjkB,KAAAgkB,EAA+C3pB,IAAAA,CAE1D,CAEAspB,qBAAAA,CACE,GAAItpB,KAAK6jB,cAAAA,EACP,OAAO7jB,KAAK8pB,WAAAA,CAEhB,CAEAzJ,WAAAA,CACE,OAAOrgB,KAAKrB,MAAQ,MAARA,EAAkBqB,KAAK0iB,OAAAA,GAAY1iB,KAAK+f,QAAAA,EACtD,CAEA8D,eAAAA,CACE,OAAI7jB,KAAKpB,WAAWyU,IAAI,aAAA,EACfrT,KAAKpB,WAAW2U,IAAI,aAAA,EAEpBuV,GAAWiB,mBAAmBlqB,KAAKG,KAAK0hB,eAAAA,CAAAA,CAEnD,CAEAL,SAAAA,CACE,OAAIrhB,KAAKigB,WAAAA,EACA,UACEjgB,KAAK6jB,cAAAA,EACP,UAEA,MAEX,CAEAnB,QAAAA,CACE,OAAO1iB,KAAKpB,WAAW2U,IAAI,KAAA,CAC7B,CAEAwM,SAAAA,CACE,OAAO/f,KAAKpB,WAAW2U,IAAI,MAAA,CAC7B,CAEAwN,aAAAA,CACE,OAAO/gB,KAAKpB,WAAW2U,IAAI,UAAA,GAAe,EAC5C,CAEAyW,aAAAA,CACE,OAAOhqB,KAAKpB,WAAW2U,IAAI,UAAA,CAC7B,CAEAyN,sBAAAA,CACE,IAAMkI,EAAWlpB,KAAKpB,WAAW2U,IAAI,UAAA,EACrC,OAAwB,OAAb2V,GAAa,SACfhV,GAAgB9Q,UAAU8lB,CAAAA,EAE1B,EAEX,CAEA3H,cAAAA,CAAe,IAAA0I,EACb,OAAAA,EAAOjqB,KAAK+gB,YAAAA,EACTrgB,MAAM,UAAA,KAAWupB,MAAAA,IAAX,OAAWA,OADbA,EACgB,GACpB3pB,YAAAA,CACL,CAEAohB,gBAAAA,CACE,OAAO1hB,KAAKpB,WAAW2U,IAAI,aAAA,CAC7B,CAEA0M,YAAAA,CACE,OAAOjgB,KAAKpB,WAAWyU,IAAI,SAAA,CAC7B,CAEA8M,YAAAA,CACE,OAAOngB,KAAKpB,WAAW2U,IAAI,SAAA,CAC7B,CAEAyP,UAAAA,CACE,OAAOhjB,KAAKpB,WAAW2U,IAAI,OAAA,CAC7B,CAEA2P,WAAAA,CACE,OAAOljB,KAAKpB,WAAW2U,IAAI,QAAA,CAC7B,CAEA2W,SAAAA,CACE,OAAOlqB,KAAKrB,IACd,CAEAqqB,QAAQrqB,EAAAA,CAEN,GADAqB,KAAKrB,KAAOA,EACRqB,KAAK6jB,cAAAA,EACP,OAAO7jB,KAAKmqB,YAAAA,CAEhB,CAEAd,aAAAA,CACErpB,KAAKoqB,qBAAAA,EACLpqB,KAAKrB,KAAO,IACd,CAEA6hB,mBAAAA,CACE,OAAOxgB,KAAKqqB,gBAAkB,KAAOrqB,KAAKqqB,eAAiB,CAC7D,CAEAC,kBAAkBlmB,EAAAA,CACmB,IAAAmmB,EAAAC,EAAnC,GAAIxqB,KAAKqqB,iBAAmBjmB,EAE1B,OADApE,KAAKqqB,eAAiBjmB,GACtBmmB,EAAOvqB,KAAKwf,0BAAsB+K,MAAAA,IAAtB/K,SAAsBgL,EAA3BD,EAA6BrI,qCAAiC,MAAAsI,IAAjCtI,OAAiCsI,OAA9DA,EAAA7kB,KAAA4kB,EAAiEvqB,IAAAA,CAE5E,CAEAkQ,QAAAA,CACE,OAAOlQ,KAAKsjB,cAAAA,CACd,CAEAnT,aAAAA,CACE,MAAO,CAAEZ,MAAMY,YAAAA,GAAelL,SAAAA,EAAYjF,KAAKpB,WAAWuR,YAAAA,EAAenQ,KAAK4iB,cAAAA,CAAAA,EAAkBnR,KAAK,GAAA,CACvG,CAIAmR,eAAAA,CACE,OAAO5iB,KAAK2iB,YAAc3iB,KAAKyqB,aACjC,CAEAC,cAAcloB,EAAAA,CACsB,IAAAmoB,EAAAC,EAAAC,EAAAC,EAAlC,GAAItoB,IAAQxC,KAAK4iB,cAAAA,EAGf,OAFA5iB,KAAK2iB,WAAangB,GAClBmoB,EAAAA,KAAKtI,mBADa7f,MACEmoB,IAAftI,SAAeuI,EAApBD,EAAsBvH,iCAA6BwH,MAAAA,IAA7BxH,QAAtBwH,EAAAjlB,KAAAglB,EAAsD3qB,IAAAA,GACtD6qB,EAAO7qB,KAAK6pB,YAAQgB,MAAAA,IAARhB,SAAQiB,EAAbD,EAAeE,iCAA6B,MAAAD,IAA7BC,OAA6BD,OAA5CA,EAAAnlB,KAAAklB,EAA+C7qB,IAAAA,CAE1D,CAEA8pB,YAAAA,CACE,OAAO9pB,KAAKgrB,QAAQhrB,KAAK0iB,OAAAA,EAAU1iB,KAAKqpB,WAAAA,CAC1C,CAEAc,aAAAA,CACE,GAAInqB,KAAKrB,KAEP,OADAqB,KAAKirB,cAAgBC,IAAIC,gBAAgBnrB,KAAKrB,IAAAA,EACvCqB,KAAKgrB,QAAQhrB,KAAKirB,aAAAA,CAE7B,CAEAb,sBAAAA,CACMpqB,KAAKirB,gBACPC,IAAIE,gBAAgBprB,KAAKirB,aAAAA,EACzBjrB,KAAKirB,cAAgB,KAEzB,CAEAD,QAAQxoB,EAAKmI,EAAAA,CACX,GAAInI,GAAOA,IAAQxC,KAAK4iB,cAAAA,EACtB5iB,YAAKyqB,cAAgBjoB,EACH,IAAIgmB,GAAsBhmB,CAAAA,EAEzC6oB,KAAK3F,GAAAA,CAAuB,GAAA,CAAtB3C,MAAEA,EAAKE,OAAEA,CAAAA,EAAQyC,EAMtB,OALK1lB,KAAKgjB,SAAAA,GAAehjB,KAAKkjB,UAAAA,GAC5BljB,KAAKupB,cAAc,CAAExG,MAAAA,EAAOE,OAAAA,CAAAA,CAAAA,EAE9BjjB,KAAKyqB,cAAgB,KACrBzqB,KAAK0qB,cAAcloB,CAAAA,EACZmI,IAAAA,CAAY,CAAA,EAEpB2gB,MAAM,KACLtrB,KAAKyqB,cAAgB,KACd9f,IAAAA,EAAAA,CAGf,CAAA,EACD4d,GAxNoBO,GAAU,qBACD,kCAAA,ECDf,IAAMyC,GAAN,cAA8B/D,EAAAA,CAG3C,OAAA,SAAgBE,EAAAA,CACd,OAAO,IAAI1nB,KAAK8oB,GAAWlX,SAAS8V,EAAU/a,UAAAA,EAAa+a,EAAU9oB,UAAAA,CACvE,CAEA0Q,YAAY3C,EAAAA,CACV4C,MAAAA,GAAStK,SAAAA,EACTjF,KAAK2M,WAAaA,EAClB3M,KAAKkF,OAAS,EACdlF,KAAKwrB,wCAAwC,MAAA,EACxCxrB,KAAK2M,WAAWsT,WAAAA,GACnBjgB,KAAKyrB,2BAAAA,CAET,CAEAD,wCAAwCzD,EAAAA,CAClC/nB,KAAK8kB,aAAaiD,CAAAA,IACf/nB,KAAK2M,WAAWmY,aAAaiD,CAAAA,GAChC/nB,KAAK2M,WAAW4c,cAAcvpB,KAAKpB,WAAW+Q,MAAM,CAAEoY,CAAAA,CAAAA,CAAAA,EAExD/nB,KAAKpB,WAAaoB,KAAKpB,WAAWwD,OAAO2lB,CAAAA,EAE7C,CAEA0D,4BAAAA,CACE,IAAM7sB,EAAaoB,KAAKpB,WAAW+Q,MAAM4b,GAAgBG,mBAAAA,EACpD9sB,EAAWqR,UAAUjQ,KAAKpB,UAAAA,IAC7BoB,KAAKpB,WAAaA,EAEtB,CAEAgpB,UAAAA,CACE,OAAO5nB,KAAK2M,UACd,CAEAyb,gBAAAA,CACE,MAAA,CAAQpoB,KAAK2M,WAAW0T,UAAAA,CAC1B,CAEAO,YAAAA,CACE,OAAO5gB,KAAKpB,WAAW2U,IAAI,SAAA,GAAc,EAC3C,CAEAtD,UAAUyP,EAAAA,CAAO,IAAAiM,EACf,OAAOpc,MAAMU,UAAUyP,CAAAA,GAAU1f,KAAK2M,WAAW5B,MAAO2U,GAAAA,OAAKiM,EAALjM,EAAO/S,cAAU,MAAAgf,IAAVhf,OAAUgf,OAAjBA,EAAmB5gB,GAC7E,CAEAkE,UAAAA,CACE,MtCrDwC,QsCsD1C,CAEAiB,QAAAA,CACE,IAAM0b,EAAOrc,MAAMW,OAAAA,GAAUjL,SAAAA,EAE7B,OADA2mB,EAAKjf,WAAa3M,KAAK2M,WAChBif,CACT,CAEAzb,aAAAA,CACE,MAAO,CAAEZ,MAAMY,YAAAA,GAAelL,SAAAA,EAAYjF,KAAK2M,WAAWwD,YAAAA,CAAAA,EAAgBsB,KAAK,GAAA,CACjF,CAEAoa,WAAAA,CACE,OAAOha,KAAKO,UAAUpS,KAAKiP,SAAAA,CAAAA,CAC7B,CAAA,EACDsZ,GAlEoBgD,GAAe,sBACL,CAAE,UAAW,cAAA,CAAA,EAmE5C/D,GAAMsE,aAAa,aAAcP,EAAAA,ECrElB,IAAMQ,GAAN,cAA0BvE,EAAAA,CACvC,OAAA,SAAgBE,EAAAA,CACd,OAAO,IAAI1nB,KAAK0nB,EAAU3W,OAAQ2W,EAAU9oB,UAAAA,CAC9C,CAEA0Q,YAAYyB,EAAAA,CACVxB,MAAAA,GAAStK,SAAAA,EACTjF,KAAK+Q,QjBDyBA,GAAWA,EAAOjN,QAAQ,SAAU;CAAA,GiBClCiN,CAAAA,EAChC/Q,KAAKkF,OAASlF,KAAK+Q,OAAO7L,MAC5B,CAEA0iB,UAAAA,CACE,OAAO5nB,KAAK+Q,MACd,CAEA9B,UAAAA,CACE,OAAOjP,KAAK+Q,OAAO9B,SAAAA,CACrB,CAEAkZ,cAAAA,CACE,OAAOnoB,KAAKiP,SAAAA,IAAe;GAAQjP,KAAKiM,aAAa,YAAA,IAAzCgD,EACd,CAEAiB,QAAAA,CACE,IAAMqB,EAAShC,MAAMW,OAAAA,GAAUjL,SAAAA,EAE/B,OADAsM,EAAOR,OAAS/Q,KAAK+Q,OACdQ,CACT,CAIA+W,sBAAsB5I,EAAAA,CACpB,OAAOA,GAAS1f,KAAK8R,qBAAqB4N,CAAAA,GAAU1f,KAAKkoB,yBAAyBxI,CAAAA,CACpF,CAEAsM,gBAAgBtM,EAAAA,CACd,OAAO,IAAI1f,KAAKsP,YAAYtP,KAAKiP,SAAAA,EAAayQ,EAAMzQ,SAAAA,EAAYjP,KAAKpB,UAAAA,CACvE,CAEAqtB,cAAcvc,EAAAA,CACZ,IAAImH,EAAMC,EAWV,OAVIpH,IAAW,GACbmH,EAAO,KACPC,EAAQ9W,MACC0P,IAAW1P,KAAKkF,QACzB2R,EAAO7W,KACP8W,EAAQ,OAERD,EAAO,IAAI7W,KAAKsP,YAAYtP,KAAK+Q,OAAOpB,MAAM,EAAGD,CAAAA,EAAS1P,KAAKpB,UAAAA,EAC/DkY,EAAQ,IAAI9W,KAAKsP,YAAYtP,KAAK+Q,OAAOpB,MAAMD,CAAAA,EAAS1P,KAAKpB,UAAAA,GAExD,CAAEiY,EAAMC,CAAAA,CACjB,CAEA+U,WAAAA,CACE,GAAA,CAAI9a,OAAEA,CAAAA,EAAW/Q,KAIjB,OAHI+Q,EAAO7L,OAAS,KAClB6L,EAASA,EAAOpB,MAAM,EAAG,EAAA,EAAM,UAE1BkC,KAAKO,UAAUrB,EAAO9B,SAAAA,CAAAA,CAC/B,CAAA,EAGFuY,GAAMsE,aAAa,SAAUC,EAAAA,EC5Dd,IAAMG,GAAN,cAA6Bxa,EAAAA,CAC1C,OAAA,IAAWkI,EAAAA,CACT,OAAIA,aAAmB5Z,KACd4Z,EAEA,IAAI5Z,KAAK4Z,CAAAA,CAEpB,CAEAtK,aAAAA,CAA0B,IAAdsK,EAAO3U,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACpBsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAK4Z,QAAUA,EAAQjK,MAAM,CAAA,EAC7B3P,KAAKkF,OAASlF,KAAK4Z,QAAQ1U,MAC7B,CAEAinB,QAAQje,EAAAA,CACN,OAAOlO,KAAK4Z,QAAQuS,QAAQje,CAAAA,CAC9B,CAEA0E,QAAAA,CAAgB,QAAAF,EAAAzN,UAAAC,OAANsJ,EAAI8B,IAAAA,MAAAoC,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJnE,EAAImE,GAAA1N,UAAA0N,GACZ,OAAO,IAAI3S,KAAKsP,YAAYmD,GAAYzS,KAAK4Z,QAAAA,GAAYpL,CAAAA,CAAAA,CAC3D,CAEA4d,WAAWzhB,EAAAA,CACT,OAAO3K,KAAK4Z,QAAQ5I,IAAI,CAAC9C,EAAQsE,IAAU7H,EAASuD,EAAQsE,CAAAA,CAAAA,CAC9D,CAEA6Z,oBAAoBne,EAAQsE,EAAAA,CAC1B,OAAOxS,KAAK4S,OAAOJ,EAAO,EAAGtE,CAAAA,CAC/B,CAEAoe,4BAA4BC,EAAgB/Z,EAAAA,CAC1C,OAAOxS,KAAK4S,OAAOJ,EAAO,EAAA,GAAM+Z,EAAe3S,OAAAA,CACjD,CAEA4S,+BAA+BD,EAAgBE,EAAAA,CAC7C,GAAA,CAAQ7S,EAASpH,CAAAA,EAAUxS,KAAK0sB,sBAAsBD,CAAAA,EACtD,OAAO,IAAIzsB,KAAKsP,YAAYsK,CAAAA,EAAS0S,4BAA4BC,EAAgB/Z,CAAAA,CACnF,CAEAma,kBAAkBna,EAAO7H,EAAAA,CACvB,OAAO3K,KAAK4sB,qBAAqBjiB,EAAS3K,KAAK4Z,QAAQpH,EAAAA,EAASA,CAAAA,CAClE,CAEAoa,qBAAqB1e,EAAQsE,EAAAA,CAC3B,OAAOxS,KAAK4S,OAAOJ,EAAO,EAAGtE,CAAAA,CAC/B,CAEA2e,oBAAoBra,EAAAA,CAClB,OAAOxS,KAAK4S,OAAOJ,EAAO,CAAA,CAC5B,CAEAsa,iBAAiBta,EAAAA,CACf,OAAOxS,KAAK4Z,QAAQpH,EACtB,CAEAua,yBAAyBhX,EAAAA,CACvB,GAAA,CAAQ6D,EAASL,EAAWyT,CAAAA,EAAehtB,KAAKitB,oBAAoBlX,CAAAA,EACpE,OAAO,IAAI/V,KAAKsP,YAAYsK,EAAQjK,MAAM4J,EAAWyT,EAAa,CAAA,CAAA,CACpE,CAEAE,qBAAqBrtB,EAAAA,CACnB,IAAM+Z,EAAU5Z,KAAK4Z,QAAQpC,OAAQtJ,GAAWrO,EAAKqO,CAAAA,CAAAA,EACrD,OAAO,IAAIlO,KAAKsP,YAAYsK,CAAAA,CAC9B,CAEAuT,qBAAqBpX,EAAAA,CACnB,GAAA,CAAQ6D,EAASL,EAAWyT,CAAAA,EAAehtB,KAAKitB,oBAAoBlX,CAAAA,EACpE,OAAO,IAAI/V,KAAKsP,YAAYsK,CAAAA,EAAShH,OAAO2G,EAAWyT,EAAazT,EAAY,CAAA,CAClF,CAEA6T,wBAAwBrX,EAAOsX,EAAAA,CAC7B,GAAA,CAAQzT,EAASL,EAAWyT,CAAAA,EAAehtB,KAAKitB,oBAAoBlX,CAAAA,EAC9DuX,EAAqB1T,EAAQ5I,IAAI,CAAC9C,EAAQsE,IAC9C+G,GAAa/G,GAASA,GAASwa,EAAaK,EAAUnf,CAAAA,EAAUA,CAAAA,EAElE,OAAO,IAAIlO,KAAKsP,YAAYge,CAAAA,CAC9B,CAEAL,oBAAoBlX,EAAAA,CAClB,IAAIwX,EAAAA,CACE3T,EAAS4T,EAAgB9d,CAAAA,EAAW1P,KAAK0sB,sBAAsBe,GAAa1X,CAAAA,CAAAA,EAGlF,MAAA,CAFG6D,EAAS2T,CAAAA,EAAoB,IAAIvtB,KAAKsP,YAAYsK,CAAAA,EAAS8S,sBAAsBgB,GAAW3X,CAAAA,EAASrG,CAAAA,EAEjG,CAAEkK,EAAS4T,EAAgBD,EAAkB,CAAA,CACtD,CAEAI,oBAAoBlB,EAAAA,CAClB,GAAA,CAAMja,MAAEA,CAAAA,EAAUxS,KAAK4tB,6BAA6BnB,CAAAA,EACpD,OAAOzsB,KAAK4Z,QAAQpH,EACtB,CAEAka,sBAAsBD,EAAAA,CACpB,IAAIoB,EAAYC,EAChB,CAAMtb,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAK4tB,6BAA6BnB,CAAAA,EACtD7S,EAAU5Z,KAAK4Z,QAAQjK,MAAM,CAAA,EACnC,GAAI6C,GAAS,KACX,GAAI9C,IAAW,EACbme,EAAarb,EACbsb,EAAc,MACT,CACL,IAAM5f,EAASlO,KAAK8sB,iBAAiBta,CAAAA,EAAAA,CAC7Bub,EAAYC,CAAAA,EAAgB9f,EAAO+d,cAAcvc,CAAAA,EACzDkK,EAAQhH,OAAOJ,EAAO,EAAGub,EAAYC,CAAAA,EACrCH,EAAarb,EAAQ,EACrBsb,EAAcC,EAAW1F,UAAAA,EAAc3Y,CACzC,MAEAme,EAAajU,EAAQ1U,OACrB4oB,EAAc,EAGhB,MAAO,CAAElU,EAASiU,EAAYC,CAAAA,CAChC,CAEAG,aAAAA,CACE,IAAMrU,EAAU,CAAA,EACZsU,EAAgBluB,KAAK4Z,QAAQ,GAejC,OAbA5Z,KAAK4Z,QAAQjK,MAAM,CAAA,EAAG9G,QAASqF,GAAAA,CAAW,IAAAigB,EAAAC,GACxCD,GAAIC,EAAAF,GAAc5F,yBAAqB,MAAA6F,IAArB7F,QAAd6F,EAAAxoB,KAAAyoB,EAAsClgB,CAAAA,EACxCggB,EAAgBA,EAAclC,gBAAgB9d,CAAAA,GAE9C0L,EAAQrQ,KAAK2kB,CAAAA,EACbA,EAAgBhgB,EAClB,CAAA,EAGEggB,GACFtU,EAAQrQ,KAAK2kB,CAAAA,EAGR,IAAIluB,KAAKsP,YAAYsK,CAAAA,CAC9B,CAEAyU,4BAA4BC,EAAYC,EAAAA,CACtC,IACMC,EADUxuB,KAAK4Z,QAAQjK,MAAM,CAAA,EACJA,MAAM2e,EAAYC,EAAW,CAAA,EACtDE,EAAsB,IAAIzuB,KAAKsP,YAAYkf,CAAAA,EAAgBP,YAAAA,EAAc7T,QAAAA,EAC/E,OAAOpa,KAAK4S,OAAO0b,EAAYE,EAAetpB,OAAAA,GAAWupB,CAAAA,CAC3D,CAEAb,6BAA6BnB,EAAAA,CAC3B,IAAIja,EACAkc,EAAkB,EACtB,IAAKlc,EAAQ,EAAGA,EAAQxS,KAAK4Z,QAAQ1U,OAAQsN,IAAS,CACpD,IACMmc,EAAeD,EADN1uB,KAAK4Z,QAAQpH,GACkB6V,UAAAA,EAC9C,GAAIqG,GAAmBjC,GAAYA,EAAWkC,EAC5C,MAAO,CAAEnc,MAAAA,EAAO9C,OAAQ+c,EAAWiC,CAAAA,EAErCA,EAAkBC,CACpB,CACA,MAAO,CAAEnc,MAAO,KAAM9C,OAAQ,IAAA,CAChC,CAEAkf,6BAA6Bpc,EAAO9C,EAAAA,CAClC,IAAI+c,EAAW,EACf,QAASoC,EAAe,EAAGA,EAAe7uB,KAAK4Z,QAAQ1U,OAAQ2pB,IAAgB,CAC7E,IAAM3gB,EAASlO,KAAK4Z,QAAQiV,GAC5B,GAAIA,EAAerc,EACjBia,GAAYve,EAAOma,UAAAA,UACVwG,IAAiBrc,EAAO,CACjCia,GAAY/c,EACZ,KACF,CACF,CACA,OAAO+c,CACT,CAEAqC,gBAAAA,CAME,OALI9uB,KAAK+uB,aAAe,OACtB/uB,KAAK+uB,YAAc,EACnB/uB,KAAK4Z,QAAQ/Q,QAASqF,GAAWlO,KAAK+uB,aAAe7gB,EAAOma,UAAAA,CAAAA,GAGvDroB,KAAK+uB,WACd,CAEA9f,UAAAA,CACE,OAAOjP,KAAK4Z,QAAQnI,KAAK,EAAA,CAC3B,CAEA2I,SAAAA,CACE,OAAOpa,KAAK4Z,QAAQjK,MAAM,CAAA,CAC5B,CAEAO,QAAAA,CACE,OAAOlQ,KAAKoa,QAAAA,CACd,CAEAnK,UAAUsc,EAAAA,CACR,OAAOhd,MAAMU,UAAAA,GAAahL,SAAAA,GAAc+pB,GAAqBhvB,KAAK4Z,QAAS2S,GAAgB3S,OAAAA,CAC7F,CAEA1H,uBAAAA,CACE,MAAO,CACL0H,QAAO,IAAAvW,OAAMrD,KAAK4Z,QAAQ5I,IAAK9C,GAAWA,EAAO6D,QAAAA,CAAAA,EAAWN,KAAK,IAAA,EAAK,GAAA,CAAA,CAE1E,CAAA,EAGIud,GAAuB,SAASnY,EAAAA,CAAkB,IAAZC,EAAK7R,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAClD,GAAI4R,EAAK3R,SAAW4R,EAAM5R,OACxB,MAAA,GAEF,IAAIqM,EAAAA,GACJ,QAASiB,EAAQ,EAAGA,EAAQqE,EAAK3R,OAAQsN,IAAS,CAChD,IAAMtE,EAAS2I,EAAKrE,GAChBjB,GAAAA,CAAWrD,EAAO+B,UAAU6G,EAAMtE,EAAAA,IACpCjB,EAAAA,GAEJ,CACA,OAAOA,CACT,EAEMkc,GAAgB1X,GAAUA,EAAM,GAEhC2X,GAAc3X,GAAUA,EAAM,GCtNfkZ,GAAN,cAAmBvd,EAAAA,CAChC,OAAA,gCAAuC/E,EAAY/N,EAAAA,CAEjD,OAAO,IAAIoB,KAAK,CADF,IAAIurB,GAAgB5e,EAAY/N,CAAAA,CAAAA,CAAAA,CAEhD,CAEA,OAAA,4BAAmCmS,EAAQnS,EAAAA,CAEzC,OAAO,IAAIoB,KAAK,CADF,IAAI+rB,GAAYhb,EAAQnS,CAAAA,CAAAA,CAAAA,CAExC,CAEA,OAAA,SAAgBswB,EAAAA,CAEd,OAAO,IAAIlvB,KADIsQ,MAAMC,KAAK2e,CAAAA,EAAUle,IAAK0W,GAAcF,GAAM5V,SAAS8V,CAAAA,CAAAA,CAAAA,CAExE,CAEApY,aAAAA,CAAyB,IAAbmV,EAAMxf,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACnBsK,MAAAA,GAAStK,SAAAA,EACT,IAAMkqB,EAAW1K,EAAOjN,OAAQkI,GAAAA,CAAWA,EAAMrF,QAAAA,CAAAA,EACjDra,KAAKovB,UAAY,IAAIlD,GAAeiD,CAAAA,CACtC,CAEAlV,MAAAA,CACE,OAAOja,KAAKqvB,kBAAkBrvB,KAAKovB,SAAAA,CACrC,CAEAC,kBAAkBD,EAAAA,CAChB,OAAO,IAAIpvB,KAAKsP,YAAY8f,EAAUnB,YAAAA,EAAc7T,QAAAA,CAAAA,CACtD,CAEAkV,mBAAmBC,EAAAA,CACjB,IAAM9K,EAASzkB,KAAK0kB,UAAAA,EAAY1T,IAAK0O,GAAU6P,EAAUhU,KAAKmE,CAAAA,GAAUA,CAAAA,EACxE,OAAO,IAAI1f,KAAKsP,YAAYmV,CAAAA,CAC9B,CAEA+K,WAAWhwB,EAAAA,CACT,OAAOQ,KAAKyvB,qBAAqBjwB,EAAMQ,KAAKqoB,UAAAA,CAAAA,CAC9C,CAEAoH,qBAAqBjwB,EAAMitB,EAAAA,CACzB,OAAOzsB,KAAKqvB,kBAAkBrvB,KAAKovB,UAAU5C,+BAA+BhtB,EAAK4vB,UAAW3C,CAAAA,CAAAA,CAC9F,CAEAiD,kBAAkB3Z,EAAAA,CAChB,OAAO/V,KAAKqvB,kBAAkBrvB,KAAKovB,UAAUjC,qBAAqBpX,CAAAA,CAAAA,CACpE,CAEA4Z,mBAAmBnwB,EAAMuW,EAAAA,CACvB,OAAO/V,KAAK0vB,kBAAkB3Z,CAAAA,EAAO0Z,qBAAqBjwB,EAAMuW,EAAM,EAAA,CACxE,CAEA6Z,4BAA4B7Z,EAAO0W,EAAAA,CACjC,GAAI1W,EAAM,IAAM0W,GAAYA,GAAY1W,EAAM,GAAI,OAClD,IAAMvW,EAAOQ,KAAK6vB,eAAe9Z,CAAAA,EAC3B7Q,EAAS1F,EAAK6oB,UAAAA,EAIpB,OAHItS,EAAM,GAAK0W,IACbA,GAAYvnB,GAEPlF,KAAK0vB,kBAAkB3Z,CAAAA,EAAO0Z,qBAAqBjwB,EAAMitB,CAAAA,CAClE,CAEAqD,oBAAoB/H,EAAW3jB,EAAO2R,EAAAA,CACpC,IAAMnX,EAAa,CAAA,EAEnB,OADAA,EAAWmpB,GAAa3jB,EACjBpE,KAAK+vB,qBAAqBnxB,EAAYmX,CAAAA,CAC/C,CAEAga,qBAAqBnxB,EAAYmX,EAAAA,CAC/B,OAAO/V,KAAKqvB,kBACVrvB,KAAKovB,UAAUhC,wBAAwBrX,EAAQ2J,GAAUA,EAAMmI,6BAA6BjpB,CAAAA,CAAAA,CAAAA,CAEhG,CAEAoxB,uBAAuBjI,EAAWhS,EAAAA,CAChC,OAAO/V,KAAKqvB,kBACVrvB,KAAKovB,UAAUhC,wBAAwBrX,EAAQ2J,GAAUA,EAAMoI,qBAAqBC,CAAAA,CAAAA,CAAAA,CAExF,CAEAkI,qBAAqBrxB,EAAYmX,EAAAA,CAC/B,OAAO/V,KAAKqvB,kBACVrvB,KAAKovB,UAAUhC,wBAAwBrX,EAAQ2J,GAAUA,EAAMiI,mBAAmB/oB,CAAAA,CAAAA,CAAAA,CAEtF,CAEAsxB,wBAAwBzD,EAAAA,CAAU,IAAA0D,EAChC,QAAOA,EAAInwB,KAACovB,UAAUzB,oBAAoBlB,CAAAA,KAA1C,MAAmD0D,IAAT1D,OAAS0D,OAA5CA,EAA8C7M,cAAAA,IAAmB,CAAA,CAC1E,CAEA8M,qBAAAA,CACE,IAAMxW,EAAUtJ,MAAMC,KAAKvQ,KAAKovB,UAAUhV,QAAAA,CAAAA,EAAWpJ,IAAK0O,GAAUA,EAAM4D,cAAAA,CAAAA,EAC1E,OAAO5J,GAAKC,8BAA8BC,CAAAA,EAASU,SAAAA,CACrD,CAEA+V,2BAA2Bta,EAAAA,CACzB,OAAO/V,KAAK6vB,eAAe9Z,CAAAA,EAAOqa,oBAAAA,GAAyB,CAAA,CAC7D,CAEAE,qCAAqCrc,EAAevE,EAAAA,CAClD,IAAIoH,EACAD,EAAOC,EAAQpH,EACbxK,EAASlF,KAAKqoB,UAAAA,EAEpB,KAAOxR,EAAO,GAAK7W,KAAKqwB,2BAA2B,CAAExZ,EAAO,EAAGC,CAAAA,CAAAA,EAAS7C,IACtE4C,IAEF,KAAOC,EAAQ5R,GAAUlF,KAAKqwB,2BAA2B,CAAE3gB,EAAQoH,EAAQ,CAAA,CAAA,EAAK7C,IAC9E6C,IAGF,MAAO,CAAED,EAAMC,CAAAA,CACjB,CAEA+Y,eAAe9Z,EAAAA,CACb,OAAO/V,KAAKqvB,kBAAkBrvB,KAAKovB,UAAUrC,yBAAyBhX,CAAAA,CAAAA,CACxE,CAEAwa,iBAAiBxa,EAAAA,CACf,OAAO/V,KAAKovB,UAAUrC,yBAAyBhX,CAAAA,EAAO9G,SAAAA,CACxD,CAEAuhB,oBAAoB/D,EAAAA,CAClB,OAAOzsB,KAAKuwB,iBAAiB,CAAE9D,EAAUA,EAAW,CAAA,CAAA,CACtD,CAEAgE,iBAAiB1f,EAAAA,CACf,OAAO/Q,KAAKuwB,iBAAiB,CAAE,EAAGxf,EAAO7L,MAAAA,CAAAA,IAAc6L,CACzD,CAEA2f,eAAe3f,EAAAA,CACb,IAAM7L,EAASlF,KAAKqoB,UAAAA,EACpB,OAAOroB,KAAKuwB,iBAAiB,CAAErrB,EAAS6L,EAAO7L,OAAQA,CAAAA,CAAAA,IAAc6L,CACvE,CAEA4f,qBAAAA,CACE,OAAO3wB,KAAKovB,UAAUhV,QAAAA,EAAU5C,OAAQkI,GAAAA,CAAAA,CAAYA,EAAM/S,UAAAA,CAC5D,CAEAikB,gBAAAA,CACE,OAAO5wB,KAAK2wB,oBAAAA,EAAsB3f,IAAK0O,GAAUA,EAAM/S,UAAAA,CACzD,CAEAkkB,6BAA6BC,EAAAA,CAC3B,IAAIrE,EAAW,EACf,QAAW/M,KAAS1f,KAAKovB,UAAUhV,QAAAA,EAAW,CAAA,IAAAuR,EAC5C,KAAIA,EAAAjM,EAAM/S,cAAU,MAAAgf,IAAVhf,OAAUgf,OAAhBA,EAAkB5gB,MAAO+lB,EAC3B,MAAO,CAAEnkB,WAAY+S,EAAM/S,WAAY8f,SAAAA,CAAAA,EAEzCA,GAAY/M,EAAMxa,MACpB,CACA,MAAO,CAAEyH,WAAY,KAAM8f,SAAU,IAAA,CACvC,CAEAsE,kBAAkBD,EAAAA,CAChB,GAAA,CAAMnkB,WAAEA,CAAAA,EAAe3M,KAAK6wB,6BAA6BC,CAAAA,EACzD,OAAOnkB,CACT,CAEAqkB,qBAAqBrkB,EAAAA,CACnB,IAAMskB,EAAwBjxB,KAAK6wB,6BAA6BlkB,EAAW5B,EAAAA,EACrE0hB,EAAWwE,EAAsBxE,SAEvC,GADA9f,EAAaskB,EAAsBtkB,WAEjC,MAAO,CAAE8f,EAAUA,EAAW,CAAA,CAElC,CAEAyE,8BAA8BtyB,EAAY+N,EAAAA,CACxC,IAAMoJ,EAAQ/V,KAAKgxB,qBAAqBrkB,CAAAA,EACxC,OAAIoJ,EACK/V,KAAK+vB,qBAAqBnxB,EAAYmX,CAAAA,EAEtC/V,IAEX,CAEAqoB,WAAAA,CACE,OAAOroB,KAAKovB,UAAUN,eAAAA,CACxB,CAEAzU,SAAAA,CACE,OAAOra,KAAKqoB,UAAAA,IAAgB,CAC9B,CAEApY,UAAUzQ,EAAAA,CAAM,IAAA2xB,EACd,OAAO5hB,MAAMU,UAAUzQ,CAAAA,IAASA,GAAAA,OAAI2xB,EAAJ3xB,EAAM4vB,aAAS+B,MAAAA,IAAT/B,OAAS+B,OAAfA,EAAiBlhB,UAAUjQ,KAAKovB,SAAAA,EAClE,CAEAjH,cAAAA,CACE,OAAOnoB,KAAKqoB,UAAAA,IAAgB,GAAKroB,KAAKovB,UAAUtC,iBAAiB,CAAA,EAAG3E,aAAAA,CACtE,CAEAiJ,UAAUzmB,EAAAA,CACR,OAAO3K,KAAKovB,UAAUhD,WAAWzhB,CAAAA,CACnC,CAEA+Z,WAAAA,CACE,OAAO1kB,KAAKovB,UAAUhV,QAAAA,CACxB,CAEAiX,mBAAmB5E,EAAAA,CACjB,OAAOzsB,KAAKovB,UAAUzB,oBAAoBlB,CAAAA,CAC5C,CAEAva,uBAAAA,CACE,MAAO,CAAEkd,UAAWpvB,KAAKovB,UAAUrd,QAAAA,CAAAA,CACrC,CAEAuf,oBAAAA,CACE,IAAMlC,EAAYpvB,KAAKovB,UAAUlC,qBAAsBxN,GAAUA,EAAM0I,eAAAA,CAAAA,EACvE,OAAOpoB,KAAKqvB,kBAAkBD,CAAAA,CAChC,CAEAngB,UAAAA,CACE,OAAOjP,KAAKovB,UAAUngB,SAAAA,CACxB,CAEAiB,QAAAA,CACE,OAAOlQ,KAAKovB,UAAUlf,OAAAA,CACxB,CAEA2b,WAAAA,CACE,OAAOha,KAAKO,UAAUpS,KAAKovB,UAAUhV,QAAAA,EAAUpJ,IAAK0O,GAAU7N,KAAK9S,MAAM2gB,EAAMmM,UAAAA,CAAAA,CAAAA,CAAAA,CACjF,CAIA/Y,cAAAA,CACE,OAAOA,GAAa9S,KAAKiP,SAAAA,CAAAA,CAC3B,CAEAqW,OAAAA,CACE,OAAOtlB,KAAK8S,aAAAA,IAAmB,KACjC,CAAA,ECzOmBye,GAAN,cAAoB7f,EAAAA,CACjC,OAAA,SAAgB8f,EAAAA,CAEd,OAAO,IAAIxxB,KADEivB,GAAKrd,SAAS4f,EAAUhyB,IAAAA,EACfgyB,EAAU5yB,WAAY4yB,EAAUjyB,cAAAA,CACxD,CAEA+P,YAAY9P,EAAMZ,EAAYW,EAAAA,CAC5BgQ,MAAAA,GAAStK,SAAAA,EACTjF,KAAKR,KAAOiyB,GAAsBjyB,GAAQ,IAAIyvB,EAAAA,EAC9CjvB,KAAKpB,WAAaA,GAAc,CAAA,EAChCoB,KAAKT,eAAiBA,GAAkB,CAAA,CAC1C,CAEA8a,SAAAA,CACE,OAAOra,KAAKR,KAAK2oB,aAAAA,CACnB,CAEAlY,UAAU+U,EAAAA,CACR,MAAA,CAAA,CAAIzV,MAAMU,UAAU+U,CAAAA,GAEbhlB,KAAKR,KAAKyQ,UAAU+U,GAAOxlB,IAAAA,GAAS8S,GAAetS,KAAKpB,WAAYomB,GAAOpmB,UAAAA,GAAeiX,GAAgB7V,KAAKT,eAAgBylB,GAAOzlB,cAAAA,CAC/I,CAEAmyB,aAAalyB,EAAAA,CACX,OAAO,IAAI+xB,GAAM/xB,EAAMQ,KAAKpB,WAAYoB,KAAKT,cAAAA,CAC/C,CAEAoyB,iBAAAA,CACE,OAAO3xB,KAAK0xB,aAAa,IAAA,CAC3B,CAEA/J,mBAAmB/oB,EAAAA,CACjB,OAAO,IAAI2yB,GAAMvxB,KAAKR,KAAMZ,EAAYoB,KAAKT,cAAAA,CAC/C,CAEAqyB,uBAAAA,CACE,OAAO5xB,KAAK2nB,mBAAmB,IAAA,CACjC,CAEA2H,mBAAmBC,EAAAA,CACjB,IAAMsC,EAAatC,EAAUhU,KAAKvb,KAAKR,IAAAA,EACvC,OAAIqyB,EACK7xB,KAAK0xB,aAAaG,CAAAA,EAElB7xB,KAAK0xB,aAAa1xB,KAAKR,KAAK8vB,mBAAmBC,CAAAA,CAAAA,CAE1D,CAEAuC,aAAa/J,EAAAA,CACX,IAAMnpB,EAAaoB,KAAKpB,WAAWyE,OAAO0uB,GAAgBhK,CAAAA,CAAAA,EAC1D,OAAO/nB,KAAK2nB,mBAAmB/oB,CAAAA,CACjC,CAEAozB,iBAAiBjK,EAAW3jB,EAAAA,CAC1B,IAAM7E,EAAiB4U,OAAOoR,OAAO,CAAA,EAAIvlB,KAAKT,eAAgB,CAAEwoB,CAACA,GAAY3jB,CAAAA,CAAAA,EAC7E,OAAO,IAAImtB,GAAMvxB,KAAKR,KAAMQ,KAAKpB,WAAYW,CAAAA,CAC/C,CAEAsjB,gBAAgBkF,EAAAA,CACd,GAAA,CAAMnoB,cAAEA,CAAAA,EAAkBoU,GAAe+T,CAAAA,EACnCnpB,EAAaqzB,GAAgBA,GAAgBjyB,KAAKpB,WAAYmpB,CAAAA,EAAYnoB,CAAAA,EAChF,OAAOI,KAAK2nB,mBAAmB/oB,CAAAA,CACjC,CAEAszB,qBAAAA,CACE,OAAOlyB,KAAK6iB,gBAAgB7iB,KAAKmlB,iBAAAA,CAAAA,CACnC,CAEAA,kBAAAA,CACE,OAAOgN,GAAenyB,KAAKpB,UAAAA,CAC7B,CAEA0kB,eAAAA,CACE,OAAOtjB,KAAKpB,WAAW+Q,MAAM,CAAA,CAC/B,CAEAyiB,mBAAAA,CACE,OAAOpyB,KAAKpB,WAAWsG,MACzB,CAEAmtB,oBAAoBC,EAAAA,CAClB,OAAOtyB,KAAKpB,WAAW0zB,EAAQ,EACjC,CAEAxN,aAAa7Q,EAAAA,CACX,OAAOjU,KAAKpB,WAAWiL,SAASoK,CAAAA,CAClC,CAEAse,eAAAA,CACE,OAAOvyB,KAAKoyB,kBAAAA,EAAsB,CACpC,CAEAI,0BAAAA,CACE,OAAOL,GAAenyB,KAAKyyB,sBAAAA,CAAAA,CAC7B,CAEAA,uBAAAA,CACE,OAAOzyB,KAAKpB,WAAW4Y,OAAQuQ,GAAc/T,GAAe+T,CAAAA,EAAW9oB,QAAAA,CACzE,CAEAyzB,iBAAAA,CACE,OAAO1yB,KAAKyyB,sBAAAA,EAAwBvtB,MACtC,CAEAytB,sBAAAA,CACE,IAAM5K,EAAY/nB,KAAKwyB,yBAAAA,EACvB,OAAIzK,EACK/nB,KAAK6iB,gBAAgBkF,CAAAA,EAErB/nB,IAEX,CAEA4yB,sBAAAA,CACE,IAAM7K,EAAY/nB,KAAKwyB,yBAAAA,EACvB,GAAIzK,EAAW,CACb,IAAMvV,EAAQxS,KAAKpB,WAAWi0B,YAAY9K,CAAAA,EACpCnpB,EAAa6T,GAAYzS,KAAKpB,WAAY4T,EAAQ,EAAG,EAAA,GAAMuf,GAAgBhK,CAAAA,CAAAA,EACjF,OAAO/nB,KAAK2nB,mBAAmB/oB,CAAAA,CACjC,CACE,OAAOoB,IAEX,CAEA8yB,uBAAAA,CACE,OAAO9yB,KAAKpB,WAAW4Y,OAAQuQ,GAAc/T,GAAe+T,CAAAA,EAAWnoB,aAAAA,CACzE,CAEAmzB,YAAAA,CAAa,IAAA7N,EACX,OAAAA,EAAOlR,GAAehU,KAAKmlB,iBAAAA,CAAAA,KAAmBD,MAAAA,IAAnBC,OAAmBD,OAAvCA,EAAyCtlB,aAClD,CAEAozB,iBAAAA,CAAkB,IAAAC,EAChB,OAAAA,EAAOjf,GAAehU,KAAKmlB,iBAAAA,CAAAA,KAAmB8N,MAAAA,IAAnB9N,OAAmB8N,OAAvCA,EAAyC9zB,QAClD,CAEA+zB,gBAAAA,CAAiB,IAAAC,EACf,OAAAA,EAAOnf,GAAehU,KAAKmlB,iBAAAA,CAAAA,KAAmBgO,MAAAA,IAAnBhO,OAAmBgO,OAAvCA,EAAyC/zB,aAClD,CAEAg0B,qCAAqCC,EAAW5G,EAAAA,CAC9C,IAAM1b,EAAS/Q,KAAKiP,SAAAA,EAChBsC,EACJ,OAAQ8hB,OACD,UACH9hB,EAASR,EAAOob,QAAQ;EAAMM,CAAAA,EAC9B,UACG,WACHlb,EAASR,EAAOpB,MAAM,EAAG8c,CAAAA,EAAUoG,YAAY;CAAA,EAGnD,GAAIthB,IAAJ,GACE,OAAOA,CAEX,CAEAW,uBAAAA,CACE,MAAO,CACL1S,KAAMQ,KAAKR,KAAKuS,QAAAA,EAChBnT,WAAYoB,KAAKpB,UAAAA,CAErB,CAEAqQ,UAAAA,CACE,OAAOjP,KAAKR,KAAKyP,SAAAA,CACnB,CAEAiB,QAAAA,CACE,MAAO,CACL1Q,KAAMQ,KAAKR,KACXZ,WAAYoB,KAAKpB,WACjBW,eAAgBS,KAAKT,cAAAA,CAEzB,CAIAuT,cAAAA,CACE,OAAO9S,KAAKR,KAAKsT,aAAAA,CACnB,CAEAwS,OAAAA,CACE,OAAOtlB,KAAKR,KAAK8lB,MAAAA,CACnB,CAIA+C,WAAAA,CACE,OAAOroB,KAAKR,KAAK6oB,UAAAA,CACnB,CAEAC,sBAAsBtD,EAAAA,CACpB,MAAA,CAAQhlB,KAAKuyB,cAAAA,GAAAA,CAAoBvN,EAAMuN,cAAAA,GAAmBvyB,KAAK8S,aAAAA,IAAmBkS,EAAMlS,aAAAA,CAC1F,CAEAkZ,gBAAgBhH,EAAAA,CACd,IAAMsO,EAAcrE,GAAKsE,4BAA4B;CAAA,EAC/C/zB,EAAOQ,KAAKwzB,yBAAAA,EAA2BhE,WAAW8D,CAAAA,EACxD,OAAOtzB,KAAK0xB,aAAalyB,EAAKgwB,WAAWxK,EAAMxlB,IAAAA,CAAAA,CACjD,CAEAysB,cAAcvc,EAAAA,CACZ,IAAImH,EAAMC,EAWV,OAVIpH,IAAW,GACbmH,EAAO,KACPC,EAAQ9W,MACC0P,IAAW1P,KAAKqoB,UAAAA,GACzBxR,EAAO7W,KACP8W,EAAQ,OAERD,EAAO7W,KAAK0xB,aAAa1xB,KAAKR,KAAKqwB,eAAe,CAAE,EAAGngB,CAAAA,CAAAA,CAAAA,EACvDoH,EAAQ9W,KAAK0xB,aAAa1xB,KAAKR,KAAKqwB,eAAe,CAAEngB,EAAQ1P,KAAKqoB,UAAAA,CAAAA,CAAAA,CAAAA,GAE7D,CAAExR,EAAMC,CAAAA,CACjB,CAEA0O,uBAAAA,CACE,OAAOxlB,KAAKR,KAAK6oB,UAAAA,EAAc,CACjC,CAEAmL,0BAAAA,CACE,OAAIC,GAAqBzzB,KAAKR,IAAAA,EACrBQ,KAAKR,KAAKqwB,eAAe,CAAE,EAAG7vB,KAAKwlB,sBAAAA,CAAAA,CAAAA,EAEnCxlB,KAAKR,KAAKya,KAAAA,CAErB,CAIAiB,aAAaN,EAAAA,CACX,OAAO5a,KAAKpB,WAAWgc,EACzB,CAEAO,iBAAiBuY,EAAY9Y,EAAAA,CAC3B,IAAM+Y,EAAkBD,EAAWpQ,cAAAA,EAC7BsQ,EAAiBD,EAAgB/Y,GACjCmN,EAAY/nB,KAAKpB,WAAWgc,GAElC,OACEmN,IAAc6L,GAAAA,EACZ5f,GAAe+T,CAAAA,EAAW1oB,QADdu0B,IACcv0B,E3B5NGw0B,IAAAA,CACnC,GAAA,CAAKjgB,GAAoB,CACvBA,GAAqB,CAAA,EACrB,QAAWzP,KAAO+P,GAAwB,CACxC,GAAA,CAAMtU,cAAEA,CAAAA,EAAkBsU,GAAuB/P,GAC7CvE,GAAiB,MACnBgU,GAAmBrK,KAAK3J,CAAAA,CAE5B,CACF,CACA,OAAOgU,EAAkB,G2BkN2BigB,EAAwBhqB,SAAS8pB,EAAgB/Y,EAAQ,EAAA,KACxG5a,KAAK8S,aAAAA,IAAmB4gB,EAAW5gB,aAAAA,GAAkB4gB,EAAWrZ,QAAAA,EAErE,CAAA,EAKIoX,GAAwB,SAASjyB,EAAAA,CAGrC,OAFAA,EAAOs0B,GAAqCt0B,CAAAA,EAC5CA,EAAOu0B,GAAoBv0B,CAAAA,CAE7B,EAEMs0B,GAAuC,SAASt0B,EAAAA,CACpD,IAAIw0B,EAAAA,GACEvP,EAASjlB,EAAKklB,UAAAA,EAEhBuP,EAAcxP,EAAO9U,MAAM,EAAG8U,EAAOvf,OAAS,CAAA,EAC5CgvB,EAAYzP,EAAOA,EAAOvf,OAAS,GAEzC,OAAKgvB,GAELD,EAAcA,EAAYjjB,IAAK0O,GACzBA,EAAMyI,aAAAA,GACR6L,EAAAA,GACOG,GAAsBzU,CAAAA,GAEtBA,CAAAA,EAIPsU,EACK,IAAI/E,GAAK,CAAA,GAAKgF,EAAaC,CAAAA,CAAAA,EAE3B10B,GAdcA,CAgBzB,EAEM40B,GAAiBnF,GAAKsE,4BAA4B;EAAM,CAAEc,WAAAA,EAAY,CAAA,EAEtEN,GAAsB,SAASv0B,EAAAA,CACnC,OAAIi0B,GAAqBj0B,CAAAA,EAChBA,EAEAA,EAAKgwB,WAAW4E,EAAAA,CAE3B,EAEMX,GAAuB,SAASj0B,EAAAA,CACpC,IAAM0F,EAAS1F,EAAK6oB,UAAAA,EACpB,OAAInjB,IAAW,EACb,GAEc1F,EAAKqwB,eAAe,CAAE3qB,EAAS,EAAGA,CAAAA,CAAAA,EACnCijB,aAAAA,CACjB,EAEMgM,GAAyBzU,GAAUA,EAAMoI,qBAAqB,YAAA,EAI9DiK,GAAkB,SAAShK,EAAAA,CAC/B,GAAA,CAAMnoB,cAAEA,CAAAA,EAAkBoU,GAAe+T,CAAAA,EACzC,OAAInoB,EACK,CAAEA,EAAemoB,CAAAA,EAEjB,CAAEA,CAAAA,CAEb,EAIMoK,GAAkB7gB,GAAUA,EAAM3B,MAAAA,EAAO,EAAG,GAE5CsiB,GAAkB,SAAS3gB,EAAOlN,EAAAA,CACtC,IAAMoO,EAAQlB,EAAMuhB,YAAYzuB,CAAAA,EAChC,OAAIoO,IAAJ,GACSlB,EAEAmB,GAAYnB,EAAOkB,EAAO,CAAA,CAErC,ECnUqB8hB,GAAN,cAAuB5iB,EAAAA,CACpC,OAAA,SAAgB6iB,EAAAA,CAEd,OAAO,IAAIv0B,KADIsQ,MAAMC,KAAKgkB,CAAAA,EAAcvjB,IAAKwgB,GAAcD,GAAM3f,SAAS4f,CAAAA,CAAAA,CAAAA,CAE5E,CAEA,OAAA,WAAkBzgB,EAAQyjB,EAAAA,CACxB,IAAMh1B,EAAOyvB,GAAKsE,4BAA4BxiB,EAAQyjB,CAAAA,EACtD,OAAO,IAAIx0B,KAAK,CAAE,IAAIuxB,GAAM/xB,CAAAA,CAAAA,CAAAA,CAC9B,CAEA8P,aAAAA,CAAyB,IAAbmlB,EAAMxvB,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACnBsK,MAAAA,GAAStK,SAAAA,EACLwvB,EAAOvvB,SAAW,IACpBuvB,EAAS,CAAE,IAAIlD,EAAAA,GAEjBvxB,KAAK00B,UAAYxI,GAAend,IAAI0lB,CAAAA,CACtC,CAEApa,SAAAA,CACE,IAAM2K,EAAQhlB,KAAK20B,gBAAgB,CAAA,EACnC,OAAO30B,KAAK00B,UAAUxvB,SAAW,GAAK8f,EAAM3K,QAAAA,GAAAA,CAAc2K,EAAMuN,cAAAA,CAClE,CAEAtY,MAAAA,CACE,IAAMwa,GADIxvB,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,GACU2vB,kBAAoB50B,KAAK00B,UAAUzG,YAAAA,EAAc7T,QAAAA,EAAYpa,KAAK00B,UAAUta,QAAAA,EAEnG,OAAO,IAAIpa,KAAKsP,YAAYmlB,CAAAA,CAC9B,CAEAI,6BAA6BC,EAAAA,CAC3B,IAAMvF,EAAY,IAAIjU,GAAUwZ,EAAe1Z,WAAAA,CAAAA,EAC/C,OAAOpb,KAAKsvB,mBAAmBC,CAAAA,CACjC,CAEAD,mBAAmBC,EAAAA,CACjB,IAAMkF,EAASz0B,KAAKimB,UAAAA,EAAYjV,IAAKgU,GACfuK,EAAUhU,KAAKyJ,CAAAA,GACbA,EAAMsK,mBAAmBC,CAAAA,CAAAA,EAEjD,OAAO,IAAIvvB,KAAKsP,YAAYmlB,CAAAA,CAC9B,CAEAM,6BAAAA,CAAkD,IAAtBzrB,EAAerE,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACtCwvB,EAASz0B,KAAKimB,UAAAA,EAAYjV,IAAKgU,GAAAA,CACnC,IAAMpmB,EAAa0K,EAAgBjG,OAAO2hB,EAAM1B,cAAAA,CAAAA,EAChD,OAAO0B,EAAM2C,mBAAmB/oB,CAAAA,CAAW,CAAA,EAG7C,OAAO,IAAIoB,KAAKsP,YAAYmlB,CAAAA,CAC9B,CAEAO,aAAaC,EAAUC,EAAAA,CACrB,IAAM1iB,EAAQxS,KAAK00B,UAAUvI,QAAQ8I,CAAAA,EACrC,OAAIziB,IAAJ,GACSxS,KAEF,IAAIA,KAAKsP,YAAYtP,KAAK00B,UAAU9H,qBAAqBsI,EAAU1iB,CAAAA,CAAAA,CAC5E,CAEA2iB,sBAAsB7wB,EAAUyR,EAAAA,CAC9B,GAAA,CAAM2e,UAAEA,CAAAA,EAAcpwB,EACtByR,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAM0W,CAAAA,EAAa1W,EACnB,CAAMvD,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqB3I,CAAAA,EAEhDlb,EAASvR,KACPglB,EAAQhlB,KAAKq1B,mBAAmB5I,CAAAA,EAStC,OAPIvW,GAAiBH,CAAAA,GAAUiP,EAAM3K,QAAAA,GAAAA,CAAc2K,EAAMuN,cAAAA,EACvDhhB,EAAS,IAAIvR,KAAKsP,YAAYiC,EAAOmjB,UAAU7H,oBAAoBra,CAAAA,CAAAA,EAC1DwS,EAAMQ,sBAAAA,IAA4B9V,GAC3C+c,IAGFlb,EAASA,EAAOme,kBAAkB3Z,CAAAA,EAC3B,IAAI/V,KAAKsP,YAAYiC,EAAOmjB,UAAUlI,+BAA+BkI,EAAWjI,CAAAA,CAAAA,CACzF,CAEA6I,qBAAqBhxB,EAAUyR,EAAAA,CAC7B,IAAIwf,EAAmBhkB,EACvBwE,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,CAAAA,EAAkBzf,EACpB0f,EAAgBz1B,KAAKo1B,qBAAqBI,CAAAA,EAC1ClsB,EAAkBtJ,KAAK20B,gBAAgBc,EAAcjjB,KAAAA,EAAO8Q,cAAAA,EAC5DoS,EAAsBpxB,EAASqxB,uBAAAA,EAC/BC,EAA0BtsB,EAAgBqG,MAAAA,CAAO+lB,EAAoBxwB,MAAAA,EAE3E,GAAIoN,GAAeojB,EAAqBE,CAAAA,EAA0B,CAChE,IAAMC,EAAyBvsB,EAAgBqG,MAAM,EAAA,CAAI+lB,EAAoBxwB,MAAAA,EAC7EqwB,EAAoBjxB,EAASywB,4BAA4Bc,CAAAA,CAC3D,MACEN,EAAoBjxB,EAAS2V,KAAK,CAAE2a,kBAAAA,EAAmB,CAAA,EAAQG,4BAA4BzrB,CAAAA,EAG7F,IAAMwsB,EAAaP,EAAkBQ,cAAAA,EAC/BC,EAAaT,EAAkBZ,gBAAgB,CAAA,EAErD,GAAIriB,GAAehJ,EAAiB0sB,EAAW1S,cAAAA,CAAAA,EAAkB,CAC/D,IAAM2S,EAAYD,EAAWxC,yBAAAA,EAG7B,GAFAjiB,EAASvR,KAAKk2B,kBAAkBD,EAAWlgB,CAAAA,EAEvC+f,EAAa,EAAG,CAClBP,EAAoB,IAAIv1B,KAAKsP,YAAYimB,EAAkBtP,UAAAA,EAAYtW,MAAM,CAAA,CAAA,EAC7E,IAAM8c,EAAW+I,EAAgBS,EAAU5N,UAAAA,EAC3C9W,EAASA,EAAO4jB,sBAAsBI,EAAmB9I,CAAAA,CAC3D,CACF,MACElb,EAASvR,KAAKm1B,sBAAsBI,EAAmBxf,CAAAA,EAGzD,OAAOxE,CACT,CAEA2kB,kBAAkB12B,EAAMuW,EAAAA,CACtBA,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,CAAAA,EAAkBzf,EAAAA,CACpBvD,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqBI,CAAAA,EAE9ClxB,EAAWtE,KAAK0vB,kBAAkB3Z,CAAAA,EACxC,OAAO,IAAI/V,KAAKsP,YACdhL,EAASowB,UAAU/H,kBAAkBna,EAAQwS,GAC3CA,EAAM0M,aAAa1M,EAAMxlB,KAAKiwB,qBAAqBjwB,EAAMkQ,CAAAA,CAAAA,CAAAA,CAAAA,CAG/D,CAEAggB,kBAAkB3Z,EAAAA,CAChB,IAAI0e,EACJ1e,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQogB,EAAcC,CAAAA,EAAkBrgB,EACxC,GAAIG,GAAiBH,CAAAA,EACnB,OAAO/V,KAET,GAAA,CAAQq2B,EAAcC,CAAAA,EAAkBhmB,MAAMC,KAAKvQ,KAAKu2B,uBAAuBxgB,CAAAA,CAAAA,EAEzEwD,EAAY8c,EAAa7jB,MACzBgkB,EAAaH,EAAa3mB,OAC1B+mB,EAAYz2B,KAAK20B,gBAAgBpb,CAAAA,EAEjCyT,EAAasJ,EAAc9jB,MAC3BkkB,EAAcJ,EAAc5mB,OAC5BinB,EAAa32B,KAAK20B,gBAAgB3H,CAAAA,EAQxC,GALEoJ,EAAgBD,GAAiB,GACjCM,EAAUjR,sBAAAA,IAA4BgR,GACtCG,EAAWnR,sBAAAA,IAA4BkR,GACvCC,EAAWn3B,KAAKgxB,oBAAoBkG,CAAAA,IAAiB;EAGrDjC,EAASz0B,KAAK00B,UAAU/H,kBAAkBK,EAAahI,GACrDA,EAAM0M,aAAa1M,EAAMxlB,KAAKkwB,kBAAkB,CAAEgH,EAAaA,EAAc,CAAA,CAAA,CAAA,CAAA,MAE1E,CACL,IAAI1R,EACE4R,EAAWH,EAAUj3B,KAAKqwB,eAAe,CAAE,EAAG2G,CAAAA,CAAAA,EAC9CK,EAAYF,EAAWn3B,KAAKqwB,eAAe,CAAE6G,EAAaC,EAAWtO,UAAAA,CAAAA,CAAAA,EACrE7oB,EAAOo3B,EAASpH,WAAWqH,CAAAA,EAM/B7R,EAJwBzL,IAAcyT,GAAcwJ,IAAe,GAC1BC,EAAUrE,kBAAAA,GAAuBuE,EAAWvE,kBAAAA,EAG7EuE,EAAWjF,aAAalyB,CAAAA,EAExBi3B,EAAU/E,aAAalyB,CAAAA,EAGjC,IAAMs3B,EAAqB9J,EAAa,EAAIzT,EAC5Ckb,EAASz0B,KAAK00B,UAAU9hB,OAAO2G,EAAWud,EAAoB9R,CAAAA,CAChE,CAEA,OAAO,IAAIhlB,KAAKsP,YAAYmlB,CAAAA,CAC9B,CAEA7E,4BAA4B7Z,EAAO0W,EAAAA,CACjC,IAAIjtB,EACJuW,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,EAAezG,CAAAA,EAAgBhZ,EACvC,GAAIyf,GAAiB/I,GAAYA,GAAYsC,EAC3C,OAAO/uB,KAGT,IAAIsE,EAAWtE,KAAK+2B,mBAAmBhhB,CAAAA,EACnCxE,EAASvR,KAAK0vB,kBAAkB3Z,CAAAA,EAE9BihB,EAAkBxB,EAAgB/I,EACpCuK,IACFvK,GAAYnoB,EAAS+jB,UAAAA,GAGvB,GAAA,CAAQ2N,KAAevB,CAAAA,EAAWnwB,EAAS2hB,UAAAA,EAW3C,OAVIwO,EAAOvvB,SAAW,GACpB1F,EAAOw2B,EAAWxC,yBAAAA,EACdwD,IACFvK,GAAY,IAGdjtB,EAAOw2B,EAAWx2B,KAGpB+R,EAASA,EAAO2kB,kBAAkB12B,EAAMitB,CAAAA,EACpCgI,EAAOvvB,SAAW,EACbqM,GAGTjN,EAAW,IAAItE,KAAKsP,YAAYmlB,CAAAA,EAChChI,GAAYjtB,EAAK6oB,UAAAA,EAEV9W,EAAO4jB,sBAAsB7wB,EAAUmoB,CAAAA,EAChD,CAEAqD,oBAAoB/H,EAAW3jB,EAAO2R,EAAAA,CACpC,GAAA,CAAI2e,UAAEA,CAAAA,EAAc10B,KAgBpB,OAfAA,KAAKi3B,iBACHlhB,EACA,CAACiP,EAAOkS,EAAW1kB,IACjBkiB,EAAYA,EAAU/H,kBAAkBna,EAAO,UAAA,CAC7C,OAAIwB,GAAe+T,CAAAA,EACV/C,EAAM8M,aAAa/J,EAAW3jB,CAAAA,EAEjC8yB,EAAU,KAAOA,EAAU,GACtBlS,EAEAA,EAAM0M,aAAa1M,EAAMxlB,KAAKswB,oBAAoB/H,EAAW3jB,EAAO8yB,CAAAA,CAAAA,CAGhF,CAAA,CAAA,EAEE,IAAIl3B,KAAKsP,YAAYolB,CAAAA,CAC9B,CAEA5C,aAAa/J,EAAW3jB,EAAAA,CACtB,GAAA,CAAIswB,UAAEA,CAAAA,EAAc10B,KAIpB,OAHAA,KAAKm3B,UACH,CAACnS,EAAOxS,IAAUkiB,EAAYA,EAAU/H,kBAAkBna,EAAO,IAAMwS,EAAM8M,aAAa/J,EAAW3jB,CAAAA,CAAAA,CAAAA,EAEhG,IAAIpE,KAAKsP,YAAYolB,CAAAA,CAC9B,CAEA1E,uBAAuBjI,EAAWhS,EAAAA,CAChC,GAAA,CAAI2e,UAAEA,CAAAA,EAAc10B,KAUpB,OATAA,KAAKi3B,iBAAiBlhB,EAAO,SAASiP,EAAOkS,EAAW1kB,EAAAA,CAClDwB,GAAe+T,CAAAA,EACjB2M,EAAYA,EAAU/H,kBAAkBna,EAAO,IAAMwS,EAAMnC,gBAAgBkF,CAAAA,CAAAA,EAClEmP,EAAU,KAAOA,EAAU,KACpCxC,EAAYA,EAAU/H,kBAAkBna,EAAO,IAC7CwS,EAAM0M,aAAa1M,EAAMxlB,KAAKwwB,uBAAuBjI,EAAWmP,CAAAA,CAAAA,CAAAA,EAGtE,CAAA,EACO,IAAIl3B,KAAKsP,YAAYolB,CAAAA,CAC9B,CAEAxD,8BAA8BtyB,EAAY+N,EAAAA,CACxC,IAAMoJ,EAAQ/V,KAAKgxB,qBAAqBrkB,CAAAA,EAAAA,CAChC6oB,CAAAA,EAAkBllB,MAAMC,KAAKwF,CAAAA,EAAAA,CAC/BvD,MAAEA,CAAAA,EAAUxS,KAAKo1B,qBAAqBI,CAAAA,EACtCh2B,EAAOQ,KAAKo3B,eAAe5kB,CAAAA,EAEjC,OAAO,IAAIxS,KAAKsP,YACdtP,KAAK00B,UAAU/H,kBAAkBna,EAAQwS,GACvCA,EAAM0M,aAAalyB,EAAK0xB,8BAA8BtyB,EAAY+N,CAAAA,CAAAA,CAAAA,CAAAA,CAGxE,CAEA0qB,6BAA6BtP,EAAWpb,EAAAA,CACtC,IAAMoJ,EAAQ/V,KAAKgxB,qBAAqBrkB,CAAAA,EACxC,OAAO3M,KAAKgwB,uBAAuBjI,EAAWhS,CAAAA,CAChD,CAEAuhB,2BAA2B7K,EAAUhuB,EAAM2F,EAAAA,CACzC,IAAM4gB,EAAQhlB,KAAKq1B,mBAAmB5I,CAAAA,EAChC8K,EAAevS,EAAMgN,iBAAiBvzB,EAAM2F,CAAAA,EAClD,OAAOpE,KAAKg1B,aAAahQ,EAAOuS,CAAAA,CAClC,CAEAC,wBAAwBzhB,EAAAA,CACtB,IAAI0e,EACJ1e,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,CAAAA,EAAkBzf,EAAAA,CACpBrG,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqBI,CAAAA,EAEvClxB,EAAWtE,KAAK0vB,kBAAkB3Z,CAAAA,EAIxC,OAHIrG,IAAW,IACb+kB,EAAS,CAAE,IAAIlD,EAAAA,GAEV,IAAIvxB,KAAKsP,YACdhL,EAASowB,UAAUlI,+BAA+B,IAAIN,GAAeuI,CAAAA,EAASe,CAAAA,CAAAA,CAElF,CAEAiC,2BAA2BxjB,EAAe7P,EAAO2R,EAAAA,CAC/C,IAAM2hB,EAAW13B,KAAK23B,sCAAsC5hB,CAAAA,EACxDzR,EAAWozB,EAASpzB,SACxByR,EAAQ2hB,EAAS3hB,MACjB,IAAM6hB,EAAc5jB,GAAeC,CAAAA,EAEnC,GAAI2jB,EAAYh4B,cAAe,CAC7B0E,EAAWA,EAASuzB,+BAA+B9hB,EAAO,CAAE+hB,oBAAqB7jB,CAAAA,CAAAA,EACjF,IAAM8jB,EAAYzzB,EAAS0zB,sCAAsCjiB,CAAAA,EACjEzR,EAAWyzB,EAAUzzB,SACrByR,EAAQgiB,EAAUhiB,KACpB,MACEzR,EADSszB,EAAYx3B,UACVkE,EAAS2zB,6BAA6BliB,CAAAA,EACxC6hB,EAAYz4B,SACVmF,EAAS4zB,mCAAmCniB,CAAAA,EAE5CzR,EAAS6zB,yBAAyBpiB,CAAAA,EAG/C,OAAOzR,EAASwrB,oBAAoB7b,EAAe7P,EAAO2R,CAAAA,CAC5D,CAEA8hB,+BAA+B9hB,EAAAA,CAAqB,IAAd5N,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAA,CAC1CyvB,UAAEA,CAAAA,EAAc10B,KAcpB,OAbAA,KAAKi3B,iBAAiBlhB,EAAO,SAASiP,EAAOkS,EAAW1kB,EAAAA,CACtD,IAAM4lB,EAAoBpT,EAAMG,iBAAAA,EAC3BiT,GAGApkB,GAAeokB,CAAAA,EAAmBx4B,eAGnCw4B,IAAsBjwB,EAAQ2vB,sBAGlCpD,EAAYA,EAAU/H,kBAAkBna,EAAO,IAAMwS,EAAMnC,gBAAgBuV,CAAAA,CAAAA,EAC7E,CAAA,EACO,IAAIp4B,KAAKsP,YAAYolB,CAAAA,CAC9B,CAEAwD,mCAAmCniB,EAAAA,CACjC,GAAA,CAAI2e,UAAEA,CAAAA,EAAc10B,KAWpB,OAVAA,KAAKi3B,iBAAiBlhB,EAAO,SAASiP,EAAOkS,EAAW1kB,EAAAA,CACtD,IAAM4lB,EAAoBpT,EAAMG,iBAAAA,EAC3BiT,GAGApkB,GAAeokB,CAAAA,EAAmBj5B,WAGvCu1B,EAAYA,EAAU/H,kBAAkBna,EAAO,IAAMwS,EAAMnC,gBAAgBuV,CAAAA,CAAAA,EAC7E,CAAA,EACO,IAAIp4B,KAAKsP,YAAYolB,CAAAA,CAC9B,CAEAuD,6BAA6BliB,EAAAA,CAC3B,GAAA,CAAI2e,UAAEA,CAAAA,EAAc10B,KAMpB,OALAA,KAAKi3B,iBAAiBlhB,EAAO,SAASiP,EAAOkS,EAAW1kB,EAAAA,CAClDwS,EAAMuN,cAAAA,IACRmC,EAAYA,EAAU/H,kBAAkBna,EAAO,IAAMwS,EAAM4M,sBAAAA,CAAAA,EAE/D,CAAA,EACO,IAAI5xB,KAAKsP,YAAYolB,CAAAA,CAC9B,CAEAiD,sCAAsC5hB,EAAAA,CACpC,IAAI0W,EACJ1W,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAMyf,EAAezG,CAAAA,EAAgBhZ,EAC/B0f,EAAgBz1B,KAAKo1B,qBAAqBI,CAAAA,EAC1C6C,EAAcr4B,KAAKo1B,qBAAqBrG,CAAAA,EAC1CzqB,EAAWtE,KAETs4B,EAAah0B,EAASqwB,gBAAgBc,EAAcjjB,KAAAA,EAW1D,GAVAijB,EAAc/lB,OAAS4oB,EAAWlF,qCAAqC,WAAYqC,EAAc/lB,MAAAA,EAC7F+lB,EAAc/lB,QAAU,OAC1B+c,EAAWnoB,EAASi0B,qBAAqB9C,CAAAA,EACzCnxB,EAAWA,EAASkzB,wBAAwB,CAAE/K,EAAUA,EAAW,CAAA,CAAA,EACnE4L,EAAY7lB,OAAS,EACrB6lB,EAAY3oB,QAAUpL,EAASqwB,gBAAgBc,EAAcjjB,KAAAA,EAAO6V,UAAAA,EACpEoN,EAAcjjB,OAAS,GAEzBijB,EAAc/lB,OAAS,EAEnB2oB,EAAY3oB,SAAW,GAAK2oB,EAAY7lB,MAAQijB,EAAcjjB,MAChE6lB,EAAY7lB,OAAS,EACrB6lB,EAAY3oB,OAASpL,EAASqwB,gBAAgB0D,EAAY7lB,KAAAA,EAAOgT,sBAAAA,MAC5D,CACL,IAAMgT,EAAWl0B,EAASqwB,gBAAgB0D,EAAY7lB,KAAAA,EAClDgmB,EAASh5B,KAAK+wB,iBAAiB,CAAE8H,EAAY3oB,OAAS,EAAG2oB,EAAY3oB,MAAAA,CAAAA,IAAc;EACrF2oB,EAAY3oB,QAAU,EAEtB2oB,EAAY3oB,OAAS8oB,EAASpF,qCAAqC,UAAWiF,EAAY3oB,MAAAA,EAExF2oB,EAAY3oB,SAAW8oB,EAAShT,sBAAAA,IAClCiH,EAAWnoB,EAASi0B,qBAAqBF,CAAAA,EACzC/zB,EAAWA,EAASkzB,wBAAwB,CAAE/K,EAAUA,EAAW,CAAA,CAAA,EAEvE,CAMA,OAJA+I,EAAgBlxB,EAASi0B,qBAAqB9C,CAAAA,EAC9C1G,EAAczqB,EAASi0B,qBAAqBF,CAAAA,EAGrC,CAAE/zB,SAAAA,EAAUyR,MAFnBA,EAAQD,EAAe,CAAE0f,EAAezG,CAAAA,CAAAA,CAAAA,CAG1C,CAEAiJ,sCAAsCjiB,EAAAA,CACpCA,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAM0W,CAAAA,EAAa1W,EACbhF,EAAS/Q,KAAKuwB,iBAAiBxa,CAAAA,EAAOpG,MAAM,EAAA,EAAI,EAClDrL,EAAWtE,KAOf,OALA+Q,EAAOjN,QAAQ,SAAU,SAASpD,EAAAA,CAChC+rB,GAAY/rB,EAAMwE,OAClBZ,EAAWA,EAASkzB,wBAAwB,CAAE/K,EAAW,EAAGA,CAAAA,CAAAA,CAC9D,CAAA,EAEO,CAAEnoB,SAAAA,EAAUyR,MAAAA,CAAAA,CACrB,CAEAoiB,yBAAyBpiB,EAAAA,CACvBA,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,EAAezG,CAAAA,EAAgBhZ,EACjCuY,EAAatuB,KAAKo1B,qBAAqBI,CAAAA,EAAehjB,MACtD+b,EAAWvuB,KAAKo1B,qBAAqBrG,CAAAA,EAAavc,MACxD,OAAO,IAAIxS,KAAKsP,YAAYtP,KAAK00B,UAAUrG,4BAA4BC,EAAYC,CAAAA,CAAAA,CACrF,CAEAwI,mBAAmBhhB,EAAAA,CACjBA,EAAQD,EAAeC,CAAAA,EACvB,IAAM0e,EAASz0B,KAAK00B,UAAU3H,yBAAyBhX,CAAAA,EAAOqE,QAAAA,EAC9D,OAAO,IAAIpa,KAAKsP,YAAYmlB,CAAAA,CAC9B,CAEAlE,iBAAiBxa,EAAAA,CACf,IAAIwY,EACEjd,EAAQyE,EAAQD,EAAeC,CAAAA,EAKrC,OAJgBzE,EAAMA,EAAMpM,OAAS,KACjBlF,KAAKqoB,UAAAA,IACvBkG,EAAAA,IAEKvuB,KAAK+2B,mBAAmBhhB,CAAAA,EAAO9G,SAAAA,EAAWU,MAAM,EAAG4e,CAAAA,CAC5D,CAEAoG,gBAAgBniB,EAAAA,CACd,OAAOxS,KAAK00B,UAAU5H,iBAAiBta,CAAAA,CACzC,CAEA6iB,mBAAmB5I,EAAAA,CACjB,GAAA,CAAMja,MAAEA,CAAAA,EAAUxS,KAAKo1B,qBAAqB3I,CAAAA,EAC5C,OAAOzsB,KAAK20B,gBAAgBniB,CAAAA,CAC9B,CAEA4kB,eAAe5kB,EAAAA,CAAO,IAAAimB,EACpB,OAAAA,EAAOz4B,KAAK20B,gBAAgBniB,CAAAA,KAAMimB,MAAAA,IAANjmB,OAAMimB,OAA3BA,EAA6Bj5B,IACtC,CAEAk5B,kBAAkBjM,EAAAA,CAChB,GAAA,CAAMja,MAAEA,CAAAA,EAAUxS,KAAKo1B,qBAAqB3I,CAAAA,EAC5C,OAAOzsB,KAAKo3B,eAAe5kB,CAAAA,CAC7B,CAEA6e,mBAAmB5E,EAAAA,CACjB,GAAA,CAAMja,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqB3I,CAAAA,EACpD,OAAOzsB,KAAKo3B,eAAe5kB,CAAAA,EAAO6e,mBAAmB3hB,CAAAA,CACvD,CAEAipB,uBAAuBlM,EAAAA,CACrB,GAAA,CAAMja,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqB3I,CAAAA,EACpD,OAAOzsB,KAAKo3B,eAAe5kB,CAAAA,EAAO+d,iBAAiB,CAAE7gB,EAAQA,EAAS,CAAA,CAAA,CACxE,CAEA2Y,WAAAA,CACE,OAAOroB,KAAK00B,UAAU5F,eAAAA,CACxB,CAEA7I,WAAAA,CACE,OAAOjmB,KAAK00B,UAAUta,QAAAA,CACxB,CAEA2b,eAAAA,CACE,OAAO/1B,KAAK00B,UAAUxvB,MACxB,CAEA0zB,cAAAA,CACE,OAAO54B,KAAK64B,SACd,CAEA1B,UAAUxsB,EAAAA,CACR,OAAO3K,KAAK00B,UAAUtI,WAAWzhB,CAAAA,CACnC,CAEAssB,iBAAiBlhB,EAAOpL,EAAAA,CACtB,IAAIqa,EAAOkS,EACXnhB,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,EAAezG,CAAAA,EAAgBhZ,EACjC0f,EAAgBz1B,KAAKo1B,qBAAqBI,CAAAA,EAC1C6C,EAAcr4B,KAAKo1B,qBAAqBrG,CAAAA,EAE9C,GAAI0G,EAAcjjB,QAAU6lB,EAAY7lB,MAGtC,OAFAwS,EAAQhlB,KAAK20B,gBAAgBc,EAAcjjB,KAAAA,EAC3C0kB,EAAY,CAAEzB,EAAc/lB,OAAQ2oB,EAAY3oB,MAAAA,EACzC/E,EAASqa,EAAOkS,EAAWzB,EAAcjjB,KAAAA,EAEhD,QAASA,EAAQijB,EAAcjjB,MAAOA,GAAS6lB,EAAY7lB,MAAOA,IAEhE,GADAwS,EAAQhlB,KAAK20B,gBAAgBniB,CAAAA,EACzBwS,EAAO,CACT,OAAQxS,QACDijB,EAAcjjB,MACjB0kB,EAAY,CAAEzB,EAAc/lB,OAAQsV,EAAMxlB,KAAK6oB,UAAAA,CAAAA,EAC/C,WACGgQ,EAAY7lB,MACf0kB,EAAY,CAAE,EAAGmB,EAAY3oB,MAAAA,EAC7B,cAEAwnB,EAAY,CAAE,EAAGlS,EAAMxlB,KAAK6oB,UAAAA,CAAAA,EAEhC1d,EAASqa,EAAOkS,EAAW1kB,CAAAA,CAC7B,CAGN,CAEA6d,2BAA2Bta,EAAAA,CACzBA,EAAQD,EAAeC,CAAAA,EACvB,GAAA,CAAQyf,CAAAA,EAAkBzf,EAC1B,GAAIG,GAAiBH,CAAAA,EACnB,OAAO/V,KAAK84B,8BAA8BtD,CAAAA,EACrC,CACL,IAAMhB,EAAiB,CAAA,EACjBlrB,EAAkB,CAAA,EASxB,OAPAtJ,KAAKi3B,iBAAiBlhB,EAAO,SAASiP,EAAOkS,EAAAA,CAC3C,GAAIA,EAAU,KAAOA,EAAU,GAE7B,OADA1C,EAAejrB,KAAKyb,EAAMxlB,KAAK6wB,2BAA2B6G,CAAAA,CAAAA,EACnD5tB,EAAgBC,KAAKwvB,GAAmB/T,CAAAA,CAAAA,CAEnD,CAAA,EAEOtL,GAAKC,8BAA8B6a,CAAAA,EACvCta,MAAMR,GAAKC,8BAA8BrQ,CAAAA,CAAAA,EACzCgR,SAAAA,CACL,CACF,CAEAwe,8BAA8BrM,EAAAA,CAC5B,IAAItoB,EAAKC,EACT,CAAMoO,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqB3I,CAAAA,EAC9CzH,EAAQhlB,KAAK20B,gBAAgBniB,CAAAA,EACnC,GAAA,CAAKwS,EACH,MAAO,CAAA,EAGT,IAAMgU,EAAmBD,GAAmB/T,CAAAA,EACtCpmB,EAAaomB,EAAMxlB,KAAK0wB,wBAAwBxgB,CAAAA,EAChDupB,EAAiBjU,EAAMxlB,KAAK0wB,wBAAwBxgB,EAAS,CAAA,EAC7DwpB,EAAwB/kB,OAAOC,KAAKF,EAAAA,EAAuBsD,OAAQrT,GAChE+P,GAAsB/P,GAAKuH,WAAAA,EAGpC,IAAKvH,KAAO80B,EACV70B,EAAQ60B,EAAe90B,IACnBC,IAAUxF,EAAWuF,IAAQ+0B,EAAsBrvB,SAAS1F,CAAAA,KAC9D60B,EAAiB70B,GAAOC,GAI5B,OAAO40B,CACT,CAEAG,oCAAoCllB,EAAewY,EAAAA,CACjD,GAAA,CAAMja,MAAEA,EAAK9C,OAAEA,CAAAA,EAAW1P,KAAKo1B,qBAAqB3I,CAAAA,EAC9CjtB,EAAOQ,KAAKo3B,eAAe5kB,CAAAA,EAAAA,CACzB4mB,EAAaC,CAAAA,EAAc/oB,MAAMC,KAAK/Q,EAAK8wB,qCAAqCrc,EAAevE,CAAAA,CAAAA,EAEjGyG,EAAQnW,KAAKu4B,qBAAqB,CAAE/lB,MAAAA,EAAO9C,OAAQ0pB,CAAAA,CAAAA,EACnDhjB,EAAMpW,KAAKu4B,qBAAqB,CAAE/lB,MAAAA,EAAO9C,OAAQ2pB,CAAAA,CAAAA,EACvD,OAAOvjB,EAAe,CAAEK,EAAOC,CAAAA,CAAAA,CACjC,CAEAuf,wBAAAA,CACE,IAAID,EAAsB11B,KAAK20B,gBAAgB,CAAA,EAAGrR,cAAAA,EAElD,QAASgW,EAAa,EAAGA,EAAat5B,KAAK+1B,cAAAA,EAAiBuD,IAAc,CACxE,IAAMhwB,EAAkBtJ,KAAK20B,gBAAgB2E,CAAAA,EAAYhW,cAAAA,EACnDiW,EAAqB/1B,KAAKg2B,IAAI9D,EAAoBxwB,OAAQoE,EAAgBpE,MAAAA,EAEhFwwB,GAAsB,IAAA,CACpB,IAAMnkB,EAAS,CAAA,EACf,QAASiB,EAAQ,EAAGA,EAAQ+mB,GACtBjwB,EAAgBkJ,KAAWkjB,EAAoBljB,GADLA,IAI9CjB,EAAOhI,KAAKD,EAAgBkJ,EAAAA,EAE9B,OAAOjB,CACR,GATqB,CAUxB,CAEA,OAAOmkB,CACT,CAEA3E,kBAAkBD,EAAAA,CAChB,QAAWnkB,KAAc3M,KAAK4wB,eAAAA,EAC5B,GAAIjkB,EAAW5B,KAAO+lB,EACpB,OAAOnkB,CAGb,CAEAgkB,qBAAAA,CACE,IAAI8I,EAAmB,CAAA,EAEvB,OADAz5B,KAAK00B,UAAUtI,WAAW1G,GAAAA,CAAA,GAAA,CAAClmB,KAAEA,CAAAA,EAAMkmB,EAAA,OAAK+T,EAAmBA,EAAiBp2B,OAAO7D,EAAKmxB,oBAAAA,CAAAA,CAAsB,CAAA,EACvG8I,CACT,CAEA7I,gBAAAA,CACE,OAAO5wB,KAAK2wB,oBAAAA,EAAsB3f,IAAK0O,GAAUA,EAAM/S,UAAAA,CACzD,CAEAqkB,qBAAqBrkB,EAAAA,CACnB,IAAI8f,EAAW,EACT1I,EAAW/jB,KAAK00B,UAAUta,QAAAA,EAChC,QAAS5H,EAAQ,EAAGA,EAAQuR,EAAS7e,OAAQsN,IAAS,CACpD,GAAA,CAAMhT,KAAEA,CAAAA,EAASukB,EAASvR,GACpB0kB,EAAY13B,EAAKwxB,qBAAqBrkB,CAAAA,EAC5C,GAAIuqB,EACF,OAAOphB,EAAe,CAAE2W,EAAWyK,EAAU,GAAIzK,EAAWyK,EAAU,EAAA,CAAA,EAExEzK,GAAYjtB,EAAK6oB,UAAAA,CACnB,CACF,CAEAqR,6BAA6B/sB,EAAAA,CAC3B,IAAMoJ,EAAQ/V,KAAKgxB,qBAAqBrkB,CAAAA,EACxC,OAAO3M,KAAKu2B,uBAAuBxgB,CAAAA,CACrC,CAEA4jB,gCAAgChtB,EAAAA,CAC9B,QAAW+S,KAAS1f,KAAK2wB,oBAAAA,EACvB,GAAIjR,EAAM/S,aAAeA,EACvB,OAAO+S,CAGb,CAEAka,4BAA4B3lB,EAAAA,CAC1B,IAAIwY,EAAW,EACToN,EAAS,CAAA,EAUf,OARA75B,KAAKimB,UAAAA,EAAYpd,QAASmc,GAAAA,CACxB,IAAM9f,EAAS8f,EAAMqD,UAAAA,EACjBrD,EAAMF,aAAa7Q,CAAAA,GACrB4lB,EAAOtwB,KAAK,CAAEkjB,EAAUA,EAAWvnB,CAAAA,CAAAA,EAErCunB,GAAYvnB,CAAM,CAAA,EAGb20B,CACT,CAEAC,2BAA2B7lB,EAAAA,CAAmC,GAAA,CAApB8lB,UAAEA,CAAAA,EAAW90B,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACpDwnB,EAAW,EACX1W,EAAQ,CAAA,EACN8jB,EAAS,CAAA,EAsBf,OAZA75B,KAAK0kB,UAAAA,EAAY7b,QAAS6W,GAAAA,CACxB,IAAMxa,EAASwa,EAAM2I,UAAAA,GATT,SAAS3I,EAAAA,CACrB,OAAIqa,EACKra,EAAMzT,aAAagI,CAAAA,IAAmB8lB,EAEtCra,EAAMoF,aAAa7Q,CAAAA,CAAAA,GAMlByL,CAAAA,IACJ3J,EAAM,KAAO0W,EACf1W,EAAM,GAAK0W,EAAWvnB,EAEtB20B,EAAOtwB,KAAKwM,EAAQ,CAAE0W,EAAUA,EAAWvnB,CAAAA,CAAAA,GAG/CunB,GAAYvnB,CAAM,CAAA,EAGb20B,CACT,CAEAzE,qBAAqB3I,EAAAA,CACnB,IAAMuN,EAAWh6B,KAAK00B,UAAU9G,6BAA6BpqB,KAAKoM,IAAI,EAAG6c,CAAAA,CAAAA,EACzE,GAAIuN,EAASxnB,OAAS,KACpB,OAAOwnB,EACF,CACL,IAAMvF,EAASz0B,KAAKimB,UAAAA,EACpB,MAAO,CAAEzT,MAAOiiB,EAAOvvB,OAAS,EAAGwK,OAAQ+kB,EAAOA,EAAOvvB,OAAS,GAAGmjB,UAAAA,CAAAA,CACvE,CACF,CAEAkQ,qBAAqByB,EAAAA,CACnB,OAAOh6B,KAAK00B,UAAU9F,6BAA6BoL,EAASxnB,MAAOwnB,EAAStqB,MAAAA,CAC9E,CAEAuqB,0BAA0BxN,EAAAA,CACxB,OAAO3W,EAAe9V,KAAKo1B,qBAAqB3I,CAAAA,CAAAA,CAClD,CAEA8J,uBAAuBxgB,EAAAA,CAErB,GAAA,EADAA,EAAQD,EAAeC,CAAAA,GACX,OAEZ,GAAA,CAAQyf,EAAezG,CAAAA,EAAgBze,MAAMC,KAAKwF,CAAAA,EAC5C0f,EAAgBz1B,KAAKo1B,qBAAqBI,CAAAA,EAC1C6C,EAAcr4B,KAAKo1B,qBAAqBrG,CAAAA,EAC9C,OAAOjZ,EAAe,CAAE2f,EAAe4C,CAAAA,CAAAA,CACzC,CAEA6B,uBAAuBC,EAAAA,CACrB,IAAI/D,EACJ+D,EAAgBrkB,EAAeqkB,CAAAA,EAC/B,IAAMhE,EAAen2B,KAAKu4B,qBAAqB4B,EAAc,EAAA,EAI7D,OAHKjkB,GAAiBikB,CAAAA,IACpB/D,EAAgBp2B,KAAKu4B,qBAAqB4B,EAAc,EAAA,GAEnDrkB,EAAe,CAAEqgB,EAAcC,CAAAA,CAAAA,CACxC,CAEAnmB,UAAU3L,EAAAA,CACR,OAAOtE,KAAK00B,UAAUzkB,UAAU3L,GAAUowB,SAAAA,CAC5C,CAEA0F,UAAAA,CACE,OAAOp6B,KAAKimB,UAAAA,EAAYjV,IAAKgU,GAAUA,EAAMxlB,IAAAA,CAC/C,CAEAklB,WAAAA,CACE,IAAMD,EAAS,CAAA,EAMf,OAJAnU,MAAMC,KAAKvQ,KAAKo6B,SAAAA,CAAAA,EAAYvxB,QAASrJ,GAAAA,CACnCilB,EAAOlb,KAAAA,GAAQ+G,MAAMC,KAAK/Q,EAAKklB,UAAAA,GAAe,CAAA,CAAA,CAAA,CAAI,CAAA,EAG7CD,CACT,CAEArJ,YAAAA,CACE,OAAOpb,KAAKimB,UAAAA,EAAY5iB,OAAOrD,KAAKo6B,SAAAA,CAAAA,EAAY/2B,OAAOrD,KAAK0kB,UAAAA,CAAAA,CAC9D,CAEA2V,wBAAAA,CACE,IAAM5F,EAAS,CAAA,EAEf,OADAz0B,KAAK00B,UAAUtI,WAAYpH,GAAUyP,EAAOlrB,KAAKyb,EAAM0M,aAAa1M,EAAMxlB,KAAK8xB,mBAAAA,CAAAA,CAAAA,CAAAA,EACxE,IAAItxB,KAAKsP,YAAYmlB,CAAAA,CAC9B,CAEAxlB,UAAAA,CACE,OAAOjP,KAAK00B,UAAUzlB,SAAAA,CACxB,CAEAiB,QAAAA,CACE,OAAOlQ,KAAK00B,UAAUxkB,OAAAA,CACxB,CAEA2b,WAAAA,CACE,OAAOha,KAAKO,UAAUpS,KAAK00B,UAAUta,QAAAA,EAAUpJ,IAAKgU,GAAUnT,KAAK9S,MAAMimB,EAAMxlB,KAAKqsB,UAAAA,CAAAA,CAAAA,CAAAA,CACtF,CAAA,EAGIkN,GAAqB,SAAS/T,EAAAA,CAClC,IAAMpmB,EAAa,CAAA,EACbqV,EAAgB+Q,EAAMG,iBAAAA,EAI5B,OAHIlR,IACFrV,EAAWqV,GAAAA,IAENrV,CACT,ECzwBM07B,GAA6B,6CAA6C1xB,MAAM,GAAA,EAChF2xB,GAA8B,cAAc3xB,MAAM,GAAA,EAClD4xB,GAA6B,8BAA8B5xB,MAAM,GAAA,EAElD6xB,GAAN,cAA4B9sB,EAAAA,CACzC,OAAA,SAAgBtJ,EAAM8D,EAAAA,CACpB,IAAMuyB,EAAY,IAAI16B,KAAKqE,EAAM8D,CAAAA,EAEjC,OADAuyB,EAAUC,SAAAA,EACHD,CACT,CAEAprB,YAAYjL,EAAAA,CAAyE,GAAA,CAAnEu2B,kBAAEA,EAAiBC,mBAAEA,EAAkBC,kBAAEA,CAAAA,EAAmB71B,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAC/EsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAK46B,kBAAoBA,GAAqBN,GAC9Ct6B,KAAK66B,mBAAqBA,GAAsBN,GAChDv6B,KAAK86B,kBAAoBA,GAAqBN,GAC9Cx6B,KAAKmL,KAAO4vB,GAAyB12B,CAAAA,CACvC,CAEAs2B,UAAAA,CAEE,OADA36B,KAAKg7B,iBAAAA,EACEh7B,KAAKi7B,4BAAAA,CACd,CAEAC,SAAAA,CACE,OAAOl7B,KAAKmL,KAAK+U,SACnB,CAEAib,SAAAA,CACE,OAAOn7B,KAAKmL,IACd,CAIA6vB,kBAAAA,CACE,IAAMI,EAAS/zB,GAASrH,KAAKmL,IAAAA,EACvBkwB,EAAgB,CAAA,EAEtB,KAAOD,EAAOE,SAAAA,GAAY,CACxB,IAAMh1B,EAAO80B,EAAOG,YACpB,OAAQj1B,EAAKD,eACNG,KAAKC,aACJzG,KAAKw7B,mBAAmBl1B,CAAAA,EAC1B+0B,EAAc9xB,KAAKjD,CAAAA,EAEnBtG,KAAKy7B,gBAAgBn1B,CAAAA,EAEvB,WACGE,KAAKuD,aACRsxB,EAAc9xB,KAAKjD,CAAAA,EAGzB,CAIA,OAFA+0B,EAAcxyB,QAASvC,GAASY,GAAWZ,CAAAA,CAAAA,EAEpCtG,KAAKmL,IACd,CAEAswB,gBAAgB37B,EAAAA,CAad,OAZIA,EAAQglB,aAAa,MAAA,GACnB9kB,KAAK66B,mBAAmBhxB,SAAS/J,EAAQ47B,QAAAA,GAC3C57B,EAAQ+iB,gBAAgB,MAAA,EAI5BvS,MAAMC,KAAKzQ,EAAQlB,UAAAA,EAAYiK,QAAQ6c,GAAAA,CAAc,GAAA,CAAbjnB,KAAEA,CAAAA,EAAMinB,EACzC1lB,KAAK46B,kBAAkB/wB,SAASpL,CAAAA,GAASA,EAAK0tB,QAAQ,WAAA,IAAiB,GAC1ErsB,EAAQ+iB,gBAAgBpkB,CAAAA,CAC1B,CAAA,EAGKqB,CACT,CAEAm7B,6BAAAA,CAUE,OATA3qB,MAAMC,KAAKvQ,KAAKmL,KAAKyb,iBAAiB,OAAA,CAAA,EAAU/d,QAAS8yB,GAAAA,CACvD,IAAMC,EAAkBD,EAAYE,uBAChCD,GACE98B,GAAQ88B,CAAAA,IAAqB,MAC/BA,EAAgBzyB,YAAYwyB,CAAAA,CAEhC,CAAA,EAGK37B,KAAKmL,IACd,CAEAqwB,mBAAmB17B,EAAAA,CACjB,GAAIA,GAASuG,WAAaG,KAAKC,aAC/B,OAAOzG,KAAK87B,mBAAmBh8B,CAAAA,GAAYE,KAAK+7B,wBAAwBj8B,CAAAA,CAC1E,CAEAg8B,mBAAmBh8B,EAAAA,CACjB,OAAOE,KAAK86B,kBAAkBjxB,SAAS/K,GAAQgB,CAAAA,CAAAA,CACjD,CAEAi8B,wBAAwBj8B,EAAAA,CACtB,OAAOA,EAAQmM,aAAa,qBAAA,IAA2B,SAA3B,CAAuC9B,GAAwBrK,CAAAA,CAC7F,CAAA,EAGIi7B,GAA2B,UAAA,CAAoB,IAAX12B,EAAIY,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,GAE/CZ,EAAOA,EAAKP,QAAQ,sBAAuB,SAAA,EAC3C,IAAMk4B,EAAM13B,SAAS23B,eAAeC,mBAAmB,EAAA,EAOvD,OANAF,EAAIz3B,gBAAgB2b,UAAY7b,EAEhCiM,MAAMC,KAAKyrB,EAAIrnB,KAAKiS,iBAAiB,OAAA,CAAA,EAAU/d,QAAS/I,GAAAA,CACtDk8B,EAAI7wB,KAAKhC,YAAYrJ,CAAAA,CAAQ,CAAA,EAGxBk8B,EAAI7wB,IACb,EC7FMgxB,GAAiB,SAACprB,EAAAA,CAA4B,IAApBnS,EAAUqG,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAG3C,MAAO,CAAE8L,OADTA,EAAS+H,GAAgB/H,CAAAA,EACRnS,WAAAA,EAAYgM,KAFhB,QAAA,CAGf,EAYMwxB,GAAyBA,CAACt8B,EAASrB,IAAAA,CACvC,GAAA,CACE,IAAMgK,EAAOoJ,KAAK9S,MAAMe,EAAQmM,aAAAA,aAAY5I,OAAc5E,CAAAA,CAAAA,CAAAA,EAM1D,OAJIgK,EAAK0gB,cAAgB,aAAe1gB,EAAK4zB,UAC3C5zB,EAAK4zB,QAAU5B,GAAcE,SAASlyB,EAAK4zB,OAAAA,EAASnB,QAAAA,GAG/CzyB,CACR,MAAC,CACA,MAAO,CAAA,CACT,CAAA,EAgBmB6zB,GAAN,cAAyB3uB,EAAAA,CACtC,OAAA,MAAatJ,EAAM8D,EAAAA,CACjB,IAAMkD,EAAS,IAAIrL,KAAKqE,EAAM8D,CAAAA,EAE9B,OADAkD,EAAOtM,MAAAA,EACAsM,CACT,CAEAiE,YAAYjL,EAAAA,CAAiC,GAAA,CAA3Bk4B,iBAAEA,CAAAA,EAAkBt3B,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACvCsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAKqE,KAAOA,EACZrE,KAAKu8B,iBAAmBA,EACxBv8B,KAAKy0B,OAAS,CAAA,EACdz0B,KAAKw8B,cAAgB,CAAA,EACrBx8B,KAAKy8B,kBAAoB,CAAA,CAC3B,CAEAC,aAAAA,CACE,OAAOpI,GAAS1iB,SAAS5R,KAAKy0B,MAAAA,CAChC,CAIA11B,OAAAA,CACE,GAAA,CACEiB,KAAK28B,sBAAAA,EACL,IAAMt4B,EAAOo2B,GAAcE,SAAS36B,KAAKqE,IAAAA,EAAM62B,QAAAA,EAC/Cl7B,KAAK48B,iBAAiB1c,UAAY7b,EAClC,IAAM+2B,EAAS/zB,GAASrH,KAAK48B,iBAAkB,CAAEp1B,YAAaq1B,EAAAA,CAAAA,EAC9D,KAAOzB,EAAOE,SAAAA,GACZt7B,KAAK88B,YAAY1B,EAAOG,WAAAA,EAE1B,OAAOv7B,KAAK+8B,uCAAAA,CACd,QAAU,CACR/8B,KAAKg9B,sBAAAA,CACP,CACF,CAEAL,uBAAAA,CACE,OAAI38B,KAAKu8B,kBACPv8B,KAAK48B,iBAAmB58B,KAAKu8B,iBAAiBlf,UAAAA,EAAU,EACxDrd,KAAK48B,iBAAiB/Z,gBAAgB,IAAA,EACtC7iB,KAAK48B,iBAAiBr0B,aAAa,qBAAsB,EAAA,EACzDvI,KAAK48B,iBAAiBp0B,MAAMy0B,QAAU,OAC/Bj9B,KAAKu8B,iBAAiBx8B,WAAW6U,aAAa5U,KAAK48B,iBAAkB58B,KAAKu8B,iBAAiBW,WAAAA,IAElGl9B,KAAK48B,iBAAmB30B,EAAY,CAAEnJ,QAAS,MAAO0J,MAAO,CAAEy0B,QAAS,MAAA,CAAA,CAAA,EACjE34B,SAAS6G,KAAKhC,YAAYnJ,KAAK48B,gBAAAA,EAE1C,CAEAI,uBAAAA,CACE,OAAO91B,GAAWlH,KAAK48B,gBAAAA,CACzB,CAEAE,YAAYx2B,EAAAA,CACV,OAAQA,EAAKD,eACNG,KAAK6D,UACR,GAAA,CAAKrK,KAAKm9B,wBAAwB72B,CAAAA,EAEhC,OADAtG,KAAKo9B,uBAAuB92B,CAAAA,EACrBtG,KAAKq9B,gBAAgB/2B,CAAAA,EAE9B,WACGE,KAAKC,aAER,OADAzG,KAAKs9B,sBAAsBh3B,CAAAA,EACpBtG,KAAKu9B,eAAej3B,CAAAA,EAEjC,CAEA82B,uBAAuB92B,EAAAA,CACrB,IAAMxG,EAAUwG,EAAKvG,WACrB,GAAID,IAAYE,KAAKw9B,qBAAuBx9B,KAAKy9B,eAAen3B,EAAKW,eAAAA,EACnE,OAAOjH,KAAK09B,2BAA2B;CAAA,EAClC,GAAI59B,IAAYE,KAAK48B,kBAAoB58B,KAAKy9B,eAAe39B,CAAAA,EAAU,CAAA,IAAA69B,EAC5E,IAAM/+B,EAAaoB,KAAK49B,mBAAmB99B,CAAAA,EACrCP,EAAiBS,KAAK69B,uBAAuB/9B,CAAAA,EAC9CwS,GAAe1T,GAAU++B,EAAE39B,KAAK89B,gBAAjBl/B,MAA6B++B,IAAZG,OAAYH,OAAjBA,EAAmB/+B,UAAAA,IACjDoB,KAAK89B,aAAe99B,KAAK+9B,oCAAoCn/B,EAAYkB,EAASP,CAAAA,EAClFS,KAAKw9B,oBAAsB19B,EAE/B,CACF,CAEAw9B,sBAAsBx9B,EAAAA,CACpB,IAAMk+B,EAAwBh+B,KAAKy9B,eAAe39B,CAAAA,EAC5Cm+B,EAA8Bp3B,GAAoB7G,KAAKw9B,oBAAqB19B,CAAAA,EAElF,GAAIk+B,GAAAA,CAA0Bh+B,KAAKy9B,eAAe39B,EAAQ4J,UAAAA,GACxD,GAAA,CAAK1J,KAAKm9B,wBAAwBr9B,EAAQ4J,UAAAA,GAAAA,CAAgB1J,KAAKy9B,eAAe39B,EAAQ8jB,iBAAAA,EAAoB,CACxG,IAAMhlB,EAAaoB,KAAK49B,mBAAmB99B,CAAAA,EACrCP,EAAiBS,KAAK69B,uBAAuB/9B,CAAAA,EACnD,GAAIA,EAAQ4J,WAAY,CACtB,GAAMu0B,GAA+B3rB,GAAe1T,EAAYoB,KAAK89B,aAAal/B,UAAAA,EAIhF,OAAOoB,KAAK09B,2BAA2B;CAAA,EAHvC19B,KAAK89B,aAAe99B,KAAK+9B,oCAAoCn/B,EAAYkB,EAASP,CAAAA,EAClFS,KAAKw9B,oBAAsB19B,CAI/B,CACF,UACSE,KAAKw9B,qBAAAA,CAAwBS,GAAAA,CAAgCD,EAAuB,CAC7F,IAAME,EAAqBl+B,KAAKm+B,uBAAuBr+B,CAAAA,EACvD,GAAIo+B,EACF,OAAOl+B,KAAKs9B,sBAAsBY,CAAAA,EAElCl+B,KAAK89B,aAAe99B,KAAKo+B,iBAAAA,EACzBp+B,KAAKw9B,oBAAsB,IAE/B,CACF,CAEAW,uBAAuBr+B,EAAAA,CACrB,GAAA,CAAIu+B,cAAEA,CAAAA,EAAkBv+B,EACxB,KAAOu+B,GAAiBA,IAAkBr+B,KAAK48B,kBAAkB,CAC/D,GAAI58B,KAAKy9B,eAAeY,CAAAA,GAAkBr+B,KAAKw8B,cAAc3yB,SAASw0B,CAAAA,EACpE,OAAOA,EAEPA,EAAgBA,EAAcA,aAElC,CACA,OAAO,IACT,CAEAhB,gBAAgB/2B,EAAAA,CACd,IAAIyK,EAASzK,EAAKmC,KACuC,IAAA61B,EAApDC,OAAAA,GAAkCj4B,EAAKvG,UAAAA,IAC1CgR,EAASiI,GAA0BjI,CAAAA,EAC/BytB,IAAwBF,EAACh4B,EAAKW,mBAAeq3B,MAAAA,IAAfr3B,OAAeq3B,OAApBA,EAAsBt1B,WAAAA,IACjD+H,EAAS0tB,GAA4B1tB,CAAAA,IAGlC/Q,KAAK09B,2BAA2B3sB,EAAQ/Q,KAAK0+B,kBAAkBp4B,EAAKvG,UAAAA,CAAAA,CAC7E,CAEAw9B,eAAez9B,EAAAA,CACb,IAAIlB,EACJ,GAAIuL,GAAwBrK,CAAAA,EAAU,CAEpC,GADAlB,EAAaw9B,GAAuBt8B,EAAS,YAAA,EACzCqU,OAAOC,KAAKxV,CAAAA,EAAYsG,OAAQ,CAClC,IAAMsvB,EAAiBx0B,KAAK0+B,kBAAkB5+B,CAAAA,EAC9CE,KAAK2+B,+BAA+B//B,EAAY41B,CAAAA,EAEhD10B,EAAQogB,UAAY,EACtB,CACA,OAAOlgB,KAAKy8B,kBAAkBlzB,KAAKzJ,CAAAA,CACrC,CACE,OAAQhB,GAAQgB,CAAAA,OACT,KAIH,OAHKE,KAAK4+B,UAAU9+B,CAAAA,GAAaE,KAAKy9B,eAAe39B,EAAQo9B,WAAAA,GAC3Dl9B,KAAK09B,2BAA2B;EAAM19B,KAAK0+B,kBAAkB5+B,CAAAA,CAAAA,EAExDE,KAAKy8B,kBAAkBlzB,KAAKzJ,CAAAA,MAChC,MACHlB,EAAa,CAAE4D,IAAK1C,EAAQmM,aAAa,KAAA,EAAQkd,YAAa,OAAA,EAC9D,IAAMjb,GAtKYpO,GAAAA,CAC1B,IAAMijB,EAAQjjB,EAAQmM,aAAa,OAAA,EAC7BgX,EAASnjB,EAAQmM,aAAa,QAAA,EAC9B4yB,EAAa,CAAA,EAOnB,OANI9b,IACF8b,EAAW9b,MAAQniB,SAASmiB,EAAO,EAAA,GAEjCE,IACF4b,EAAW5b,OAASriB,SAASqiB,EAAQ,EAAA,GAEhC4b,CAAU,GA4JyB/+B,CAAAA,EAClC,QAAWqE,KAAO+J,EAAQ,CACxB,IAAM9J,EAAQ8J,EAAO/J,GACrBvF,EAAWuF,GAAOC,CACpB,CAEA,OADApE,KAAK2+B,+BAA+B//B,EAAYoB,KAAK0+B,kBAAkB5+B,CAAAA,CAAAA,EAChEE,KAAKy8B,kBAAkBlzB,KAAKzJ,CAAAA,MAChC,KACH,GAAIE,KAAK8+B,oBAAoBh/B,CAAAA,EAC3B,OAAOE,KAAK09B,2BAA2BxpB,GAAc1I,iBAAAA,EAEvD,UACG,KACH,GAAIxL,KAAK8+B,oBAAoBh/B,CAAAA,EAC3B,OAAOE,KAAK09B,2BAA2BxpB,GAAc3I,kBAAAA,EAK/D,CAIAwyB,oCAAoCn/B,EAAYkB,EAAAA,CAA8B,IAArBP,EAAc0F,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACxEjF,KAAKw8B,cAAcjzB,KAAKzJ,CAAAA,EACxB,IAAMklB,EAlNiB,UAAA,CAEzB,MAAO,CAAExlB,KADI,CAAA,EACEZ,WAFqBqG,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAEZ1F,eAF8B0F,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,CAAA,CAG9D,EA+MqCrG,EAAYW,CAAAA,EAE7C,OADAS,KAAKy0B,OAAOlrB,KAAKyb,CAAAA,EACVA,CACT,CAEAoZ,kBAAAA,CACE,OAAOp+B,KAAK+9B,oCAAoC,CAAA,EAAI,IAAA,CACtD,CAEAL,2BAA2B3sB,EAAQnS,EAAAA,CACjC,OAAOoB,KAAK++B,YAAY5C,GAAeprB,EAAQnS,CAAAA,CAAAA,CACjD,CAEA+/B,+BAA+BhyB,EAAY/N,EAAAA,CACzC,OAAOoB,KAAK++B,YArOW,SAACpyB,EAAAA,CAE1B,MAAO,CAAEA,WAAAA,EAAY/N,WAF2BqG,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAElB2F,KADpB,YAAA,CAEf,EAkO+C+B,EAAY/N,CAAAA,CAAAA,CACzD,CAEAmgC,YAAYrf,EAAAA,CAIV,OAHI1f,KAAKy0B,OAAOvvB,SAAW,GACzBlF,KAAKo+B,iBAAAA,EAEAp+B,KAAKy0B,OAAOz0B,KAAKy0B,OAAOvvB,OAAS,GAAG1F,KAAK+J,KAAKmW,CAAAA,CACvD,CAEAsf,0BAA0BjuB,EAAQyB,EAAAA,CAChC,GAAA,CAAMhT,KAAEA,CAAAA,EAASQ,KAAKy0B,OAAOjiB,GACvBkN,EAAQlgB,EAAKA,EAAK0F,OAAS,GAEjC,GAAIwa,GAAO9U,OAAS,SAGlB,OAAOpL,EAAK+J,KAAK4yB,GAAeprB,CAAAA,CAAAA,EAFhC2O,EAAM3O,QAAUA,CAIpB,CAEAkuB,2BAA2BluB,EAAQyB,EAAAA,CACjC,GAAA,CAAMhT,KAAEA,CAAAA,EAASQ,KAAKy0B,OAAOjiB,GACvBkN,EAAQlgB,EAAK,GAEnB,GAAIkgB,GAAO9U,OAAS,SAGlB,OAAOpL,EAAK0/B,QAAQ/C,GAAeprB,CAAAA,CAAAA,EAFnC2O,EAAM3O,OAASA,EAAS2O,EAAM3O,MAIlC,CAIA2tB,kBAAkB5+B,EAAAA,CAChB,IAAIsE,EACExF,EAAa,CAAA,EACnB,QAAWmpB,KAAa7T,GAAuB,CAC7C,IAAMirB,EAAajrB,GAAsB6T,GACzC,GACEoX,EAAWrgC,SACX4G,GAA2B5F,EAAS,CAClC8E,iBAAkBu6B,EAAWrgC,QAC7ByH,UAAWvG,KAAK48B,gBAAAA,CAAAA,EAGlBh+B,EAAWmpB,GAAAA,WACFoX,EAAW9zB,QAEpB,GADAjH,EAAQ+6B,EAAW9zB,OAAOvL,CAAAA,EACtBsE,EAAO,CACT,IAAIg7B,EAAAA,GACJ,QAAWC,KAAgBr/B,KAAKs/B,0BAA0Bx/B,CAAAA,EACxD,GAAIq/B,EAAW9zB,OAAOg0B,CAAAA,IAAkBj7B,EAAO,CAC7Cg7B,EAAAA,GACA,KACF,CAEGA,IACHxgC,EAAWmpB,GAAa3jB,EAE5B,OACS+6B,EAAW/a,gBACpBhgB,EAAQtE,EAAQ0I,MAAM22B,EAAW/a,eAC7BhgB,IACFxF,EAAWmpB,GAAa3jB,GAG9B,CAEA,GAAI+F,GAAwBrK,CAAAA,EAAU,CACpC,IAAMoO,EAASkuB,GAAuBt8B,EAAS,YAAA,EAC/C,QAAWqE,KAAO+J,EAChB9J,EAAQ8J,EAAO/J,GACfvF,EAAWuF,GAAOC,CAEtB,CAEA,OAAOxF,CACT,CAEAg/B,mBAAmB99B,EAAAA,CACjB,IAAMlB,EAAa,CAAA,EACnB,KAAOkB,GAAWA,IAAYE,KAAK48B,kBAAkB,CACnD,QAAW7U,KAAa7T,GAAwB,CAC9C,IAAMqrB,EAAarrB,GAAuB6T,GAEK,IAAAyX,EAD3CD,EAAWxgC,QAAf,IACMD,GAAQgB,CAAAA,IAAay/B,EAAWzgC,WAC9B0gC,EAAAD,EAAW1/B,QAAI,MAAA2/B,IAAJ3/B,QAAX2/B,EAAA75B,KAAA45B,EAAkBz/B,CAAAA,GAAAA,CAAay/B,EAAW1/B,QAC5CjB,EAAW2K,KAAKwe,CAAAA,EACZwX,EAAW3/B,eACbhB,EAAW2K,KAAKg2B,EAAW3/B,aAAAA,EAKrC,CACAE,EAAUA,EAAQC,UACpB,CACA,OAAOnB,EAAW6gC,QAAAA,CACpB,CAEA5B,uBAAuB/9B,EAAAA,CACrB,IAAMlB,EAAa,CAAA,EACbg5B,EAAczjB,OAAO6F,OAAO9F,EAAAA,EAAwBqH,KAAKmkB,GAAYA,EAAS5gC,UAAYA,GAAQgB,CAAAA,CAAAA,EASxG,OAR0B83B,GAAar4B,gBAAkB,CAAA,GAEvCsJ,QAASkf,GAAAA,CACrBjoB,EAAQglB,aAAaiD,CAAAA,IACvBnpB,EAAWmpB,GAAajoB,EAAQmM,aAAa8b,CAAAA,EAC/C,CAAA,EAGKnpB,CACT,CAEA0gC,0BAA0Bx/B,EAAAA,CACxB,IAAM6/B,EAAY,CAAA,EAClB,KAAO7/B,GAAWA,IAAYE,KAAK48B,kBAAkB,CACnD,IAAM10B,EAAMpJ,GAAQgB,CAAAA,EAChBuJ,GAAAA,EAAmBQ,SAAS3B,CAAAA,GAC9By3B,EAAUp2B,KAAKzJ,CAAAA,EAEjBA,EAAUA,EAAQC,UACpB,CACA,OAAO4/B,CACT,CAIAlC,eAAe39B,EAAAA,CACb,GAAIA,GAASuG,WAAaG,KAAKC,cAAAA,CAC3B0D,GAAwBrK,CAAAA,GAAAA,CACxB4F,GAA2B5F,EAAS,CAAE8E,iBAAkB,KAAM2B,UAAWvG,KAAK48B,gBAAAA,CAAAA,EAElF,OAAOvzB,GAAAA,EAAmBQ,SAAS/K,GAAQgB,CAAAA,CAAAA,GACzC6L,OAAOC,iBAAiB9L,CAAAA,EAASm9B,UAAY,OACjD,CAEAE,wBAAwB72B,EAAAA,CAEtB,GADIA,GAAMD,WAAaG,KAAK6D,WAC5B,CAAKu1B,GAA+Bt5B,EAAKmC,IAAAA,EAAO,OAChD,GAAA,CAAM1I,WAAEA,EAAUkH,gBAAEA,EAAei2B,YAAEA,CAAAA,EAAgB52B,EACrD,OAAIu5B,GAA0B9/B,EAAWkH,eAAAA,GAAAA,CAAqBjH,KAAKy9B,eAAe19B,EAAWkH,eAAAA,GACzFs3B,GAAkCx+B,CAAAA,EAAAA,OADtC,CAEQkH,GAAmBjH,KAAKy9B,eAAex2B,CAAAA,GAAAA,CAAqBi2B,GAAel9B,KAAKy9B,eAAeP,CAAAA,CACzG,CAEA0B,UAAU9+B,EAAAA,CACR,OAAOhB,GAAQgB,CAAAA,IAAa,MAAQE,KAAKy9B,eAAe39B,EAAQC,UAAAA,GAAeD,EAAQC,WAAWumB,YAAcxmB,CAClH,CAEAg/B,oBAAoBh/B,EAAAA,CAClB,GAAIoU,GAAc5I,sBAAuB,CAAA,IAAAw0B,EACvC,IAAMzD,GAAOyD,EAAGhgC,EAAQmH,mBAAe,MAAA64B,IAAf74B,OAAe64B,OAAvBA,EAAyB92B,YACzC,OAAOqzB,GAAW,KAAKx8B,KAAKw8B,CAAAA,CAC9B,CACE,OAAOv8B,EAAQmH,eAEnB,CAIA81B,wCAAAA,CACE,IAAMgD,EAAgB//B,KAAKggC,+BAAAA,EAE3B,QAASxtB,EAAQ,EAAGA,EAAQxS,KAAKy0B,OAAOvvB,OAAQsN,IAAS,CACvD,IAAMytB,EAASjgC,KAAKkgC,+BAA+B1tB,CAAAA,EAC/CytB,IACEA,EAAOE,IAA0B,EAApBJ,EAAcI,KAC7BngC,KAAKi/B,2BAA2B;EAAMzsB,CAAAA,EAGpCytB,EAAOG,OAAgC,EAAvBL,EAAcK,QAChCpgC,KAAKg/B,0BAA0B;EAAMxsB,CAAAA,EAG3C,CACF,CAEA0tB,+BAA+B1tB,EAAAA,CAC7B,IAAM1S,EAAUE,KAAKw8B,cAAchqB,GACnC,GAAI1S,GACEA,EAAQkJ,aAAAA,CACLK,GAAAA,EAAmBQ,SAAS/K,GAAQgB,CAAAA,CAAAA,GAAAA,CAAcE,KAAKy8B,kBAAkB5yB,SAAS/J,CAAAA,EACrF,OAAOugC,GAAsBvgC,CAAAA,CAIrC,CAEAkgC,gCAAAA,CACE,IAAMlgC,EAAUmI,EAAYiM,GAAuBrV,QAAQC,OAAAA,EAE3D,OADAkB,KAAK48B,iBAAiBzzB,YAAYrJ,CAAAA,EAC3BugC,GAAsBvgC,CAAAA,CAC/B,CAAA,EAKIy+B,GAAoC,SAASz+B,EAAAA,CACjD,GAAA,CAAMwgC,WAAEA,CAAAA,EAAe30B,OAAOC,iBAAiB9L,CAAAA,EAC/C,MAAO,CAAE,MAAO,WAAY,UAAA,EAAa+J,SAASy2B,CAAAA,CACpD,EAEMT,GAA6Bv5B,GAASA,GAAAA,CAASk4B,GAAyBl4B,EAAK0C,WAAAA,EAE7Eq3B,GAAwB,SAASvgC,EAAAA,CACrC,IAAM0I,EAAQmD,OAAOC,iBAAiB9L,CAAAA,EACtC,GAAI0I,EAAMy0B,UAAY,QACpB,MAAO,CAAEkD,IAAKv/B,SAAS4H,EAAM+3B,SAAAA,EAAYH,OAAQx/B,SAAS4H,EAAMg4B,YAAAA,CAAAA,CAEpE,EAEM3D,GAAa,SAASv2B,EAAAA,CAC1B,OAAIxH,GAAQwH,CAAAA,IAAU,QACbqB,WAAW84B,cAEX94B,WAAW+4B,aAEtB,EAIMjC,GAA+B1tB,GAAWA,EAAOjN,QAAQ,IAAI4K,OAAAA,IAAMrL,OAAK0V,GAA2BE,OAAAA,GAAAA,CAAAA,EAAY,EAAA,EAE/G2mB,GAAkC7uB,GAAW,IAAIrC,OAAAA,IAAMrL,OAAK0V,GAA2BE,OAAU,IAAA,CAAA,EAAEpZ,KAAKkR,CAAAA,EAExGytB,GAA4BztB,GAAW,MAAMlR,KAAKkR,CAAAA,EC5dlD4vB,GAA+B,CACnC,kBACA,eACA,sBACA,oBACA,wBACA,UAAA,EAEIC,GAAgC,kCAChCC,GAA4B,IAAAx9B,OAAOu9B,GAAgC,GAAA,EAEnEE,GAAsB,IAAIpyB,OAAO,eAAgB,GAAA,EAEjDqyB,GAAc,CAClB,mBAAoB,SAASC,EAAAA,CAC3B,IAAI18B,EACJ,GAAI08B,aAAwB1M,GAC1BhwB,EAAW08B,MACN,CAAA,GAAA,EAAIA,aAAwBC,aAGjC,MAAM,IAAI1yB,MAAM,uBAAA,EAFhBjK,EAAWg4B,GAAWv9B,MAAMiiC,EAAa9gB,SAAAA,EAAWwc,YAAAA,CAGtD,CAEA,OAAOp4B,EAAS+1B,uBAAAA,EAAyBloB,aAAAA,CAC1C,EAED,YAAa,SAAS6uB,EAAAA,CACpB,IAAIlhC,EACJ,GAAIkhC,aAAwB1M,GAC1Bx0B,EAAU6lB,GAAaC,OAAOob,CAAAA,MACzB,CAAA,GAAA,EAAIA,aAAwBC,aAGjC,MAAM,IAAI1yB,MAAM,uBAAA,EAFhBzO,EAAUkhC,EAAa3jB,UAAAA,EAAU,CAGnC,CA0BA,OAvBA/M,MAAMC,KAAKzQ,EAAQ8mB,iBAvCe,6BAAA,CAAA,EAuCkC/d,QAASq4B,GAAAA,CAC3Eh6B,GAAWg6B,CAAAA,CAAG,CAAA,EAIhBP,GAA6B93B,QAASkf,GAAAA,CACpCzX,MAAMC,KAAKzQ,EAAQ8mB,iBAAgBvjB,IAAAA,OAAK0kB,EAAAA,GAAAA,CAAAA,CAAAA,EAAelf,QAASq4B,GAAAA,CAC9DA,EAAGre,gBAAgBkF,CAAAA,CAAU,CAAA,CAC7B,CAAA,EAIJzX,MAAMC,KAAKzQ,EAAQ8mB,iBAAiBia,EAAAA,CAAAA,EAA+Bh4B,QAASq4B,GAAAA,CAC1E,GAAA,CACE,IAAMtiC,EAAaiT,KAAK9S,MAAMmiC,EAAGj1B,aAAa20B,EAAAA,CAAAA,EAC9CM,EAAGre,gBAAgB+d,EAAAA,EACnB,QAAWniC,KAAQG,EAAY,CAC7B,IAAMwF,EAAQxF,EAAWH,GACzByiC,EAAG34B,aAAa9J,EAAM2F,CAAAA,CACxB,CACF,MAAE,CAAe,CAAA,CAAA,EAGZtE,EAAQogB,UAAUpc,QAAQg9B,GAAqB,EAAA,CACxD,CAAA,EAAAK,GAAA,OAAA,OAAA,CAAA,UAAA,IAAA,CAAA,ECrEmBC,EAAN,cAAgCzzB,EAAAA,CAC7C2B,YAAY+xB,EAAmB10B,EAAAA,CAC7B4C,MAAAA,GAAStK,SAAAA,EACTjF,KAAKqhC,kBAAoBA,EACzBrhC,KAAK2M,WAAaA,EAClB3M,KAAK+K,GAAK/K,KAAK2M,WAAW5B,GAC1B/K,KAAKrB,KAAOqB,KAAK2M,WAAWhO,IAC9B,CAEAyD,QAAAA,CACE,OAAOpC,KAAKqhC,kBAAkBC,2BAA2BthC,KAAK2M,UAAAA,CAChE,CAAA,EAGFy0B,EAAkBtkB,YAAY,yBAAA,EAC9BskB,EAAkBtkB,YAAY,yBAAA,EAC9BskB,EAAkBtkB,YAAY,yBAAA,EAC9BskB,EAAkBtkB,YAAY,0BAAA,EAC9BskB,EAAkBtkB,YAAY,0BAAA,EAC9BskB,EAAkBtkB,YAAY,sBAAA,EAC9BskB,EAAkBtkB,YAAY,0BAAA,EAC9BskB,EAAkBtkB,YAAY,mBAAA,EAC9BskB,EAAkBtkB,YAAY,oBAAA,EAC9BskB,EAAkBtkB,YAAY,wBAAA,EAC9BskB,EAAkBtkB,YAAY,wBAAA,EAC9BskB,EAAkBtkB,YAAY,iCAAA,EAC9BskB,EAAkBtkB,YAAY,yBAAA,EAC9BskB,EAAkBtkB,YAAY,2BAAA,EAC9BskB,EAAkBtkB,YAAY,oBAAA,EAC9BskB,EAAkBtkB,YAAY,oBAAA,EAC9BskB,EAAkBtkB,YAAY,wBAAA,EAC9BskB,EAAkBtkB,YAAY,8BAAA,EAC9BskB,EAAkBtkB,YAAY,8BAAA,EChCf,IAAMykB,GAAN,cAAgC5zB,EAAAA,CAC7C2B,aAAAA,CAA8B,IAAlBjR,EAAW4G,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACxBsK,MAAAA,GAAStK,SAAAA,EACTjF,KAAKwhC,mBAAqB,CAAA,EAC1BlxB,MAAMC,KAAKlS,CAAAA,EAAawK,QAAS8D,GAAAA,CAC/B3M,KAAKyhC,iBAAiB90B,CAAAA,CAAW,CAAA,CAErC,CAEAikB,gBAAAA,CACE,IAAMrf,EAAS,CAAA,EACf,QAAWxG,KAAM/K,KAAKwhC,mBAAoB,CACxC,IAAM70B,EAAa3M,KAAKwhC,mBAAmBz2B,GAC3CwG,EAAOhI,KAAKoD,CAAAA,CACd,CACA,OAAO4E,CACT,CAEAkwB,iBAAiB90B,EAAAA,CAIf,OAHK3M,KAAKwhC,mBAAmB70B,EAAW5B,MACtC/K,KAAKwhC,mBAAmB70B,EAAW5B,IAAM,IAAIq2B,EAAkBphC,KAAM2M,CAAAA,GAEhE3M,KAAKwhC,mBAAmB70B,EAAW5B,GAC5C,CAEA22B,oBAAoB/0B,EAAAA,CAClB,OAAOA,EAAW5B,MAAM/K,KAAKwhC,kBAC/B,CAEAF,2BAA2B30B,EAAAA,CACiB,IAAAgd,EAAAC,EAA1C,GAAI5pB,KAAK0hC,oBAAoB/0B,CAAAA,EAC3B,OAAAgd,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQD,EAAbD,EAAegY,kDAA8C,MAAA/X,IAA9C+X,OAA8C/X,OAA7DA,EAAAjkB,KAAAgkB,EAAgEhd,CAAAA,CAE3E,CAEAi1B,mBAAmBj1B,EAAAA,CACjB,IAAMk1B,EAAoB7hC,KAAKwhC,mBAAmB70B,EAAW5B,IAE7D,OAAA,OADO/K,KAAKwhC,mBAAmB70B,EAAW5B,IACnC82B,CACT,CAAA,EC1CmBC,GAAN,KAAMA,CACnBxyB,YAAYyyB,EAAAA,CACV/hC,KAAK+hC,YAAcA,EACnB/hC,KAAKsE,SAAWtE,KAAK+hC,YAAYz9B,SACjC,IAAM09B,EAAgBhiC,KAAK+hC,YAAYE,iBAAAA,EACvCjiC,KAAKw1B,cAAgBwM,EAAc,GACnChiC,KAAK+uB,YAAciT,EAAc,GAEjChiC,KAAKy1B,cAAgBz1B,KAAKsE,SAAS8wB,qBAAqBp1B,KAAKw1B,aAAAA,EAC7Dx1B,KAAKq4B,YAAcr4B,KAAKsE,SAAS8wB,qBAAqBp1B,KAAK+uB,WAAAA,EAE3D/uB,KAAKglB,MAAQhlB,KAAKsE,SAASqwB,gBAAgB30B,KAAKq4B,YAAY7lB,KAAAA,EAC5DxS,KAAKkzB,eAAiBlzB,KAAKglB,MAAMkO,eAAAA,EACjClzB,KAAKkiC,kBAAoBliC,KAAKglB,MAAMxlB,KAAKgxB,oBAAoBxwB,KAAKq4B,YAAY3oB,OAAS,CAAA,EACvF1P,KAAKmiC,cAAgBniC,KAAKglB,MAAMxlB,KAAKgxB,oBAAoBxwB,KAAKq4B,YAAY3oB,MAAAA,CAC5E,CAEA0yB,wBAAAA,CACE,OAAIpiC,KAAKglB,MAAMuN,cAAAA,GAAmBvyB,KAAKglB,MAAM+N,WAAAA,GAAAA,CAAiB/yB,KAAKglB,MAAM3K,QAAAA,EAChEra,KAAKy1B,cAAc/lB,SAAW,EAE9B1P,KAAKkzB,gBAAkBlzB,KAAKmiC,gBAAkB;CAEzD,CAEAE,2BAAAA,CACE,OACEriC,KAAKglB,MAAMuN,cAAAA,GAAAA,CACVvyB,KAAKglB,MAAM+N,WAAAA,IACX/yB,KAAKkzB,gBAAkBlzB,KAAKmiC,gBAAkB;GAAQniC,KAAKkiC,oBAAsB;EAEtF,CAEAI,yBAAAA,CACE,OAAOtiC,KAAKglB,MAAMuN,cAAAA,GAAmBvyB,KAAKglB,MAAM+N,WAAAA,GAAgB/yB,KAAKglB,MAAM3K,QAAAA,CAC7E,CAEAkoB,uBAAAA,CACE,OAAOviC,KAAKglB,MAAM+N,WAAAA,GAAgB/yB,KAAKy1B,cAAc/lB,SAAW,GAAXA,CAAiB1P,KAAKglB,MAAM3K,QAAAA,CACnF,CAEAmoB,gCAAAA,CACE,OAAOxiC,KAAKglB,MAAMuN,cAAAA,GAAAA,CAAoBvyB,KAAKglB,MAAM+N,WAAAA,GAAgB/yB,KAAKglB,MAAM3K,QAAAA,CAC9E,CAAA,ECjBmBooB,GAAN,cAA0B90B,EAAAA,CACvC2B,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKsE,SAAW,IAAIgwB,GACpBt0B,KAAK3B,YAAc,CAAA,EACnB2B,KAAK0iC,kBAAoB,CAAA,EACzB1iC,KAAK2iC,SAAW,CAClB,CAEA5c,YAAYzhB,EAAAA,CAC8B,IAAAqlB,EAAAiZ,EAAxC,GAAA,CAAKt+B,EAAS2L,UAAUjQ,KAAKsE,QAAAA,EAI3B,OAHAtE,KAAKsE,SAAWA,EAChBtE,KAAK6iC,mBAAAA,EACL7iC,KAAK2iC,YACLhZ,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQ+Y,EAAbjZ,EAAemZ,gCAA4B,MAAAF,IAA5BE,OAA4BF,OAA3CA,EAAAj9B,KAAAgkB,EAA8CrlB,CAAAA,CAEzD,CAIAy+B,aAAAA,CACE,MAAO,CACLz+B,SAAUtE,KAAKsE,SACf09B,cAAehiC,KAAKiiC,iBAAAA,CAAAA,CAExB,CAEAe,aAAYtd,EAAAA,CAA8B,IAAAmF,EAAAoY,EAAAC,EAAAC,EAAA,GAAA,CAA7B7+B,SAAEA,EAAQ09B,cAAEA,CAAAA,EAAetc,EAItC,OAHAmF,EAAAA,KAAKhB,YAGL,MAHagB,IAARhB,SAAQoZ,EAAbpY,EAAeuY,+BAA2B,MAAAH,IAA3BG,QAAfH,EAAAt9B,KAAAklB,CAAAA,EACA7qB,KAAK+lB,YAAYzhB,GAA8B,IAAIgwB,EAAAA,EACnDt0B,KAAKqjC,aAAarB,GAAwC,CAAE,EAAG,CAAA,CAAA,GAC/DkB,EAAOljC,KAAK6pB,YAAQqZ,MAAAA,IAARrZ,SAAQsZ,EAAbD,EAAeI,8BAAFJ,MAA4BC,IAA1BG,OAA0BH,OAAzCA,EAAAx9B,KAAAu9B,CAAAA,CACT,CAIAK,WAAW/jC,EAAAA,CAAqD,GAAA,CAA/CgkC,eAAEA,CAAAA,EAAgBv+B,UAAAC,OAAA,GAAAD,UAAAE,KAAA,OAAAF,UAAG,GAAA,CAAEu+B,eAAAA,EAAgB,EAChDxB,EAAgBhiC,KAAKiiC,iBAAAA,EAC3BjiC,KAAK+lB,YAAY/lB,KAAKsE,SAAS4xB,kBAAkB12B,EAAMwiC,CAAAA,CAAAA,EAEvD,IAAMxM,EAAgBwM,EAAc,GAC9BjT,EAAcyG,EAAgBh2B,EAAK6oB,UAAAA,EAKzC,OAHImb,GACFxjC,KAAKqjC,aAAatU,CAAAA,EAEb/uB,KAAKyjC,iCAAiC,CAAEjO,EAAezG,CAAAA,CAAAA,CAChE,CAEA2U,aAAAA,CAAiC,IAArB1e,EAAK/f,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAA,GAAG,IAAIssB,GAChBjtB,EAAW,IAAIgwB,GAAS,CAAEtP,CAAAA,CAAAA,EAChC,OAAOhlB,KAAK2jC,eAAer/B,CAAAA,CAC7B,CAEAq/B,gBAAAA,CAA0C,IAA3Br/B,EAAQW,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAA,GAAG,IAAIqvB,GACtB0N,EAAgBhiC,KAAKiiC,iBAAAA,EAC3BjiC,KAAK+lB,YAAY/lB,KAAKsE,SAAS6wB,sBAAsB7wB,EAAU09B,CAAAA,CAAAA,EAE/D,IAAMxM,EAAgBwM,EAAc,GAC9BjT,EAAcyG,EAAgBlxB,EAAS+jB,UAAAA,EAG7C,OADAroB,KAAKqjC,aAAatU,CAAAA,EACX/uB,KAAKyjC,iCAAiC,CAAEjO,EAAezG,CAAAA,CAAAA,CAChE,CAEA6U,aAAa7yB,EAAQ5I,EAAAA,CACnB,IAAMvJ,EAAaoB,KAAK6jC,yBAAAA,EAClBrkC,EAAOyvB,GAAKsE,4BAA4BxiB,EAAQnS,CAAAA,EACtD,OAAOoB,KAAKujC,WAAW/jC,EAAM2I,CAAAA,CAC/B,CAEA27B,kBAAAA,CACE,IAAM9B,EAAgBhiC,KAAKiiC,iBAAAA,EAC3BjiC,KAAK+lB,YAAY/lB,KAAKsE,SAASkzB,wBAAwBwK,CAAAA,CAAAA,EAEvD,IAAMxM,EAAgBwM,EAAc,GAC9BjT,EAAcyG,EAAgB,EAGpC,OADAx1B,KAAKqjC,aAAatU,CAAAA,EACX/uB,KAAKyjC,iCAAiC,CAAEjO,EAAezG,CAAAA,CAAAA,CAChE,CAEAgV,iBAAAA,CACE,IAAMC,EAAY,IAAIlC,GAAmB9hC,IAAAA,EAEzC,GAAIgkC,EAAU1B,wBAAAA,EAEZ,OADAtiC,KAAKikC,kBAAAA,EACEjkC,KAAKqjC,aAAaW,EAAUxO,aAAAA,EAC9B,GAAIwO,EAAUzB,sBAAAA,EAAyB,CAC5C,IAAMj+B,EAAW,IAAIgwB,GAAS,CAAE0P,EAAUhf,MAAM2M,gBAAAA,CAAAA,CAAAA,EAChD,OAAO3xB,KAAK2jC,eAAer/B,CAAAA,CAC7B,CAAO,OAAI0/B,EAAU5B,uBAAAA,EACZpiC,KAAK8jC,iBAAAA,EACHE,EAAUxB,+BAAAA,EACZxiC,KAAKkkC,yBAAAA,EACHF,EAAU3B,0BAAAA,EACZriC,KAAKmkC,oBAAoBH,CAAAA,EAEzBhkC,KAAK4jC,aAAa;CAAA,CAE7B,CAEAQ,WAAW//B,EAAAA,CACT,IAAMC,EAAWg4B,GAAWv9B,MAAMsF,CAAAA,EAAMq4B,YAAAA,EAClCsF,EAAgBhiC,KAAKiiC,iBAAAA,EAE3BjiC,KAAK+lB,YAAY/lB,KAAKsE,SAASgxB,qBAAqBhxB,EAAU09B,CAAAA,CAAAA,EAE9D,IAAMxM,EAAgBwM,EAAc,GAC9BjT,EAAcyG,EAAgBlxB,EAAS+jB,UAAAA,EAAc,EAG3D,OADAroB,KAAKqjC,aAAatU,CAAAA,EACX/uB,KAAKyjC,iCAAiC,CAAEjO,EAAezG,CAAAA,CAAAA,CAChE,CAEAsV,YAAYhgC,EAAAA,CACV,IAAMC,EAAWg4B,GAAWv9B,MAAMsF,CAAAA,EAAMq4B,YAAAA,EAAc7H,6BAA6B70B,KAAKsE,QAAAA,EAClF61B,EAAgBn6B,KAAKskC,iBAAiB,CAAE16B,OAAAA,EAAQ,CAAA,EAChDo4B,EAAgBhiC,KAAKsE,SAAS41B,uBAAuBC,CAAAA,EAE3D,OADAn6B,KAAK+lB,YAAYzhB,CAAAA,EACVtE,KAAKqjC,aAAarB,CAAAA,CAC3B,CAEAuC,WAAW5lC,EAAAA,CACT,OAAOqB,KAAKwkC,YAAY,CAAE7lC,CAAAA,CAAAA,CAC5B,CAEA6lC,YAAYv5B,EAAAA,CACV,IAAM5M,EAAc,CAAA,EASpB,OAPAiS,MAAMC,KAAKtF,CAAAA,EAAOpC,QAASlK,GAAAA,CAAS,IAAA8lC,EAClC,IAAAA,EAAIzkC,KAAK6pB,YAAQ4a,MAAAA,IAAR5a,QAAL4a,EAAeC,4BAA4B/lC,CAAAA,EAAO,CACpD,IAAMgO,EAAamc,GAAW6b,kBAAkBhmC,CAAAA,EAChDN,EAAYkL,KAAKoD,CAAAA,CACnB,CAAA,CAAA,EAGK3M,KAAK4kC,kBAAkBvmC,CAAAA,CAChC,CAEAwmC,iBAAiBl4B,EAAAA,CACf,OAAO3M,KAAK4kC,kBAAkB,CAAEj4B,CAAAA,CAAAA,CAClC,CAEAi4B,kBAAkBvmC,EAAAA,CAChB,IAAImB,EAAO,IAAIyvB,GAef,OAbA3e,MAAMC,KAAKlS,CAAAA,EAAawK,QAAS8D,GAAAA,CAAe,IAAAoV,EAC9C,IAAMnX,EAAO+B,EAAW0U,QAAAA,EAClB9iB,GAAYwjB,EAAG7N,GAAmBtJ,MAAKmX,MAAAA,IAALnX,OAAKmX,OAAxBA,EAA0BxjB,aAEzCK,EAAaoB,KAAK6jC,yBAAAA,EACpBtlC,IACFK,EAAWL,aAAeA,GAG5B,IAAMumC,EAAiB7V,GAAK8V,gCAAgCp4B,EAAY/N,CAAAA,EACxEY,EAAOA,EAAKgwB,WAAWsV,CAAAA,CAAe,CAAA,EAGjC9kC,KAAKujC,WAAW/jC,CAAAA,CACzB,CAEAwlC,gCAAgC3R,EAAAA,CAC9B,IAAM8G,EAAgBn6B,KAAKskC,iBAAAA,EAC3B,GAAIpuB,GAAiBikB,CAAAA,GAInB,GAHI9G,IAAc,YAAc8G,EAAc,GAAGzqB,SAAW,GAGxD1P,KAAKilC,oCAAoC5R,CAAAA,EAC3C,MAAA,WAGE8G,EAAc,GAAG3nB,QAAU2nB,EAAc,GAAG3nB,MAC9C,MAAA,GAGJ,MAAA,EACF,CAEA0yB,kBAAkB7R,EAAAA,CAA4B,IACxC1mB,EAAYw4B,EAA2BC,EAAAA,CADhBlgC,OAAEA,CAAAA,EAAQD,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAElCk1B,EAAgBn6B,KAAKskC,iBAAAA,EACvBvuB,EAAQ/V,KAAKiiC,iBAAAA,EACXoD,EAAuBnvB,GAAiBH,CAAAA,EAQ9C,GANIsvB,EACFF,EAA4B9R,IAAc,YAAc8G,EAAc,GAAGzqB,SAAW,EAEpF01B,EAAuBjL,EAAc,GAAG3nB,QAAU2nB,EAAc,GAAG3nB,MAGjE2yB,GACEnlC,KAAKslC,+BAAAA,EAAkC,CACzC,IAAMtgB,EAAQhlB,KAAKulC,SAAAA,EASnB,GAPIvgB,EAAM+N,WAAAA,EACR/yB,KAAKikC,kBAAAA,EAELjkC,KAAKwlC,4BAAAA,EAGPxlC,KAAKqjC,aAAattB,EAAM,EAAA,EACpBiP,EAAM3K,QAAAA,EACR,MAAA,EAEJ,CAUF,OAPIgrB,IACFtvB,EAAQ/V,KAAKylC,4BAA4BpS,EAAW,CAAEnuB,OAAAA,CAAAA,CAAAA,EAClDmuB,IAAc,aAChB1mB,EAAa3M,KAAK0lC,qBAAqB3vB,CAAAA,IAIvCpJ,GACF3M,KAAK2lC,eAAeh5B,CAAAA,EAAAA,KAGpB3M,KAAK+lB,YAAY/lB,KAAKsE,SAASorB,kBAAkB3Z,CAAAA,CAAAA,EACjD/V,KAAKqjC,aAAattB,EAAM,EAAA,EAAA,CACpBovB,GAAAA,CAA6BC,GAAAA,OAIrC,CAEAQ,kBAAkB7vB,EAAAA,CAChB,GAAA,CAAQ0W,CAAAA,EAAanc,MAAMC,KAAKvQ,KAAKiiC,iBAAAA,CAAAA,EAErC,OADAjiC,KAAK+lB,YAAY/lB,KAAKsE,SAASsrB,4BAA4B7Z,EAAO0W,CAAAA,CAAAA,EAC3DzsB,KAAKqjC,aAAa5W,CAAAA,CAC3B,CAEAoZ,iBAAiBl5B,EAAAA,CACf,IAAMoJ,EAAQ/V,KAAKsE,SAAS0sB,qBAAqBrkB,CAAAA,EACjD,GAAIoJ,EAGF,OAFA/V,KAAK8lC,sBAAAA,EACL9lC,KAAK+lB,YAAY/lB,KAAKsE,SAASorB,kBAAkB3Z,CAAAA,CAAAA,EAC1C/V,KAAKqjC,aAAattB,EAAM,EAAA,CAEnC,CAEAmuB,0BAAAA,CACE,GAAA,CAAQ1O,EAAezG,CAAAA,EAAgBze,MAAMC,KAAKvQ,KAAKiiC,iBAAAA,CAAAA,EACjDjd,EAAQhlB,KAAKsE,SAAS+wB,mBAAmBtG,CAAAA,EAE/C,OADA/uB,KAAK+lC,uBAAuB/gB,EAAMG,iBAAAA,CAAAA,EAC3BnlB,KAAKqjC,aAAa7N,CAAAA,CAC3B,CAEAwQ,mBAAAA,CAEE,OADAhmC,KAAKimC,oBAAsBjmC,KAAKkmC,YAAAA,EACzBlmC,KAAK4jC,aA9PI,GAAA,CA+PlB,CAEAuC,mBAAAA,CACE,GAAInmC,KAAKimC,qBAAuB,KAE9B,OADAjmC,KAAKomC,iBAAiB,CAAEpmC,KAAKimC,oBAAqBjmC,KAAKimC,oBAAsBI,CAAAA,CAAAA,EACtErmC,KAAKiiC,iBAAAA,CAEhB,CAEAqE,mBAAAA,CACEtmC,KAAKimC,oBAAsB,IAC7B,CAIAM,oBAAoBtyB,EAAAA,CAClB,IAAM7P,EAAQpE,KAAK0iC,kBAAkBzuB,GACrC,OAAO7P,GAAS,MAAQA,IAAjBA,EACT,CAEAoiC,uBAAuBvyB,EAAAA,CACrB,IAAM7P,EAAAA,CAASpE,KAAK0iC,kBAAkBzuB,GACtC,OAAI7P,EACKpE,KAAKymC,oBAAoBxyB,EAAe7P,CAAAA,EAExCpE,KAAK+lC,uBAAuB9xB,CAAAA,CAEvC,CAEAyyB,uBAAuBzyB,EAAAA,CACrB,OAAID,GAAeC,CAAAA,EACVjU,KAAK2mC,4BAA4B1yB,CAAAA,EAEjCjU,KAAK4mC,2BAA2B3yB,CAAAA,CAE3C,CAEA2yB,2BAA2B3yB,EAAAA,CACzB,IAAM3P,EAAWtE,KAAK6mC,oBAAAA,EACtB,GAAKviC,EAAL,CACA,QAAWqI,KAAc2D,MAAMC,KAAKjM,EAASssB,eAAAA,CAAAA,EAC3C,GAAA,CAAKjkB,EAAWsT,WAAAA,EACd,MAAA,GAGJ,MAAA,EANe,CAOjB,CAEA0mB,4BAA4B1yB,EAAAA,CAC1B,IAAM+Q,EAAQhlB,KAAKulC,SAAAA,EACnB,GAAKvgB,EACL,MAAA,CAAQA,EAAMgO,gBAAAA,CAChB,CAEAyT,oBAAoBxyB,EAAe7P,EAAAA,CACjC,OAAI4P,GAAeC,CAAAA,EACVjU,KAAK8mC,kBAAkB7yB,EAAe7P,CAAAA,GAE7CpE,KAAK+mC,iBAAiB9yB,EAAe7P,CAAAA,EACrCpE,KAAK0iC,kBAAkBzuB,GAAiB7P,EACjCpE,KAAKgnC,wCAAAA,EAEhB,CAEAC,0BAA0Bxa,EAAUxY,EAAe7P,EAAAA,CAAO,IAAA8gB,EACxD,IAAMF,EAAQhlB,KAAKsE,SAAS+wB,mBAAmB5I,CAAAA,EACzCya,GAAqBhiB,EAAGlR,GAAegR,EAAMG,iBAAAA,CAAAA,KAAmB,MAAAD,IAAnBC,OAAmBD,OAAxCA,EAA0C3lB,eAExE,GAAIylB,GAASkiB,GAATliB,MAASkiB,EAAuBr9B,SAASoK,CAAAA,EAAgB,CAC3D,IAAMkzB,EAAcnnC,KAAKsE,SAASgzB,2BAA2B7K,EAAUxY,EAAe7P,CAAAA,EACtFpE,KAAK+lB,YAAYohB,CAAAA,CACnB,CACF,CAEAJ,iBAAiB9yB,EAAe7P,EAAAA,CAC9B,IAAM49B,EAAgBhiC,KAAKiiC,iBAAAA,EAC3B,GAAA,CAAKD,EAAe,OAEpB,GAAA,CAAQxM,EAAezG,CAAAA,EAAgBze,MAAMC,KAAKyxB,CAAAA,EAClD,GAAIxM,IAAkBzG,EAMpB,OAAO/uB,KAAK+lB,YAAY/lB,KAAKsE,SAASwrB,oBAAoB7b,EAAe7P,EAAO49B,CAAAA,CAAAA,EALhF,GAAI/tB,IAAkB,OAAQ,CAC5B,IAAMzU,EAAOyvB,GAAKsE,4BAA4BnvB,EAAO,CAAE2H,KAAM3H,CAAAA,CAAAA,EAC7D,OAAOpE,KAAKujC,WAAW/jC,CAAAA,CACzB,CAIJ,CAEAsnC,kBAAkB7yB,EAAe7P,EAAAA,CAC/B,IAAM49B,EAAgBhiC,KAAKiiC,iBAAAA,EAC3B,GAAIjiC,KAAK0mC,uBAAuBzyB,CAAAA,EAE9B,OADAjU,KAAK+lB,YAAY/lB,KAAKsE,SAASmzB,2BAA2BxjB,EAAe7P,EAAO49B,CAAAA,CAAAA,EACzEhiC,KAAKqjC,aAAarB,CAAAA,CAE7B,CAEA+D,uBAAuB9xB,EAAAA,CACrB,OAAID,GAAeC,CAAAA,GACjBjU,KAAKonC,qBAAqBnzB,CAAAA,EACnBjU,KAAKqnC,wBAAAA,IAEZrnC,KAAKsnC,oBAAoBrzB,CAAAA,EAAAA,OAClBjU,KAAK0iC,kBAAkBzuB,GACvBjU,KAAKgnC,wCAAAA,EAEhB,CAEAM,oBAAoBrzB,EAAAA,CAClB,IAAM+tB,EAAgBhiC,KAAKiiC,iBAAAA,EAC3B,GAAKD,EACL,OAAOhiC,KAAK+lB,YAAY/lB,KAAKsE,SAAS0rB,uBAAuB/b,EAAe+tB,CAAAA,CAAAA,CAC9E,CAEAoF,qBAAqBnzB,EAAAA,CACnB,IAAM+tB,EAAgBhiC,KAAKiiC,iBAAAA,EAC3B,GAAKD,EACL,OAAOhiC,KAAK+lB,YAAY/lB,KAAKsE,SAAS0rB,uBAAuB/b,EAAe+tB,CAAAA,CAAAA,CAC9E,CAEAuF,yBAAAA,CAA0B,IAAAC,EACxB,QAAOA,EAAAxnC,KAAKulC,SAAAA,KAAU,MAAAiC,IAAVjC,OAAUiC,OAAfA,EAAiB9U,gBAAAA,GAAoB,CAC9C,CAEA+U,yBAAAA,CAA0B,IAAAxU,EACxB,IAAMjO,EAAQhlB,KAAKulC,SAAAA,EACnB,GAAKvgB,EAAL,CACA,IAAAiO,EAAIjf,GAAegR,EAAMwN,yBAAAA,CAAAA,KAAzB,MAAoDS,IAA3BT,QAA2BS,CAAhDA,EAAkDrzB,cAMpD,OAAOolB,EAAM0N,gBAAAA,EAAoB,EANkC,CACnE,IAAMgV,EAAgB1nC,KAAK2nC,iBAAAA,EAC3B,GAAID,EACF,OrCzYuB,UAAA,CAAA,IAASn1B,EAACtN,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAE,OAAKqN,IAAlBrN,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,GAAgC0K,MAAM,EAAG4C,EAAErN,MAAAA,EAASqN,CAAAA,CAAE,EqCyY3Dm1B,EAAc5U,sBAAAA,EAAyB9N,EAAM8N,sBAAAA,CAAAA,CAExE,CANY,CASd,CAEAH,sBAAAA,CACE,IAAM3N,EAAQhlB,KAAKulC,SAAAA,EACnB,GAAKvgB,EACL,OAAOhlB,KAAK+lB,YAAY/lB,KAAKsE,SAAS0wB,aAAahQ,EAAOA,EAAM2N,qBAAAA,CAAAA,CAAAA,CAClE,CAEAC,sBAAAA,CACE,IAAM5N,EAAQhlB,KAAKulC,SAAAA,EACnB,GAAKvgB,EACL,OAAOhlB,KAAK+lB,YAAY/lB,KAAKsE,SAAS0wB,aAAahQ,EAAOA,EAAM4N,qBAAAA,CAAAA,CAAAA,CAClE,CAEA0S,gCAAAA,CAAiC,IAAAsC,EAC/B,QAAOA,EAAA5nC,KAAKulC,SAAAA,KAAU,MAAAqC,IAAVrC,OAAUqC,OAAfA,EAAiBxV,kBAAAA,GAAsB,CAChD,CAEAoT,6BAAAA,CAA8B,IAAAqC,EAC5B,IAAM9f,GAAS8f,EAAG7nC,KAAKulC,SAAAA,KAAU,MAAAsC,IAAVtC,OAAUsC,OAAfA,EAAiB1iB,iBAAAA,EACnC,GAAI4C,EACF,OAAO/nB,KAAK+lC,uBAAuBhe,CAAAA,CAEvC,CAEAkc,mBAAAA,CACE,GAAA,CAAMzO,CAAAA,EAAkBllB,MAAMC,KAAKvQ,KAAKiiC,iBAAAA,CAAAA,EACxC,CAAMzvB,MAAEA,CAAAA,EAAUxS,KAAKsE,SAAS8wB,qBAAqBI,CAAAA,EACjDjH,EAAW/b,EACTs1B,EAAiB9nC,KAAKulC,SAAAA,EAAWnT,kBAAAA,EAEnCpN,EAAQhlB,KAAKsE,SAASqwB,gBAAgBpG,EAAW,CAAA,EACrD,KAAOvJ,GACAA,EAAM+N,WAAAA,GAAAA,EAAgB/N,EAAMoN,kBAAAA,GAAuB0V,IAGxDvZ,IACAvJ,EAAQhlB,KAAKsE,SAASqwB,gBAAgBpG,EAAW,CAAA,EAGnDiH,EAAgBx1B,KAAKsE,SAASi0B,qBAAqB,CAAE/lB,MAAAA,EAAO9C,OAAQ,CAAA,CAAA,EACpE,IAAMqf,EAAc/uB,KAAKsE,SAASi0B,qBAAqB,CAAE/lB,MAAO+b,EAAU7e,OAAQ,CAAA,CAAA,EAClF,OAAO1P,KAAK+lB,YAAY/lB,KAAKsE,SAASuzB,+BAA+B,CAAErC,EAAezG,CAAAA,CAAAA,CAAAA,CACxF,CAEAsY,yBAAAA,CACE,IAAMrF,EAAgBhiC,KAAKiiC,iBAAiB,CAAE8F,WAAAA,EAAY,CAAA,EAC1D,GAAI/F,EAAe,CACjB,IAAMU,EAAoB1iC,KAAKsE,SAAS+rB,2BAA2B2R,CAAAA,EAUnE,GARA1xB,MAAMC,KAAKsD,GAAAA,CAAAA,EAAwBhL,QAASoL,GAAAA,CACrCyuB,EAAkBzuB,IAChBjU,KAAK0mC,uBAAuBzyB,CAAAA,IAC/ByuB,EAAkBzuB,GAAAA,GAEtB,CAAA,EAAA,CAGG4B,GAAgB6sB,EAAmB1iC,KAAK0iC,iBAAAA,EAE3C,OADA1iC,KAAK0iC,kBAAoBA,EAClB1iC,KAAKgnC,wCAAAA,CAEhB,CACF,CAEAgB,sBAAAA,CACE,OAAO/jC,GAAO0B,KAAK,CAAE,EAAE3F,KAAK0iC,iBAAAA,CAC9B,CAEAmB,0BAAAA,CACE,IAAMjlC,EAAa,CAAA,EACnB,QAAWuF,KAAOnE,KAAK0iC,kBAAmB,CACxC,IAAMt+B,EAAQpE,KAAK0iC,kBAAkBv+B,GACjCC,IADiCD,IAE/BkQ,GAAclQ,CAAAA,IAChBvF,EAAWuF,GAAOC,EAGxB,CACA,OAAOxF,CACT,CAIAqpC,iBAAAA,CACE,OAAOjoC,KAAKymC,oBAAoB,SAAA,EAAU,CAC5C,CAEAyB,eAAAA,CACE,OAAOloC,KAAK+lC,uBAAuB,QAAA,CACrC,CAEAoC,oBAAAA,CACE,OAAOnoC,KAAKumC,oBAAoB,QAAA,CAClC,CAEAlD,aAAarB,EAAAA,CAAe,IAAAoG,EAC1B,IAAMjO,EAAgBn6B,KAAKsE,SAASiyB,uBAAuByL,CAAAA,EAC3D,OAAAoG,EAAOpoC,KAAK6pB,YAAQ,MAAAue,IAARve,OAAQue,OAAbA,EAAeC,sDAAsDlO,CAAAA,CAC9E,CAEA8H,kBAAAA,CACE,IAAM9H,EAAgBn6B,KAAKskC,iBAAAA,EAC3B,GAAInK,EACF,OAAOn6B,KAAKsE,SAAS41B,uBAAuBC,CAAAA,CAEhD,CAEAiM,iBAAiBpE,EAAAA,CACf,IAAM7H,EAAgBn6B,KAAKsE,SAASiyB,uBAAuByL,CAAAA,EAC3D,OAAOhiC,KAAKsoC,oBAAAA,EAAsBC,iBAAiBpO,CAAAA,CACrD,CAEA+L,aAAAA,CACE,IAAM/L,EAAgBn6B,KAAKskC,iBAAAA,EAC3B,GAAInK,EACF,OAAOn6B,KAAKsE,SAASi0B,qBAAqB4B,EAAc,EAAA,CAE5D,CAEAmK,iBAAiBn8B,EAAAA,CACf,OAAInI,KAAKwoC,oBACAxoC,KAAKwoC,oBAELxoC,KAAKsoC,oBAAAA,EAAsBhE,iBAAiBn8B,CAAAA,GAAY2N,EAAe,CAAEtD,MAAO,EAAG9C,OAAQ,CAAA,CAAA,CAEtG,CAEA+4B,wBAAwBtO,EAAezkB,EAAAA,CACrC,IAAInE,EACJvR,KAAKwoC,oBAAsBrO,EAC3B,GAAA,CACE5oB,EAASmE,EAAAA,CACX,QAAU,CACR1V,KAAKwoC,oBAAsB,IAC7B,CACA,OAAOj3B,CACT,CAEAm3B,gBAAgB3yB,EAAOL,EAAAA,CACrB,IAAMykB,EAAgBn6B,KAAKsE,SAASiyB,uBAAuBxgB,CAAAA,EAC3D,OAAO/V,KAAKyoC,wBAAwBtO,EAAezkB,CAAAA,CACrD,CAEAizB,mBAAmBvwB,EAAU1C,EAAAA,CAC3B,IAAMykB,EAAgBn6B,KAAK4oC,gCAAgCxwB,EAAU,CAAExO,OAAAA,EAAQ,CAAA,EAC/E,OAAO5J,KAAKyoC,wBAAwBtO,EAAezkB,CAAAA,CACrD,CAEA+vB,4BAA4BpS,EAAAA,CAA4B,GAAA,CAAjBnuB,OAAEA,CAAAA,EAAQD,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAAA,CAC5CuwB,EAAezG,CAAAA,EAAgBze,MAAMC,KAAKvQ,KAAKiiC,iBAAAA,CAAAA,EAcrD,OAbI5O,IAAc,WACZnuB,EACFswB,GAAiBtwB,EAEjBswB,EAAgBx1B,KAAK6oC,iCAAiCrT,EAAAA,EAAgB,EAGpEtwB,EACF6pB,GAAe7pB,EAEf6pB,EAAc/uB,KAAK6oC,iCAAiC9Z,EAAa,CAAA,EAG9DjZ,EAAe,CAAE0f,EAAezG,CAAAA,CAAAA,CACzC,CAEAkW,oCAAoC5R,EAAAA,CAClC,GAAIrzB,KAAK8oC,kBACP,MAAA,GAEF,IAAM/yB,EAAQ/V,KAAKylC,4BAA4BpS,CAAAA,EAC/C,OAAOrzB,KAAK0lC,qBAAqB3vB,CAAAA,GAAU,IAC7C,CAEAgzB,sBAAsB1V,EAAAA,CACpB,IAAI2V,EAAmBjzB,EACvB,GAAI/V,KAAK8oC,kBACP/yB,EAAQ/V,KAAKsE,SAAS0sB,qBAAqBhxB,KAAK8oC,iBAAAA,MAC3C,CACL,IAAM9G,EAAgBhiC,KAAKiiC,iBAAAA,EAC3BlsB,EAAQ/V,KAAKylC,4BAA4BpS,CAAAA,EACzC2V,EAAAA,CAAqB1yB,GAAe0rB,EAAejsB,CAAAA,CACrD,CAQA,GANIsd,IAAc,WAChBrzB,KAAKomC,iBAAiBrwB,EAAM,EAAA,EAE5B/V,KAAKomC,iBAAiBrwB,EAAM,EAAA,EAG1BizB,EAAmB,CACrB,IAAMr8B,EAAa3M,KAAK0lC,qBAAqB3vB,CAAAA,EAC7C,GAAIpJ,EACF,OAAO3M,KAAK2lC,eAAeh5B,CAAAA,CAE/B,CACF,CAEAs8B,2BAA2B5V,EAAAA,CAA4B,GAAA,CAAjBnuB,OAAEA,CAAAA,EAAQD,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EAC3C8Q,EAAQ/V,KAAKylC,4BAA4BpS,EAAW,CAAEnuB,OAAAA,CAAAA,CAAAA,EAC5D,OAAOlF,KAAKomC,iBAAiBrwB,CAAAA,CAC/B,CAEAmzB,2BAAAA,CACE,GAAIlpC,KAAKumC,oBAAoB,MAAA,EAC3B,OAAOvmC,KAAKmpC,qCAAqC,MAAA,CAErD,CAEAA,qCAAqCl1B,EAAAA,CACnC,IAAMwY,EAAWzsB,KAAKkmC,YAAAA,EAChBnwB,EAAQ/V,KAAKsE,SAAS60B,oCAAoCllB,EAAewY,CAAAA,EAC/E,OAAOzsB,KAAKomC,iBAAiBrwB,CAAAA,CAC/B,CAEAqzB,8BAAAA,CAA+B,IAAAC,EAC7B,QAAOA,EAAIrpC,KAACspC,uBAAAA,KAAwBD,MAAAA,IAAxBC,OAAwBD,OAA7BA,EAA+BnkC,QAAS,CACjD,CAEAqkC,2BAAAA,CACE,OAAOvpC,KAAK8oC,mBAAqB9oC,KAAKwpC,uBAAuBxpC,KAAKkmC,YAAAA,CAAAA,CACpE,CAEAsD,uBAAuB/c,EAAAA,CACrB,IAAMuN,EAAWh6B,KAAKsE,SAAS8wB,qBAAqB3I,CAAAA,EACpD,GAAIuN,EACF,OAAOh6B,KAAKypC,uBAAuBzP,CAAAA,CAEvC,CAEA0P,qBAAqBjd,EAAAA,CAAU,IAAAkd,EAC7B,OAAAA,EAAO3pC,KAAKsE,SAAS+sB,mBAAmB5E,CAAAA,KAAxC,MAAiDkd,IAATld,OAASkd,OAA1CA,EAA4CxhB,aAAAA,CACrD,CAEA0e,qBAAAA,CACE,IAAM7E,EAAgBhiC,KAAKiiC,iBAAAA,EAC3B,GAAID,EACF,OAAOhiC,KAAKsE,SAASyyB,mBAAmBiL,CAAAA,CAE5C,CAEAsH,wBAAAA,CAAyB,IAAAM,EACvB,OAAAA,EAAO5pC,KAAK6mC,oBAAAA,KAAqB+C,MAAAA,IAArB/C,OAAqB+C,OAA1BA,EAA4BhZ,eAAAA,CACrC,CAIAA,gBAAAA,CACE,OAAO5wB,KAAK3B,YAAYsR,MAAM,CAAA,CAChC,CAEAkzB,oBAAAA,CACE,IAAMxkC,EAAc2B,KAAKsE,SAASssB,eAAAA,EAAAA,CAC5BiZ,MAAEA,EAAKC,QAAEA,CAAAA,ErCpoBiB,UAAA,CAAuC,IAA9BC,EAAQ9kC,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAAI+kC,EAAQ/kC,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAC/D4kC,EAAQ,CAAA,EACRC,EAAU,CAAA,EAEVG,EAAiB,IAAIC,IAE3BH,EAASlhC,QAASzE,GAAAA,CAChB6lC,EAAelhC,IAAI3E,CAAAA,CAAM,CAAA,EAG3B,IAAM+lC,EAAgB,IAAID,IAe1B,OAbAF,EAASnhC,QAASzE,GAAAA,CAChB+lC,EAAcphC,IAAI3E,CAAAA,EACb6lC,EAAe52B,IAAIjP,CAAAA,GACtBylC,EAAMtgC,KAAKnF,CAAAA,CACb,CAAA,EAGF2lC,EAASlhC,QAASzE,GAAAA,CACX+lC,EAAc92B,IAAIjP,CAAAA,GACrB0lC,EAAQvgC,KAAKnF,CAAAA,CACf,CAAA,EAGK,CAAEylC,MAAAA,EAAOC,QAAAA,CAAAA,CAClB,EqC0mBoD9pC,KAAK3B,YAAaA,CAAAA,EAQlE,OAPA2B,KAAK3B,YAAcA,EAEnBiS,MAAMC,KAAKu5B,CAAAA,EAASjhC,QAAS8D,GAAAA,CAAe,IAAAy9B,EAAAC,EAC1C19B,EAAWkd,SAAW,MACtBugB,EAAAA,KAAKvgB,YADiB,MACTugB,IAARvgB,SAAQwgB,EAAbD,EAAeE,kCAA8BD,MAAAA,IAA9BC,QAAfD,EAAA1kC,KAAAykC,EAAgDz9B,CAAAA,CAAW,CAAA,GAGtD,IAAA,CACL,IAAM4E,EAAS,CAAA,EAOf,OALAjB,MAAMC,KAAKs5B,CAAAA,EAAOhhC,QAAS8D,GAAAA,CAAe,IAAA49B,EAAAC,EACxC79B,EAAWkd,SAAW7pB,KACtBuR,EAAOhI,MAAIghC,EAACvqC,KAAK6pB,YAAQ,MAAA0gB,IAAR1gB,SAAQ2gB,EAAbD,EAAeE,+BAA2B,MAAAD,IAA3BC,OAA2BD,OAA1CA,EAAA7kC,KAAA4kC,EAA6C59B,CAAAA,CAAAA,CAAY,CAAA,EAGhE4E,CACR,GATM,CAUT,CAIA6R,8BAA8BzW,EAAAA,CAAY,IAAA+9B,EAAAC,EAExC,OADA3qC,KAAK2iC,YACL+H,EAAO1qC,KAAK6pB,YAAQ6gB,MAAAA,IAAR7gB,SAAQ8gB,EAAbD,EAAeE,gCAA4B,MAAAD,IAA5BC,OAA4BD,OAA3CA,EAAAhlC,KAAA+kC,EAA8C/9B,CAAAA,CACvD,CAEAoe,8BAA8Bpe,EAAAA,CAAY,IAAAk+B,EAAAC,EAExC,OADA9qC,KAAK2iC,YACLkI,EAAO7qC,KAAK6pB,YAAQghB,MAAAA,IAARhhB,SAAQihB,EAAbD,EAAeE,4CAAwC,MAAAD,IAAxCC,OAAwCD,OAAvDA,EAAAnlC,KAAAklC,EAA0Dl+B,CAAAA,CACnE,CAIAg5B,eAAeh5B,EAAYxE,EAAAA,CAAS,IAAA6iC,EAAAC,EAClC,GAAIt+B,IAAe3M,KAAK8oC,kBAGxB,OAFA9oC,KAAK8lC,sBAAAA,EACL9lC,KAAK8oC,kBAAoBn8B,GACzBq+B,EAAOhrC,KAAK6pB,YAAQmhB,MAAAA,IAARnhB,SAAQohB,EAAbD,EAAeE,wCAAoCD,MAAAA,IAApCC,OAAoCD,OAAnDA,EAAAtlC,KAAAqlC,EAAsDhrC,KAAK8oC,kBAAmB3gC,CAAAA,CACvF,CAEA29B,uBAAAA,CAAwB,IAAAqF,EAAAC,EACjBprC,KAAK8oC,qBACVqC,EAAInrC,KAAC6pB,YAAQ,MAAAshB,IAARthB,SAAQuhB,EAAbD,EAAeE,uCAAFF,MAAqCC,IAAnCC,QAAfD,EAAAzlC,KAAAwlC,EAAqDnrC,KAAK8oC,iBAAAA,EAC1D9oC,KAAK8oC,kBAAoB,KAC3B,CAEA5X,8BAA8BtyB,EAAY+N,EAAAA,CACxC,OAAO3M,KAAK+lB,YAAY/lB,KAAKsE,SAAS4sB,8BAA8BtyB,EAAY+N,CAAAA,CAAAA,CAClF,CAEA0qB,6BAA6BtP,EAAWpb,EAAAA,CACtC,OAAO3M,KAAK+lB,YAAY/lB,KAAKsE,SAAS+yB,6BAA6BtP,EAAWpb,CAAAA,CAAAA,CAChF,CAIAw3B,oBAAoBH,EAAAA,CAClB,GAAA,CAAI1/B,SAAEA,CAAAA,EAAa0/B,EACnB,CAAMhf,MAAEA,CAAAA,EAAUgf,EACdvX,EAAWuX,EAAUxO,cACrBzf,EAAQ,CAAE0W,EAAW,EAAGA,CAAAA,EAExBzH,EAAMQ,sBAAAA,IAA4Bwe,EAAUvO,cAAc/lB,QACxDsV,EAAMkO,eAAAA,GAAoB8Q,EAAU7B,gBAAkB;EACxD1V,GAAY,EAEZnoB,EAAWA,EAASorB,kBAAkB3Z,CAAAA,EAExCA,EAAQ,CAAE0W,EAAUA,CAAAA,GACXuX,EAAU7B,gBAAkB;EACjC6B,EAAU9B,oBAAsB;EAClCnsB,EAAQ,CAAE0W,EAAW,EAAGA,EAAW,CAAA,GAEnC1W,EAAQ,CAAE0W,EAAUA,EAAW,CAAA,EAC/BA,GAAY,GAELuX,EAAUvO,cAAc/lB,OAAS,GAAM,IAChD+c,GAAY,GAGd,IAAM0a,EAAc,IAAI7S,GAAS,CAAEtP,EAAMkN,oBAAAA,EAAsBP,gBAAAA,CAAAA,CAAAA,EAE/D,OADA3xB,KAAK+lB,YAAYzhB,EAAS6wB,sBAAsBgS,EAAapxB,CAAAA,CAAAA,EACtD/V,KAAKqjC,aAAa5W,CAAAA,CAC3B,CAEAkb,kBAAAA,CACE,IAAMxN,EAAgBn6B,KAAKskC,iBAAAA,EAC3B,GAAInK,EAAe,CACjB,GAAA,CAAM3nB,MAAEA,CAAAA,EAAU2nB,EAAc,GAChC,GAAI3nB,EAAQ,EACV,OAAOxS,KAAKsE,SAASqwB,gBAAgBniB,EAAQ,CAAA,CAEjD,CACF,CAEA+yB,UAAAA,CACE,IAAMpL,EAAgBn6B,KAAKskC,iBAAAA,EAC3B,GAAInK,EACF,OAAOn6B,KAAKsE,SAASqwB,gBAAgBwF,EAAc,GAAG3nB,KAAAA,CAE1D,CAEAkzB,qBAAqB3vB,EAAAA,CACnB,IAAMzR,EAAWtE,KAAKsE,SAASyyB,mBAAmBhhB,CAAAA,EAClD,GAAIzR,EAAS2K,SAAAA,IAAAA,GAAU5L,OlDnwBiB,SkDmwBmB;CAAA,EACzD,OAAOiB,EAASssB,eAAAA,EAAiB,EAErC,CAEAoW,yCAAAA,CAA0C,IAAAsE,EAAAC,EACxC,OAAAD,EAAOtrC,KAAK6pB,YAAZ,MAAoByhB,IAARzhB,SAAQ0hB,EAAbD,EAAeE,yCAAqCD,MAAAA,IAArCC,OAAqCD,OAApDA,EAAA5lC,KAAA2lC,EAAuDtrC,KAAK0iC,iBAAAA,CACrE,CAEAe,iCAAiC1tB,EAAAA,CAAO,IAAA01B,EAAAC,EACtC,OAAAD,EAAOzrC,KAAK6pB,YAAQ4hB,MAAAA,IAAR5hB,SAAQ6hB,EAAbD,EAAeE,yCAAqC,MAAAD,IAArCC,OAAqCD,OAApDA,EAAA/lC,KAAA8lC,EAAuD11B,CAAAA,CAChE,CAEA8yB,iCAAiCpc,EAAU/c,EAAAA,CACzC,IAAMk8B,EAAc5rC,KAAKsE,SAAS+N,cAAAA,EAC5Bw5B,EAAgBD,EAAY/7B,qBAAqB4c,CAAAA,EACvD,OAAOmf,EAAYn8B,mBAAmBo8B,EAAgBn8B,CAAAA,CACxD,CAAA,EAGF+yB,GAAY3lB,YAAY,qCAAA,EACxB2lB,GAAY3lB,YAAY,sDAAA,EACxB2lB,GAAY3lB,YAAY,uDAAA,EACxB2lB,GAAY3lB,YAAY,8CAAA,EACxB2lB,GAAY3lB,YAAY,2CAAA,EACxB2lB,GAAY3lB,YAAY,+BAAA,EC5xBT,IAAMgvB,GAAN,cAA0Bn+B,EAAAA,CACvC2B,YAAYyyB,EAAAA,CACVxyB,MAAAA,GAAStK,SAAAA,EACTjF,KAAK+hC,YAAcA,EACnB/hC,KAAK+rC,YAAc,CAAA,EACnB/rC,KAAKgsC,YAAc,CAAA,CACrB,CAEAC,gBAAgBC,EAAAA,CAA+C,GAAA,CAAlC1oB,QAAEA,EAAO2oB,eAAEA,CAAAA,EAAgBlnC,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACnDmnC,EAAgBpsC,KAAK+rC,YAAYp8B,MAAAA,EAAO,EAAG,GAEjD,GAAA,CAAKw8B,GAAAA,CAAmBE,GAA8BD,EAAeF,EAAa1oB,CAAAA,EAAU,CAC1F,IAAM8oB,EAAYtsC,KAAKusC,YAAY,CAAEL,YAAAA,EAAa1oB,QAAAA,CAAAA,CAAAA,EAClDxjB,KAAK+rC,YAAYxiC,KAAK+iC,CAAAA,EACtBtsC,KAAKgsC,YAAc,CAAA,CACrB,CACF,CAEA1pC,MAAAA,CACE,IAAMgqC,EAAYtsC,KAAK+rC,YAAYS,IAAAA,EACnC,GAAIF,EAAW,CACb,IAAMG,EAAYzsC,KAAKusC,YAAYD,CAAAA,EAEnC,OADAtsC,KAAKgsC,YAAYziC,KAAKkjC,CAAAA,EACfzsC,KAAK+hC,YAAYiB,aAAasJ,EAAUI,QAAAA,CACjD,CACF,CAEAvqC,MAAAA,CACE,IAAMsqC,EAAYzsC,KAAKgsC,YAAYQ,IAAAA,EACnC,GAAIC,EAAW,CACb,IAAMH,EAAYtsC,KAAKusC,YAAYE,CAAAA,EAEnC,OADAzsC,KAAK+rC,YAAYxiC,KAAK+iC,CAAAA,EACftsC,KAAK+hC,YAAYiB,aAAayJ,EAAUC,QAAAA,CACjD,CACF,CAEAC,SAAAA,CACE,OAAO3sC,KAAK+rC,YAAY7mC,OAAS,CACnC,CAEA0nC,SAAAA,CACE,OAAO5sC,KAAKgsC,YAAY9mC,OAAS,CACnC,CAIAqnC,aAAAA,CAA2C,GAAA,CAA/BL,YAAEA,EAAW1oB,QAAEA,CAAAA,EAASve,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACrC,MAAO,CACLinC,YAAaA,GAAaj9B,SAAAA,EAC1BuU,QAAS3R,KAAKO,UAAUoR,CAAAA,EACxBkpB,SAAU1sC,KAAK+hC,YAAYgB,YAAAA,CAAAA,CAE/B,CAAA,EAGIsJ,GAAgCA,CAACQ,EAAOX,EAAa1oB,IACzDqpB,GAAOX,cAAgBA,GAAaj9B,SAAAA,GAAc49B,GAAOrpB,UAAY3R,KAAKO,UAAUoR,CAAAA,EC1DhFspB,GAAuB,oBAIRC,GAAN,KAAMA,CACnBz9B,YAAYo9B,EAAAA,CACV1sC,KAAKsE,SAAWooC,EAASpoC,SACzBtE,KAAKgiC,cAAgB0K,EAAS1K,aAChC,CAEAvlB,SAAAA,CAEE,OADAzc,KAAKonC,qBAAAA,EACEpnC,KAAKgtC,oBAAAA,CACd,CAEAjK,aAAAA,CACE,MAAO,CAAEz+B,SAAUtE,KAAKsE,SAAU09B,cAAehiC,KAAKgiC,aAAAA,CACxD,CAIAoF,sBAAAA,CACE,OAAOpnC,KAAKitC,mBAAAA,EAAqBj8B,IAAK+E,GAAU/V,KAAKsE,SAAWtE,KAAKsE,SAAS0rB,uBAAuB8c,GAAsB/2B,CAAAA,CAAAA,CAC7H,CAEAi3B,qBAAAA,CACE,IAAIt9B,EAAS,EAEb1P,KAAKktC,mBAAAA,EAAqBrkC,QAASkN,GAAAA,CAC7BA,EAAM,GAAKA,EAAM,GAAK,IACxBA,EAAM,IAAMrG,EACZqG,EAAM,IAAMrG,EAER1P,KAAKsE,SAASq0B,uBAAuB5iB,EAAM,EAAA,IAAQ;IACrD/V,KAAKsE,SAAWtE,KAAKsE,SAASkzB,wBAAwBzhB,EAAM,EAAA,EACxDA,EAAM,GAAK/V,KAAKgiC,cAAc,IAChChiC,KAAKmtC,yBAAAA,EAEPp3B,EAAM,KACNrG,KAGEqG,EAAM,KAAO,GACX/V,KAAKsE,SAASq0B,uBAAuB5iB,EAAM,GAAK,CAAA,IAAO;IACzD/V,KAAKsE,SAAWtE,KAAKsE,SAASkzB,wBAAwBzhB,EAAM,EAAA,EACxDA,EAAM,GAAK/V,KAAKgiC,cAAc,IAChChiC,KAAKmtC,yBAAAA,EAEPp3B,EAAM,KACNrG,KAIJ1P,KAAKsE,SAAWtE,KAAKsE,SAASmzB,2BAA2BqV,GAAAA,GAA4B/2B,CAAAA,EACvF,CAAA,CAEJ,CAEAk3B,oBAAAA,CACE,OAAOjtC,KAAKsE,SAASs1B,4BAA4BkT,EAAAA,CACnD,CAEAI,oBAAAA,CACE,OAAOltC,KAAKsE,SAASw1B,2BA9DG,eA8D6C,CAAEC,UA7D9C,SAAA,CAAA,CA8D3B,CAEAoT,0BAAAA,CACEntC,KAAKgiC,cAAc,IAAM,EACzBhiC,KAAKgiC,cAAc,IAAM,CAC3B,CAAA,ECnEWoL,GAA0B,SAASV,EAAAA,CAC9C,IAAMl1B,EAAS,IAAIu1B,GAAOL,CAAAA,EAE1B,OADAl1B,EAAOiF,QAAAA,EACAjF,EAAOurB,YAAAA,CAChB,ECDMsK,GAAkB,CAAED,EAAAA,EAELE,GAAN,KAAMA,CACnBh+B,YAAYyyB,EAAazqB,EAAkBxX,EAAAA,CACzCE,KAAKwkC,YAAcxkC,KAAKwkC,YAAYvtB,KAAKjX,IAAAA,EACzCA,KAAK+hC,YAAcA,EACnB/hC,KAAKsX,iBAAmBA,EACxBtX,KAAKF,QAAUA,EACfE,KAAKutC,YAAc,IAAIzB,GAAY9rC,KAAK+hC,WAAAA,EACxC/hC,KAAKwtC,QAAUH,GAAgB19B,MAAM,CAAA,CACvC,CAEA89B,aAAanpC,EAAAA,CACX,OAAOtE,KAAKgjC,aAAa,CAAE1+B,SAAAA,EAAU09B,cAAe,CAAE,EAAG,CAAA,CAAA,CAAA,CAC3D,CAEA0L,UAAAA,CAAoB,IAAXrpC,EAAIY,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,GACRX,EAAWg4B,GAAWv9B,MAAMsF,EAAM,CAAEk4B,iBAAkBv8B,KAAKF,OAAAA,CAAAA,EAAW48B,YAAAA,EAC5E,OAAO18B,KAAKytC,aAAanpC,CAAAA,CAC3B,CAEAqpC,SAAQjoB,EAAAA,CAA8B,GAAA,CAA7BphB,SAAEA,EAAQ09B,cAAEA,CAAAA,EAAetc,EAElC,OADAphB,EAAWgwB,GAAS1iB,SAAStN,CAAAA,EACtBtE,KAAKgjC,aAAa,CAAE1+B,SAAAA,EAAU09B,cAAAA,CAAAA,CAAAA,CACvC,CAEAgB,aAAa0J,EAAAA,CAEX,OADA1sC,KAAKutC,YAAc,IAAIzB,GAAY9rC,KAAK+hC,WAAAA,EACjC/hC,KAAK+hC,YAAYiB,aAAa0J,CAAAA,CACvC,CAEAhQ,aAAAA,CACE,OAAO18B,KAAK+hC,YAAYz9B,QAC1B,CAEAuiC,qBAAAA,CACE,OAAO7mC,KAAK+hC,YAAY8E,oBAAAA,CAC1B,CAEA9D,aAAAA,CACE,OAAO/iC,KAAK+hC,YAAYgB,YAAAA,CAC1B,CAEA7yB,QAAAA,CACE,OAAOlQ,KAAK+iC,YAAAA,CACd,CAIAmC,kBAAkB7R,EAAAA,CAChB,OAAOrzB,KAAK+hC,YAAYmD,kBAAkB7R,CAAAA,CAC5C,CAEAwR,iBAAiBl4B,EAAAA,CACf,OAAO3M,KAAK+hC,YAAY8C,iBAAiBl4B,CAAAA,CAC3C,CAEAi4B,kBAAkBvmC,EAAAA,CAChB,OAAO2B,KAAK+hC,YAAY6C,kBAAkBvmC,CAAAA,CAC5C,CAEAslC,eAAer/B,EAAAA,CACb,OAAOtE,KAAK+hC,YAAY4B,eAAer/B,CAAAA,CACzC,CAEAigC,WAAW5lC,EAAAA,CACT,OAAOqB,KAAK+hC,YAAYwC,WAAW5lC,CAAAA,CACrC,CAEA6lC,YAAYv5B,EAAAA,CACV,OAAOjL,KAAK+hC,YAAYyC,YAAYv5B,CAAAA,CACtC,CAEAm5B,WAAW//B,EAAAA,CACT,OAAOrE,KAAK+hC,YAAYqC,WAAW//B,CAAAA,CACrC,CAEAu/B,aAAa7yB,EAAAA,CACX,OAAO/Q,KAAK+hC,YAAY6B,aAAa7yB,CAAAA,CACvC,CAEAwyB,WAAW/jC,EAAAA,CACT,OAAOQ,KAAK+hC,YAAYwB,WAAW/jC,CAAAA,CACrC,CAEAukC,iBAAAA,CACE,OAAO/jC,KAAK+hC,YAAYgC,gBAAAA,CAC1B,CAIA9B,kBAAAA,CACE,OAAOjiC,KAAK+hC,YAAYE,iBAAAA,CAC1B,CAEAiE,aAAAA,CACE,OAAOlmC,KAAK+hC,YAAYmE,YAAAA,CAC1B,CAEA0H,wBAAwBnhB,EAAAA,CACtB,IAAM0N,EAAgBn6B,KAAK08B,YAAAA,EAAcnG,uBAAuB,CAAE9J,EAAUA,EAAW,CAAA,CAAA,EACvF,OAAOzsB,KAAKsX,iBAAiBu2B,6BAA6B1T,CAAAA,CAC5D,CAEA8O,2BAA2B5V,EAAAA,CACzB,OAAOrzB,KAAK+hC,YAAYkH,2BAA2B5V,CAAAA,CACrD,CAEA0V,sBAAsB1V,EAAAA,CACpB,OAAOrzB,KAAK+hC,YAAYgH,sBAAsB1V,CAAAA,CAChD,CAEA+S,iBAAiBpE,EAAAA,CACf,OAAOhiC,KAAK+hC,YAAYqE,iBAAiBpE,CAAAA,CAC3C,CAIA8L,kBAAkBrvC,EAAAA,CAAoB,IAAd2F,EAAAA,EAAKa,UAAAC,OAAA,GAAAD,UAAA,KAAA,SAAAA,UAAA,GAC3B,OAAOjF,KAAK+hC,YAAY0E,oBAAoBhoC,EAAM2F,CAAAA,CACpD,CAEA2pC,kBAAkBtvC,EAAAA,CAChB,OAAOuB,KAAK+hC,YAAYwE,oBAAoB9nC,CAAAA,CAC9C,CAEAuvC,qBAAqBvvC,EAAAA,CACnB,OAAOuB,KAAK+hC,YAAY2E,uBAAuBjoC,CAAAA,CACjD,CAEAwvC,oBAAoBxvC,EAAAA,CAClB,OAAOuB,KAAK+hC,YAAYgE,uBAAuBtnC,CAAAA,CACjD,CAGAwoC,0BAA0Bxa,EAAUhuB,EAAM2F,EAAAA,CACxCpE,KAAK+hC,YAAYkF,0BAA0Bxa,EAAUhuB,EAAM2F,CAAAA,CAC7D,CAIAmjC,yBAAAA,CACE,OAAOvnC,KAAK+hC,YAAYwF,wBAAAA,CAC1B,CAEAE,yBAAAA,CACE,OAAOznC,KAAK+hC,YAAY0F,wBAAAA,CAC1B,CAEA9U,sBAAAA,CACE,GAAI3yB,KAAKunC,wBAAAA,EACP,OAAOvnC,KAAK+hC,YAAYpP,qBAAAA,CAE5B,CAEAC,sBAAAA,CACE,GAAI5yB,KAAKynC,wBAAAA,EACP,OAAOznC,KAAK+hC,YAAYnP,qBAAAA,CAE5B,CAIAga,SAAAA,CACE,OAAO5sC,KAAKutC,YAAYX,QAAAA,CAC1B,CAEAD,SAAAA,CACE,OAAO3sC,KAAKutC,YAAYZ,QAAAA,CAC1B,CAEAV,gBAAgBC,EAAAA,CAA+C,GAAA,CAAlC1oB,QAAEA,EAAO2oB,eAAEA,CAAAA,EAAgBlnC,UAAAC,OAAAD,GAAAA,UAAAE,KAAAF,OAAAA,UAAG,GAAA,CAAA,EACzD,OAAOjF,KAAKutC,YAAYtB,gBAAgBC,EAAa,CAAE1oB,QAAAA,EAAS2oB,eAAAA,CAAAA,CAAAA,CAClE,CAEAhqC,MAAAA,CACE,GAAInC,KAAK4sC,QAAAA,EACP,OAAO5sC,KAAKutC,YAAYprC,KAAAA,CAE5B,CAEAG,MAAAA,CACE,GAAItC,KAAK2sC,QAAAA,EACP,OAAO3sC,KAAKutC,YAAYjrC,KAAAA,CAE5B,CAAA,EC5KmB4rC,GAAN,KAAMA,CACnB5+B,YAAYxP,EAAAA,CACVE,KAAKF,QAAUA,CACjB,CAEAquC,mCAAmCC,EAAW1+B,EAAAA,CAAuC,GAAA,CAA/B9F,OAAEA,CAAAA,EAAQ3E,UAAAC,OAAA,GAAAD,UAAAE,KAAA,OAAAF,UAAG,GAAA,CAAE2E,OAAAA,EAAQ,EACvE5C,EAAa,EACbqnC,EAAAA,GACErU,EAAW,CAAExnB,MAAO,EAAG9C,OAAQ,CAAA,EAC/B4+B,EAAoBtuC,KAAKuuC,mCAAmCH,CAAAA,EAE9DE,IACFF,EAAYE,EAAkBvuC,WAC9B2P,EAAS5I,GAAqBwnC,CAAAA,GAGhC,IAAMlT,EAAS/zB,GAASrH,KAAKF,QAAS,CAAE0H,YAAagnC,EAAAA,CAAAA,EAErD,KAAOpT,EAAOE,SAAAA,GAAY,CACxB,IAAMh1B,EAAO80B,EAAOG,YAEpB,GAAIj1B,IAAS8nC,GAAankC,GAAemkC,CAAAA,EAAY,CAC9CpkC,GAAmB1D,CAAAA,IACtB0zB,EAAStqB,QAAUA,GAErB,KACF,CACE,GAAIpJ,EAAKvG,aAAequC,GACtB,GAAIpnC,MAAiB0I,EACnB,cAEG,CAAK7I,GAAoBunC,EAAW9nC,CAAAA,GACrCU,EAAa,EACf,MAIA2C,GAAiBrD,EAAM,CAAEsD,OAAAA,CAAAA,CAAAA,GACvBykC,GACFrU,EAASxnB,QAEXwnB,EAAStqB,OAAS,EAClB2+B,EAAAA,IAEArU,EAAStqB,QAAU++B,GAAWnoC,CAAAA,CAGpC,CAEA,OAAO0zB,CACT,CAEA0U,mCAAmC1U,EAAAA,CACjC,IAAIoU,EAAW1+B,EACf,GAAIsqB,EAASxnB,QAAU,GAAKwnB,EAAStqB,SAAW,EAAG,CAIjD,IAHA0+B,EAAYpuC,KAAKF,QACjB4P,EAAS,EAEF0+B,EAAU1kC,YAEf,GADA0kC,EAAYA,EAAU1kC,WAClBF,GAAqB4kC,CAAAA,EAAY,CACnC1+B,EAAS,EACT,KACF,CAGF,MAAO,CAAE0+B,EAAW1+B,CAAAA,CACtB,CAEA,GAAA,CAAMpJ,EAAMqoC,CAAAA,EAAe3uC,KAAK4uC,8BAA8B5U,CAAAA,EAC9D,GAAK1zB,EAAL,CAEA,GAAI2D,GAAe3D,CAAAA,EACbmoC,GAAWnoC,CAAAA,IAAU,GACvB8nC,EAAY9nC,EAAKvG,WAAWA,WAC5B2P,EAAS5I,GAAqBR,EAAKvG,UAAAA,EAC/BiK,GAAmB1D,EAAM,CAAE7H,KAAM,OAAA,CAAA,GACnCiR,MAGF0+B,EAAY9nC,EACZoJ,EAASsqB,EAAStqB,OAASi/B,OAExB,CAGL,GAFAP,EAAY9nC,EAAKvG,WAAAA,CAEZ4J,GAAiBrD,EAAKW,eAAAA,GAAAA,CACpBuC,GAAqB4kC,CAAAA,EACxB,KAAO9nC,IAAS8nC,EAAU9nB,YACxBhgB,EAAO8nC,EACPA,EAAYA,EAAUruC,WAAAA,CAClByJ,GAAqB4kC,CAAAA,IAAAA,CAO/B1+B,EAAS5I,GAAqBR,CAAAA,EAC1B0zB,EAAStqB,SAAW,GACtBA,GAEJ,CAEA,MAAO,CAAE0+B,EAAW1+B,CAAAA,CAlCT,CAmCb,CAEAk/B,8BAA8B5U,EAAAA,CAC5B,IAAI1zB,EAAMqoC,EACNj/B,EAAS,EAEb,QAAW6rB,KAAev7B,KAAK6uC,4BAA4B7U,EAASxnB,KAAAA,EAAQ,CAC1E,IAAMtN,EAASupC,GAAWlT,CAAAA,EAE1B,GAAIvB,EAAStqB,QAAUA,EAASxK,EAC9B,GAAI+E,GAAesxB,CAAAA,GAGjB,GAFAj1B,EAAOi1B,EACPoT,EAAaj/B,EACTsqB,EAAStqB,SAAWi/B,GAAc3kC,GAAmB1D,CAAAA,EACvD,WAEQA,IACVA,EAAOi1B,EACPoT,EAAaj/B,GAKjB,GADAA,GAAUxK,EACNwK,EAASsqB,EAAStqB,OACpB,KAEJ,CAEA,MAAO,CAAEpJ,EAAMqoC,CAAAA,CACjB,CAIAJ,mCAAmCjoC,EAAAA,CACjC,KAAOA,GAAQA,IAAStG,KAAKF,SAAS,CACpC,GAAIqK,GAAwB7D,CAAAA,EAC1B,OAAOA,EAETA,EAAOA,EAAKvG,UACd,CACF,CAEA8uC,4BAA4Br8B,EAAAA,CAC1B,IAAM2K,EAAQ,CAAA,EACRie,EAAS/zB,GAASrH,KAAKF,QAAS,CAAE0H,YAAasnC,EAAAA,CAAAA,EACjDC,EAAAA,GAEJ,KAAO3T,EAAOE,SAAAA,GAAY,CACxB,IAAMh1B,EAAO80B,EAAOG,YAElB,IAAIjC,EADN,GAAI7vB,GAAwBnD,CAAAA,GAQ1B,GANIgzB,GAAc,KAChBA,IAEAA,EAAa,EAGXA,IAAe9mB,EACjBu8B,EAAAA,WACSA,EACT,WAEOA,GACT5xB,EAAM5T,KAAKjD,CAAAA,CAEf,CAEA,OAAO6W,CACT,CAAA,EAGIsxB,GAAa,SAASnoC,EAAAA,CAC1B,OAAIA,EAAKD,WAAaG,KAAK6D,UACrBL,GAAmB1D,CAAAA,EACd,EAEQA,EAAK0C,YACN9D,OAEPpG,GAAQwH,CAAAA,IAAU,MAAQ6D,GAAwB7D,CAAAA,EACpD,EAEA,CAEX,EAEMwoC,GAAyB,SAASxoC,EAAAA,CACtC,OAAI0oC,GAAqB1oC,CAAAA,IAAUqB,WAAW+4B,cACrC8N,GAAyBloC,CAAAA,EAEzBqB,WAAW84B,aAEtB,EAEMuO,GAAuB,SAAS1oC,EAAAA,CACpC,OAAI8D,GAAoB9D,CAAAA,EACfqB,WAAW84B,cAEX94B,WAAW+4B,aAEtB,EAEM8N,GAA2B,SAASloC,EAAAA,CACxC,OAAI6D,GAAwB7D,EAAKvG,UAAAA,EACxB4H,WAAW84B,cAEX94B,WAAW+4B,aAEtB,ECjOqBuO,GAAN,KAAMA,CACnBC,wBAAuBxpB,EAAAA,CAAW,IAC5BtN,EAAAA,CADkB+2B,EAAEA,EAACC,EAAEA,CAAAA,EAAG1pB,EAE9B,GAAIphB,SAAS+qC,uBAAwB,CACnC,GAAA,CAAMC,WAAEA,EAAU5/B,OAAEA,CAAAA,EAAWpL,SAAS+qC,uBAAuBF,EAAGC,CAAAA,EAGlE,OAFAh3B,EAAW9T,SAASirC,YAAAA,EACpBn3B,EAASo3B,SAASF,EAAY5/B,CAAAA,EACvB0I,CACT,CAAO,GAAI9T,SAASmrC,oBAClB,OAAOnrC,SAASmrC,oBAAoBN,EAAGC,CAAAA,EAClC,GAAI9qC,SAAS6G,KAAKukC,gBAAiB,CACxC,IAAMC,EAAmBz3B,GAAAA,EACzB,GAAA,CAGE,IAAMgf,EAAY5yB,SAAS6G,KAAKukC,gBAAAA,EAChCxY,EAAU0Y,YAAYT,EAAGC,CAAAA,EACzBlY,EAAU2Y,OAAAA,CACZ,MAAE,CAAe,CAGjB,OAFAz3B,EAAWF,GAAAA,EACXK,GAAYo3B,CAAAA,EACLv3B,CACT,CACF,CAEA03B,0BAA0B13B,EAAAA,CACxB,IAAM9G,EAAQhB,MAAMC,KAAK6H,EAAS23B,eAAAA,CAAAA,EAIlC,MAAO,CAHOz+B,EAAM,GACRA,EAAMA,EAAMpM,OAAS,EAAA,CAGnC,CAAA,ECjBmB8qC,GAAN,cAA+BriC,EAAAA,CAC5C2B,YAAYxP,EAAAA,CACVyP,MAAAA,GAAStK,SAAAA,EACTjF,KAAKiwC,aAAejwC,KAAKiwC,aAAah5B,KAAKjX,IAAAA,EAC3CA,KAAK2X,mBAAqB3X,KAAK2X,mBAAmBV,KAAKjX,IAAAA,EACvDA,KAAKF,QAAUA,EACfE,KAAKkwC,eAAiB,IAAIhC,GAAeluC,KAAKF,OAAAA,EAC9CE,KAAKmwC,YAAc,IAAIlB,GACvBjvC,KAAKowC,UAAY,EACjB3rC,EAAY,YAAa,CAAEE,UAAW3E,KAAKF,QAAS+E,aAAc7E,KAAKiwC,YAAAA,CAAAA,CACzE,CAEA3L,kBAAAA,CAA+B,IAAdn8B,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACzB,OAAIkD,EAAQyB,SAAZ,GACS5J,KAAK4oC,gCAAgC1wB,GAAAA,CAAAA,EACnC/P,EAAQ4/B,WACV/nC,KAAKqwC,qBACHrwC,KAAKswC,oBACPtwC,KAAKswC,oBAELtwC,KAAKqwC,oBAEhB,CAEA9H,iBAAiBpO,EAAAA,CACf,GAAIn6B,KAAKswC,oBAAqB,OAC9BnW,EAAgBrkB,EAAeqkB,CAAAA,EAE/B,IAAM/hB,EAAWpY,KAAKuwC,gCAAgCpW,CAAAA,EAClD/hB,IACFG,GAAYH,CAAAA,EACZpY,KAAKwwC,2BAA2BrW,CAAAA,EAEpC,CAEAsW,+BAA+BC,EAAAA,CAC7BA,EAAa56B,EAAe46B,CAAAA,EAC5B,IAAMjb,EAAgBz1B,KAAK2wC,mBAAmBD,EAAW,EAAA,EACnDrY,EAAcr4B,KAAK2wC,mBAAmBD,EAAW,EAAA,EACvD1wC,KAAKuoC,iBAAiB,CAAE9S,EAAe4C,CAAAA,CAAAA,CACzC,CAEAwV,6BAA6B1T,EAAAA,CAC3B,IAAM/hB,EAAWpY,KAAKuwC,gCAAgCpW,CAAAA,EACtD,GAAI/hB,EACF,OAAOpY,KAAK8vC,0BAA0B13B,CAAAA,EAAU,EAEpD,CAEAqxB,uBAAuBzP,EAAAA,CACrB,IAAM1zB,EAAOgK,MAAMC,KAAKvQ,KAAK4uC,8BAA8B5U,CAAAA,CAAAA,EAAW,GACtE,OAAOhwB,GAAmB1D,CAAAA,CAC5B,CAEAsqC,MAAAA,CACM5wC,KAAKowC,aAAgB,IACvBpwC,KAAKwwC,2BAAAA,EACLxwC,KAAKswC,oBAAsBtwC,KAAKskC,iBAAAA,EAEpC,CAEAuM,QAAAA,CACE,GAAyB,EAAnB7wC,KAAKowC,WAAc,EAAG,CAC1B,GAAA,CAAME,oBAAEA,CAAAA,EAAwBtwC,KAEhC,GADAA,KAAKswC,oBAAsB,KACvBA,GAAuB,KACzB,OAAOtwC,KAAKuoC,iBAAiB+H,CAAAA,CAEjC,CACF,CAEAQ,gBAAAA,CAAiB,IAAA34B,EACf,OAAAA,EAAOL,GAAAA,KAAiB,MAAAK,IAAjBL,OAAiBK,OAAjBA,EAAmBK,gBAAAA,CAC5B,CAEA6sB,sBAAAA,CAAuB,IAAA0L,EACrB,QAAOA,EAAA74B,GAAAA,KAAa64B,MAAAA,IAAb74B,OAAa64B,OAAbA,EAAeC,aAAtB,EACF,CAEAC,qBAAAA,CACE,MAAA,CAAQjxC,KAAKqlC,qBAAAA,CACf,CAEAuD,gCAAgCxwB,EAAUjQ,EAAAA,CACxC,GAAIiQ,GAAY,MAAZA,CAAqBpY,KAAKkxC,sBAAsB94B,CAAAA,EAAW,OAE/D,IAAMjC,EAAQnW,KAAKmuC,mCAAmC/1B,EAASO,eAAgBP,EAASghB,YAAajxB,CAAAA,EACrG,GAAA,CAAKgO,EAAO,OAEZ,IAAMC,EAAMgC,EAAS44B,UAAAA,OAEjBhxC,KAAKmuC,mCAAmC/1B,EAASQ,aAAcR,EAASihB,UAAWlxB,CAAAA,EAEvF,OAAO2N,EAAe,CAAEK,EAAOC,CAAAA,CAAAA,CACjC,CAEA65B,cAAAA,CACE,OAAOjwC,KAAKmxC,iBAAAA,CACd,CAEAA,kBAAAA,CACE,IAAIC,EACJpxC,KAAKqxC,OAAAA,GAEL,IAAMC,EAASA,IAAAA,CAQb,GAPAtxC,KAAKqxC,OAAAA,GACLE,aAAaC,CAAAA,EAEblhC,MAAMC,KAAK6gC,CAAAA,EAAgBvoC,QAASvD,GAAAA,CAClCA,EAAQE,QAAAA,CAAS,CAAA,EAGfqB,GAAoBvC,SAAUtE,KAAKF,OAAAA,EACrC,OAAOE,KAAK2X,mBAAAA,CACd,EAGI65B,EAAgB77B,WAAW27B,EAAQ,GAAA,EAEzCF,EAAiB,CAAE,YAAa,SAAA,EAAYpgC,IAAKtM,GAC/CD,EAAYC,EAAW,CAAEC,UAAWL,SAAUO,aAAcysC,CAAAA,CAAAA,CAAAA,CAEhE,CAEA35B,oBAAAA,CACE,GAAA,CAAK3X,KAAKqxC,QAAAA,CAAW1qC,GAAqB3G,KAAKF,OAAAA,EAC7C,OAAOE,KAAKwwC,2BAAAA,CAEhB,CAEAA,2BAA2BrW,EAAAA,CAEwC,IAAAxQ,EAAA8nB,EADjE,IAAItX,IAAwCA,EAAgBn6B,KAAK4oC,gCAAgC1wB,GAAAA,CAAAA,KAAAA,CAC1F5B,GAAe6jB,EAAen6B,KAAKqwC,oBAAAA,EAEtC,OADArwC,KAAKqwC,qBAAuBlW,GAC5BxQ,EAAO3pB,KAAK6pB,YAAQ,MAAAF,IAARE,SAAQ4nB,EAAb9nB,EAAe+nB,0BAAsBD,MAAAA,IAAtBC,OAAsBD,OAArCA,EAAA9rC,KAAAgkB,EAAwC3pB,KAAKqwC,qBAAqB1gC,MAAM,CAAA,CAAA,CAGrF,CAEA4gC,gCAAgCpW,EAAAA,CAC9B,IAAMwX,EAAa3xC,KAAK0uC,mCAAmCvU,EAAc,EAAA,EACnEyX,EAAW17B,GAAiBikB,CAAAA,EAC9BwX,EACA3xC,KAAK0uC,mCAAmCvU,EAAc,EAAA,GAAOwX,EAEjE,GAAIA,GAAc,MAAQC,GAAY,KAAM,CAC1C,IAAMx5B,EAAW9T,SAASirC,YAAAA,EAG1B,OAFAn3B,EAASo3B,SAAAA,GAAYl/B,MAAMC,KAAKohC,GAAc,CAAA,CAAA,CAAA,EAC9Cv5B,EAASy5B,OAAAA,GAAUvhC,MAAMC,KAAKqhC,GAAY,CAAA,CAAA,CAAA,EACnCx5B,CACT,CACF,CAEAu4B,mBAAmBmB,EAAAA,CACjB,IAAM15B,EAAWpY,KAAKkvC,wBAAwB4C,CAAAA,EAChC,IAAAC,EAAd,GAAI35B,EACF,OAAA25B,EAAO/xC,KAAK4oC,gCAAgCxwB,CAAAA,KAAS,MAAA25B,IAAT35B,OAAS25B,OAA9CA,EAAiD,EAE5D,CAEAb,sBAAsB94B,EAAAA,CACpB,OAAIA,EAAS44B,UACJnqC,GAAoB7G,KAAKF,QAASsY,EAASO,cAAAA,EAGhD9R,GAAoB7G,KAAKF,QAASsY,EAASO,cAAAA,GAC3C9R,GAAoB7G,KAAKF,QAASsY,EAASQ,YAAAA,CAGjD,CAAA,EAGFo3B,GAAiBlzB,YAAY,mDAAA,EAC7BkzB,GAAiBlzB,YAAY,mDAAA,EAC7BkzB,GAAiBlzB,YAAY,8CAAA,EAC7BkzB,GAAiBlzB,YAAY,qCAAA,EAC7BkzB,GAAiBlzB,YAAY,uCAAA,EAAA,IAAAk1B,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,WAAAC,GAAA,kBAAAC,GAAA,gBAAAC,GAAA,MAAAC,GAAA,YAAAC,GAAA,SAAAC,GAAA,OAAAC,GAAA,WAAAC,GAAA,cAAAC,GAAA,mBAAAC,GAAA,eAAAC,GAAA,kBAAAC,EAAA,MAAAC,GAAA,YAAAC,GAAA,iBAAAC,GAAA,eAAAC,GAAA,YAAAC,GAAA,KAAAC,GAAA,YAAAC,EAAA,CAAA,EAAAC,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,WAAAC,GAAA,eAAAC,GAAA,UAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,0BAAAC,GAAA,SAAAC,EAAA,CAAA,EC9L7B,CAAM3wC,KAAEA,GAAIsc,IAAEA,GAAKs0B,SAAAA,EAAAA,EAAa1/B,GAE1B2/B,GAAW,SAASn+B,EAAAA,CACxB,OAAO,UAAA,CACL,IAAMo+B,EAAWp+B,EAAGrH,MAAMrO,KAAMiF,SAAAA,EAChC6uC,EAASC,GAAAA,EACJ/zC,KAAKg0C,QACRh0C,KAAKg0C,MAAQ,CAAA,GAEfh0C,KAAKg0C,MAAMzqC,KAAKuqC,EAASxxC,IAAAA,CAAAA,CAE7B,EAEqB2xC,GAAN,cAAyCtmC,EAAAA,CACtD2B,YAAYmQ,EAAiB3f,EAASsuC,EAAAA,CAAyB,IAAdjmC,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACzDsK,MAAAA,GAAStK,SAAAA,EAkDXsjB,GAAAvoB,KAAA,qBAEqB6zC,GAAS,KACrB,CACLE,GAAIA,IAAAA,CACF/zC,KAAKF,QAAQ4I,QAAQ+X,YAAAA,EAAkB,EAEzCne,KAAMA,IAAAA,OAAatC,KAAKF,QAAQ4I,QAAQ+X,WAAAA,EAAAA,CAAAA,EAE1C8H,GAAAvoB,KAAA,aAEW6zC,GAAS,IAAA,CAQpB,IAAM/zC,EAAUmI,EAAY,CAC1BnJ,QAAS,MACT6J,UAAW2W,GAAInS,kBACf1E,KAAM,CAAEgY,YAAAA,EAAa,EACrBxX,WAAYhB,EAAY,CACtBnJ,QAAS,MACT6J,UAAW,kBACXM,WAAYhB,EAAY,CACtBnJ,QAAS,OACT6J,UAAW,+CACXM,WAAYhB,EAAY,CACtBnJ,QAAS,SACT6J,UAAW,kCACXK,YAAahG,GAAKZ,OAClBxD,WAAY,CAAEs1C,MAAOlxC,GAAKZ,MAAAA,EAC1BqG,KAAM,CAAE0rC,WAAY,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EA+C5B,OAzCIn0C,KAAK2M,WAAWkX,cAAAA,GAOlB/jB,EAAQqJ,YACNlB,EAAY,CACVnJ,QAAS,MACT6J,UAAW2W,GAAIvS,4BACf9D,WAAYhB,EAAY,CACtBnJ,QAAS,OACT6J,UAAW2W,GAAIxS,mBACf7D,WAAY,CACVhB,EAAY,CACVnJ,QAAS,OACT6J,UAAW2W,GAAItS,eACfhE,YAAahJ,KAAK2M,WAAWoU,YAAAA,EAC7BniB,WAAY,CAAEs1C,MAAOl0C,KAAK2M,WAAWoU,YAAAA,CAAAA,CAAAA,CAAAA,EAEvC9Y,EAAY,CACVnJ,QAAS,OACT6J,UAAW2W,GAAIpS,eACflE,YAAahJ,KAAK2M,WAAWqU,qBAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAQzCvc,EAAY,QAAS,CAAEE,UAAW7E,EAAS+E,aAAc7E,KAAKo0C,eAAAA,CAAAA,EAC9D3vC,EAAY,QAAS,CACnBE,UAAW7E,EACX8E,iBAAkB,qBAClBC,aAAc7E,KAAKq0C,oBAAAA,CAAAA,EAGrBvuC,GAAa,iCAAkC,CAAEnB,UAAW3E,KAAKF,QAASlB,WAAY,CAAEwN,QAAStM,EAAS6M,WAAY3M,KAAK2M,UAAAA,CAAAA,CAAAA,EAEpH,CACLonC,GAAIA,IAAM/zC,KAAKF,QAAQqJ,YAAYrJ,CAAAA,EACnCwC,KAAMA,IAAM4E,GAAWpH,CAAAA,CAAAA,CACxB,CAAA,CAAA,EACDyoB,GAAAvoB,KAAA,uBAEqB6zC,GAAS,IAAA,CAC9B,IAAMS,EAAWrsC,EAAY,CAC3BnJ,QAAS,WACT6J,UAAW2W,GAAIzS,wBACfjO,WAAY,CAAE21C,YAAavxC,GAAKnB,kBAAAA,EAChC4G,KAAM,CAAEgY,YAAAA,EAAa,CAAA,CAAA,EAEvB6zB,EAASlwC,MAAQpE,KAAKyf,gBAAgBmB,WAAAA,EAEtC,IAAM4zB,EAAgBF,EAASj3B,UAAAA,EAC/Bm3B,EAAc1rC,UAAUC,IAAI,uBAAA,EAC5ByrC,EAAcC,SAAAA,GAEd,IAAMC,EAAa,UAAA,CACjBF,EAAcpwC,MAAQkwC,EAASlwC,MAC/BkwC,EAAS9rC,MAAMya,OAASuxB,EAAcG,aAAe,IAAA,EAGvDlwC,EAAY,QAAS,CAAEE,UAAW2vC,EAAUzvC,aAAc6vC,CAAAA,CAAAA,EAC1DjwC,EAAY,QAAS,CAAEE,UAAW2vC,EAAUzvC,aAAc7E,KAAK40C,eAAAA,CAAAA,EAC/DnwC,EAAY,UAAW,CAAEE,UAAW2vC,EAAUzvC,aAAc7E,KAAK60C,iBAAAA,CAAAA,EACjEpwC,EAAY,SAAU,CAAEE,UAAW2vC,EAAUzvC,aAAc7E,KAAK80C,gBAAAA,CAAAA,EAChErwC,EAAY,OAAQ,CAAEE,UAAW2vC,EAAUzvC,aAAc7E,KAAK+0C,cAAAA,CAAAA,EAE9D,IAAMp0B,EAAa3gB,KAAKF,QAAQgV,cAAc,YAAA,EACxCkgC,EAAoBr0B,EAAWtD,UAAAA,EAErC,MAAO,CACL02B,GAAIA,IAAAA,CAOF,GANApzB,EAAWnY,MAAMy0B,QAAU,OAC3B+X,EAAkB7rC,YAAYmrC,CAAAA,EAC9BU,EAAkB7rC,YAAYqrC,CAAAA,EAC9BQ,EAAkBlsC,UAAUC,IAAG,GAAA1F,OAAIic,GAAI1S,kBAAiB,WAAA,CAAA,EACxD+T,EAAW0d,cAAczpB,aAAaogC,EAAmBr0B,CAAAA,EACzD+zB,EAAAA,EACI10C,KAAKmI,QAAQ8sC,YACf,OAAOx/B,GAAM,IAAM6+B,EAASY,MAAAA,CAAAA,CAC9B,EAEF5yC,MAAAA,CACE4E,GAAW8tC,CAAAA,EACXr0B,EAAWnY,MAAMy0B,QAAU,IAC7B,CAAA,CACD,CAAA,CAAA,EAnLDj9B,KAAKo0C,gBAAkBp0C,KAAKo0C,gBAAgBn9B,KAAKjX,IAAAA,EACjDA,KAAKq0C,qBAAuBr0C,KAAKq0C,qBAAqBp9B,KAAKjX,IAAAA,EAC3DA,KAAK60C,kBAAoB70C,KAAK60C,kBAAkB59B,KAAKjX,IAAAA,EACrDA,KAAK40C,gBAAkB50C,KAAK40C,gBAAgB39B,KAAKjX,IAAAA,EACjDA,KAAK80C,iBAAmB90C,KAAK80C,iBAAiB79B,KAAKjX,IAAAA,EACnDA,KAAK+0C,eAAiB/0C,KAAK+0C,eAAe99B,KAAKjX,IAAAA,EAC/CA,KAAKyf,gBAAkBA,EACvBzf,KAAKF,QAAUA,EACfE,KAAKouC,UAAYA,EACjBpuC,KAAKmI,QAAUA,EACfnI,KAAK2M,WAAa3M,KAAKyf,gBAAgB9S,WACnC7N,GAAQkB,KAAKF,OAAAA,IAAa,MAC5BE,KAAKF,QAAUE,KAAKF,QAAQ4J,YAE9B1J,KAAKm1C,QAAAA,CACP,CAEAA,SAAAA,CACEn1C,KAAKo1C,mBAAAA,EACLp1C,KAAKq1C,WAAAA,EACDr1C,KAAK2M,WAAWkX,cAAAA,GAClB7jB,KAAKs1C,qBAAAA,CAET,CAEAC,WAAAA,CAAY,IAAA5rB,EACV,IAAIrnB,EAAOtC,KAAKg0C,MAAMxH,IAAAA,EAEtB,IADAxsC,KAAKw1C,mBAAAA,EACElzC,GACLA,EAAAA,EACAA,EAAOtC,KAAKg0C,MAAMxH,IAAAA,GAEpB7iB,EAAA3pB,KAAK6pB,YAAQF,MAAAA,IAARE,QAALF,EAAe8rB,6BAA6Bz1C,IAAAA,CAC9C,CAIAw1C,oBAAAA,CACE,GAAIx1C,KAAK01C,gBAAkB,KAAM,CAC/B,IAAMl3C,EAAUwB,KAAK01C,eAER,IAAA7qB,EAAAC,EAENoY,EAAAyS,EAHP31C,KAAK01C,eAAiB,KAClBl3C,GACFqsB,EAAAA,KAAKhB,YADHrrB,MACWqsB,IAARhB,SAAQiB,EAAbD,EAAe+qB,6DAAyD,MAAA9qB,IAAzD8qB,QAAf9qB,EAAAnlB,KAAAklB,EAA2E,CAAErsB,QAAAA,CAAAA,EAAWwB,KAAK2M,UAAAA,GAE7Fu2B,EAAIljC,KAAC6pB,YAAQ,MAAAqZ,IAARrZ,SAAQ8rB,EAAbzS,EAAe2S,4DAAwD,MAAAF,IAAxDE,QAAfF,EAAAhwC,KAAAu9B,EAA0E,UAAWljC,KAAK2M,UAAAA,CAE9F,CACF,CAyIAynC,gBAAgB7uC,EAAAA,CAEd,OADAA,EAAMR,eAAAA,EACCQ,EAAMuwC,gBAAAA,CACf,CAEAzB,qBAAqB9uC,EAAAA,CAAO,IAAAk/B,EAE1B,GADel/B,EAAME,OAAOwG,aAAa,kBAAA,IAElC,SACH,OAAAw4B,EAAOzkC,KAAK6pB,YAAQ4a,MAAAA,IAAR5a,OAAQ4a,OAAbA,EAAesR,8CAA8C/1C,KAAK2M,UAAAA,CAE/E,CAEAkoC,kBAAkBtvC,EAAAA,CAC0B,IAAA6iC,EAAA4N,EAA1C,GAAIpC,GAASruC,EAAM0wC,WAAa,SAG9B,OAFA1wC,EAAMR,eAAAA,EACN/E,KAAKw1C,mBAAAA,GACLpN,EAAOpoC,KAAK6pB,YADP2rB,MACepN,IAARve,SAAQmsB,EAAb5N,EAAe8N,mDAA+CF,MAAAA,IAA/CE,OAA+CF,OAA9DA,EAAArwC,KAAAyiC,EAAiEpoC,KAAK2M,UAAAA,CAEjF,CAEAioC,gBAAgBrvC,EAAAA,CACdvF,KAAK01C,eAAiBnwC,EAAME,OAAOrB,MAAMN,QAAQ,MAAO,GAAA,EAAK0P,KAAAA,CAC/D,CAEAshC,iBAAiBvvC,EAAAA,CACf,OAAOvF,KAAKw1C,mBAAAA,CACd,CAEAT,eAAexvC,EAAAA,CACb,OAAOvF,KAAKw1C,mBAAAA,CACd,CAAA,ECtOmBW,GAAN,cAAoCxoC,EAAAA,CACjD2B,YAAYxP,EAASiiC,EAAAA,CACnBxyB,MAAAA,GAAStK,SAAAA,EACTjF,KAAKo2C,SAAWp2C,KAAKo2C,SAASn/B,KAAKjX,IAAAA,EACnCA,KAAKq2C,QAAUr2C,KAAKq2C,QAAQp/B,KAAKjX,IAAAA,EACjCA,KAAKs2C,mBAAqBt2C,KAAKs2C,mBAAmBr/B,KAAKjX,IAAAA,EAEvDA,KAAKF,QAAUA,EACfE,KAAK+hC,YAAcA,EACnB/hC,KAAKu2C,aAAe,IAAI5wB,GAAa3lB,KAAK+hC,YAAYz9B,SAAU,CAAExE,QAASE,KAAKF,OAAAA,CAAAA,EAEhF2E,EAAY,QAAS,CAAEE,UAAW3E,KAAKF,QAAS+E,aAAc7E,KAAKo2C,QAAAA,CAAAA,EACnE3xC,EAAY,OAAQ,CAAEE,UAAW3E,KAAKF,QAAS+E,aAAc7E,KAAKq2C,OAAAA,CAAAA,EAClE5xC,EAAY,QAAS,CACnBE,UAAW3E,KAAKF,QAChB8E,iBAAkB,2BAClBG,eAAAA,EAAgB,CAAA,EAElBN,EAAY,YAAa,CACvBE,UAAW3E,KAAKF,QAChB8E,iBAAkBxG,GAClByG,aAAc7E,KAAKs2C,kBAAAA,CAAAA,EAErB7xC,EAAY,QAAS,CAAEE,UAAW3E,KAAKF,QAAS8E,iBAAgBvB,IAAAA,OAAMjF,EAAAA,EAAsB2G,eAAAA,EAAgB,CAAA,CAC9G,CAEAqxC,SAAS7wC,EAAAA,CAAO,IAAAixC,EACd,IAAM/5B,EAAUA,IAAAA,CACK,IAAAkN,EAAAiZ,EAAnB,GAAA,CAAK5iC,KAAKy2C,QAER,OADAz2C,KAAKy2C,QAAAA,IACL9sB,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQ+Y,EAAbjZ,EAAe+sB,iCAAF/sB,MAA+BiZ,IAA7B8T,OAA6B9T,OAA5CA,EAAAj9B,KAAAgkB,CAAAA,CACT,EAGF,QAAO6sB,EAAAx2C,KAAK22C,eAAZ,MAAuBH,IAAXG,OAAWH,OAAhBA,EAAkBnrB,KAAK5O,CAAAA,IAAYA,EAAAA,CAC5C,CAEA45B,QAAQ9wC,EAAAA,CACNvF,KAAK22C,YAAc,IAAIr6B,QAASC,GACvB9G,GAAM,IAAA,CAC8B,IAAAoV,EAAAoY,EAApCt8B,OAAAA,GAAqB3G,KAAKF,OAAAA,IAC7BE,KAAKy2C,QAAU,MACf5rB,EAAAA,KAAKhB,YADU,MACFgB,IAARhB,SAAQoZ,EAAbpY,EAAe+rB,gCAA4B,MAAA3T,IAA5B2T,QAAf3T,EAAAt9B,KAAAklB,CAAAA,GAEF7qB,KAAK22C,YAAc,KACZp6B,EAAAA,CAAS,CAAA,CAAA,CAGtB,CAEA+5B,mBAAmB/wC,EAAOE,EAAAA,CAAQ,IAAAy9B,EAAAC,EAChC,IAAMx2B,EAAa3M,KAAK62C,yBAAyBpxC,CAAAA,EAC3CwvC,EAAAA,CAAAA,CAAgBvvC,GAA2BH,EAAME,OAAQ,CAAEb,iBAAkB,YAAA,CAAA,EACnF,OAAAs+B,EAAOljC,KAAK6pB,YAAQqZ,MAAAA,IAARrZ,SAAQsZ,EAAbD,EAAe4T,4CAAwC,MAAA3T,IAAxC2T,OAAwC3T,OAAvDA,EAAAx9B,KAAAu9B,EAA0Dv2B,EAAY,CAAEsoC,YAAAA,CAAAA,CAAAA,CACjF,CAEA8B,wBAAAA,CACE,OAAI/2C,KAAKg3C,oBAAAA,EACAh3C,KAAKu2C,aAAavwB,cAElBhmB,KAAKF,OAEhB,CAEA8lB,QAAAA,CAAS,IAAAwkB,EAAAC,EAO0D5F,EAAAwS,EAAA7O,EAAA8O,EAAAA,OAN7Dl3C,KAAK2iC,WAAa3iC,KAAK+hC,YAAYY,WACrC3iC,KAAKu2C,aAAaxwB,YAAY/lB,KAAK+hC,YAAYz9B,QAAAA,EAC/CtE,KAAKu2C,aAAa3wB,OAAAA,EAClB5lB,KAAK2iC,SAAW3iC,KAAK+hC,YAAYY,UAG/B3iC,KAAKm3C,oBAAAA,GAAAA,CAA0Bn3C,KAAKu2C,aAAarwB,SAAAA,KACnDue,EAAAA,KAAK5a,YAD8C3D,MACtCue,IAAR5a,SAAQotB,EAAbxS,EAAe2S,6CAAyC,MAAAH,IAAzCG,QAAfH,EAAAtxC,KAAA8+B,CAAAA,EACAzkC,KAAKu2C,aAAa1wB,KAAAA,GAClBuiB,EAAAA,KAAKve,YADahE,MACLuiB,IAARve,SAAQqtB,EAAb9O,EAAeiP,4CAAwC,MAAAH,IAAxCG,QAAfH,EAAAvxC,KAAAyiC,CAAAA,IAGFgC,EAAOpqC,KAAK6pB,YAAQugB,MAAAA,IAARvgB,SAAQwgB,EAAbD,EAAekN,kCAAFlN,MAAgCC,IAA9BiN,OAA8BjN,OAA7CA,EAAA1kC,KAAAykC,CAAAA,CACT,CAEAmN,sBAAsBrpC,EAAAA,CAEpB,OADAlO,KAAKyd,wBAAwBvP,CAAAA,EACtBlO,KAAK4lB,OAAAA,CACd,CAEAnI,wBAAwBvP,EAAAA,CACtB,OAAOlO,KAAKu2C,aAAa94B,wBAAwBvP,CAAAA,CACnD,CAEAwQ,sBAAAA,CACE,OAAO1e,KAAKu2C,aAAa73B,qBAAAA,CAC3B,CAEAG,mBAAAA,CACE,OAAO7e,KAAKu2C,aAAa13B,kBAAAA,CAC3B,CAEAC,oBAAAA,CACE,OAAO9e,KAAKu2C,aAAaz3B,mBAAAA,CAC3B,CAEA04B,kBAAAA,CACE,OAAOx3C,KAAKu2C,aAAat3B,0BAAAA,CAC3B,CAIA+3B,qBAAAA,CACE,MAAA,CAAA,CAASh3C,KAAKy3C,gBAChB,CAEAC,qCAAqC/qC,EAAYxE,EAAAA,CAAS,IAAAwvC,EACxD,KAAIA,EAAI33C,KAACy3C,oBAAgB,MAAAE,IAAhBF,OAAgBE,OAArBA,EAAuBhrC,cAAeA,EAAY,OACtD,IAAM7M,EAAUE,KAAKu2C,aAAa/3B,qBAAqB7R,CAAAA,EACvD,GAAA,CAAK7M,EAAS,OAEdE,KAAK43C,0BAAAA,EACL,IAAMn4B,EAAkBzf,KAAK+hC,YAAYz9B,SAASq1B,gCAAgChtB,CAAAA,EAClF3M,KAAKy3C,iBAAmB,IAAIxD,GAA2Bx0B,EAAiB3f,EAASE,KAAKF,QAASqI,CAAAA,EAC/FnI,KAAKy3C,iBAAiB5tB,SAAW7pB,IACnC,CAEA43C,2BAAAA,CAA4B,IAAAC,EAC1B,OAAAA,EAAO73C,KAAKy3C,oBAAgB,MAAAI,IAAhBJ,OAAgBI,OAArBA,EAAuBtC,UAAAA,CAChC,CAIAE,8BAAAA,CAEE,OADAz1C,KAAKy3C,iBAAmB,KACjBz3C,KAAK4lB,OAAAA,CACd,CAEAgwB,0DAA0Dh3C,EAAY+N,EAAAA,CAAY,IAAA49B,EAAAC,EAEhF,OADAD,EAAAA,KAAK1gB,YACL,MADa0gB,IAAR1gB,SAAQ2gB,EAAbD,EAAeuN,6CAAyCtN,MAAAA,IAAzCsN,QAAftN,EAAA7kC,KAAA4kC,EAA2D59B,CAAAA,EACpD3M,KAAK+hC,YAAY7Q,8BAA8BtyB,EAAY+N,CAAAA,CACpE,CAEAkpC,yDAAyD9tB,EAAWpb,EAAAA,CAAY,IAAA+9B,EAAAC,EAE9E,OADAD,EAAAA,KAAK7gB,YACL,MADa6gB,IAAR7gB,SAAQ8gB,EAAbD,EAAeoN,6CAAyCnN,MAAAA,IAAzCmN,QAAfnN,EAAAhlC,KAAA+kC,EAA2D/9B,CAAAA,EACpD3M,KAAK+hC,YAAY1K,6BAA6BtP,EAAWpb,CAAAA,CAClE,CAEAopC,8CAA8CppC,EAAAA,CAAY,IAAAk+B,EAAAC,EACxD,OAAAD,EAAO7qC,KAAK6pB,YAAQghB,MAAAA,IAARhhB,SAAQihB,EAAbD,EAAekN,sDAAkD,MAAAjN,IAAlDiN,OAAkDjN,OAAjEA,EAAAnlC,KAAAklC,EAAoEl+B,CAAAA,CAC7E,CAEAupC,gDAAgDvpC,EAAAA,CAAY,IAAAq+B,EAAAC,EAC1D,OAAAD,EAAOhrC,KAAK6pB,YAAQmhB,MAAAA,IAARnhB,SAAQohB,EAAbD,EAAegN,wDAAoD,MAAA/M,IAApD+M,OAAoD/M,OAAnEA,EAAAtlC,KAAAqlC,EAAsEr+B,CAAAA,CAC/E,CAIAwqC,qBAAAA,CACE,MAAA,CAAQn3C,KAAKg3C,oBAAAA,CACf,CAEAH,yBAAyB/2C,EAAAA,CACvB,OAAOE,KAAK+hC,YAAYz9B,SAASysB,kBAAkBnwB,SAASd,EAAQ4I,QAAQiZ,OAAQ,EAAA,CAAA,CACtF,CAAA,ECnKmBs2B,GAAN,cAAyBtqC,EAAAA,CAAAA,ECQlCuqC,GAAuB,oBACvBC,GAAe,IAAA90C,OAAO60C,GAAuB,GAAA,EAE7C/vC,GAAU,CACdvJ,WAAAA,GACAw5C,UAAAA,GACAC,cAAAA,GACAC,sBAAAA,GACAC,QAAAA,EAAS,EAGUC,GAAN,cAA+B7qC,EAAAA,CAC5C2B,YAAYxP,EAAAA,CACVyP,MAAMzP,CAAAA,EACNE,KAAKy4C,UAAYz4C,KAAKy4C,UAAUxhC,KAAKjX,IAAAA,EACrCA,KAAKF,QAAUA,EACfE,KAAK04C,SAAW,IAAI/sC,OAAO6sC,iBAAiBx4C,KAAKy4C,SAAAA,EACjDz4C,KAAKmW,MAAAA,CACP,CAEAA,OAAAA,CAEE,OADAnW,KAAK4X,MAAAA,EACE5X,KAAK04C,SAASC,QAAQ34C,KAAKF,QAASqI,EAAAA,CAC7C,CAEAiP,MAAAA,CACE,OAAOpX,KAAK04C,SAASE,WAAAA,CACvB,CAEAH,UAAUI,EAAAA,CAGmB,IAAAlvB,EAAAmvB,EAA3B,GAFA94C,KAAK64C,UAAUtvC,KAAAA,GAAQ+G,MAAMC,KAAKvQ,KAAK+4C,yBAAyBF,CAAAA,GAAc,CAAA,CAAA,CAAA,EAE1E74C,KAAK64C,UAAU3zC,OAEjB,OADAykB,EAAI3pB,KAAC6pB,YAAQ,MAAAF,IAARE,SAAQivB,EAAbnvB,EAAeqvB,oBAAgB,MAAAF,IAAhBE,QAAfF,EAAAnzC,KAAAgkB,EAAkC3pB,KAAKi5C,mBAAAA,CAAAA,EAChCj5C,KAAK4X,MAAAA,CAEhB,CAIAA,OAAAA,CACE5X,KAAK64C,UAAY,CAAA,CACnB,CAEAE,yBAAyBF,EAAAA,CACvB,OAAOA,EAAUrhC,OAAQ0hC,GAChBl5C,KAAKm5C,sBAAsBD,CAAAA,CAAAA,CAEtC,CAEAC,sBAAsBD,EAAAA,CACpB,GAAIl5C,KAAKo5C,cAAcF,EAASzzC,MAAAA,EAC9B,MAAA,GAEF,QAAWa,KAAQgK,MAAMC,KAAKvQ,KAAKq5C,wBAAwBH,CAAAA,CAAAA,EACzD,GAAIl5C,KAAKs5C,kBAAkBhzC,CAAAA,EAAO,MAAA,GAEpC,MAAA,EACF,CAEAgzC,kBAAkBhzC,EAAAA,CAChB,OAAOA,IAAStG,KAAKF,SAAAA,CAAYE,KAAKo5C,cAAc9yC,CAAAA,GAAAA,CAAU8D,GAAoB9D,CAAAA,CACpF,CAEA8yC,cAAc9yC,EAAAA,CACZ,OAAOZ,GAA2BY,EAAM,CAAE1B,iBAAkBuzC,EAAAA,CAAAA,CAC9D,CAEAkB,wBAAwBH,EAAAA,CACtB,IAAM/7B,EAAQ,CAAA,EACd,OAAQ+7B,EAAStuC,UACV,aACCsuC,EAASjlC,gBAAkBikC,IAC7B/6B,EAAM5T,KAAK2vC,EAASzzC,MAAAA,EAEtB,UACG,gBAEH0X,EAAM5T,KAAK2vC,EAASzzC,OAAO1F,UAAAA,EAC3Bod,EAAM5T,KAAK2vC,EAASzzC,MAAAA,EACpB,UACG,YAEH0X,EAAM5T,KAAAA,GAAQ+G,MAAMC,KAAK2oC,EAASK,YAAc,CAAA,CAAA,CAAA,EAChDp8B,EAAM5T,KAAAA,GAAQ+G,MAAMC,KAAK2oC,EAASM,cAAgB,CAAA,CAAA,CAAA,EAGtD,OAAOr8B,CACT,CAEA87B,oBAAAA,CACE,OAAOj5C,KAAKy5C,uBAAAA,CACd,CAEAA,wBAAAA,CACE,GAAA,CAAMC,UAAEA,EAASC,UAAEA,CAAAA,EAAc35C,KAAK45C,gCAAAA,EAChCC,EAAc75C,KAAK85C,4BAAAA,EAEzBxpC,MAAMC,KAAKspC,EAAYH,SAAAA,EAAW7wC,QAASkxC,GAAAA,CACpCzpC,MAAMC,KAAKmpC,CAAAA,EAAW7vC,SAASkwC,CAAAA,GAClCL,EAAUnwC,KAAKwwC,CAAAA,CACjB,CAAA,EAGFJ,EAAUpwC,KAAAA,GAAQ+G,MAAMC,KAAKspC,EAAYF,WAAa,CAAA,CAAA,CAAA,EAEtD,IAAMK,EAAU,CAAA,EAEVnQ,EAAQ6P,EAAUjoC,KAAK,EAAA,EACzBo4B,IACFmQ,EAAQC,UAAYpQ,GAGtB,IAAMqQ,EAAUP,EAAUloC,KAAK,EAAA,EAK/B,OAJIyoC,IACFF,EAAQG,YAAcD,GAGjBF,CACT,CAEAI,mBAAmBxvC,EAAAA,CACjB,OAAO0F,MAAMC,KAAKvQ,KAAK64C,SAAAA,EAAWrhC,OAAQ0hC,GAAaA,EAAStuC,OAASA,CAAAA,CAC3E,CAEAkvC,6BAAAA,CACE,IAAIG,EAAWI,EACTd,EAAa,CAAA,EACbC,EAAe,CAAA,EAErBlpC,aAAMC,KAAKvQ,KAAKo6C,mBAAmB,WAAA,CAAA,EAAcvxC,QAASqwC,GAAAA,CACxDK,EAAWhwC,KAAAA,GAAQ+G,MAAMC,KAAK2oC,EAASK,YAAc,CAAA,CAAA,CAAA,EACrDC,EAAajwC,KAAAA,GAAQ+G,MAAMC,KAAK2oC,EAASM,cAAgB,CAAA,CAAA,CAAA,CAAI,CAAA,EAI7DD,EAAWr0C,SAAW,GAAKs0C,EAAat0C,SAAW,GAAKuE,GAAwB+vC,EAAa,EAAA,GAG7FS,EAAY,CAAA,EACZI,EAAc,CAAE;CAAA,IAEhBJ,EAAYK,GAAgBf,CAAAA,EAC5Bc,EAAcC,GAAgBd,CAAAA,GAMzB,CAAEE,UAHSO,EAAUziC,OAAO,CAAChY,EAAMgT,IAAUhT,IAAS66C,EAAY7nC,EAAAA,EAAQxB,IAAI8H,EAAAA,EAGjE6gC,UAFFU,EAAY7iC,OAAO,CAAChY,EAAMgT,IAAUhT,IAASy6C,EAAUznC,EAAAA,EAAQxB,IAAI8H,EAAAA,CAAAA,CAGvF,CAEA8gC,iCAAAA,CACE,IAAI/P,EAAOC,EACLyQ,EAAqBv6C,KAAKo6C,mBAAmB,eAAA,EAEnD,GAAIG,EAAmBr1C,OAAQ,CAC7B,IAAMs1C,EAAgBD,EAAmB,GACvCE,EAAcF,EAAmBA,EAAmBr1C,OAAS,GAIzDw1C,EvCxJyB,SAASC,EAAWC,EAAAA,CACvD,IAAI/Q,EAAOC,EAUX,OATA6Q,EAAY7rC,GAAYC,IAAI4rC,CAAAA,GAC5BC,EAAY9rC,GAAYC,IAAI6rC,CAAAA,GAEd11C,OAASy1C,EAAUz1C,OAAAA,CAC7B4kC,EAASD,CAAAA,EAAU3wB,GAAuByhC,EAAWC,CAAAA,EAAAA,CAErD/Q,EAAOC,CAAAA,EAAY5wB,GAAuB0hC,EAAWD,CAAAA,EAGlD,CAAE9Q,MAAAA,EAAOC,QAAAA,CAAAA,CAClB,EuC0IwBhxB,GAAgB0hC,EAAcK,QAAAA,EAC9B/hC,GAAgB2hC,EAAYh1C,OAAOgD,IAAAA,CAAAA,EAErDohC,EAAQ6Q,EAAW7Q,MACnBC,EAAU4Q,EAAW5Q,OACvB,CAEA,MAAO,CACL4P,UAAW7P,EAAQ,CAAEA,CAAAA,EAAU,CAAA,EAC/B8P,UAAW7P,EAAU,CAAEA,CAAAA,EAAY,CAAA,CAAA,CAEvC,CAAA,EAGIwQ,GAAkB,UAAA,CAAqB,IAAZn9B,EAAKlY,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACjCzF,EAAO,CAAA,EACb,QAAW8G,KAAQgK,MAAMC,KAAK4M,CAAAA,EAC5B,OAAQ7W,EAAKD,eACNG,KAAK6D,UACR7K,EAAK+J,KAAKjD,EAAKmC,IAAAA,EACf,WACGjC,KAAKC,aACJ3H,GAAQwH,CAAAA,IAAU,KACpB9G,EAAK+J,KAAK;CAAA,EAEV/J,EAAK+J,KAAAA,GAAQ+G,MAAMC,KAAK+pC,GAAgBh0C,EAAK2C,UAAAA,GAAe,CAAA,CAAA,CAAA,EAKpE,OAAOzJ,CACT,ECrMqBs7C,GAAN,cAAwCl/B,EAAAA,CACrDtM,YAAY3Q,EAAAA,CACV4Q,MAAAA,GAAStK,SAAAA,EACTjF,KAAKrB,KAAOA,CACd,CAEA8d,QAAQ9R,EAAAA,CACN,IAAMowC,EAAS,IAAIC,WAYnB,OAVAD,EAAOlyB,QAAU,IAAMle,EAAAA,EAAS,EAEhCowC,EAAOryB,OAAS,IAAA,CACdqyB,EAAOlyB,QAAU,KACjB,GAAA,CACEkyB,EAAOE,MAAAA,CACT,MAAE,CAAe,CACjB,OAAOtwC,EAAAA,GAAe3K,KAAKrB,IAAAA,CAAK,EAG3Bo8C,EAAOG,kBAAkBl7C,KAAKrB,IAAAA,CACvC,CAAA,ECnBmBw8C,GAAN,KAAMA,CACnB7rC,YAAYxP,EAAAA,CACVE,KAAKF,QAAUA,CACjB,CAEAs7C,aAAa71C,EAAAA,CACX,MAAA,CAAA,CAAK2O,GAAelT,iBAEpBhB,KAAKq7C,cAAgBr7C,KAAKuF,MAC1BvF,KAAKuF,MAAQA,EAEbvF,KAAKs7C,mCAAAA,EACLt7C,KAAKu7C,iCAAAA,EAEEv7C,KAAKw7C,UACd,CAQAF,oCAAAA,CACMt7C,KAAKy7C,uCAAAA,GAA4CC,GAAoB17C,KAAKF,QAAQ67C,UAAW37C,KAAKuF,MAAMkD,IAAAA,IAC1GzI,KAAKw7C,UAAAA,GACLx7C,KAAKuF,MAAMR,eAAAA,EAEf,CAGAw2C,kCAAAA,CACMv7C,KAAKw7C,WAAax7C,KAAKuF,MAAMq2C,YAAc,eAC7C57C,KAAKw7C,UAAAA,GAET,CAEAC,wCAAAA,CAAyC,IAAAI,EACvC,OAAO77C,KAAK87C,wBAAAA,GAA6B97C,KAAK+7C,oCAAAA,KAAyCF,EAAI77C,KAACuF,MAAMkD,QAAI,MAAAozC,IAAJpzC,OAAIozC,OAAfA,EAAiB32C,QAAS,EACnH,CAEA42C,yBAAAA,CACE,OAAO97C,KAAKuF,MAAMqF,OAAS,eAAiB5K,KAAKuF,MAAMq2C,YAAc,YACvE,CAEAG,qCAAAA,CAAsC,IAAAC,EAAAC,EACpC,QAAOD,EAAAh8C,KAAKq7C,iBAAaW,MAAAA,IAAbX,OAAaW,OAAlBA,EAAoBpxC,QAAS,aAAaqxC,EAAIj8C,KAACq7C,iBAAa,MAAAY,IAAbZ,OAAaY,OAAlBA,EAAoB93C,OAAQ,cAC/E,CAAA,EAGIu3C,GAAsBA,CAACQ,EAAOC,IAC3BC,GAAUF,CAAAA,IAAWE,GAAUD,CAAAA,EAGlCE,GAA6B,IAAI3tC,OAAMrL,IAAAA,O/D1DD,S+D0DkC,GAAA,EAAAA,OAAIU,GAAgBV,GAAAA,EAAAA,OAAIW,GAAkB,QAAA,EAAU,GAAA,EAC5Ho4C,GAAa58C,GAASA,EAAKsE,QAAQu4C,GAA4B,GAAA,EAAK7oC,KAAAA,ECtDrD8oC,GAAN,cAA8B3uC,EAAAA,CAI3C2B,YAAYxP,EAAAA,CACVyP,MAAAA,GAAStK,SAAAA,EACTjF,KAAKF,QAAUA,EACfE,KAAKu8C,iBAAmB,IAAI/D,GAAiBx4C,KAAKF,OAAAA,EAClDE,KAAKu8C,iBAAiB1yB,SAAW7pB,KACjCA,KAAKw8C,sBAAwB,IAAIrB,GAA6Bn7C,KAAKF,OAAAA,EACnE,QAAW4E,KAAa1E,KAAKsP,YAAYmtC,OACvCh4C,EAAYC,EAAW,CAAEC,UAAW3E,KAAKF,QAAS+E,aAAc7E,KAAK08C,WAAWh4C,CAAAA,CAAAA,CAAAA,CAEpF,CAEAs0C,iBAAiB2D,EAAAA,CAAkB,CAEnCC,4BAAAA,CACE,OAAO58C,KAAKu8C,iBAAiBnlC,KAAAA,CAC/B,CAEAylC,2BAAAA,CACE,OAAO78C,KAAKu8C,iBAAiBpmC,MAAAA,CAC/B,CAEA2mC,eAAAA,CAAgB,IAAAnzB,EAAAozB,EACd,OAAApzB,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQkzB,EAAbpzB,EAAeqzB,mCAAFrzB,MAAiCozB,IAA/BC,OAA+BD,OAA9CA,EAAAp3C,KAAAgkB,CAAAA,CACT,CAEAszB,gBAAAA,CAAiB,IAAApyB,EAAAqyB,EAEf,OADAryB,EAAAA,KAAKhB,YACL,MADagB,IAARhB,SAAQqzB,EAAbryB,EAAesyB,oCAAgC,MAAAD,IAAhCC,QAAfD,EAAAv3C,KAAAklB,CAAAA,EACO7qB,KAAK88C,cAAAA,CACd,CAEAt7C,YAAYyJ,EAAAA,CACV,IAAMmyC,EAAa9sC,MAAMC,KAAKtF,CAAAA,EAAO+F,IAAKrS,GAAS,IAAIm8C,GAA0Bn8C,CAAAA,CAAAA,EACjF,OAAO2d,QAAQ+gC,IAAID,CAAAA,EAAY/xB,KAAMpgB,GAAAA,CACnCjL,KAAKs9C,YAAY,UAAA,CAAW,IAAApa,EAAAqa,EAG1B,OAFAra,EAAIljC,KAAC6pB,YAAQ,MAAAqZ,IAARrZ,QAALqZ,EAAesa,+BAAAA,GACfD,EAAAv9C,KAAKy9C,aAASF,MAAAA,IAATE,QAALF,EAAgB/Y,YAAYv5B,CAAAA,EACrBjL,KAAK88C,cAAAA,CACd,CAAA,CAAE,CAAA,CAEN,CAIAJ,WAAWh4C,EAAAA,CACT,OAAQa,GAAAA,CACDA,EAAMm4C,kBACT19C,KAAKs9C,YAAY,IAAA,CACf,GAAA,CAAK32C,GAAqB3G,KAAKF,OAAAA,EAAU,CACvC,GAAIE,KAAKw8C,sBAAsBpB,aAAa71C,CAAAA,EAAQ,OAEpDvF,KAAK0E,UAAYA,EACjB1E,KAAKsP,YAAYmtC,OAAO/3C,GAAWiB,KAAK3F,KAAMuF,CAAAA,CAChD,CAAA,CAAA,CAEJ,CAEJ,CAEA+3C,YAAY3yC,EAAAA,CACV,GAAA,CAAI,IAAA85B,GACFA,EAAIzkC,KAAC6pB,YAAQ,MAAA4a,IAAR5a,QAAL4a,EAAekZ,+BAAAA,EACfhzC,EAAShF,KAAK3F,IAAAA,CAChB,QAAU,CAAA,IAAAooC,GACRA,EAAIpoC,KAAC6pB,YAAQ,MAAAue,IAARve,QAALue,EAAewV,8BAAAA,CACjB,CACF,CAEAC,eAAe9xC,EAAMvM,EAAAA,CACnB,IAAMwC,EAAOsC,SAAS8D,cAAc,GAAA,EAGpC,OAFApG,EAAK+J,KAAOA,EACZ/J,EAAKgH,YAAcxJ,GAAcuM,EAC1B/J,EAAK87C,SACd,CAAA,EAAAC,GACDx1B,GA7EoB+zB,GAEH,SAAA,CAAA,CAAA,ECUlB,GAAA,CAAM7xC,QAAEA,GAAOmpC,SAAEA,EAAAA,EAAa1/B,GAC1B8pC,GAAkB,EAEDC,GAAN,cAAoC3B,EAAAA,CAmVjDhtC,aAAAA,CACEC,MAAAA,GAAStK,SAAAA,EACTjF,KAAKk+C,kBAAAA,CACP,CAEAC,iBAAAA,CAA8B,IAAdnE,EAAO/0C,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EACxBjF,KAAKo+C,aAAa15C,UAAY1E,KAAK0E,UACnC,QAAWP,KAAO61C,EAAS,CACzB,IAAM51C,EAAQ41C,EAAQ71C,GACtBnE,KAAKo+C,aAAaj6C,GAAOC,CAC3B,CACA,OAAOpE,KAAKo+C,YACd,CAEAF,mBAAAA,CACEl+C,KAAKo+C,aAAe,CAAA,CACtB,CAEAxmC,OAAAA,CAEE,OADA5X,KAAKk+C,kBAAAA,EACErmC,GAAwBD,MAAAA,CACjC,CAIAohC,iBAAiB2D,EAAAA,CACS,IAAAhzB,EAAAozB,EAAxB,OAAI/8C,KAAKq+C,YAAAA,GACP10B,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQkzB,EAAbpzB,EAAe20B,yCAAF30B,MAAuCozB,IAArCuB,OAAqCvB,OAApDA,EAAAp3C,KAAAgkB,CAAAA,EAEA3pB,KAAKs9C,YAAY,UAAA,CAQtB,OAPIt9C,KAAKm5C,sBAAsBwD,CAAAA,IACzB38C,KAAKu+C,mBAAmB5B,CAAAA,EAC1B38C,KAAK88C,cAAAA,EAEL98C,KAAKi9C,eAAAA,GAGFj9C,KAAK4X,MAAAA,CACd,CAAA,CAEJ,CAEA2mC,mBAAkB74B,EAAAA,CAA6B,GAAA,CAA5Bu0B,UAAEA,EAASE,YAAEA,CAAAA,EAAaz0B,EAC3C,GAAI1lB,KAAKo+C,aAAaI,eACpB,MAAA,GAGF,IAAMC,EACJxE,GAAa,KAAOA,IAAcj6C,KAAKo+C,aAAanE,UAAAA,CAAaj6C,KAAKo+C,aAAanE,UAC/EyE,EACJvE,GAAe,KAAOn6C,KAAKo+C,aAAaO,UAAAA,CAAa3+C,KAAKo+C,aAAaO,UAEnEC,EAA4B,CAAE;EAAM;CAAA,EAAQ/0C,SAASowC,CAAAA,GAAAA,CAAewE,EACpEI,EAA4B1E,IAAgB;GAAhBA,CAAyBuE,EAK3D,GAHEE,GAAAA,CAA8BC,GAC9BA,GAAAA,CAA8BD,EAEH,CAC3B,IAAM7oC,EAAQ/V,KAAKiiC,iBAAAA,EACnB,GAAIlsB,EAAO,CAAA,IAAAwnC,EACT,IAAM7tC,EAASkvC,EAA4B3E,EAAUn2C,QAAQ,MAAO,EAAA,EAAIoB,QAAAA,GAAe+0C,GAAW/0C,QAAU,EAC5G,IAAAq4C,EAAIv9C,KAAKy9C,aAAS,MAAAF,IAATE,QAALF,EAAgB7T,qBAAqB3zB,EAAM,GAAKrG,CAAAA,EAClD,MAAA,EAEJ,CACF,CAEA,OAAO+uC,GAAkCC,CAC3C,CAEAvF,sBAAsBwD,EAAAA,CAAiB,IAAAmC,EACrC,IAAMC,EAAc5qC,OAAOC,KAAKuoC,CAAAA,EAAiBz3C,OAAS,EACpD85C,IAAsBF,EAAA9+C,KAAKi/C,oBAAgB,MAAAH,IAAhBG,OAAgBH,OAArBA,EAAuBI,WAAAA,KAAiB,GACpE,OAAOH,GAAAA,CAAgBC,CACzB,CAIAG,qBAAAA,CACE,GAAIn/C,KAAKq+C,YAAAA,EACP,OAAOr+C,KAAKi/C,iBAEZj/C,KAAKi/C,iBAAmB,IAAIG,GAAiBp/C,IAAAA,CAEjD,CAEAq+C,aAAAA,CACE,OAAOr+C,KAAKi/C,kBAAAA,CAAqBj/C,KAAKi/C,iBAAiBI,QAAAA,CACzD,CAEAna,kBAAkB7R,EAAW9tB,EAAAA,CAAO,IAAA+5C,EAClC,QAAIA,EAAAt/C,KAAKy9C,aAA4C,MAAnC6B,IAAT7B,OAAS6B,OAAdA,EAAgBpa,kBAAkB7R,CAAAA,KAAtC,GAMSrzB,KAAKm+C,gBAAgB,CAAEQ,UAAAA,EAAW,CAAA,EALrCp5C,GACFA,EAAMR,eAAAA,EACC/E,KAAK88C,cAAAA,GAAAA,MAKlB,CAEAyC,iCAAiCtqC,EAAAA,CAAc,IAAAuqC,EAC7C,GAAA,ChDhckC,SAASvqC,EAAAA,CAC7C,GAAKA,GAAAA,MAAAA,CAAAA,EAAcwqC,QAAS,MAAA,GAE5B,QAAWt7C,KAAO4Q,GAAkB,CAClC,IAAM3Q,EAAQ2Q,GAAiB5Q,GAE/B,GAAA,CAEE,GADA8Q,EAAawqC,QAAQt7C,EAAKC,CAAAA,EAAAA,CACrB6Q,EAAaC,QAAQ/Q,CAAAA,IAASC,EAAO,MAAA,EAC3C,MAAC,CACA,MAAA,EACF,CACF,CACA,MAAA,EACF,EgDkbgC6Q,CAAAA,EAAe,OAC3C,IAAM3Q,GAAQk7C,EAAGx/C,KAAKy9C,aAAS+B,MAAAA,IAAT/B,OAAS+B,OAAdA,EAAgB3Y,oBAAAA,EAAsBxM,uBAAAA,EAKvD,OAHAplB,EAAawqC,QAAQ,8BAA+B5tC,KAAKO,UAAU9N,CAAAA,CAAAA,EACnE2Q,EAAawqC,QAAQ,YAAa95B,GAAaC,OAAOthB,CAAAA,EAAU4b,SAAAA,EAChEjL,EAAawqC,QAAQ,aAAcn7C,EAAS2K,SAAAA,EAAWnL,QAAQ,MAAO,EAAA,CAAA,EAAA,EAExE,CAEA47C,sBAAsBzqC,EAAAA,CACpB,IAAMwS,EAAQ,CAAA,EAId,OAHAnX,MAAMC,KAAK0E,GAAcwS,OAAS,CAAA,CAAA,EAAI5e,QAAS+B,GAAAA,CAC7C6c,EAAM7c,GAAAA,EAAY,CAAA,EAEb6c,EAAMk4B,OAASl4B,EAAM,gCAAkCA,EAAM,cAAgBA,EAAM,aAC5F,CAEAm4B,gCAAgCj1C,EAAAA,CAC9B,IAAMq3B,EAAgBhiC,KAAKiiC,iBAAAA,EAErBz5B,EAAQ,CACZikB,SAAU,WACV5V,KAAAA,GAAIxT,OAAKsI,OAAOk0C,YAAe,IAAA,EAC/B1f,IAAAA,GAAG98B,OAAKsI,OAAOm0C,YAAe,IAAA,EAC9BC,QAAS,CAAA,EAGLjgD,EAAUmI,EAAY,CAAEO,MAAAA,EAAO1J,QAAS,MAAOuJ,SAAAA,EAAU,CAAA,EAI/D,OAHA/D,SAAS6G,KAAKhC,YAAYrJ,CAAAA,EAC1BA,EAAQo1C,MAAAA,EAED8K,sBAAsB,IAAA,CAC3B,IAAM37C,EAAOvE,EAAQogB,UAGrB,OAFAhZ,GAAWpH,CAAAA,EACXE,KAAKomC,iBAAiBpE,CAAAA,EACfr3B,EAAStG,CAAAA,CAAK,CAAA,CAEzB,CAAA,EACDkkB,GAheoB01B,GAEH,SAAA,CACdgC,QAAQ16C,EAAAA,CACDvF,KAAKq+C,YAAAA,GACRr+C,KAAKk+C,kBAAAA,EAEPl+C,KAAKo+C,aAAa8B,SAAAA,GAElB,IAAMC,EAAUvM,GAASruC,EAAM0wC,SAC/B,GAAIkK,EAAS,CAAA,IAAAC,EACX,IAAI58B,EAAUxjB,KAAKoU,KAElB,CAAE,OAAQ,MAAO,QAAS,MAAA,EAASvL,QAASw3C,GAAAA,CACd,IAAAC,EAAzB/6C,EAAKlC,GAAAA,OAAIg9C,EAAAA,KAAAA,KACPA,IAAa,SACfA,EAAW,WAEb78B,GAAO88B,EAAG98B,KAAO,MAAA88B,IAAP98B,OAAO88B,OAAPA,EAAUD,GACtB,CAAA,IAGED,EAAA58B,KAAO48B,MAAAA,IAAP58B,OAAO48B,OAAPA,EAAUD,KAAY,OACxBngD,KAAKm+C,gBAAgB,CAAEgC,QAAAA,CAAAA,CAAAA,EACvBtoC,GAAwBD,MAAAA,EACxB4L,EAAQ28B,GAASx6C,KAAK3F,KAAMuF,CAAAA,EAEhC,CAEA,GAAI8P,GAA0B9P,CAAAA,EAAQ,CACpC,IAAMg7C,EAAY1vC,OAAOW,aAAajM,EAAM0wC,OAAAA,EAAS31C,YAAAA,EACrD,GAAIigD,EAAW,CAAA,IAAArd,EACb,IAAM9uB,EAAO,CAAE,MAAO,OAAA,EAAUpD,IAAKqvC,GAAAA,CACnC,GAAI96C,EAAKlC,GAAAA,OAAIg9C,EAAAA,KAAAA,GACX,OAAOA,CACT,CAAA,EACC7oC,OAAOrT,GAAOA,CAAAA,EACjBiQ,EAAK7K,KAAKg3C,CAAAA,GACVrd,EAAIljC,KAAK6pB,YAAQqZ,MAAAA,IAARrZ,QAALqZ,EAAesd,yCAAyCpsC,CAAAA,GAC1D7O,EAAMR,eAAAA,CAEV,CACF,CACD,EAED07C,SAASl7C,EAAAA,CAGP,GAFIvF,KAAKo+C,aAAa15C,WAAa,MAC/Ba,EAAMgQ,SACNhQ,EAAMiQ,SAAAA,CAAYjQ,EAAMm7C,OAAQ,OAEpC,IAAM3vC,EAAS4vC,GAAmBp7C,CAAAA,EACtB,IAAAk/B,EAAAmc,EAAZ,OAAI7vC,IACF0zB,EAAIzkC,KAAC6pB,YAAQ,MAAA4a,IAAR5a,QAAL4a,EAAeoc,iCAAAA,GACfD,EAAA5gD,KAAKy9C,aAASmD,MAAAA,IAATnD,QAALmD,EAAgBhd,aAAa7yB,CAAAA,EACtB/Q,KAAKm+C,gBAAgB,CAAElE,UAAWlpC,EAAQ4tC,UAAW3+C,KAAKixC,oBAAAA,CAAAA,CAAAA,GAAAA,MAEpE,EAED6P,UAAUv7C,EAAAA,CAER,GAAA,CAAMkD,KAAEA,CAAAA,EAASlD,EAAAA,CACX00C,UAAEA,CAAAA,EAAcj6C,KAAKo+C,aAC3B,GAAInE,GAAaA,IAAcxxC,GAAQwxC,EAAU8G,YAAAA,IAAkBt4C,EAAM,CAAA,IAAAu4C,EACvE,IAAMjrC,EAAQ/V,KAAKiiC,iBAAAA,EAInB,OAHAjiC,KAAKomC,iBAAiB,CAAErwB,EAAM,GAAIA,EAAM,GAAKkkC,EAAU/0C,MAAAA,CAAAA,GACvD87C,EAAAhhD,KAAKy9C,aAASuD,MAAAA,IAATvD,QAALuD,EAAgBpd,aAAan7B,CAAAA,EAC7BzI,KAAKm+C,gBAAgB,CAAElE,UAAWxxC,CAAAA,CAAAA,EAC3BzI,KAAKomC,iBAAiBrwB,CAAAA,CAC/B,CACD,EAEDkrC,UAAU17C,EAAAA,CACRA,EAAMR,eAAAA,CACP,EAEDm8C,UAAU37C,EAAAA,CAAO,IAAA6iC,EAAA+Y,EAGf,OAFAnhD,KAAKu/C,iCAAiCh6C,EAAM0P,YAAAA,EAC5CjV,KAAKohD,aAAephD,KAAKiiC,iBAAAA,GACzBmG,EAAOpoC,KAAK6pB,YAAQue,MAAAA,IAARve,SAAQs3B,EAAb/Y,EAAeiZ,+BAAFjZ,MAA6B+Y,IAA3BE,OAA2BF,OAA1CA,EAAAx7C,KAAAyiC,CAAAA,CACR,EAEDkZ,SAAS/7C,EAAAA,CACP,GAAIvF,KAAKohD,cAAgBphD,KAAK0/C,sBAAsBn6C,EAAM0P,YAAAA,EAAe,CACvE1P,EAAMR,eAAAA,EACN,IAAMw8C,EAAgB,CAAEpS,EAAG5pC,EAAMi8C,QAASpS,EAAG7pC,EAAMk8C,OAAAA,EACM,IAAArX,EAAAsX,EAAzD,GAAA,CAAK7rC,GAAgB0rC,EAAevhD,KAAKuhD,aAAAA,EAEvC,OADAvhD,KAAKuhD,cAAgBA,GACrBnX,EAAOpqC,KAAK6pB,YADS03B,MACDnX,IAARvgB,SAAQ63B,EAAbtX,EAAeuX,0CAAsCD,MAAAA,IAAtCC,OAAsCD,OAArDA,EAAA/7C,KAAAykC,EAAwDpqC,KAAKuhD,aAAAA,CAExE,CACD,EAEDK,QAAQr8C,EAAAA,CAAO,IAAAglC,EAAAsX,GACbtX,EAAAA,KAAK1gB,YADQg4B,MACAtX,IAAR1gB,SAAQg4B,EAAbtX,EAAeuX,gCAA4B,MAAAD,IAA5BC,QAAfD,EAAAl8C,KAAA4kC,CAAAA,EACAvqC,KAAKohD,aAAe,KACpBphD,KAAKuhD,cAAgB,IACtB,EAEDQ,KAAKx8C,EAAAA,CAAO,IAAAy8C,EAAAC,EACV18C,EAAMR,eAAAA,EACN,IAAMkG,GAAK+2C,EAAGz8C,EAAM0P,gBAAY,MAAA+sC,IAAZ/sC,OAAY+sC,OAAlBA,EAAoB/2C,MAC5BspB,EAAehvB,EAAM0P,aAAaC,QAAQ,6BAAA,EAE1C48B,EAAQ,CAAE3C,EAAG5pC,EAAMi8C,QAASpS,EAAG7pC,EAAMk8C,OAAAA,EAG3C,IAFAQ,EAAAjiD,KAAKy9C,aAASwE,MAAAA,IAATxE,QAALwE,EAAgBxR,+BAA+BqB,CAAAA,EAE3C7mC,GAAAA,MAAAA,EAAO/F,OACTlF,KAAKwB,YAAYyJ,CAAAA,UACRjL,KAAKohD,aAAc,CAAA,IAAA1W,EAAAwX,GAC5BxX,EAAI1qC,KAAC6pB,YAAQ,MAAA6gB,IAAR7gB,QAAL6gB,EAAeyX,4BAAAA,GACfD,EAAAliD,KAAKy9C,aADU0E,MACDD,IAATzE,QAALyE,EAAgBtc,kBAAkB5lC,KAAKohD,YAAAA,EACvCphD,KAAKohD,aAAe,KACpBphD,KAAK88C,cAAAA,CACN,SAAUvoB,EAAc,CAAA,IAAA6tB,EACvB,IAAM99C,EAAWgwB,GAAS+tB,eAAe9tB,CAAAA,GACzC6tB,EAAApiD,KAAKy9C,aAAS2E,MAAAA,IAAT3E,QAAL2E,EAAgBze,eAAer/B,CAAAA,EAC/BtE,KAAK88C,cAAAA,CACP,CAEA98C,KAAKohD,aAAe,KACpBphD,KAAKuhD,cAAgB,IACtB,EAEDe,IAAI/8C,EAAAA,CAAO,IAAAg9C,EACkC1X,EAA3C,IAAA0X,EAAIviD,KAAKy9C,aAAS,MAAA8E,IAAT9E,QAAL8E,EAAgBtR,oBAAAA,IACdjxC,KAAKu/C,iCAAiCh6C,EAAMi9C,aAAAA,GAC9Cj9C,EAAMR,eAAAA,GAGR8lC,EAAI7qC,KAAC6pB,YAAQ,MAAAghB,IAARhhB,QAALghB,EAAe4X,2BAAAA,EACfziD,KAAKklC,kBAAkB,UAAA,EACnB3/B,EAAMm4C,kBACR,OAAO19C,KAAK88C,cAAAA,CAGjB,EAED7iC,KAAK1U,EAAAA,CAAO,IAAAm9C,GACVA,EAAI1iD,KAAKy9C,aAAS,MAAAiF,IAATjF,QAALiF,EAAgBzR,oBAAAA,GACdjxC,KAAKu/C,iCAAiCh6C,EAAMi9C,aAAAA,GAC9Cj9C,EAAMR,eAAAA,CAGX,EAED49C,MAAMp9C,EAAAA,CACJ,IAAMq9C,EAAYr9C,EAAMi9C,eAAiBj9C,EAAMs9C,kBACzCF,EAAQ,CAAEC,UAAAA,CAAAA,EAEhB,GAAA,CAAKA,GAAaE,GAAoCv9C,CAAAA,EASpD,OAAA,KARAvF,KAAK4/C,gCAAiCv7C,GAAAA,CAAS,IAAA2mC,EAAA+X,EAAA5X,EAM7C,OALAwX,EAAM/3C,KAAO,YACb+3C,EAAMt+C,KAAOA,GACb2mC,EAAAhrC,KAAK6pB,YAAQmhB,MAAAA,IAARnhB,QAALmhB,EAAegY,yBAAyBL,CAAAA,GACxCI,EAAA/iD,KAAKy9C,aADmCkF,MAC1BI,IAATtF,QAALsF,EAAgB3e,WAAWue,EAAMt+C,IAAAA,EACjCrE,KAAK88C,cAAAA,GACL3R,EAAOnrC,KAAK6pB,YAAQ,MAAAshB,IAARthB,OAAQshB,OAAbA,EAAe8X,wBAAwBN,CAAAA,CAAM,CAAA,EAKxD,IAAM52C,EAAO62C,EAAU1tC,QAAQ,KAAA,EACzB7Q,EAAOu+C,EAAU1tC,QAAQ,WAAA,EACzBzW,EAAOmkD,EAAU1tC,QAAQ,iBAAA,EAE/B,GAAInJ,EAAM,CAAA,IAAAu/B,EAAA4X,EAAAzX,EACR,IAAI16B,EACJ4xC,EAAM/3C,KAAO,YAEXmG,EADEtS,EACOua,GAA0Bva,CAAAA,EAAM+U,KAAAA,EAEhCzH,EAEX42C,EAAMt+C,KAAOrE,KAAK69C,eAAe9xC,EAAMgF,CAAAA,GACvCu6B,EAAAtrC,KAAK6pB,YAAQyhB,MAAAA,IAARzhB,QAALyhB,EAAe0X,yBAAyBL,CAAAA,EACxC3iD,KAAKm+C,gBAAgB,CAAElE,UAAWlpC,EAAQ4tC,UAAW3+C,KAAKixC,oBAAAA,CAAAA,CAAAA,GAC1DiS,EAAAljD,KAAKy9C,aADqDxM,MAC5CiS,IAATzF,QAALyF,EAAgB9e,WAAWue,EAAMt+C,IAAAA,EACjCrE,KAAK88C,cAAAA,GACLrR,EAAAzrC,KAAK6pB,YAAQ4hB,MAAAA,IAAR5hB,QAAL4hB,EAAewX,wBAAwBN,CAAAA,CACzC,SAAW3tC,GAAwB4tC,CAAAA,EAAY,CAAA,IAAAO,EAAAC,EAAAC,EAC7CV,EAAM/3C,KAAO,aACb+3C,EAAM5xC,OAAS6xC,EAAU1tC,QAAQ,YAAA,GACjCiuC,EAAAnjD,KAAK6pB,YAAQs5B,MAAAA,IAARt5B,QAALs5B,EAAeH,yBAAyBL,CAAAA,EACxC3iD,KAAKm+C,gBAAgB,CAAElE,UAAW0I,EAAM5xC,OAAQ4tC,UAAW3+C,KAAKixC,oBAAAA,CAAAA,CAAAA,GAChEmS,EAAApjD,KAAKy9C,aAD2DxM,MAClDmS,IAAT3F,QAAL2F,EAAgBxf,aAAa+e,EAAM5xC,MAAAA,EACnC/Q,KAAK88C,cAAAA,GACLuG,EAAArjD,KAAK6pB,YAAQw5B,MAAAA,IAARx5B,QAALw5B,EAAeJ,wBAAwBN,CAAAA,CACxC,SAAUt+C,EAAM,CAAA,IAAAi/C,EAAAC,EAAAC,EACfb,EAAM/3C,KAAO,YACb+3C,EAAMt+C,KAAOA,GACbi/C,EAAAtjD,KAAK6pB,YAAQy5B,MAAAA,IAARz5B,QAALy5B,EAAeN,yBAAyBL,CAAAA,GACxCY,EAAAvjD,KAAKy9C,aADmCkF,MAC1BY,IAAT9F,QAAL8F,EAAgBnf,WAAWue,EAAMt+C,IAAAA,EACjCrE,KAAK88C,cAAAA,GACL0G,EAAAxjD,KAAK6pB,YAAQ25B,MAAAA,IAAR35B,QAAL25B,EAAeP,wBAAwBN,CAAAA,CACzC,SAAWryC,MAAMC,KAAKqyC,EAAUn7B,KAAAA,EAAO5d,SAAS,OAAA,EAAU,CAAA,IAAA45C,EAAAC,EACxD,IAAM/kD,GAAI8kD,EAAGb,EAAUe,SAAKF,MAAAA,IAALE,SAAKF,EAAfA,EAAkB,MAAEA,MAAAA,IAAF,SAAEC,EAApBD,EAAsBG,aAAS,MAAAF,IAATE,OAASF,OAA/BA,EAAA/9C,KAAA89C,CAAAA,EACb,GAAI9kD,EAAM,CAAA,IAAAklD,EAAAC,EAAAC,EACR,IAAMziC,EAAY0iC,GAAiBrlD,CAAAA,EAAAA,CAC9BA,EAAKF,MAAQ6iB,IAChB3iB,EAAKF,KAAI,eAAA4E,OAAAA,EAAoB26C,GAAe36C,GAAAA,EAAAA,OAAIie,CAAAA,GAElDqhC,EAAM/3C,KAAO,OACb+3C,EAAMhkD,KAAOA,GACbklD,EAAI7jD,KAAC6pB,YAAQ,MAAAg6B,IAARh6B,QAALg6B,EAAerG,+BAAAA,GACfsG,EAAA9jD,KAAKy9C,aADUD,MACDsG,IAATrG,QAALqG,EAAgBvf,WAAWoe,EAAMhkD,IAAAA,EACjCqB,KAAK88C,cAAAA,GACLiH,EAAA/jD,KAAK6pB,YAAQk6B,MAAAA,IAARl6B,QAALk6B,EAAed,wBAAwBN,CAAAA,CACzC,CACF,CAEAp9C,EAAMR,eAAAA,CACP,EAEDk/C,iBAAiB1+C,EAAAA,CACf,OAAOvF,KAAKm/C,oBAAAA,EAAsBhpC,MAAM5Q,EAAMkD,IAAAA,CAC/C,EAEDy7C,kBAAkB3+C,EAAAA,CAChB,OAAOvF,KAAKm/C,oBAAAA,EAAsBnoC,OAAOzR,EAAMkD,IAAAA,CAChD,EAED07C,eAAe5+C,EAAAA,CACb,OAAOvF,KAAKm/C,oBAAAA,EAAsB/oC,IAAI7Q,EAAMkD,IAAAA,CAC7C,EAED27C,YAAY7+C,EAAAA,CACVvF,KAAKo+C,aAAa8B,SAAAA,EACnB,EAED51C,MAAM/E,EAAAA,CAEJ,OADAvF,KAAKo+C,aAAa8B,SAAAA,GACX36C,EAAMuwC,gBAAAA,CACf,CAAA,CAAA,EACDvtB,GAzOkB01B,GA2OL,OAAA,CACZoG,UAAU9+C,EAAAA,CAAO,IAAA++C,EAEf,OADAA,EAAItkD,KAAC6pB,YAAQ,MAAAy6B,IAARz6B,QAALy6B,EAAezD,iCAAAA,EACR7gD,KAAKklC,kBAAkB,WAAY3/B,CAAAA,CAC3C,EAEDg/C,OAAOh/C,EAAAA,CAAO,IAAAi/C,EAEZ,OADAA,EAAIxkD,KAAC6pB,YAAQ,MAAA26B,IAAR36B,QAAL26B,EAAe3D,iCAAAA,EACR7gD,KAAKklC,kBAAkB,UAAW3/B,CAAAA,CAC1C,EAEDk/C,OAAOl/C,EAAAA,CAAO,IAAAm/C,EAAAC,EAGZ,OAFA3kD,KAAKm+C,gBAAgB,CAAEK,eAAAA,EAAgB,CAAA,GACvCkG,EAAI1kD,KAAC6pB,YAAQ,MAAA66B,IAAR76B,QAAL66B,EAAe7D,iCAAAA,GACf8D,EAAO3kD,KAAKy9C,aAAS,MAAAkH,IAATlH,OAASkH,OAAdA,EAAgB5gB,gBAAAA,CACxB,EAED6gB,IAAIr/C,EAAAA,CAAO,IAAAs/C,EACsCC,GAA/CD,EAAI7kD,KAAKy9C,aAAS,MAAAoH,IAATpH,QAALoH,EAAgBpd,wBAAAA,KAClBqd,EAAI9kD,KAACy9C,aAAS,MAAAqH,IAATrH,QAALqH,EAAgBlyB,qBAAAA,EAChB5yB,KAAK88C,cAAAA,EACLv3C,EAAMR,eAAAA,EAET,EAED8R,KAAKtR,EAAAA,CACmC,IAAAw/C,EAAtC,GAAI/kD,KAAKupC,0BAAAA,EAEP,OADAhkC,EAAMR,eAAAA,GACNggD,EAAO/kD,KAAKy9C,aAAS,MAAAsH,IAATtH,OAASsH,OAAdA,EAAgBhc,sBAAsB,UAAA,CAEhD,EAEDjyB,MAAMvR,EAAAA,CACkC,IAAAy/C,EAAtC,GAAIhlD,KAAKupC,0BAAAA,EAEP,OADAhkC,EAAMR,eAAAA,GACNigD,EAAOhlD,KAAKy9C,aAAS,MAAAuH,IAATvH,OAASuH,OAAdA,EAAgBjc,sBAAsB,SAAA,CAEhD,EAEDkc,QAAS,CACPC,EAAE3/C,EAAAA,CAAO,IAAA4/C,EAEP,OADAA,EAAInlD,KAAC6pB,YAAQ,MAAAs7B,IAARt7B,QAALs7B,EAAetE,iCAAAA,EACR7gD,KAAKklC,kBAAkB,UAAW3/B,CAAAA,CAC1C,EAED6/C,EAAE7/C,EAAAA,CAAO,IAAA8/C,EAEP,OADAA,EAAIrlD,KAAC6pB,YAAQ,MAAAw7B,IAARx7B,QAALw7B,EAAexE,iCAAAA,EACR7gD,KAAKklC,kBAAkB,WAAY3/B,CAAAA,CAC3C,EAED2hB,EAAE3hB,EAAAA,CAAO,IAAA+/C,EAAAC,EAIP,OAHAhgD,EAAMR,eAAAA,GACNugD,EAAItlD,KAAC6pB,YAAQ,MAAAy7B,IAARz7B,QAALy7B,EAAezE,iCAAAA,GACf0E,EAAAvlD,KAAKy9C,aAAS8H,MAAAA,IAAT9H,QAAL8H,EAAgB3hB,aAAa;EAAM,CAAEJ,eAAAA,EAAgB,CAAA,EAC9CxjC,KAAK88C,cAAAA,CACd,CAAA,EAGF0I,MAAO,CACLf,OAAOl/C,EAAAA,CAAO,IAAAkgD,EAAAC,GACZD,EAAIzlD,KAAC6pB,YAAQ,MAAA47B,IAAR57B,QAAL47B,EAAe5E,iCAAAA,GACf6E,EAAA1lD,KAAKy9C,aAASiI,MAAAA,IAATjI,QAALiI,EAAgB9hB,aAAa;CAAA,EAC7B5jC,KAAK88C,cAAAA,EACLv3C,EAAMR,eAAAA,CACP,EAED6/C,IAAIr/C,EAAAA,CAAO,IAAAogD,EACsCC,GAA/CD,EAAI3lD,KAAKy9C,aAAS,MAAAkI,IAATlI,QAALkI,EAAgBpe,wBAAAA,KAClBqe,EAAI5lD,KAACy9C,aAAS,MAAAmI,IAATnI,QAALmI,EAAgBjzB,qBAAAA,EAChB3yB,KAAK88C,cAAAA,EACLv3C,EAAMR,eAAAA,EAET,EAED8R,KAAKtR,EAAAA,CACH,GAAIvF,KAAKupC,0BAAAA,EAEP,OADAhkC,EAAMR,eAAAA,EACC/E,KAAKipC,2BAA2B,UAAA,CAE1C,EAEDnyB,MAAMvR,EAAAA,CACJ,GAAIvF,KAAKupC,0BAAAA,EAEP,OADAhkC,EAAMR,eAAAA,EACC/E,KAAKipC,2BAA2B,SAAA,CAE3C,CAAA,EAGF4c,IAAK,CACHxB,UAAU9+C,EAAAA,CAAO,IAAAugD,EAEf,OADA9lD,KAAKm+C,gBAAgB,CAAEK,eAAAA,EAAgB,CAAA,GACvCsH,EAAO9lD,KAAK6pB,YAAQ,MAAAi8B,IAARj8B,OAAQi8B,OAAbA,EAAejF,iCAAAA,CACxB,CAAA,EAGFkF,KAAM,CACJ1B,UAAU9+C,EAAAA,CAAO,IAAAygD,EAEf,OADAhmD,KAAKm+C,gBAAgB,CAAEK,eAAAA,EAAgB,CAAA,GACvCwH,EAAOhmD,KAAK6pB,YAAQ,MAAAm8B,IAARn8B,OAAQm8B,OAAbA,EAAenF,iCAAAA,CACxB,CAAA,CAAA,CAAA,EAmJN5C,GAAsBnhC,YAAY,6BAAA,EAClCmhC,GAAsBnhC,YAAY,6BAAA,EAClCmhC,GAAsBnhC,YAAY,uCAAA,EAClCmhC,GAAsBnhC,YAAY,sCAAA,EAClCmhC,GAAsBnhC,YAAY,gCAAA,EAElC,IAAMknC,GAAoBrlD,GAAAA,CAAI,IAAAsnD,EAAA,OAAAA,EAAKtnD,EAAKiM,QAAIq7C,MAAAA,IAAJr7C,SAAIq7C,EAATA,EAAWvlD,MAAM,UAAA,KAAW,MAAAulD,IAAX,OAAWA,OAA5BA,EAA+B,EAAE,EAE9Dz1C,GAAAA,GAAwBC,GAAI,IAACC,eAAWD,MAAAA,KAAXC,QAAWD,CAAfA,GAAA9K,KAAG,IAAe,CAAA,GAE3Cg7C,GAAqB,SAASp7C,EAAAA,CAClC,GAAIA,EAAMpB,KAAOqM,IAAwBjL,EAAMpB,IAAIuM,YAAY,CAAA,IAAOnL,EAAM0wC,QAC1E,OAAO1wC,EAAMpB,IACR,CACL,IAAI7E,EAOJ,GANIiG,EAAM2gD,QAAU,KAClB5mD,EAAOiG,EAAM0wC,QACJ1wC,EAAM2gD,QAAU,GAAK3gD,EAAM4gD,WAAa,IACjD7mD,EAAOiG,EAAM4gD,UAGX7mD,GAAQ,MAAQs0C,GAASt0C,KAAU,SACrC,OAAOwP,GAAYiB,eAAe,CAAEzQ,CAAAA,CAAAA,EAAQ2P,SAAAA,CAEhD,CACF,EAEM6zC,GAAsC,SAASv9C,EAAAA,CACnD,IAAMo9C,EAAQp9C,EAAMi9C,cACpB,GAAIG,EAAO,CACT,GAAIA,EAAMl7B,MAAM5d,SAAS,WAAA,EAAc,CAGrC,QAAWe,KAAQ+3C,EAAMl7B,MAAO,CAC9B,IAAM2+B,EAAsB,4BAA4BvmD,KAAK+K,CAAAA,EACvDy7C,EAAyB,SAASxmD,KAAK+K,CAAAA,GAAS+3C,EAAMztC,QAAQtK,CAAAA,EAEpE,GADkCw7C,GAAuBC,EAEvD,MAAA,EAEJ,CACA,MAAA,EACF,CAAO,CACL,IAAMC,EAAsB3D,EAAMl7B,MAAM5d,SAAS,sBAAA,EAC3C08C,EAA0B5D,EAAMl7B,MAAM5d,SAAS,qBAAA,EACrD,OAAOy8C,GAAuBC,CAChC,CACF,CACF,EAEMnH,GAAN,cAA+BzxC,EAAAA,CAC7B2B,YAAYk3C,EAAAA,CACVj3C,MAAAA,GAAStK,SAAAA,EACTjF,KAAKwmD,gBAAkBA,EACvBxmD,KAAKy9C,UAAYz9C,KAAKwmD,gBAAgB/I,UACtCz9C,KAAK6pB,SAAW7pB,KAAKwmD,gBAAgB38B,SACrC7pB,KAAKo+C,aAAep+C,KAAKwmD,gBAAgBpI,aACzCp+C,KAAKyI,KAAO,CAAA,CACd,CAEA0N,MAAM1N,EAAAA,CAGJ,GAFAzI,KAAKyI,KAAK0N,MAAQ1N,EAEdzI,KAAKymD,cAAAA,EAAiB,CAAA,IAAAC,EACuDC,EAA3E3mD,KAAKo+C,aAAa15C,YAAc,YAAc1E,KAAKo+C,aAAanE,aAClE0M,EAAA3mD,KAAKy9C,aAASkJ,MAAAA,IAATlJ,QAALkJ,EAAgBzhB,kBAAkB,MAAA,GAG/BllC,KAAKixC,oBAAAA,IACRjxC,KAAKgmC,kBAAAA,EACLhmC,KAAK88C,cAAAA,GAGP98C,KAAK+V,OAAK2wC,EAAG1mD,KAAKy9C,aAAS,MAAAiJ,IAATjJ,OAASiJ,OAAdA,EAAgBzkB,iBAAAA,CAC/B,CACF,CAEAjrB,OAAOvO,EAAAA,CAGL,GAFAzI,KAAKyI,KAAKuO,OAASvO,EAEfzI,KAAKymD,cAAAA,EAAiB,CACxB,IAAM1wC,EAAQ/V,KAAKmmC,kBAAAA,EACfpwB,IACF/V,KAAKsmC,kBAAAA,EACLtmC,KAAK+V,MAAQA,EAEjB,CACF,CAEAK,IAAI3N,EAAAA,CAGF,OAFAzI,KAAKyI,KAAK2N,IAAM3N,EAEZzI,KAAKymD,cAAAA,GACPzmD,KAAKsmC,kBAAAA,EAEDtmC,KAAK4mD,mBAAAA,GACP5mD,KAAKm+C,gBAAgB,CAAEK,eAAAA,GAAsB0B,SAAAA,EAAU,CAAA,GACvDr1B,EAAI7qB,KAAC6pB,YAAQ,MAAAgB,IAARhB,QAALgB,EAAeg2B,iCAAAA,GACfgG,EAAA7mD,KAAKy9C,aADUoD,MACDgG,IAATpJ,QAALoJ,EAAgBzgB,iBAAiBpmC,KAAK+V,KAAAA,GACtC+wC,EAAI9mD,KAACy9C,aAAS,MAAAqJ,IAATrJ,QAALqJ,EAAgBljB,aAAa5jC,KAAKyI,KAAK2N,GAAAA,GACvC2wC,EAAO/mD,KAAKy9C,aAASsJ,MAAAA,IAATtJ,OAASsJ,OAAdA,EAAgB3gB,iBAAiBpmC,KAAK+V,MAAM,GAAK/V,KAAKyI,KAAK2N,IAAIlR,MAAAA,GAC7DlF,KAAKyI,KAAK0N,OAAS,MAAQnW,KAAKyI,KAAKuO,QAAU,MACxDhX,KAAKi9C,eAAAA,EACEj9C,KAAKwmD,gBAAgB5uC,MAAAA,GAAAA,QAGvB5X,KAAKwmD,gBAAgB5uC,MAAAA,EAXG,IAAAiT,EAAAg8B,EAAAC,EAAAC,CAanC,CAEA7H,YAAAA,CACE,OAAOl/C,KAAKyI,KAAK2N,GACnB,CAEAipC,SAAAA,CACE,OAAOr/C,KAAKk/C,WAAAA,GAAgB,IAC9B,CAEAuH,eAAAA,CACE,MAAA,CAAIh8C,GAAQ3J,sBACHd,KAAKo+C,aAAa8B,QAI7B,CAIA0G,oBAAAA,CAAqB,IAAAI,EAAAC,EACnB,QAAOD,EAAIhnD,KAACyI,KAAK0N,SAAK6wC,MAAAA,IAAL7wC,OAAK6wC,OAAfA,EAAiB9hD,UAAW,KAAK+hD,EAAAjnD,KAAKyI,KAAK2N,OAA1BlR,MAA6B+hD,IAAH7wC,OAAG6wC,OAAbA,EAAe/hD,QAAS,GAAKlF,KAAK+V,KAC5E,CAAA,EAGFqpC,GAAiBtiC,YAAY,iCAAA,EAC7BsiC,GAAiBtiC,YAAY,+BAAA,EAC7BsiC,GAAiBtiC,YAAY,gCAAA,EAC7BsiC,GAAiBtiC,YAAY,gCAAA,EAC7BsiC,GAAiBtiC,YAAY,8BAAA,EAC7BsiC,GAAiBtiC,YAAY,8BAAA,EAC7BsiC,GAAiBtiC,YAAY,8BAAA,EC3nBd,IAAMoqC,GAAN,cAAoC5K,EAAAA,CACjDhtC,aAAAA,CACEC,MAAAA,GAAMtK,SAAAA,EACNjF,KAAK4lB,OAAS5lB,KAAK4lB,OAAO3O,KAAKjX,IAAAA,CACjC,CAscAg5C,kBAAAA,CACE,OAAIh5C,KAAKmnD,gBACHnnD,KAAKonD,WACPz9B,EAAO3pB,KAAK6pB,YAAQF,MAAAA,IAARE,SAAQkzB,EAAbpzB,EAAe20B,yCAAF30B,MAAuCozB,IAArCuB,OAAqCvB,OAApDA,EAAAp3C,KAAAgkB,CAAAA,EAAAA,OAGF3pB,KAAKqnD,QAAAA,EAJQ,IAAA19B,EAAAozB,CAMxB,CAEAuK,gBAAAA,CACE,OAAOtnD,KAAKmnD,gBAAkBnnD,KAAKmnD,gBAAkBnnD,KAAKmnD,gBAAkBnH,sBAAsBhgD,KAAK4lB,MAAAA,CACzG,CAEAA,QAAAA,CAAS,IAAA2hC,EAGc18B,EAFrB28B,qBAAqBxnD,KAAKmnD,eAAAA,EAC1BnnD,KAAKmnD,gBAAkB,KAClBnnD,KAAKonD,YACRv8B,EAAI7qB,KAAC6pB,YAAQ,MAAAgB,IAARhB,QAALgB,EAAejF,OAAAA,GAEjB2hC,EAAIvnD,KAACynD,eAAW,MAAAF,IAAXE,QAALF,EAAA5hD,KAAA3F,IAAAA,EACAA,KAAKynD,YAAc,IACrB,CAEAJ,SAAAA,CAAU,IAAAnkB,EACR,OAAAA,EAAOljC,KAAK6pB,YAAQ,MAAAqZ,IAARrZ,OAAQqZ,OAAbA,EAAemkB,QAAAA,CACxB,CAIAzjB,cAAAA,CAAmC,IAAAa,EAAA,IAAtB1zB,EAAM9L,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,GAAIkD,EAAOlD,UAAAC,OAAAD,EAAAA,UAAAA,GAAAA,OAE/B,OADAw/B,EAAIzkC,KAAC6pB,YAAQ,MAAA4a,IAAR5a,QAAL4a,EAAeoc,iCAAAA,EACR7gD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAA4U,EACxC,OAAAA,EAAOv9C,KAAKy9C,aAASF,MAAAA,IAATE,OAASF,OAAdA,EAAgB3Z,aAAa7yB,EAAQ5I,CAAAA,CAC9C,CAAA,CACF,CAEAu/C,2BAA2BzzC,EAAAA,CAC2B,IAAAm0B,EAApD,GAAIv0B,GAAAA,EAAuBhK,SAASoK,CAAAA,EAElC,OADAm0B,EAAApoC,KAAK6pB,YAAQue,MAAAA,IAARve,QAALue,EAAeuf,qCAAqC1zC,CAAAA,EAC7CjU,KAAK2oC,mBAAmB,UAAA,CAAW,IAAA2W,EACxC,OAAAA,EAAOt/C,KAAKy9C,aAAS,MAAA6B,IAAT7B,OAAS6B,OAAdA,EAAgB9Y,uBAAuBvyB,CAAAA,CAChD,CAAA,CAEJ,CAEA2zC,6BAA6B3zC,EAAe7P,EAAAA,CACU,IAAAgmC,EAApD,GAAIv2B,GAAAA,EAAuBhK,SAASoK,CAAAA,EAElC,OADAm2B,EAAApqC,KAAK6pB,YAAQugB,MAAAA,IAARvgB,QAALugB,EAAeud,qCAAqC1zC,CAAAA,EAC7CjU,KAAK2oC,mBAAmB,UAAA,CAAW,IAAA6W,EACxC,OAAAA,EAAOx/C,KAAKy9C,aAAS+B,MAAAA,IAAT/B,OAAS+B,OAAdA,EAAgB/Y,oBAAoBxyB,EAAe7P,CAAAA,CAC5D,CAAA,CAEJ,CAEA8gC,kBAAkB7R,EAAAA,CAA4D,GAAA,CAAjD4Y,gBAAEA,CAAAA,EAAiBhnC,UAAAC,OAAA,GAAAD,UAAAE,KAAA,OAAAF,UAAG,GAAA,CAAEgnC,gBAAAA,EAAiB,EAC/C,IAAA1B,EAAjB0B,KACF1B,EAAIvqC,KAAC6pB,YAAQ,MAAA0gB,IAAR1gB,QAAL0gB,EAAesW,iCAAAA,GAEjB,IAAMpkC,EAAUA,IAAAA,CAAA,IAAAkqC,EAAA,OAAAA,EAAM3mD,KAAKy9C,aAAS,MAAAkJ,IAATlJ,OAASkJ,OAAdA,EAAgBzhB,kBAAkB7R,CAAAA,CAAU,EAC5Djb,EAAWpY,KAAK6nD,kBAAkB,CAAEC,UAAW9nD,KAAKonD,UAAY,EAAI,CAAA,CAAA,EAC1E,OAAIhvC,EACKpY,KAAK2oC,mBAAmBvwB,EAAUqE,CAAAA,EAElCA,EAAAA,CAEX,CAIAksB,mBAAmBvwB,EAAU1C,EAAAA,CAKb,IAAAgxC,EAAd,OAJwB,OAAbtuC,GAAa,aACtB1C,EAAK0C,EACLA,EAAWpY,KAAK6nD,kBAAAA,GAEdzvC,GACFsuC,EAAO1mD,KAAKy9C,aAASiJ,MAAAA,IAATjJ,OAASiJ,OAAdA,EAAgB/d,mBAAmBvwB,EAAU1C,EAAGuB,KAAKjX,IAAAA,CAAAA,GAE5D6X,GAAwBD,MAAAA,EACjBlC,EAAG/P,KAAK3F,IAAAA,EAEnB,CAEA6nD,mBAAAA,CAAoD,IAAAE,EAAAC,EAAA,GAAA,CAAlCF,UAAEA,CAAAA,EAAW7iD,UAAAC,OAAA,GAAAD,UAAAE,KAAA,OAAAF,UAAG,GAAA,CAAE6iD,UAAW,CAAA,EACvCG,GAAYF,GAAGC,EAAAA,KAAKziD,OAAM2iD,mBAAe,MAAAH,IAAfG,OAAeH,OAA1BA,EAAApiD,KAAAqiD,CAAAA,EACrB,GAAIC,GACEA,EAAa/iD,OAAQ,CACvB,IAAMkT,EAAW+vC,GAAmBF,EAAa,EAAA,EACjD,GAAIH,IAAc,GAAK1vC,EAASnJ,SAAAA,EAAW/J,QAAU4iD,EACnD,OAAO1vC,CAEX,CAEJ,CAEAgwC,UAAU7iD,EAAOmQ,EAAAA,CACf,IAAInE,EACJvR,KAAKuF,MAAQA,EACb,GAAA,CACEgM,EAASmE,EAAG/P,KAAK3F,IAAAA,CACnB,QAAU,CACRA,KAAKuF,MAAQ,IACf,CACA,OAAOgM,CACT,CAAA,EACDgX,GAnjBoB2+B,GAMH,SAAA,CACdjH,QAAQ16C,EAAAA,CACN,GAAI8P,GAA0B9P,CAAAA,EAAQ,CAAA,IAAAmlC,EACpC,IAAM2d,EAAUC,GAA4B/iD,CAAAA,GAC5CmlC,EAAI1qC,KAAK6pB,YAAQ6gB,MAAAA,IAAR7gB,QAAL6gB,EAAe8V,yCAAyC6H,CAAAA,GAC1D9iD,EAAMR,eAAAA,CAEV,KAAO,CACL,IAAItG,EAAO8G,EAAMpB,IACboB,EAAMm7C,SACRjiD,GAAQ,QAEN8G,EAAMgjD,WACR9pD,GAAQ,UAEV,IAAM6G,EAAUtF,KAAKsP,YAAY8E,KAAK3V,GACtC,GAAI6G,EACF,OAAOtF,KAAKooD,UAAU7iD,EAAOD,CAAAA,CAEjC,CACD,EAIDq9C,MAAMp9C,EAAAA,CAAO,IAAAijD,EAEX,IAAI7F,EACE52C,GAAIy8C,EAAGjjD,EAAMi9C,iBAAagG,MAAAA,IAAbhG,OAAagG,OAAnBA,EAAqBtzC,QAAQ,KAAA,EAC1C,OAAIuzC,GAAuBljD,CAAAA,GACzBA,EAAMR,eAAAA,EACC/E,KAAKwB,YAAY+D,EAAMi9C,cAAcv3C,KAAAA,GAGnCy9C,GAA2BnjD,CAAAA,GACpCA,EAAMR,eAAAA,EACN49C,EAAQ,CACN/3C,KAAM,aACNmG,OAAQxL,EAAMi9C,cAActtC,QAAQ,YAAA,CAAA,GAEtC21B,EAAA7qC,KAAK6pB,YAAQghB,MAAAA,IAARhhB,QAALghB,EAAemY,yBAAyBL,CAAAA,GACxCkE,EAAA7mD,KAAKy9C,aADmCkF,MAC1BkE,IAATpJ,QAALoJ,EAAgBjjB,aAAa+e,EAAM5xC,MAAAA,EACnC/Q,KAAK4lB,OAAAA,GACLolB,EAAOhrC,KAAK6pB,YAAQ,MAAAmhB,IAARnhB,OAAQmhB,OAAbA,EAAeiY,wBAAwBN,CAAAA,GAGrC52C,GACTxG,EAAMR,eAAAA,EACN49C,EAAQ,CACN/3C,KAAM,YACNvG,KAAMrE,KAAK69C,eAAe9xC,CAAAA,CAAAA,GAE5Bo/B,EAAAnrC,KAAK6pB,YAAQshB,MAAAA,IAARthB,QAALshB,EAAe6X,yBAAyBL,CAAAA,GACxCmE,EAAA9mD,KAAKy9C,aADmCkF,MAC1BmE,IAATrJ,QAALqJ,EAAgB1iB,WAAWue,EAAMt+C,IAAAA,EACjCrE,KAAK4lB,OAAAA,GACL0lB,EAAOtrC,KAAK6pB,YAAQ,MAAAyhB,IAARzhB,OAAQyhB,OAAbA,EAAe2X,wBAAwBN,CAAAA,GAAAA,OArBF,IAAA9X,EAAAgc,EAAA7b,EAY7BG,EAAA2b,EAAAxb,CAWlB,EAED8Y,YAAY7+C,EAAAA,CACV,IAAMD,EAAUtF,KAAKsP,YAAYq5C,WAAWpjD,EAAMq2C,WAE9Ct2C,IACFtF,KAAKooD,UAAU7iD,EAAOD,CAAAA,EACtBtF,KAAKsnD,eAAAA,EAER,EAEDh9C,MAAM/E,EAAAA,CACJsS,GAAwBD,MAAAA,CACzB,EAEDspC,UAAU37C,EAAAA,CAAO,IAAAwhD,EACqCnG,GAApDmG,EAAI/mD,KAAKy9C,aAAS,MAAAsJ,IAATtJ,QAALsJ,EAAgB3d,6BAAAA,IAClB7jC,EAAM0P,aAAawqC,QAAQ,8BAAA,EAA+B,EAE1Dz/C,KAAK4oD,SAAW,CACd7yC,OAAK6qC,EAAE5gD,KAAKy9C,aAASmD,MAAAA,IAATnD,OAASmD,OAAdA,EAAgB3e,iBAAAA,EACvB6P,MAAO+W,GAAetjD,CAAAA,CAAAA,EAG3B,EAED07C,UAAU17C,EAAAA,CACJujD,GAAkBvjD,CAAAA,GACpBA,EAAMR,eAAAA,CAET,EAEDu8C,SAAS/7C,EAAAA,CACP,GAAIvF,KAAK4oD,SAAU,CACjBrjD,EAAMR,eAAAA,EACN,IAAM+sC,EAAQ+W,GAAetjD,CAAAA,EACqB,IAAAy7C,EAAlD,GAAA,CAAKnrC,GAAgBi8B,EAAO9xC,KAAK4oD,SAAS9W,KAAAA,EAExC,OADA9xC,KAAK4oD,SAAS9W,MAAQA,GACtBkP,EAAOhhD,KAAKy9C,aAAS,MAAAuD,IAATvD,OAASuD,OAAdA,EAAgBvQ,+BAA+BqB,CAAAA,CAE1D,MAAWgX,GAAkBvjD,CAAAA,GAC3BA,EAAMR,eAAAA,CAET,EAEDg9C,KAAKx8C,EAAAA,CACgB,IAAAkmC,EAAAwW,EAAnB,GAAIjiD,KAAK4oD,SAKP,OAJArjD,EAAMR,eAAAA,GACN0mC,EAAIzrC,KAAC6pB,YAAQ,MAAA4hB,IAAR5hB,QAAL4hB,EAAe0W,4BAAAA,GACfF,EAAIjiD,KAACy9C,aAAS,MAAAwE,IAATxE,QAALwE,EAAgBrc,kBAAkB5lC,KAAK4oD,SAAS7yC,KAAAA,EAChD/V,KAAK4oD,SAAW,KACT5oD,KAAKsnD,eAAAA,EACP,GAAIwB,GAAkBvjD,CAAAA,EAAQ,CAAA,IAAA28C,EACnC38C,EAAMR,eAAAA,EACN,IAAM+sC,EAAQ+W,GAAetjD,CAAAA,EAE7B,OADA28C,EAAAliD,KAAKy9C,aAASyE,MAAAA,IAATzE,QAALyE,EAAgBzR,+BAA+BqB,CAAAA,EACxC9xC,KAAKwB,YAAY+D,EAAM0P,aAAahK,KAAAA,CAC7C,CACD,EAED22C,SAAAA,CACqB,IAAAQ,EAAfpiD,KAAK4oD,YACPxG,EAAIpiD,KAACy9C,aAAS,MAAA2E,IAAT3E,QAAL2E,EAAgBhc,iBAAiBpmC,KAAK4oD,SAAS7yC,KAAAA,EAC/C/V,KAAK4oD,SAAW,KAEnB,EAEDzE,eAAe5+C,EAAAA,CACTvF,KAAKonD,YACPpnD,KAAKonD,UAAAA,GACAlzC,GAAenT,eAAef,KAAKsnD,eAAAA,EAE5C,CAAA,CAAA,EACD/+B,GAvIkB2+B,GAyIL,OAAA,CACZ6B,WAAAA,CAAY,IAAAxG,EAC2DG,EAArE,IAAAH,EAAIviD,KAAKy9C,aAAS8E,MAAAA,IAAT9E,QAAL8E,EAAgBtd,oCAAoC,UAAA,EAEtD,OADAjlC,KAAKuF,MAAMR,eAAAA,GACX29C,EAAO1iD,KAAKy9C,aAAS,MAAAiF,IAATjF,OAASiF,OAAdA,EAAgB3Z,sBAAsB,UAAA,CAEhD,EAEDigB,YAAAA,CAAa,IAAAjG,EACyDG,EAApE,IAAAH,EAAI/iD,KAAKy9C,aAASsF,MAAAA,IAATtF,QAALsF,EAAgB9d,oCAAoC,SAAA,EAEtD,OADAjlC,KAAKuF,MAAMR,eAAAA,GACXm+C,EAAOljD,KAAKy9C,aAAS,MAAAyF,IAATzF,OAASyF,OAAdA,EAAgBna,sBAAsB,SAAA,CAEhD,EAEDkgB,WAAAA,CAAY,IAAA7F,EACuDD,EAAAI,EAAjE,IAAAH,EAAIpjD,KAAKy9C,aAAS2F,MAAAA,IAAT3F,QAAL2F,EAAgBpe,gCAAgC,UAAA,EAIlD,OAHAhlC,KAAKuF,MAAMR,eAAAA,GACXo+C,EAAInjD,KAAC6pB,YAAQ,MAAAs5B,IAARt5B,QAALs5B,EAAetC,iCAAAA,GACf0C,EAAAvjD,KAAKy9C,aAAS8F,MAAAA,IAAT9F,QAAL8F,EAAgBre,kBAAkB,UAAA,EAC3BllC,KAAK4lB,OAAAA,CAEf,EAEDsjC,KAAAA,CAAM,IAAApF,EAC2Ca,EAA/C,IAAAb,EAAI9jD,KAAKy9C,aAAS,MAAAqG,IAATrG,QAALqG,EAAgBrc,wBAAAA,EAGlB,OAFAznC,KAAKuF,MAAMR,eAAAA,GACX4/C,EAAI3kD,KAACy9C,aAAS,MAAAkH,IAATlH,QAALkH,EAAgB/xB,qBAAAA,EACT5yB,KAAK4lB,OAAAA,CAEf,EAED,aAAA,CAAc,IAAAi/B,EACmCC,EAA/C,IAAAD,EAAI7kD,KAAKy9C,aAAS,MAAAoH,IAATpH,QAALoH,EAAgBtd,wBAAAA,EAGlB,OAFAvnC,KAAKuF,MAAMR,eAAAA,GACX+/C,EAAI9kD,KAACy9C,aAAS,MAAAqH,IAATrH,QAALqH,EAAgBnyB,qBAAAA,EACT3yB,KAAK4lB,OAAAA,CAEhB,CAAA,CAAA,EACD2C,GAhLkB2+B,GAkLC,aAAA,CAClBiC,qBAAAA,CACE,OAAOnpD,KAAKklC,kBAAkB,WAAY,CAAE+G,gBAAAA,EAAiB,CAAA,CAC9D,EAEDmd,aAAAA,CACE,OAAOppD,KAAKklC,kBAAkB,UAAA,CAC/B,EAEDmkB,cAAAA,CAEE,OADArpD,KAAKuF,MAAMR,eAAAA,EACJ/E,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAoc,EACxC/kD,KAAKspD,mBAAiBvE,EAAG/kD,KAAKy9C,aAAS,MAAAsH,IAATtH,OAASsH,OAAdA,EAAgB9iB,iBAAAA,CAC3C,CAAA,CACD,EAEDsnB,uBAAAA,CACE,OAAOvpD,KAAKklC,kBAAkB,WAAY,CAAE+G,gBAAAA,EAAiB,CAAA,CAC9D,EAEDud,eAAAA,CACE,OAAOxpD,KAAKklC,kBAAkB,UAAA,CAC/B,EAEDukB,uBAAAA,CACE,OAAOzpD,KAAKklC,kBAAkB,UAAA,CAC/B,EAEDwkB,sBAAAA,CACE,OAAO1pD,KAAKklC,kBAAkB,SAAA,CAC/B,EAEDykB,sBAAAA,CACE,OAAO3pD,KAAKklC,kBAAkB,SAAA,CAC/B,EAED0kB,wBAAAA,CACE,OAAO5pD,KAAKklC,kBAAkB,UAAA,CAC/B,EAED2kB,uBAAAA,CACE,OAAO7pD,KAAKklC,kBAAkB,SAAA,CAC/B,EAED4kB,wBAAAA,CACE,OAAO9pD,KAAKklC,kBAAkB,UAAA,CAC/B,EAED6kB,uBAAAA,CACE,OAAO/pD,KAAKklC,kBAAkB,SAAA,CAC/B,EAED8kB,oBAAAA,CACE,OAAOhqD,KAAKklC,kBAAkB,UAAA,CAC/B,EAED+kB,mBAAAA,CACE,OAAOjqD,KAAKklC,kBAAkB,SAAA,CAC/B,EAEDglB,iBAAAA,CACE,OAAOlqD,KAAK4nD,6BAA6B,kBAAmB5nD,KAAKuF,MAAMkD,IAAAA,CACxE,EAED0hD,YAAAA,CACE,OAAOnqD,KAAK0nD,2BAA2B,MAAA,CACxC,EAED0C,iBAAAA,CACE,OAAOpqD,KAAK4nD,6BAA6B,QAAS5nD,KAAKuF,MAAMkD,IAAAA,CAC9D,EAED4hD,gBAAAA,CACE,OAAOrqD,KAAK4nD,6BAA6B,OAAQ5nD,KAAKuF,MAAMkD,IAAAA,CAC7D,EAED6hD,cAAAA,CAAe,IAAAtF,EACb,IAAAA,EAAIhlD,KAAKy9C,aAAS,MAAAuH,IAATvH,QAALuH,EAAgBvd,wBAAAA,EAClB,OAAOznC,KAAK2oC,mBAAmB,UAAA,CAAW,IAAA4c,EACxC,OAAAA,EAAOvlD,KAAKy9C,aAAS,MAAA8H,IAAT9H,OAAS8H,OAAdA,EAAgB3yB,qBAAAA,CACzB,CAAA,CAEH,EAED23B,cAAAA,CACE,OAAOvqD,KAAK0nD,2BAA2B,QAAA,CACxC,EAED8C,qBAAAA,CACE,OAAOxqD,KAAK0nD,2BAA2B,eAAA,CACxC,EAED+C,mBAAAA,CACE,OAAOzqD,KAAK0nD,2BAA2B,aAAA,CACxC,EAEDgD,mBAAAA,CACE,OAAO1qD,KAAK0nD,2BAA2B,aAAA,CACxC,EAEDiD,oBAAAA,CACE,OAAO3qD,KAAK0nD,2BAA2B,cAAA,CACxC,EAEDkD,eAAAA,CAAgB,IAAAlF,EACd,IAAAA,EAAI1lD,KAAKy9C,aAAS,MAAAiI,IAATjI,QAALiI,EAAgBne,wBAAAA,EAClB,OAAOvnC,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAgd,EACxC,OAAAA,EAAO3lD,KAAKy9C,aAAS,MAAAkI,IAATlI,OAASkI,OAAdA,EAAgBhzB,qBAAAA,CACzB,CAAA,CAEH,EAEDk4B,cAAAA,CACE7qD,KAAK2oC,mBAAmB,UAAA,CACtB,QAAW10B,KAAa2xC,EAAI5lD,KAAKy9C,aAASmI,MAAAA,IAATnI,OAASmI,OAAdA,EAAgB5d,qBAAAA,EAAwB,CAAA,IAAA4d,EAAAkF,GAClEA,EAAA9qD,KAAKy9C,aAASqN,MAAAA,IAATrN,QAALqN,EAAgB/kB,uBAAuB9xB,CAAAA,CACzC,CACF,CAAA,CACD,EAED82C,6BAAAA,CACE,OAAO/qD,KAAK4nD,6BAA6B,WAAY5nD,KAAKuF,MAAMkD,IAAAA,CACjE,EAEDuiD,8BAAAA,CACE,OAAOhrD,KAAK4nD,6BAA6B,UAAW5nD,KAAKuF,MAAMkD,IAAAA,CAChE,EAEDwiD,qBAAAA,CACE,OAAOjrD,KAAK0nD,2BAA2B,QAAA,CACxC,EAEDwD,iBAAAA,CACE,OAAOlrD,KAAK0nD,2BAA2B,KAAA,CACxC,EAEDyD,mBAAAA,CACE,OAAOnrD,KAAK0nD,2BAA2B,KAAA,CACxC,EAED0D,iBAAAA,CACE,OAAOprD,KAAK0nD,2BAA2B,WAAA,CACxC,EAED2D,aAAAA,CAAc,IAAAhI,EACZ,OAAAA,EAAOrjD,KAAK6pB,YAAQ,MAAAw5B,IAARx5B,OAAQw5B,OAAbA,EAAeiI,+BAAAA,CACvB,EAEDC,aAAAA,CAAc,IAAAjI,EACZ,OAAAA,EAAOtjD,KAAK6pB,YAAQ,MAAAy5B,IAARz5B,OAAQy5B,OAAbA,EAAekI,+BAAAA,CACvB,EAEDC,uBAAAA,CAEE,OADAzrD,KAAKonD,UAAAA,GACEpnD,KAAK4jC,aAAa5jC,KAAKuF,MAAMkD,IAAAA,CACrC,EAEDijD,uBAAAA,CAEE,OADA1rD,KAAKonD,UAAAA,GACEpnD,KAAK4jC,aAAa5jC,KAAKuF,MAAMkD,IAAAA,CACrC,EAEDkjD,gBAAAA,CACE,IAAM51C,EAAQ/V,KAAKspD,kBACR,IAAA9F,EAAX,GAAIztC,EAGF,OAFA/V,KAAKspD,kBAAoB,MACzB9F,EAAIxjD,KAAC6pB,YAAQ,MAAA25B,IAAR35B,QAAL25B,EAAerB,4BAAAA,EACRniD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAijB,EACxC,OAAAA,EAAO5rD,KAAKy9C,aAAS,MAAAmO,IAATnO,OAASmO,OAAdA,EAAgBhmB,kBAAkB7vB,CAAAA,CAC3C,CAAA,CAEH,EAED81C,iBAAAA,CAAkB,IAAAC,EAChB,GAAA,CAAM72C,aAAEA,CAAAA,EAAiBjV,KAAKuF,MACxBo9C,EAAQ,CAAE1tC,aAAAA,CAAAA,EACVlJ,EAAOkJ,EAAaC,QAAQ,KAAA,EAC5B7Q,EAAO4Q,EAAaC,QAAQ,WAAA,EAElC,GAAInJ,EAAM,CAAA,IAAA83C,EACR,IAAI9yC,EACJ/Q,KAAKuF,MAAMR,eAAAA,EACX49C,EAAM/3C,KAAO,YACb,IAAMnM,EAAOwW,EAAaC,QAAQ,iBAAA,EAEhCnE,EADEtS,EACOua,GAA0Bva,CAAAA,EAAM+U,KAAAA,EAEhCzH,EAEX42C,EAAMt+C,KAAOrE,KAAK69C,eAAe9xC,EAAMgF,CAAAA,GACvC8yC,EAAA7jD,KAAK6pB,YAAQg6B,MAAAA,IAARh6B,QAALg6B,EAAeb,yBAAyBL,CAAAA,EACxC3iD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAojB,EACjC,OAAAA,EAAO/rD,KAAKy9C,aAASsO,MAAAA,IAATtO,OAASsO,OAAdA,EAAgB3nB,WAAWue,EAAMt+C,IAAAA,CAC1C,CAAA,EAEArE,KAAKynD,YAAc,IAAA,CAAM,IAAA1D,EACvB,OAAAA,EAAO/jD,KAAK6pB,YAAQ,MAAAk6B,IAARl6B,OAAQk6B,OAAbA,EAAed,wBAAwBN,CAAAA,CAAM,CAExD,SAAW3tC,GAAwBC,CAAAA,EAAe,CAAA,IAAAqvC,EAChD3B,EAAM/3C,KAAO,aACb+3C,EAAM5xC,OAASkE,EAAaC,QAAQ,YAAA,GACpCovC,EAAAtkD,KAAK6pB,YAAQy6B,MAAAA,IAARz6B,QAALy6B,EAAetB,yBAAyBL,CAAAA,EACxC3iD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAqjB,EACjC,OAAAA,EAAOhsD,KAAKy9C,aAASuO,MAAAA,IAATvO,OAASuO,OAAdA,EAAgBpoB,aAAa+e,EAAM5xC,MAAAA,CAC5C,CAAA,EAEA/Q,KAAKynD,YAAc,IAAA,CAAM,IAAAjD,EACvB,OAAAA,EAAOxkD,KAAK6pB,YAAQ,MAAA26B,IAAR36B,OAAQ26B,OAAbA,EAAevB,wBAAwBN,CAAAA,CAAM,CAEvD,SAAUt+C,EAAM,CAAA,IAAAqgD,EACf1kD,KAAKuF,MAAMR,eAAAA,EACX49C,EAAM/3C,KAAO,YACb+3C,EAAMt+C,KAAOA,GACbqgD,EAAA1kD,KAAK6pB,YAAQ66B,MAAAA,IAAR76B,QAAL66B,EAAe1B,yBAAyBL,CAAAA,EACxC3iD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAsjB,EACjC,OAAAA,EAAOjsD,KAAKy9C,aAASwO,MAAAA,IAATxO,OAASwO,OAAdA,EAAgB7nB,WAAWue,EAAMt+C,IAAAA,CAC1C,CAAA,EAEArE,KAAKynD,YAAc,IAAA,CAAM,IAAAtC,EACvB,OAAAA,EAAOnlD,KAAK6pB,YAAQ,MAAAs7B,IAARt7B,OAAQs7B,OAAbA,EAAelC,wBAAwBN,CAAAA,CAAM,CAExD,UAAOmJ,EAAI72C,EAAahK,SAAK,MAAA6gD,IAAL7gD,QAAb6gD,EAAoB5mD,OAAQ,CAAA,IAAAmgD,EACrC1C,EAAM/3C,KAAO,OACb+3C,EAAMhkD,KAAOsW,EAAahK,MAAM,IAChCo6C,EAAArlD,KAAK6pB,YAAQw7B,MAAAA,IAARx7B,QAALw7B,EAAerC,yBAAyBL,CAAAA,EACxC3iD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAAujB,EACjC,OAAAA,EAAOlsD,KAAKy9C,aAASyO,MAAAA,IAATzO,OAASyO,OAAdA,EAAgB3nB,WAAWoe,EAAMhkD,IAAAA,CAC1C,CAAA,EAEAqB,KAAKynD,YAAc,IAAA,CAAM,IAAAnC,EACvB,OAAAA,EAAOtlD,KAAK6pB,YAAQ,MAAAy7B,IAARz7B,OAAQy7B,OAAbA,EAAerC,wBAAwBN,CAAAA,CAAM,CAExD,CACD,EAEDwJ,gBAAAA,CACE,OAAOnsD,KAAK4jC,aAAa5jC,KAAKuF,MAAMkD,IAAAA,CACrC,EAEDs7B,iBAAAA,CACE,OAAO/jC,KAAK4jC,aAAa;CAAA,CAC1B,EAEDwoB,YAAAA,CACE,OAAOpsD,KAAK4nD,6BAA6B,OAAQ5nD,KAAKuF,MAAMkD,IAAAA,CAC7D,EAED4jD,mBAAAA,CACE,OAAOrsD,KAAK0nD,2BAA2B,QAAA,CACxC,EAED4E,iBAAAA,CAAkB,IAAA7G,EAEhB,OADAA,EAAIzlD,KAAC6pB,YAAQ,MAAA47B,IAAR57B,QAAL47B,EAAe5E,iCAAAA,EACR7gD,KAAK2oC,mBAAmB,UAAA,CAAW,IAAA4jB,EACxC,OAAAA,EAAOvsD,KAAKy9C,aAAS,MAAA8O,IAAT9O,OAAS8O,OAAdA,EAAgBxoB,gBAAAA,CACzB,CAAA,CACD,EAEDyoB,uBAAAA,CACE,IAAMC,EAAczsD,KAAKuF,MAAM0P,aAAaC,QAAQ,YAAA,EAC9CkD,EAAWpY,KAAKuF,MAAM2iD,gBAAAA,EAAkB,GAE9CloD,KAAK2oC,mBAAmBvwB,EAAU,IAAA,CAChCpY,KAAK4jC,aAAa6oB,EAAa,CAAEjpB,eAAAA,EAAgB,CAAA,CAAQ,CAAA,CAE5D,EAEDD,YAAAA,CAAa,IAAAmpB,EACX,OAAO1sD,KAAK4jC,aAAa5jC,KAAKuF,MAAMkD,QAAIikD,EAAI1sD,KAAKuF,MAAM0P,gBAAY,MAAAy3C,IAAZz3C,OAAYy3C,OAAvBA,EAAyBx3C,QAAQ,YAAA,EAAA,CAC9E,EAEDy3C,iBAAAA,CACE,OAAO3sD,KAAK4jC,aAAa5jC,KAAKuF,MAAMkD,IAAAA,CACrC,EAEDmkD,qBAAAA,CACE,OAAO5sD,KAAK0nD,2BAA2B,QAAA,CACzC,CAAA,CAAA,EA8GJ,IAAMS,GAAqB,SAAS0E,EAAAA,CAClC,IAAM92C,EAAQzR,SAASirC,YAAAA,EAGvB,OAFAx5B,EAAMy5B,SAASqd,EAAYl0C,eAAgBk0C,EAAYzzB,WAAAA,EACvDrjB,EAAM87B,OAAOgb,EAAYj0C,aAAci0C,EAAYxzB,SAAAA,EAC5CtjB,CACT,EAIM+yC,GAAqBvjD,GAAAA,CAAK,IAAAy8C,EAAA,OAAK1xC,MAAMC,OAAKyxC,EAAAz8C,EAAM0P,gBAAY,MAAA+sC,IAAZ/sC,OAAY+sC,OAAlBA,EAAoBv6B,QAAS,CAAA,CAAA,EAAI5d,SAAS,OAAA,CAAQ,EAE5F4+C,GAAyB,SAASljD,EAAAA,CACtC,IAAMq9C,EAAYr9C,EAAMi9C,cACxB,GAAII,EACF,OAAOA,EAAUn7B,MAAM5d,SAAS,OAAA,GAAY+4C,EAAUn7B,MAAMviB,SAAW,GAAK09C,EAAU33C,MAAM/F,QAAU,CAE1G,EAEMwjD,GAA6B,SAASnjD,EAAAA,CAC1C,IAAMq9C,EAAYr9C,EAAMi9C,cACxB,GAAII,EACF,OAAOA,EAAUn7B,MAAM5d,SAAS,YAAA,GAAiB+4C,EAAUn7B,MAAMviB,SAAW,CAEhF,EAEMojD,GAA8B,SAAS/iD,EAAAA,CAC3C,IAAM8iD,EAAU,CAAA,EAQhB,OAPI9iD,EAAMm7C,QACR2H,EAAQ9+C,KAAK,KAAA,EAEXhE,EAAMgjD,UACRF,EAAQ9+C,KAAK,OAAA,EAEf8+C,EAAQ9+C,KAAKhE,EAAMpB,GAAAA,EACZkkD,CACT,EAEMQ,GAAkBtjD,IAAW,CACjC4pC,EAAG5pC,EAAMi8C,QACTpS,EAAG7pC,EAAMk8C,OAAAA,GChmBLqL,GAA0B,wBAC1BC,GAAuB,qBACvBC,GAAAA,GAAqB3pD,OAAMypD,GAAuBzpD,IAAAA,EAAAA,OAAK0pD,EAAAA,EACvDE,GAAiB,qBACjBC,GAAoB,GAAA7pD,OAAM4pD,GAAkC,oBAAA,EAC5DE,GAAoB,GAAA9pD,OAAM4pD,GAAmC,qBAAA,EAC7DG,GAAmB,GAAA/pD,OAAM4pD,GAAkC,oBAAA,EAC3DI,GAAoBA,CAACvtD,EAASmU,KAC7BA,IAAiBA,EAAgBq5C,GAAiBxtD,CAAAA,GAChDA,EAAQgV,cAAa,2BAAAzR,OAA4B4Q,EAAAA,IAAAA,CAAAA,GAEpDs5C,GAAiBztD,GAAYA,EAAQmM,aAAa,kBAAA,EAClDqhD,GAAoBxtD,GACjBA,EAAQmM,aAAa,qBAAA,GAA0BnM,EAAQmM,aAAa,4BAAA,EAIxDuhD,GAAN,cAAgC7/C,EAAAA,CAC7C2B,YAAYxP,EAAAA,CACVyP,MAAMzP,CAAAA,EACNE,KAAKq0C,qBAAuBr0C,KAAKq0C,qBAAqBp9B,KAAKjX,IAAAA,EAC3DA,KAAKytD,wBAA0BztD,KAAKytD,wBAAwBx2C,KAAKjX,IAAAA,EACjEA,KAAK0tD,qBAAuB1tD,KAAK0tD,qBAAqBz2C,KAAKjX,IAAAA,EAC3DA,KAAK2tD,sBAAwB3tD,KAAK2tD,sBAAsB12C,KAAKjX,IAAAA,EAC7DA,KAAKF,QAAUA,EACfE,KAAKpB,WAAa,CAAA,EAClBoB,KAAK4tD,QAAU,CAAA,EACf5tD,KAAK6tD,kBAAAA,EAELppD,EAAY,YAAa,CACvBE,UAAW3E,KAAKF,QAChB8E,iBAAkBmoD,GAClBloD,aAAc7E,KAAKq0C,oBAAAA,CAAAA,EAErB5vC,EAAY,YAAa,CACvBE,UAAW3E,KAAKF,QAChB8E,iBAAkBkoD,GAClBjoD,aAAc7E,KAAKytD,uBAAAA,CAAAA,EAErBhpD,EAAY,QAAS,CAAEE,UAAW3E,KAAKF,QAAS8E,iBAAkBooD,GAAuBjoD,eAAAA,EAAgB,CAAA,EACzGN,EAAY,QAAS,CACnBE,UAAW3E,KAAKF,QAChB8E,iBAAkBuoD,GAClBtoD,aAAc7E,KAAK0tD,oBAAAA,CAAAA,EAErBjpD,EAAY,UAAW,CACrBE,UAAW3E,KAAKF,QAChB8E,iBAAkBwoD,GAClBvoD,aAAc7E,KAAK2tD,qBAAAA,CAAAA,CAEvB,CAIAtZ,qBAAqB9uC,EAAOzF,EAAAA,CAAS,IAAA6pB,GACnCA,EAAI3pB,KAAC6pB,YAAQ,MAAAF,IAARE,QAALF,EAAemkC,sBAAAA,EACfvoD,EAAMR,eAAAA,EACN,IAAMgpD,EAAaR,GAAcztD,CAAAA,EAEjC,OAAIE,KAAKguD,UAAUD,CAAAA,EACV/tD,KAAKiuD,aAAaF,CAAAA,GAEzBljC,EAAO7qB,KAAK6pB,YAAQgB,MAAAA,IAARhB,OAAQgB,OAAbA,EAAeqjC,uBAAuBH,EAAYjuD,CAAAA,EADpD,IAAA+qB,CAGT,CAEA4iC,wBAAwBloD,EAAOzF,EAAAA,CAAS,IAAAojC,GACtCA,EAAIljC,KAAC6pB,YAAQ,MAAAqZ,IAARrZ,QAALqZ,EAAe4qB,sBAAAA,EACfvoD,EAAMR,eAAAA,EACN,IAAMkP,EAAgBq5C,GAAiBxtD,CAAAA,EAIhC,IAAA2kC,EAFHzkC,YAAKguD,UAAU/5C,CAAAA,EACjBjU,KAAKiuD,aAAah6C,CAAAA,GAElBwwB,EAAAzkC,KAAK6pB,YAAQ4a,MAAAA,IAAR5a,QAAL4a,EAAe0pB,0BAA0Bl6C,CAAAA,EAGpCjU,KAAKouD,wBAAAA,CACd,CAEAV,qBAAqBnoD,EAAOzF,EAAAA,CAC1B,IAAMuuD,EAAgB3oD,GAA2B5F,EAAS,CAAE8E,iBAAkBqoD,EAAAA,CAAAA,EAE9E,OAAOjtD,KADQF,EAAQmM,aAAa,kBAAA,GAChBtG,KAAK3F,KAAMquD,CAAAA,CACjC,CAEAV,sBAAsBpoD,EAAOzF,EAAAA,CAC3B,GAAIyF,EAAM0wC,UAAY,GAAI,CAExB1wC,EAAMR,eAAAA,EACN,IAAMgjB,EAAYjoB,EAAQmM,aAAa,MAAA,EACjCqiD,EAAStuD,KAAKguD,UAAUjmC,CAAAA,EAC9B/nB,KAAKuI,aAAa+lD,CAAAA,CACpB,CACA,GAAI/oD,EAAM0wC,UAAY,GAGpB,OADA1wC,EAAMR,eAAAA,EACC/E,KAAKuuD,WAAAA,CAEhB,CAIAC,cAAcZ,EAAAA,CAEZ,OADA5tD,KAAK4tD,QAAUA,EACR5tD,KAAKyuD,qBAAAA,CACd,CAEAA,sBAAAA,CACE,OAAOzuD,KAAK0uD,iBAAiB,CAAC5uD,EAASiuD,IAAAA,CACrCjuD,EAAQ6uD,SAAW3uD,KAAK4tD,QAAQG,KAAxBY,EAA6C,CAAA,CAEzD,CAEAD,iBAAiB/jD,EAAAA,CACf,OAAO2F,MAAMC,KAAKvQ,KAAKF,QAAQ8mB,iBAAiBmmC,EAAAA,CAAAA,EAAuB/7C,IAAKlR,GAC1E6K,EAAS7K,EAASytD,GAAcztD,CAAAA,CAAAA,CAAAA,CAEpC,CAIA8uD,iBAAiBhwD,EAAAA,CAEf,OADAoB,KAAKpB,WAAaA,EACXoB,KAAKouD,wBAAAA,CACd,CAEAA,yBAAAA,CACE,OAAOpuD,KAAK6uD,oBAAoB,CAAC/uD,EAASmU,KACxCnU,EAAQ6uD,SAAW3uD,KAAKpB,WAAWqV,KAA3B06C,GACJ3uD,KAAKpB,WAAWqV,IAAkBjU,KAAK8uD,gBAAgB76C,CAAAA,GACzDnU,EAAQyI,aAAa,mBAAoB,EAAA,EAClCzI,EAAQgJ,UAAUC,IAAI,aAAA,IAE7BjJ,EAAQ+iB,gBAAgB,kBAAA,EACjB/iB,EAAQgJ,UAAU1G,OAAO,aAAA,GAAA,CAGtC,CAEAysD,oBAAoBlkD,EAAAA,CAClB,OAAO2F,MAAMC,KAAKvQ,KAAKF,QAAQ8mB,iBAAiBkmC,EAAAA,CAAAA,EAA0B97C,IAAKlR,GAC7E6K,EAAS7K,EAASwtD,GAAiBxtD,CAAAA,CAAAA,CAAAA,CAEvC,CAEAivD,qBAAqB36C,EAAAA,CACnB,IAAM46C,EAAYn9C,KAAKO,UAAUgC,EAAKoG,KAAAA,CAAAA,EACtC,QAAWy0C,KAAU3+C,MAAMC,KAAKvQ,KAAKF,QAAQ8mB,iBAAiB,iBAAA,CAAA,EAAqB,CACjF,IAAMsoC,EAAaD,EAAOhjD,aAAa,eAAA,EAAiBrD,MAAM,GAAA,EAE9D,GADwBiJ,KAAKO,UAAU88C,EAAW10C,KAAAA,CAAAA,IAC1Bw0C,EAEtB,OADAlpD,GAAa,YAAa,CAAEnB,UAAWsqD,CAAAA,CAAAA,EAAAA,EAG3C,CACA,MAAA,EACF,CAIAH,gBAAgBK,EAAAA,CACd,IAAMrvD,EAAUE,KAAKguD,UAAUmB,CAAAA,EAC/B,GAAIrvD,EACF,OAAOA,EAAQglB,aAAa,kBAAA,CAEhC,CAEAmpC,aAAakB,EAAAA,CACX,OAAInvD,KAAK8uD,gBAAgBK,CAAAA,EAChBnvD,KAAKuuD,WAAAA,EAELvuD,KAAKovD,WAAWD,CAAAA,CAE3B,CAEAC,WAAWD,EAAAA,CAAY,IAAA/mB,EAAAgC,EACrBpqC,KAAKuuD,WAAAA,GACLnmB,EAAIpoC,KAAC6pB,YAAQ,MAAAue,IAARve,QAALue,EAAeinB,sBAAAA,EAEf,IAAMvvD,EAAUE,KAAKguD,UAAUmB,CAAAA,EAC/BrvD,EAAQyI,aAAa,mBAAoB,EAAA,EACzCzI,EAAQgJ,UAAUC,IAAI,aAAA,EAEtBuH,MAAMC,KAAKzQ,EAAQ8mB,iBAAiB,iBAAA,CAAA,EAAoB/d,QAASymD,GAAAA,CAC/DA,EAAczsC,gBAAgB,UAAA,CAAW,CAAA,EAG3C,IAAM5O,EAAgBq5C,GAAiBxtD,CAAAA,EACvC,GAAImU,EAAe,CACjB,IAAM3J,EAAQ+iD,GAAkBvtD,EAASqvD,CAAAA,EACrC7kD,IACFA,EAAMlG,MAAQpE,KAAKpB,WAAWqV,IAAkB,GAChD3J,EAAMulC,OAAAA,EAEV,CAEA,OAAAzF,EAAOpqC,KAAK6pB,YAAQ,MAAAugB,IAARvgB,OAAQugB,OAAbA,EAAemlB,qBAAqBJ,CAAAA,CAC7C,CAEA5mD,aAAa8lD,EAAAA,CACX,IAAMp6C,EAAgBq5C,GAAiBe,CAAAA,EACjC/jD,EAAQ+iD,GAAkBgB,EAAep6C,CAAAA,EAC/C,OAAI3J,EAAMklD,cAAAA,CAAiBllD,EAAMmlD,cAAAA,GAC/BnlD,EAAM/B,aAAa,qBAAsB,EAAA,EACzC+B,EAAMxB,UAAUC,IAAI,eAAA,EACbuB,EAAM4qC,MAAAA,KAEb3K,EAAIvqC,KAAC6pB,YAAQ,MAAA0gB,IAAR1gB,QAAL0gB,EAAemlB,0BAA0Bz7C,EAAe3J,EAAMlG,KAAAA,EACvDpE,KAAKuuD,WAAAA,GAFP,IAAAhkB,CAIT,CAEA1nB,gBAAgBwrC,EAAAA,CAAe,IAAA3jB,EAC7B,IAAMz2B,EAAgBq5C,GAAiBe,CAAAA,EAEvC,OADA3jB,EAAA1qC,KAAK6pB,YAAQ6gB,MAAAA,IAAR7gB,QAAL6gB,EAAeilB,0BAA0B17C,CAAAA,EAClCjU,KAAKuuD,WAAAA,CACd,CAEAA,YAAAA,CACE,IAAMzuD,EAAUE,KAAKF,QAAQgV,cAAco4C,EAAAA,EAC9B,IAAAriB,EAAb,GAAI/qC,EAIF,OAHAA,EAAQ+iB,gBAAgB,kBAAA,EACxB/iB,EAAQgJ,UAAU1G,OAAO,aAAA,EACzBpC,KAAK6tD,kBAAAA,GACLhjB,EAAO7qC,KAAK6pB,YADPgkC,MACehjB,IAARhhB,OAAQghB,OAAbA,EAAe+kB,sBAlNL9vD,GAAYA,EAAQmM,aAAa,kBAAA,GAkNOnM,CAAAA,CAAAA,CAE7D,CAEA+tD,mBAAAA,CACEv9C,MAAMC,KAAKvQ,KAAKF,QAAQ8mB,iBAAiBwmC,EAAAA,CAAAA,EAAsBvkD,QAASyB,GAAAA,CACtEA,EAAM/B,aAAa,WAAY,UAAA,EAC/B+B,EAAMuY,gBAAgB,oBAAA,EACtBvY,EAAMxB,UAAU1G,OAAO,eAAA,CAAgB,CAAA,CAE3C,CAEA4rD,UAAUmB,EAAAA,CACR,OAAOnvD,KAAKF,QAAQgV,cAAAA,qBAAazR,OAAsB8rD,EAAU,GAAA,CAAA,CACnE,CAAA,EC7NmBU,GAAN,cAA+B5X,EAAAA,CAiD5C3oC,YAAWoW,EAAAA,CAAoC,GAAA,CAAnCoqC,cAAEA,EAAaxrD,SAAEA,EAAQD,KAAEA,CAAAA,EAAMqhB,EAC3CnW,MAAAA,GAAStK,SAAAA,EACTjF,KAAK8vD,cAAgBA,EACrB9vD,KAAKsX,iBAAmB,IAAI04B,GAAiBhwC,KAAK8vD,aAAAA,EAClD9vD,KAAKsX,iBAAiBuS,SAAW7pB,KAEjCA,KAAK+hC,YAAc,IAAIU,GACvBziC,KAAK+hC,YAAYlY,SAAW7pB,KAE5BA,KAAKqhC,kBAAoB,IAAIE,GAAkBvhC,KAAK+hC,YAAYnR,eAAAA,CAAAA,EAChE5wB,KAAKqhC,kBAAkBxX,SAAW7pB,KAElCA,KAAKwmD,gBACHtyC,GAAa1J,SAAAA,IAAe,EACxB,IAAI08C,GAAsBlnD,KAAK8vD,aAAAA,EAC/B,IAAI7R,GAAsBj+C,KAAK8vD,aAAAA,EAErC9vD,KAAKwmD,gBAAgB38B,SAAW7pB,KAChCA,KAAKwmD,gBAAgB/I,UAAYz9C,KAAK+hC,YAEtC/hC,KAAK+vD,sBAAwB,IAAI5Z,GAAsBn2C,KAAK8vD,cAAe9vD,KAAK+hC,WAAAA,EAChF/hC,KAAK+vD,sBAAsBlmC,SAAW7pB,KAEtCA,KAAKgwD,kBAAoB,IAAIxC,GAAkBxtD,KAAK8vD,cAAcG,cAAAA,EAClEjwD,KAAKgwD,kBAAkBnmC,SAAW7pB,KAElCA,KAAKkwD,OAAS,IAAI5iB,GAAOttC,KAAK+hC,YAAa/hC,KAAKsX,iBAAkBtX,KAAK8vD,aAAAA,EACnExrD,EACFtE,KAAKkwD,OAAOziB,aAAanpC,CAAAA,EAEzBtE,KAAKkwD,OAAOxiB,SAASrpC,CAAAA,CAEzB,CAEAgT,0BAAAA,CACE,OAAOQ,GAAwBR,yBAAyBrX,KAAKsX,gBAAAA,CAC/D,CAEAC,4BAAAA,CACE,OAAOM,GAAwBN,2BAA2BvX,KAAKsX,gBAAAA,CACjE,CAEAsO,QAAAA,CACE,OAAO5lB,KAAK+vD,sBAAsBnqC,OAAAA,CACpC,CAEAyhC,SAAAA,CACE,OAAOrnD,KAAK+hC,YAAYsC,YAAYrkC,KAAK8vD,cAAc5vC,SAAAA,CACzD,CAIA4iB,6BAA6Bx+B,EAAAA,CAE3B,GADAtE,KAAKmwD,oBAAoB,iBAAA,EAAA,CACpBnwD,KAAKowD,cACR,OAAOpwD,KAAK4lB,OAAAA,CAEhB,CAEA4lB,sCAAsC9I,EAAAA,CAIpC,OAHA1iC,KAAK0iC,kBAAoBA,EACzB1iC,KAAKgwD,kBAAkBpB,iBAAiB5uD,KAAK0iC,iBAAAA,EAC7C1iC,KAAKqwD,qBAAAA,EACErwD,KAAKmwD,oBAAoB,oBAAqB,CAAEvxD,WAAYoB,KAAK0iC,iBAAAA,CAAAA,CAC1E,CAEAiJ,sCAAsC51B,EAAAA,CAChC/V,KAAKswD,UACPtwD,KAAKuwD,YAAcx6C,EAEvB,CAEA2uB,4BAA4B/lC,EAAAA,CAC1B,OAAOqB,KAAKmwD,oBAAoB,cAAe,CAAExxD,KAAAA,CAAAA,CAAAA,CACnD,CAEA8rC,4BAA4B99B,EAAAA,CAC1B,IAAMk1B,EAAoB7hC,KAAKqhC,kBAAkBI,iBAAiB90B,CAAAA,EAClE,OAAO3M,KAAKmwD,oBAAoB,iBAAkB,CAAExjD,WAAYk1B,CAAAA,CAAAA,CAClE,CAEA+I,6BAA6Bj+B,EAAAA,CAC3B3M,KAAK+vD,sBAAsBxY,sBAAsB5qC,CAAAA,EACjD,IAAMk1B,EAAoB7hC,KAAKqhC,kBAAkBI,iBAAiB90B,CAAAA,EAElE,OADA3M,KAAKmwD,oBAAoB,kBAAmB,CAAExjD,WAAYk1B,CAAAA,CAAAA,EACnD7hC,KAAKmwD,oBAAoB,QAAA,CAClC,CAEAplB,yCAAyCp+B,EAAAA,CAEvC,OADA3M,KAAK+vD,sBAAsBtyC,wBAAwB9Q,CAAAA,EAC5C3M,KAAKmwD,oBAAoB,QAAA,CAClC,CAEA7lB,+BAA+B39B,EAAAA,CAC7B,IAAMk1B,EAAoB7hC,KAAKqhC,kBAAkBO,mBAAmBj1B,CAAAA,EACpE,OAAO3M,KAAKmwD,oBAAoB,oBAAqB,CAAExjD,WAAYk1B,CAAAA,CAAAA,CACrE,CAEAqJ,qCAAqCv+B,EAAYxE,EAAAA,CAG/C,OAFAnI,KAAKwwD,wBAA0BxwD,KAAK+hC,YAAYz9B,SAASo1B,6BAA6B/sB,CAAAA,EACtF3M,KAAK+vD,sBAAsBrY,qCAAqC/qC,EAAYxE,CAAAA,EACrEnI,KAAKsX,iBAAiBixB,iBAAiBvoC,KAAKwwD,uBAAAA,CACrD,CAEAnlB,oCAAoC1+B,EAAAA,CAClC3M,KAAK+vD,sBAAsBnY,0BAAAA,EAC3B53C,KAAKwwD,wBAA0B,IACjC,CAEAnoB,sDAAsDlO,EAAAA,CACpD,GAAA,CAAIn6B,KAAKywD,iBAAoBzwD,KAAK0wD,UAAAA,EAGlC,OAFA1wD,KAAK2wD,uBAAyBx2B,EAC9Bn6B,KAAK4wD,8CAAgD5wD,KAAK+hC,YAAYY,SACjE3iC,KAAKowD,cAAAA,OACDpwD,KAAK4lB,OAAAA,CAEhB,CAEAwd,6BAAAA,CACEpjC,KAAKywD,gBAAAA,EACP,CAEAntB,4BAAAA,CACEtjC,KAAK+vD,sBAAsBvY,iBAAAA,EAC3Bx3C,KAAK4lB,OAAAA,EACL5lB,KAAKywD,gBAAAA,EACP,CAEAnoB,qBAAAA,CACE,OAAOtoC,KAAKsX,gBACd,CAIAqqB,+CAA+Ch1B,EAAAA,CAC7C,OAAO3M,KAAK6lC,iBAAiBl5B,CAAAA,CAC/B,CAIAyqC,2CAAAA,CAGE,OAFAp3C,KAAKwmD,gBAAgB5J,2BAAAA,EACrB58C,KAAKsX,iBAAiBs5B,KAAAA,EACf5wC,KAAKsX,iBAAiBw5B,eAAAA,CAC/B,CAEAuG,0CAAAA,CAIE,OAHAr3C,KAAKwmD,gBAAgB3J,0BAAAA,EACrB78C,KAAKsX,iBAAiBu5B,OAAAA,EACtB7wC,KAAKqwD,qBAAAA,EACErwD,KAAKmwD,oBAAoB,MAAA,CAClC,CAEA7Y,gCAAAA,CACMt3C,KAAK2wD,yBACH3wD,KAAK4wD,gDAAkD5wD,KAAK+hC,YAAYY,UAC1E3iC,KAAKsX,iBAAiBixB,iBAAiBvoC,KAAK2wD,sBAAAA,EAE9C3wD,KAAK2wD,uBAAyB,KAC9B3wD,KAAK4wD,8CAAgD,MAGnD5wD,KAAK6wD,8BAAgC7wD,KAAK+hC,YAAYY,WACxD3iC,KAAK8wD,iBAAAA,EACL9wD,KAAK+hC,YAAYsF,wBAAAA,EACjBrnC,KAAKmwD,oBAAoB,QAAA,GAG3BnwD,KAAK6wD,4BAA8B7wD,KAAK+hC,YAAYY,QACtD,CAEA+T,+BAAAA,CAKE,OAJI12C,KAAK+wD,mBAAAA,GACP/wD,KAAKuoC,iBAAiB,CAAE/1B,MAAO,EAAG9C,OAAQ,CAAA,CAAA,EAE5C1P,KAAKgwD,kBAAkBzB,WAAAA,EAChBvuD,KAAKmwD,oBAAoB,OAAA,CAClC,CAEAvZ,8BAAAA,CACE,OAAO52C,KAAKmwD,oBAAoB,MAAA,CAClC,CAEArZ,yCAAyCnqC,EAAYxE,EAAAA,CAEnD,OADAnI,KAAKgwD,kBAAkBzB,WAAAA,EAChBvuD,KAAK+hC,YAAY4D,eAAeh5B,EAAYxE,CAAAA,CACrD,CAEA6vC,qDAAqDrrC,EAAAA,CACnD,IAAMwtB,EAAgBn6B,KAAKwwD,yBAA2BxwD,KAAK+hC,YAAYz9B,SAASo1B,6BAA6B/sB,CAAAA,EAC7G,OAAO3M,KAAKsX,iBAAiBixB,iBAAiBpO,EAAc,EAAA,CAC9D,CAEA2d,0CAA0CnrC,EAAAA,CACxC,OAAO3M,KAAKkwD,OAAOjkB,gBAAgB,kBAAmB,CAAEzoB,QAAS7W,EAAW5B,GAAIohC,eAAAA,EAAgB,CAAA,CAClG,CAEA4L,mDAAmDprC,EAAAA,CACjD,OAAO3M,KAAK6lC,iBAAiBl5B,CAAAA,CAC/B,CAIAgxC,gCAAAA,CACE39C,KAAKowD,cAAAA,GACLpwD,KAAKgxD,gBAAAA,EACP,CAEAhU,iCAAAA,CACEh9C,KAAKgxD,gBAAAA,EACP,CAEApT,+BAAAA,CAEE,GADA59C,KAAKowD,cAAAA,GACDpwD,KAAKgxD,gBAEP,OADAhxD,KAAKgxD,gBAAAA,GACEhxD,KAAK4lB,OAAAA,CAEhB,CAEA04B,uCAAAA,CACE,OAAOt+C,KAAKmwD,oBAAoB,QAAA,CAClC,CAEAhT,kCAAAA,CACE,OAAOn9C,KAAKqnD,QAAAA,CACd,CAEAxG,kCAAAA,CACE,OAAO7gD,KAAKixD,sBAAAA,CACd,CAEAtJ,qCAAqC1zC,EAAAA,CACnC,OAAOjU,KAAKkxD,0BAA0Bj9C,CAAAA,CACxC,CAEAwuC,4BAAAA,CACE,OAAOziD,KAAKkwD,OAAOjkB,gBAAgB,KAAA,CACrC,CAEA+W,yBAAyBL,EAAAA,CAGvB,OAFA3iD,KAAKkwD,OAAOjkB,gBAAgB,OAAA,EAC5BjsC,KAAKswD,QAAAA,GACEtwD,KAAKmwD,oBAAoB,eAAgB,CAAExN,MAAAA,CAAAA,CAAAA,CACpD,CAEAM,wBAAwBN,EAAAA,CAItB,OAHAA,EAAM5sC,MAAQ/V,KAAKuwD,YACnBvwD,KAAKuwD,YAAc,KACnBvwD,KAAKswD,QAAU,KACRtwD,KAAKmwD,oBAAoB,QAAS,CAAExN,MAAAA,CAAAA,CAAAA,CAC7C,CAEAR,6BAAAA,CACE,OAAOniD,KAAKkwD,OAAOjkB,gBAAgB,MAAA,CACrC,CAEAuR,gCAAAA,CACE,OAAOx9C,KAAKkwD,OAAOjkB,gBAAgB,YAAA,CACrC,CAEAuf,gCAAAA,CACE,OAAOxrD,KAAKkwD,OAAO5tD,KAAAA,CACrB,CAEAgpD,gCAAAA,CACE,OAAOtrD,KAAKkwD,OAAO/tD,KAAAA,CACrB,CAEAq+C,yCAAyCpsC,EAAAA,CACvC,OAAOpU,KAAKgwD,kBAAkBjB,qBAAqB36C,CAAAA,CACrD,CAEAitC,6BAAAA,CACErhD,KAAKmxD,wBAA0BnxD,KAAKsX,iBAAiBgtB,iBAAAA,CACvD,CAEAqd,uCAAuC7P,EAAAA,CACrC,OAAO9xC,KAAKsX,iBAAiBm5B,+BAA+BqB,CAAAA,CAC9D,CAEAgQ,8BAAAA,CACE9hD,KAAKsX,iBAAiBixB,iBAAiBvoC,KAAKmxD,uBAAAA,EAC5CnxD,KAAKmxD,wBAA0B,IACjC,CAIAzf,uBAAuBvX,EAAAA,CAMrB,OALAn6B,KAAK+hC,YAAYsF,wBAAAA,EACjBrnC,KAAKqwD,qBAAAA,EACDrwD,KAAKwwD,yBAAAA,CAA4Bl6C,GAAetW,KAAKwwD,wBAAyBr2B,CAAAA,GAChFn6B,KAAK+hC,YAAY+D,sBAAAA,EAEZ9lC,KAAKmwD,oBAAoB,kBAAA,CAClC,CAIArC,uBAAAA,CACE,GAAA,CAAK9tD,KAAKskC,iBAAAA,EACR,OAAOtkC,KAAKuoC,iBAAiB,CAAE/1B,MAAO,EAAG9C,OAAQ,CAAA,CAAA,CAErD,CAEAw+C,uBAAuBH,EAAYqD,EAAAA,CACjC,OAAOpxD,KAAKqxD,aAAatD,EAAYqD,CAAAA,CACvC,CAEAjD,0BAA0Bl6C,EAAAA,CAIxB,GAHAjU,KAAKkxD,0BAA0Bj9C,CAAAA,EAC/BjU,KAAK+hC,YAAYyE,uBAAuBvyB,CAAAA,EACxCjU,KAAK4lB,OAAAA,EAAAA,CACA5lB,KAAKsxD,gBACR,OAAOtxD,KAAK8vD,cAAc5a,MAAAA,CAE9B,CAEAwa,0BAA0Bz7C,EAAe7P,EAAAA,CAIvC,GAHApE,KAAKkxD,0BAA0Bj9C,CAAAA,EAC/BjU,KAAK+hC,YAAY0E,oBAAoBxyB,EAAe7P,CAAAA,EACpDpE,KAAK4lB,OAAAA,EAAAA,CACA5lB,KAAKsxD,gBACR,OAAOtxD,KAAK8vD,cAAc5a,MAAAA,CAE9B,CAEAya,0BAA0B17C,EAAAA,CAIxB,GAHAjU,KAAKkxD,0BAA0Bj9C,CAAAA,EAC/BjU,KAAK+hC,YAAYgE,uBAAuB9xB,CAAAA,EACxCjU,KAAK4lB,OAAAA,EAAAA,CACA5lB,KAAKsxD,gBACR,OAAOtxD,KAAK8vD,cAAc5a,MAAAA,CAE9B,CAEAma,sBAAsBhB,EAAAA,CAEpB,OADAruD,KAAK+hC,YAAYmH,0BAAAA,EACVlpC,KAAKioC,gBAAAA,CACd,CAEAsnB,qBAAqBJ,EAAAA,CACnB,OAAOnvD,KAAKmwD,oBAAoB,sBAAuB,CAAEhB,WAAAA,CAAAA,CAAAA,CAC3D,CAEAS,qBAAqBT,EAAAA,CAGnB,OAFAnvD,KAAKkoC,cAAAA,EACLloC,KAAK8vD,cAAc5a,MAAAA,EACZl1C,KAAKmwD,oBAAoB,sBAAuB,CAAEhB,WAAAA,CAAAA,CAAAA,CAC3D,CAIAlnB,iBAAAA,CACE,GAAA,CAAKjoC,KAAKsxD,gBAIR,OAHAtxD,KAAKsX,iBAAiBs5B,KAAAA,EACtB5wC,KAAK+hC,YAAYkG,gBAAAA,EACjBjoC,KAAKsxD,gBAAAA,GACEtxD,KAAK4lB,OAAAA,CAEhB,CAEAsiB,eAAAA,CACE,GAAIloC,KAAKsxD,gBAIP,OAHAtxD,KAAK+hC,YAAYmG,cAAAA,EACjBloC,KAAKsX,iBAAiBu5B,OAAAA,EACtB7wC,KAAKsxD,gBAAAA,GACEtxD,KAAK4lB,OAAAA,CAEhB,CAEA2rC,gBAAgBxD,EAAAA,CACd,MAAA,CAAA,CAAI/tD,KAAKwxD,iBAAiBzD,CAAAA,GAAAA,GAGhB0D,EAACzxD,KAAK4tD,QAAQG,MAAW,MAAA0D,IAAX1D,SAAW0D,EAAxBA,EAA0B5xD,QAAI4xD,MAAAA,IAAJ5xD,QAAI4xD,CAA9BA,EAAgC9rD,KAAK3F,IAAAA,GADzC,IAAAyxD,CAGT,CAEAJ,aAAatD,EAAYqD,EAAAA,CACvB,OAAIpxD,KAAKwxD,iBAAiBzD,CAAAA,EACjB/tD,KAAKmwD,oBAAoB,gBAAiB,CAAEpC,WAAAA,EAAYqD,gBAAAA,CAAAA,CAAAA,GAE/DM,EAAO1xD,KAAK4tD,QAAQG,MAAW2D,MAAAA,IAAX3D,SAAW2D,EAAxBA,EAA0Bj1C,WAAO,MAAAi1C,IAAPj1C,OAAOi1C,OAAjCA,EAAmC/rD,KAAK3F,IAAAA,EAD1C,IAAA0xD,CAGT,CAEAF,iBAAiBzD,EAAAA,CACf,MAAO,OAAOluD,KAAKkuD,CAAAA,CACrB,CAEA4D,mBAAAA,CACE,IAAMpgD,EAAS,CAAA,EACf,QAAWw8C,KAAc/tD,KAAK4tD,QAC5Br8C,EAAOw8C,GAAc/tD,KAAKuxD,gBAAgBxD,CAAAA,EAE5C,OAAOx8C,CACT,CAEA8+C,sBAAAA,CACE,IAAMuB,EAAiB5xD,KAAK2xD,kBAAAA,EAC5B,GAAA,CAAK97C,GAAgB+7C,EAAgB5xD,KAAK4xD,cAAAA,EAGxC,OAFA5xD,KAAK4xD,eAAiBA,EACtB5xD,KAAKgwD,kBAAkBxB,cAAcxuD,KAAK4xD,cAAAA,EACnC5xD,KAAKmwD,oBAAoB,iBAAkB,CAAEvC,QAAS5tD,KAAK4xD,cAAAA,CAAAA,CAEtE,CAIAd,kBAAAA,CACE,IAAIpkB,EAAW1sC,KAAK+hC,YAAYgB,YAAAA,EAahC,GAXAzyB,MAAMC,KAAKvQ,KAAKkwD,OAAO1iB,OAAAA,EAAS3kC,QAAS2O,GAAAA,CACvC,GAAA,CAAMlT,SAAEA,EAAQ09B,cAAEA,CAAAA,EAAkB0K,EACpCA,EAAWl1B,EAAO7R,KAAK3F,KAAKkwD,OAAQxjB,CAAAA,GAAa,CAAA,EAC5CA,EAASpoC,WACZooC,EAASpoC,SAAWA,GAEjBooC,EAAS1K,gBACZ0K,EAAS1K,cAAgBA,EAC3B,CAAA,EAxdqBt1B,EA2dAggC,EA3dGn6B,EA2dOvS,KAAK+hC,YAAYgB,YAAAA,EAAAA,CA3dlBzsB,GAAe5J,EAAEs1B,cAAezvB,EAAEyvB,aAAAA,GAAAA,CAAkBt1B,EAAEpI,SAAS2L,UAAUsC,EAAEjO,QAAAA,EA4dzG,OAAOtE,KAAK+hC,YAAYiB,aAAa0J,CAAAA,EA5djBmlB,IAACnlD,EAAG6F,CA8d5B,CAIAu/C,oBAAAA,CACE,IACM1tD,EtBna4B,SAAS48B,EAAc7X,EAAAA,CAC3D,IAAM4oC,EAAahxB,GAAY5X,GAC/B,GAAI4oC,EACF,OAAOA,EAAW/wB,CAAAA,EAElB,MAAM,IAAIzyB,MAAK,yBAAAlL,OAA0B8lB,CAAAA,CAAAA,CAE7C,EsB2ZoBnpB,KAAK+vD,sBAAsBhZ,uBAAAA,EACG,WAAA,EAC9C,OAAO/2C,KAAK8vD,cAAckC,qBAAqB5tD,CAAAA,CACjD,CAEA+rD,oBAAoB8B,EAASxpD,EAAAA,CAC3B,OAAQwpD,OACD,kBACHjyD,KAAKkyD,+BAAAA,GACL,UACG,SACClyD,KAAKkyD,iCACPlyD,KAAKkyD,+BAAAA,GACLlyD,KAAKmwD,oBAAoB,QAAA,GAE3B,UACG,aACA,qBACA,sBACA,oBACHnwD,KAAK8xD,mBAAAA,EAIT,OAAO9xD,KAAK8vD,cAAcqC,OAAOF,EAASxpD,CAAAA,CAC5C,CAEAo9B,iBAAiBl5B,EAAAA,CAGf,OAFA3M,KAAKkwD,OAAOjkB,gBAAgB,mBAAA,EAC5BjsC,KAAK+hC,YAAY8D,iBAAiBl5B,CAAAA,EAC3B3M,KAAK4lB,OAAAA,CACd,CAEAsrC,0BAA0Bj9C,EAAAA,CACxB,IAAM2jB,EAAc5jB,GAAeC,CAAAA,EAC7BkmB,EAAgBn6B,KAAKsX,iBAAiBgtB,iBAAAA,EAC5C,GAAI1M,GAAAA,CAAgB1hB,GAAiBikB,CAAAA,EACnC,OAAOn6B,KAAKkwD,OAAOjkB,gBAAgB,aAAc,CAAEzoB,QAASxjB,KAAKoyD,eAAAA,EAAkBjmB,eAAAA,EAAgB,CAAA,CAEvG,CAEA8kB,uBAAAA,CACE,OAAOjxD,KAAKkwD,OAAOjkB,gBAAgB,SAAU,CAC3CzoB,QAASxjB,KAAKoyD,eAAepyD,KAAK0iC,iBAAAA,EAClCyJ,eAAAA,EAAgB,CAAA,CAEpB,CAEAimB,gBAAAA,CAA2B,QAAA1/C,EAAAzN,UAAAC,OAATse,EAAOlT,IAAAA,MAAAoC,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAP6Q,EAAO7Q,GAAA1N,UAAA0N,GACvB,MAAO,CAAE3S,KAAKqyD,mBAAAA,EAAsBryD,KAAKsyD,eAAAA,EAAAA,GAAqBhiD,MAAMC,KAAKiT,CAAAA,CAAAA,CAC3E,CAEA6uC,oBAAAA,CACE,IAAMl4B,EAAgBn6B,KAAKsX,iBAAiBgtB,iBAAAA,EAC5C,OAAIpuB,GAAiBikB,CAAAA,EACZA,EAAc,GAAG3nB,MAEjB2nB,CAEX,CAEAm4B,gBAAAA,CACE,OAAIp+C,GAAY5H,SAAW,EAClB9I,KAAKC,MAAM,IAAI8uD,OAAOC,QAAAA,EAAYt+C,GAAY5H,QAAAA,EAE9C,CAEX,CAEAokD,WAAAA,CAAY,IAAA+B,EACV,OAAOzyD,KAAK8vD,kBAAa2C,EAAKzyD,KAAK8vD,cAAc4C,iBAAaD,MAAAA,IAAbC,OAAaD,OAAhCA,EAAkC7rD,cAClE,CAIAmqD,oBAAAA,CACE,OAAO/wD,KAAK0wD,UAAAA,GAAAA,CAAgB1wD,KAAKskC,iBAAAA,CACnC,CAEA,IAAA,SAAIspB,CACF,OAAO5tD,KAAKsP,YAAYs+C,OAC1B,CAAA,EACDrlC,GAnjBoBsnC,GACF,UAAA,CACfvtD,KAAM,CACJzC,MAAAA,CACE,OAAOG,KAAKkwD,OAAOvjB,QAAAA,CACpB,EACDlwB,SAAAA,CACE,OAAOzc,KAAKkwD,OAAO5tD,KAAAA,CACrB,CAAA,EAEFH,KAAM,CACJtC,MAAAA,CACE,OAAOG,KAAKkwD,OAAOtjB,QAAAA,CACpB,EACDnwB,SAAAA,CACE,OAAOzc,KAAKkwD,OAAO/tD,KAAAA,CACrB,CAAA,EAEFH,KAAM,CACJnC,MAAAA,CACE,OAAOG,KAAKkwD,OAAOliB,qBAAqB,MAAA,CAC1C,CAAA,EAEFpb,qBAAsB,CACpB/yB,MAAAA,CACE,OAAOG,KAAKkwD,OAAOzoB,wBAAAA,CACpB,EACDhrB,SAAAA,CACE,OAAOzc,KAAKkwD,OAAOt9B,qBAAAA,GAA0B5yB,KAAK4lB,OAAAA,CACpD,CAAA,EAEF+M,qBAAsB,CACpB9yB,MAAAA,CACE,OAAOG,KAAKkwD,OAAO3oB,wBAAAA,CACpB,EACD9qB,SAAAA,CACE,OAAOzc,KAAKkwD,OAAOv9B,qBAAAA,GAA0B3yB,KAAK4lB,OAAAA,CACpD,CAAA,EAEFpkB,YAAa,CACX3B,KAAIA,IAAAA,GAGJ4c,SAAAA,CACE,OAAOvI,GAAaxJ,UAAU1K,KAAKkwD,OAAO1rB,WAAAA,CAC5C,CAAA,CAAA,CAAA,EAwgBNqrB,GAAiB/yC,YAAY,wCAAA,EAC7B+yC,GAAiB/yC,YAAY,wCAAA,EAAA,IAAA61C,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,2BAAAC,GAAA,sBAAAC,GAAA,WAAAC,GAAA,iBAAAC,GAAA,gBAAAC,GAAA,sBAAAC,GAAA,sBAAAC,GAAA,kBAAAC,EAAA,CAAA,EAAAC,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,iBAAAC,GAAA,wBAAAC,EAAA,CAAA,EAAAC,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,0BAAAC,GAAA,sBAAAC,EAAA,CAAA,ECxkB7Bn/C,GAA4B,eAAc;;;;;;;;;;;;;;;;;;EAAA,EAqB3B,IAAMo/C,GAAN,cAAiCzyB,WAAAA,CAI9C0yB,mBAAAA,CACM3zD,KAAKkgB,YAAc,KACrBlgB,KAAKkgB,UAAYhM,GAAe7H,eAAAA,EAEpC,CAAA,EClBEtB,GAAK,EAYH6oD,GAAe,SAAS9zD,EAAAA,CAC5B,GAAA,CAAIA,EAAQglB,aAAa,iBAAA,EAIzB,OADAhlB,EAAQyI,aAAa,kBAAmB,EAAA,EpECX,SAAS7D,EAAAA,CAAyB,IAAdyD,EAAOlD,UAAAC,OAAA,GAAAD,UAAA,KAAA,OAAAA,UAAA,GAAG,CAAA,EAE3D,OADAkD,EAAQnD,MAAQ,EACTP,EAAYC,EAAWyD,CAAAA,CAChC,EoEHyB,QAAS,CAC9BxD,UAAW7E,EACX+E,aAAYA,IACHgvD,GAAyB/zD,CAAAA,CAAAA,CAAAA,CAGtC,EAEM+zD,GAA2B,SAAS/zD,EAAAA,CAExC,OADAg0D,GAAsBh0D,CAAAA,EACfi0D,GAA6Bj0D,CAAAA,CACtC,EAEMg0D,GAAwB,SAASh0D,EAAAA,CAAS,IAAAk0D,EAAAC,EAC9C,IAAAD,GAAIC,EAAA3vD,UAAS4vD,yBAAqB,MAAAF,IAArBE,QAATF,EAAAruD,KAAAsuD,EAAiC,sBAAA,EAEnC,OADA3vD,SAAS6vD,YAAY,uBAAA,GAAwB,EAAO,EAC7C1vD,EAAY,kBAAmB,CAAEE,UAAW7E,EAASiF,eAAAA,EAAgB,CAAA,CAEhF,EAEMgvD,GAA+B,SAASj0D,EAAAA,CAAS,IAAAs0D,EAAAC,EACrD,IAAAD,GAAIC,EAAA/vD,UAAS4vD,yBAAqB,MAAAE,IAArBF,QAATE,EAAAzuD,KAAA0uD,EAAiC,2BAAA,EAA8B,CACjE,GAAA,CAAMv1D,QAAEA,CAAAA,EAAYoV,GAAuBrV,QAC3C,GAAI,CAAE,MAAO,GAAA,EAAMgL,SAAS/K,CAAAA,EAC1B,OAAOwF,SAAS6vD,YAAY,4BAAA,GAAoCr1D,CAAAA,CAEpE,CACF,EAkCMw1D,GACApgD,GAAejT,qBACV,CACLg8B,QAAS,SACTla,MAAO,MAAA,EAGF,CACLka,QAAS,eACTla,MAAO,KAAA,EAKbzO,GAA4B,cAAa;;;;;;;;;;;;;;;;;;;;;KAAAjR,OAsBpCjF,GAAkB;;;;IAAA,EAAAiF,OAIlBjF,GAAkB;;;;;;IAAA,EAAAiF,OAMlBjF,GAAkB;;;;;;cAAA,EAAAiF,OAMRixD,GAAmBr3B,QAAO;YAAA,EAAA55B,OAC5BixD,GAAmBvxC,MAAK;;;;;;;;;;;;;;EAAA,CAAA,EAgBtB,IAAMwxC,GAAN,cAAgCtzB,WAAAA,CAI7C,IAAA,QAAItf,CACF,OAAI3hB,KAAK8kB,aAAa,SAAA,EACb9kB,KAAKiM,aAAa,SAAA,GAEzBjM,KAAKuI,aAAa,UAAA,EAAawC,EAAAA,EACxB/K,KAAK2hB,OAEhB,CAEA,IAAA,QAAI6yC,CACF,IAAMA,EAAS,CAAA,EACXx0D,KAAK+K,IAAM/K,KAAK0yD,eAClB8B,EAAOjrD,KAAAA,GAAQ+G,MAAMC,KAAKvQ,KAAK0yD,cAAc9rC,iBAAgBvjB,cAAAA,OAAerD,KAAK+K,GAAAA,IAAAA,CAAAA,GAAW,CAAA,CAAA,CAAA,EAG9F,IAAM0pD,EAAQ/uD,GAA2B1F,KAAM,CAAE4E,iBAAkB,OAAA,CAAA,EAOnE,OANI6vD,GACE,CAAEz0D,KAAM,IAAA,EAAO6J,SAAS4qD,EAAMxP,OAAAA,GAChCuP,EAAOjrD,KAAKkrD,CAAAA,EAITD,CACT,CAEA,IAAA,gBAAIvE,CACgC,IAAAyE,EAAlC,GAAI10D,KAAK8kB,aAAa,SAAA,EACpB,OAAA4vC,EAAO10D,KAAK0yD,iBAAa,MAAAgC,IAAbhC,OAAagC,OAAlBA,EAAoBxpD,eAAelL,KAAKiM,aAAa,SAAA,CAAA,EACvD,GAAIjM,KAAKD,WAAY,CAC1B,IAAM40D,EAAStxD,gBAAAA,OAAmBrD,KAAK2hB,MAAAA,EACvC3hB,KAAKuI,aAAa,UAAWosD,CAAAA,EAC7B,IAAM70D,EAAUmI,EAAY,eAAgB,CAAE8C,GAAI4pD,CAAAA,CAAAA,EAElD,OADA30D,KAAKD,WAAW6U,aAAa9U,EAASE,IAAAA,EAC/BF,CACT,CAGF,CAEA,IAAA,MAAIoT,CAAO,IAAA0hD,EACT,OAAAA,EAAO50D,KAAK60D,gBAAZ,MAAwBD,IAAZC,OAAYD,OAAjBA,EAAmB1hD,IAC5B,CAEA,IAAA,cAAI2hD,CAC8B,IAAAC,EAAhC,GAAI90D,KAAK8kB,aAAa,OAAA,EACpB,OAAAgwC,EAAO90D,KAAK0yD,iBAAa,MAAAoC,IAAbpC,OAAaoC,OAAlBA,EAAoB5pD,eAAelL,KAAKiM,aAAa,OAAA,CAAA,EACvD,GAAIjM,KAAKD,WAAY,CAC1B,IAAMg1D,EAAO1xD,cAAAA,OAAiBrD,KAAK2hB,MAAAA,EACnC3hB,KAAKuI,aAAa,QAASwsD,CAAAA,EAC3B,IAAMj1D,EAAUmI,EAAY,QAAS,CAAE2C,KAAM,SAAUG,GAAIgqD,CAAAA,CAAAA,EAE3D,OADA/0D,KAAKD,WAAW6U,aAAa9U,EAASE,KAAKg1D,kBAAAA,EACpCl1D,CACT,CAGF,CAEA,IAAA,QAAIowD,CAAS,IAAA+E,EACX,OAAAA,EAAOj1D,KAAKk1D,oBAAZ,MAA4BD,IAAhBC,OAAgBD,OAArBA,EAAuB/E,MAChC,CAEA,IAAA,MAAIzxD,CAAO,IAAA02D,EACT,OAAAA,EAAOn1D,KAAK60D,gBAAZ,MAAwBM,IAAZN,OAAYM,OAAjBA,EAAmB12D,IAC5B,CAEA,IAAA,OAAI2F,CAAQ,IAAAgxD,EACV,OAAAA,EAAOp1D,KAAK60D,gBAAZ,MAAwBO,IAAZP,OAAYO,OAAjBA,EAAmBhxD,KAC5B,CAEA,IAAA,MAAUixD,EAAAA,CAAc,IAAAC,EACtBt1D,KAAKq1D,aAAeA,GACpBC,EAAAt1D,KAAKkwD,UADemF,MACTC,IAANpF,QAALoF,EAAa5nB,SAAS1tC,KAAKq1D,YAAAA,CAC7B,CAIAlD,OAAOF,EAASxpD,EAAAA,CACd,GAAIzI,KAAKk1D,iBACP,OAAOpvD,GAAY,QAAAzC,OAAS4uD,CAAAA,EAAW,CAAEttD,UAAW3E,KAAMpB,WAAY6J,CAAAA,CAAAA,CAE1E,CAEAupD,qBAAqB5tD,EAAAA,CACfpE,KAAK60D,eACP70D,KAAK60D,aAAazwD,MAAQA,EAE9B,CAIAuvD,mBAAAA,CACO3zD,KAAK8kB,aAAa,oBAAA,IACrB8uC,GAAa5zD,IAAAA,EAnMU,SAASF,EAAAA,CAChCA,EAAQglB,aAAa,MAAA,GAGlBhlB,EAAQyI,aAAa,OAAQ,SAAA,CACtC,EA+L2BvI,IAAAA,EA7LH,SAASF,EAAAA,CAC/B,GAAIA,EAAQglB,aAAa,YAAA,GAAiBhlB,EAAQglB,aAAa,iBAAA,EAC7D,OAGF,IAAM9N,EAAS,UAAA,CACb,IAAMu+C,EAAQjlD,MAAMC,KAAKzQ,EAAQ00D,MAAAA,EAAQxjD,IAAKyjD,GAAAA,CAC5C,GAAA,CAAKA,EAAMe,SAAS11D,CAAAA,EAAU,OAAO20D,EAAMzrD,WAAW,CAAA,EACrDwO,OAAOhY,GAAQA,CAAAA,EAEZA,EAAO+1D,EAAM9jD,KAAK,GAAA,EACxB,OAAIjS,EACKM,EAAQyI,aAAa,aAAc/I,CAAAA,EAEnCM,EAAQ+iB,gBAAgB,YAAA,CAAA,EAGnC7L,EAAAA,EACOvS,EAAY,QAAS,CAAEE,UAAW7E,EAAS+E,aAAcmS,CAAAA,CAAAA,CAClE,EA2KsBhX,IAAAA,EAEXA,KAAKk1D,mBACRpvD,GAAa,yBAA0B,CAAEnB,UAAW3E,IAAAA,CAAAA,EACpDA,KAAKk1D,iBAAmB,IAAIrF,GAAiB,CAC3CC,cAAe9vD,KACfqE,KAAMrE,KAAKq1D,aAAer1D,KAAKoE,KAAAA,CAAAA,EAEjC47C,sBAAsB,IAAMl6C,GAAa,kBAAmB,CAAEnB,UAAW3E,IAAAA,CAAAA,CAAAA,GAE3EA,KAAKk1D,iBAAiB79C,yBAAAA,EACtBrX,KAAKy1D,sBAAAA,EACLz1D,KAAK01D,sBAAAA,EA7PO,SAAS51D,EAAAA,CACzB,CAAKwE,SAASwQ,cAAc,QAAA,GACtBhV,EAAQglB,aAAa,WAAA,GAAgBxgB,SAASwQ,cAAc,aAAA,IAAmBhV,GAC1EA,EAAQo1C,MAAAA,CAGrB,EAwPgBl1C,IAAAA,EAEd,CAEA21D,sBAAAA,CAAuB,IAAAC,EAGrB,OAFAA,EAAI51D,KAACk1D,oBAAgB,MAAAU,IAAhBV,QAALU,EAAuBr+C,2BAAAA,EACvBvX,KAAK61D,wBAAAA,EACE71D,KAAK81D,wBAAAA,CACd,CAIAL,uBAAAA,CAEE,OADAz1D,KAAK+1D,cAAgB/1D,KAAKg2D,aAAa/+C,KAAKjX,IAAAA,EACrC2L,OAAO9F,iBAAiB,QAAS7F,KAAK+1D,cAAAA,EAAe,CAC9D,CAEAF,yBAAAA,CACE,OAAOlqD,OAAO/F,oBAAoB,QAAS5F,KAAK+1D,cAAAA,EAAe,CACjE,CAEAL,uBAAAA,CAEE,OADA11D,KAAKi2D,cAAgBj2D,KAAKk2D,aAAaj/C,KAAKjX,IAAAA,EACrC2L,OAAO9F,iBAAiB,QAAS7F,KAAKi2D,cAAAA,EAAe,CAC9D,CAEAH,yBAAAA,CACE,OAAOnqD,OAAO/F,oBAAoB,QAAS5F,KAAKi2D,cAAAA,EAAe,CACjE,CAEAD,aAAazwD,EAAAA,CACX,GAAA,CAAIA,EAAMm4C,kBACNn4C,EAAME,SAAWzF,KAAKkT,KAC1B,OAAOlT,KAAK4X,MAAAA,CACd,CAEAs+C,aAAa3wD,EAAAA,CAEX,GADIA,EAAMm4C,kBACN19C,KAAKw1D,SAASjwD,EAAME,MAAAA,EAAS,OAEjC,IAAMgvD,EAAQ/uD,GAA2BH,EAAME,OAAQ,CAAEb,iBAAkB,OAAA,CAAA,EAC3E,OAAK6vD,GAEAnkD,MAAMC,KAAKvQ,KAAKw0D,MAAAA,EAAQ3qD,SAAS4qD,CAAAA,EAE/Bz0D,KAAKk1C,MAAAA,EAAAA,MACd,CAEAt9B,OAAAA,CACE5X,KAAKoE,MAAQpE,KAAKq1D,YACpB,CAAA,ECvTIc,GAAO,CACXC,QAASC,GACTniD,OAAAA,GACAoiD,KAAAA,GACAC,OAAAA,GACAl4C,MAAAA,GACAm4C,YAAAA,GACAC,UAAAA,GACArZ,WAAAA,GACA3hC,SAAAA,OAAAA,OAAAA,CAAAA,UAAAA,KAAAA,kBAAAA,GAAAA,mBAAAA,EAAAA,CAAAA,EACA+xB,QAAAA,OAAAA,OAAAA,CAAAA,UAAAA,KAAAA,OAAAA,GAAAA,wBAAAA,EAAAA,CAAAA,CAAAA,EAIFr5B,OAAOoR,OAAO4wC,GAAMI,EAAAA,EAYpB5qD,OAAOwqD,KAAOA,GACdxgD,WAXA,UAAA,CACO+gD,eAAenjD,IAAI,cAAA,GACtBmjD,eAAeC,OAAO,eAAgBl7C,EAAAA,EAGnCi7C,eAAenjD,IAAI,aAAA,GACtBmjD,eAAeC,OAAO,cAAel7C,EAAAA,CAEzC,EAGkB,CAAA,ECvClB,IAAIm7C,GAAW,CACb,QAAS,CAAC,CACZ,GAEC,SAASC,EAAQC,EAAS,EACxB,SAASC,EAAS,CAEfF,EAAO,QAAUE,EAAQ,CAE7B,GAAI,SAASC,EAAa,CACxB,IAAIC,EAAU,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAC/F,SAASC,EAASC,EAAGC,EAAG,CACtB,IAAIC,EAAIF,EAAE,GAAIG,EAAIH,EAAE,GAAII,EAAIJ,EAAE,GAAIK,EAAIL,EAAE,GACxCE,IAAMC,EAAIC,EAAI,CAACD,EAAIE,GAAKJ,EAAE,GAAK,UAAY,EAC3CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAI,CAACD,EAAIE,GAAKH,EAAE,GAAK,UAAY,EAC3CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAI,CAACG,EAAIF,GAAKF,EAAE,GAAK,UAAY,EAC3CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIF,GAAKD,EAAE,GAAK,WAAa,EAC5CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIE,GAAKJ,EAAE,GAAK,UAAY,EAC3CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAI,CAACD,EAAIE,GAAKH,EAAE,GAAK,WAAa,EAC5CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAI,CAACG,EAAIF,GAAKF,EAAE,GAAK,WAAa,EAC5CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIF,GAAKD,EAAE,GAAK,SAAW,EAC1CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIE,GAAKJ,EAAE,GAAK,WAAa,EAC5CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAI,CAACD,EAAIE,GAAKH,EAAE,GAAK,WAAa,EAC5CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAI,CAACG,EAAIF,GAAKF,EAAE,IAAM,MAAQ,EACxCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIF,GAAKD,EAAE,IAAM,WAAa,EAC7CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIE,GAAKJ,EAAE,IAAM,WAAa,EAC7CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAI,CAACD,EAAIE,GAAKH,EAAE,IAAM,SAAW,EAC3CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAI,CAACG,EAAIF,GAAKF,EAAE,IAAM,WAAa,EAC7CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAI,CAACD,EAAIF,GAAKD,EAAE,IAAM,WAAa,EAC7CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIE,EAAID,EAAI,CAACC,GAAKJ,EAAE,GAAK,UAAY,EAC3CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIE,EAAID,EAAI,CAACC,GAAKH,EAAE,GAAK,WAAa,EAC5CI,GAAKA,GAAK,EAAIA,IAAM,IAAMH,EAAI,EAC9BE,IAAMC,EAAIF,EAAID,EAAI,CAACC,GAAKF,EAAE,IAAM,UAAY,EAC5CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIF,EAAIG,EAAI,CAACH,GAAKD,EAAE,GAAK,UAAY,EAC3CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIE,EAAID,EAAI,CAACC,GAAKJ,EAAE,GAAK,UAAY,EAC3CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIE,EAAID,EAAI,CAACC,GAAKH,EAAE,IAAM,SAAW,EAC3CI,GAAKA,GAAK,EAAIA,IAAM,IAAMH,EAAI,EAC9BE,IAAMC,EAAIF,EAAID,EAAI,CAACC,GAAKF,EAAE,IAAM,UAAY,EAC5CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIF,EAAIG,EAAI,CAACH,GAAKD,EAAE,GAAK,UAAY,EAC3CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIE,EAAID,EAAI,CAACC,GAAKJ,EAAE,GAAK,UAAY,EAC3CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIE,EAAID,EAAI,CAACC,GAAKH,EAAE,IAAM,WAAa,EAC7CI,GAAKA,GAAK,EAAIA,IAAM,IAAMH,EAAI,EAC9BE,IAAMC,EAAIF,EAAID,EAAI,CAACC,GAAKF,EAAE,GAAK,UAAY,EAC3CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIF,EAAIG,EAAI,CAACH,GAAKD,EAAE,GAAK,WAAa,EAC5CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIE,EAAID,EAAI,CAACC,GAAKJ,EAAE,IAAM,WAAa,EAC7CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIE,EAAID,EAAI,CAACC,GAAKH,EAAE,GAAK,SAAW,EAC1CI,GAAKA,GAAK,EAAIA,IAAM,IAAMH,EAAI,EAC9BE,IAAMC,EAAIF,EAAID,EAAI,CAACC,GAAKF,EAAE,GAAK,WAAa,EAC5CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIF,EAAIG,EAAI,CAACH,GAAKD,EAAE,IAAM,WAAa,EAC7CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAIC,GAAKJ,EAAE,GAAK,OAAS,EACnCC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAIC,GAAKH,EAAE,GAAK,WAAa,EACvCI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAIC,GAAKF,EAAE,IAAM,WAAa,EACxCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAIH,GAAKD,EAAE,IAAM,SAAW,EACtCE,GAAKA,GAAK,GAAKA,IAAM,GAAKC,EAAI,EAC9BF,IAAMC,EAAIC,EAAIC,GAAKJ,EAAE,GAAK,WAAa,EACvCC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAIC,GAAKH,EAAE,GAAK,WAAa,EACvCI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAIC,GAAKF,EAAE,GAAK,UAAY,EACtCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAIH,GAAKD,EAAE,IAAM,WAAa,EACxCE,GAAKA,GAAK,GAAKA,IAAM,GAAKC,EAAI,EAC9BF,IAAMC,EAAIC,EAAIC,GAAKJ,EAAE,IAAM,UAAY,EACvCC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAIC,GAAKH,EAAE,GAAK,UAAY,EACtCI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAIC,GAAKF,EAAE,GAAK,UAAY,EACtCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAIH,GAAKD,EAAE,GAAK,SAAW,EACrCE,GAAKA,GAAK,GAAKA,IAAM,GAAKC,EAAI,EAC9BF,IAAMC,EAAIC,EAAIC,GAAKJ,EAAE,GAAK,UAAY,EACtCC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMH,EAAIC,EAAIC,GAAKH,EAAE,IAAM,UAAY,EACvCI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMC,EAAIH,EAAIC,GAAKF,EAAE,IAAM,UAAY,EACvCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAMC,EAAIC,EAAIH,GAAKD,EAAE,GAAK,UAAY,EACtCE,GAAKA,GAAK,GAAKA,IAAM,GAAKC,EAAI,EAC9BF,IAAME,GAAKD,EAAI,CAACE,IAAMJ,EAAE,GAAK,UAAY,EACzCC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMF,GAAKD,EAAI,CAACE,IAAMH,EAAE,GAAK,WAAa,EAC1CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMF,GAAKG,EAAI,CAACF,IAAMF,EAAE,IAAM,WAAa,EAC3CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACF,IAAMD,EAAE,GAAK,SAAW,EACxCE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACE,IAAMJ,EAAE,IAAM,WAAa,EAC3CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMF,GAAKD,EAAI,CAACE,IAAMH,EAAE,GAAK,WAAa,EAC1CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMF,GAAKG,EAAI,CAACF,IAAMF,EAAE,IAAM,QAAU,EACxCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACF,IAAMD,EAAE,GAAK,WAAa,EAC1CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACE,IAAMJ,EAAE,GAAK,WAAa,EAC1CC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMF,GAAKD,EAAI,CAACE,IAAMH,EAAE,IAAM,SAAW,EACzCI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMF,GAAKG,EAAI,CAACF,IAAMF,EAAE,GAAK,WAAa,EAC1CG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACF,IAAMD,EAAE,IAAM,WAAa,EAC3CE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACE,IAAMJ,EAAE,GAAK,UAAY,EACzCC,GAAKA,GAAK,EAAIA,IAAM,IAAMC,EAAI,EAC9BE,IAAMF,GAAKD,EAAI,CAACE,IAAMH,EAAE,IAAM,WAAa,EAC3CI,GAAKA,GAAK,GAAKA,IAAM,IAAMH,EAAI,EAC/BE,IAAMF,GAAKG,EAAI,CAACF,IAAMF,EAAE,GAAK,UAAY,EACzCG,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BF,IAAME,GAAKD,EAAI,CAACF,IAAMD,EAAE,GAAK,UAAY,EACzCE,GAAKA,GAAK,GAAKA,IAAM,IAAMC,EAAI,EAC/BJ,EAAE,GAAKE,EAAIF,EAAE,GAAK,EAClBA,EAAE,GAAKG,EAAIH,EAAE,GAAK,EAClBA,EAAE,GAAKI,EAAIJ,EAAE,GAAK,EAClBA,EAAE,GAAKK,EAAIL,EAAE,GAAK,CACpB,CACA,SAASM,EAAOC,EAAG,CACjB,IAAIC,EAAU,CAAC,EAAGC,EAClB,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBD,EAAQC,GAAK,GAAKF,EAAE,WAAWE,CAAC,GAAKF,EAAE,WAAWE,EAAI,CAAC,GAAK,IAAMF,EAAE,WAAWE,EAAI,CAAC,GAAK,KAAOF,EAAE,WAAWE,EAAI,CAAC,GAAK,IAEzH,OAAOD,CACT,CACA,SAASE,EAAaR,EAAG,CACvB,IAAIM,EAAU,CAAC,EAAGC,EAClB,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBD,EAAQC,GAAK,GAAKP,EAAEO,IAAMP,EAAEO,EAAI,IAAM,IAAMP,EAAEO,EAAI,IAAM,KAAOP,EAAEO,EAAI,IAAM,IAE7E,OAAOD,CACT,CACA,SAASG,EAAKJ,EAAG,CACf,IAAIK,EAAIL,EAAE,OAAQM,EAAQ,CAAE,WAAY,WAAY,YAAa,SAAU,EAAGJ,EAAGK,EAAQC,EAAMC,EAAKC,EAAIC,EACxG,IAAKT,EAAI,GAAIA,GAAKG,EAAGH,GAAK,GACxBV,EAASc,EAAOP,EAAOC,EAAE,UAAUE,EAAI,GAAIA,CAAC,CAAC,CAAC,EAKhD,IAHAF,EAAIA,EAAE,UAAUE,EAAI,EAAE,EACtBK,EAASP,EAAE,OACXQ,EAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACnDN,EAAI,EAAGA,EAAIK,EAAQL,GAAK,EAC3BM,EAAKN,GAAK,IAAMF,EAAE,WAAWE,CAAC,IAAMA,EAAI,GAAK,GAG/C,GADAM,EAAKN,GAAK,IAAM,MAAQA,EAAI,GAAK,GAC7BA,EAAI,GAEN,IADAV,EAASc,EAAOE,CAAI,EACfN,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBM,EAAKN,GAAK,EAGd,OAAAO,EAAMJ,EAAI,EACVI,EAAMA,EAAI,SAAS,EAAE,EAAE,MAAM,gBAAgB,EAC7CC,EAAK,SAASD,EAAI,GAAI,EAAE,EACxBE,EAAK,SAASF,EAAI,GAAI,EAAE,GAAK,EAC7BD,EAAK,IAAME,EACXF,EAAK,IAAMG,EACXnB,EAASc,EAAOE,CAAI,EACbF,CACT,CACA,SAASM,EAAWjB,EAAG,CACrB,IAAIU,EAAIV,EAAE,OAAQW,EAAQ,CAAE,WAAY,WAAY,YAAa,SAAU,EAAGJ,EAAGK,EAAQC,EAAMC,EAAKC,EAAIC,EACxG,IAAKT,EAAI,GAAIA,GAAKG,EAAGH,GAAK,GACxBV,EAASc,EAAOH,EAAaR,EAAE,SAASO,EAAI,GAAIA,CAAC,CAAC,CAAC,EAKrD,IAHAP,EAAIO,EAAI,GAAKG,EAAIV,EAAE,SAASO,EAAI,EAAE,EAAI,IAAI,WAAW,CAAC,EACtDK,EAASZ,EAAE,OACXa,EAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EACnDN,EAAI,EAAGA,EAAIK,EAAQL,GAAK,EAC3BM,EAAKN,GAAK,IAAMP,EAAEO,KAAOA,EAAI,GAAK,GAGpC,GADAM,EAAKN,GAAK,IAAM,MAAQA,EAAI,GAAK,GAC7BA,EAAI,GAEN,IADAV,EAASc,EAAOE,CAAI,EACfN,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBM,EAAKN,GAAK,EAGd,OAAAO,EAAMJ,EAAI,EACVI,EAAMA,EAAI,SAAS,EAAE,EAAE,MAAM,gBAAgB,EAC7CC,EAAK,SAASD,EAAI,GAAI,EAAE,EACxBE,EAAK,SAASF,EAAI,GAAI,EAAE,GAAK,EAC7BD,EAAK,IAAME,EACXF,EAAK,IAAMG,EACXnB,EAASc,EAAOE,CAAI,EACbF,CACT,CACA,SAASO,EAAKR,EAAG,CACf,IAAIL,EAAI,GAAIc,EACZ,IAAKA,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACtBd,GAAKT,EAAQc,GAAKS,EAAI,EAAI,EAAI,IAAMvB,EAAQc,GAAKS,EAAI,EAAI,IAE3D,OAAOd,CACT,CACA,SAASe,EAAItB,EAAG,CACd,IAAIS,EACJ,IAAKA,EAAI,EAAGA,EAAIT,EAAE,OAAQS,GAAK,EAC7BT,EAAES,GAAKW,EAAKpB,EAAES,EAAE,EAElB,OAAOT,EAAE,KAAK,EAAE,CAClB,CACIsB,EAAIX,EAAK,OAAO,CAAC,EACjB,OAAO,YAAgB,KAAe,CAAC,YAAY,UAAU,OAC9D,UAAW,CACV,SAASY,EAAMC,EAAKV,EAAQ,CAE1B,OADAU,EAAMA,EAAM,GAAK,EACbA,EAAM,EACD,KAAK,IAAIA,EAAMV,EAAQ,CAAC,EAE1B,KAAK,IAAIU,EAAKV,CAAM,CAC7B,CACA,YAAY,UAAU,MAAQ,SAASW,EAAMC,EAAI,CAC/C,IAAIZ,EAAS,KAAK,WAAYa,EAAQJ,EAAME,EAAMX,CAAM,EAAGc,EAAMd,EAAQe,EAAKC,EAAQC,EAAaC,EAInG,OAHIN,IAAO7B,IACT+B,EAAML,EAAMG,EAAIZ,CAAM,GAEpBa,EAAQC,EACH,IAAI,YAAY,CAAC,GAE1BC,EAAMD,EAAMD,EACZG,EAAS,IAAI,YAAYD,CAAG,EAC5BE,EAAc,IAAI,WAAWD,CAAM,EACnCE,EAAc,IAAI,WAAW,KAAML,EAAOE,CAAG,EAC7CE,EAAY,IAAIC,CAAW,EACpBF,EACT,CACF,EAAG,EAEL,SAASG,EAAOC,EAAK,CACnB,MAAI,kBAAkB,KAAKA,CAAG,IAC5BA,EAAM,SAAS,mBAAmBA,CAAG,CAAC,GAEjCA,CACT,CACA,SAASC,EAAoBD,EAAKE,EAAkB,CAClD,IAAItB,EAASoB,EAAI,OAAQG,EAAO,IAAI,YAAYvB,CAAM,EAAGwB,EAAM,IAAI,WAAWD,CAAI,EAAG5B,EACrF,IAAKA,EAAI,EAAGA,EAAIK,EAAQL,GAAK,EAC3B6B,EAAI7B,GAAKyB,EAAI,WAAWzB,CAAC,EAE3B,OAAO2B,EAAmBE,EAAMD,CAClC,CACA,SAASE,EAAoBF,EAAM,CACjC,OAAO,OAAO,aAAa,MAAM,KAAM,IAAI,WAAWA,CAAI,CAAC,CAC7D,CACA,SAASG,EAAwBC,EAAOC,EAAQN,EAAkB,CAChE,IAAIO,EAAS,IAAI,WAAWF,EAAM,WAAaC,EAAO,UAAU,EAChE,OAAAC,EAAO,IAAI,IAAI,WAAWF,CAAK,CAAC,EAChCE,EAAO,IAAI,IAAI,WAAWD,CAAM,EAAGD,EAAM,UAAU,EAC5CL,EAAmBO,EAASA,EAAO,MAC5C,CACA,SAASC,EAAkBtB,EAAK,CAC9B,IAAIuB,EAAQ,CAAC,EAAG/B,EAASQ,EAAI,OAAQtB,EACrC,IAAKA,EAAI,EAAGA,EAAIc,EAAS,EAAGd,GAAK,EAC/B6C,EAAM,KAAK,SAASvB,EAAI,OAAOtB,EAAG,CAAC,EAAG,EAAE,CAAC,EAE3C,OAAO,OAAO,aAAa,MAAM,OAAQ6C,CAAK,CAChD,CACA,SAASC,GAAW,CAClB,KAAK,MAAM,CACb,CACA,OAAAA,EAAS,UAAU,OAAS,SAASZ,EAAK,CACxC,YAAK,aAAaD,EAAOC,CAAG,CAAC,EACtB,IACT,EACAY,EAAS,UAAU,aAAe,SAASC,EAAU,CACnD,KAAK,OAASA,EACd,KAAK,SAAWA,EAAS,OACzB,IAAIjC,EAAS,KAAK,MAAM,OAAQL,EAChC,IAAKA,EAAI,GAAIA,GAAKK,EAAQL,GAAK,GAC7BV,EAAS,KAAK,MAAOO,EAAO,KAAK,MAAM,UAAUG,EAAI,GAAIA,CAAC,CAAC,CAAC,EAE9D,YAAK,MAAQ,KAAK,MAAM,UAAUA,EAAI,EAAE,EACjC,IACT,EACAqC,EAAS,UAAU,IAAM,SAASE,EAAK,CACrC,IAAIX,EAAO,KAAK,MAAOvB,EAASuB,EAAK,OAAQ5B,EAAGM,EAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAGkC,EAC3G,IAAKxC,EAAI,EAAGA,EAAIK,EAAQL,GAAK,EAC3BM,EAAKN,GAAK,IAAM4B,EAAK,WAAW5B,CAAC,IAAMA,EAAI,GAAK,GAElD,YAAK,QAAQM,EAAMD,CAAM,EACzBmC,EAAM3B,EAAI,KAAK,KAAK,EAChB0B,IACFC,EAAML,EAAkBK,CAAG,GAE7B,KAAK,MAAM,EACJA,CACT,EACAH,EAAS,UAAU,MAAQ,UAAW,CACpC,YAAK,MAAQ,GACb,KAAK,QAAU,EACf,KAAK,MAAQ,CAAE,WAAY,WAAY,YAAa,SAAU,EACvD,IACT,EACAA,EAAS,UAAU,SAAW,UAAW,CACvC,MAAO,CACL,KAAM,KAAK,MACX,OAAQ,KAAK,QACb,KAAM,KAAK,MAAM,MAAM,CACzB,CACF,EACAA,EAAS,UAAU,SAAW,SAASjC,EAAO,CAC5C,YAAK,MAAQA,EAAM,KACnB,KAAK,QAAUA,EAAM,OACrB,KAAK,MAAQA,EAAM,KACZ,IACT,EACAiC,EAAS,UAAU,QAAU,UAAW,CACtC,OAAO,KAAK,MACZ,OAAO,KAAK,MACZ,OAAO,KAAK,OACd,EACAA,EAAS,UAAU,QAAU,SAAS/B,EAAMD,EAAQ,CAClD,IAAIL,EAAIK,EAAQE,EAAKC,EAAIC,EAEzB,GADAH,EAAKN,GAAK,IAAM,MAAQA,EAAI,GAAK,GAC7BA,EAAI,GAEN,IADAV,EAAS,KAAK,MAAOgB,CAAI,EACpBN,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBM,EAAKN,GAAK,EAGdO,EAAM,KAAK,QAAU,EACrBA,EAAMA,EAAI,SAAS,EAAE,EAAE,MAAM,gBAAgB,EAC7CC,EAAK,SAASD,EAAI,GAAI,EAAE,EACxBE,EAAK,SAASF,EAAI,GAAI,EAAE,GAAK,EAC7BD,EAAK,IAAME,EACXF,EAAK,IAAMG,EACXnB,EAAS,KAAK,MAAOgB,CAAI,CAC3B,EACA+B,EAAS,KAAO,SAASZ,EAAKc,EAAK,CACjC,OAAOF,EAAS,WAAWb,EAAOC,CAAG,EAAGc,CAAG,CAC7C,EACAF,EAAS,WAAa,SAASI,EAASF,EAAK,CAC3C,IAAIG,EAAOxC,EAAKuC,CAAO,EAAGD,EAAM3B,EAAI6B,CAAI,EACxC,OAAOH,EAAMJ,EAAkBK,CAAG,EAAIA,CACxC,EACAH,EAAS,YAAc,UAAW,CAChC,KAAK,MAAM,CACb,EACAA,EAAS,YAAY,UAAU,OAAS,SAASR,EAAK,CACpD,IAAID,EAAOG,EAAwB,KAAK,MAAM,OAAQF,EAAK,EAAI,EAAGxB,EAASuB,EAAK,OAAQ5B,EAExF,IADA,KAAK,SAAW6B,EAAI,WACf7B,EAAI,GAAIA,GAAKK,EAAQL,GAAK,GAC7BV,EAAS,KAAK,MAAOW,EAAa2B,EAAK,SAAS5B,EAAI,GAAIA,CAAC,CAAC,CAAC,EAE7D,YAAK,MAAQA,EAAI,GAAKK,EAAS,IAAI,WAAWuB,EAAK,OAAO,MAAM5B,EAAI,EAAE,CAAC,EAAI,IAAI,WAAW,CAAC,EACpF,IACT,EACAqC,EAAS,YAAY,UAAU,IAAM,SAASE,EAAK,CACjD,IAAIX,EAAO,KAAK,MAAOvB,EAASuB,EAAK,OAAQtB,EAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAGN,EAAGwC,EAC3G,IAAKxC,EAAI,EAAGA,EAAIK,EAAQL,GAAK,EAC3BM,EAAKN,GAAK,IAAM4B,EAAK5B,KAAOA,EAAI,GAAK,GAEvC,YAAK,QAAQM,EAAMD,CAAM,EACzBmC,EAAM3B,EAAI,KAAK,KAAK,EAChB0B,IACFC,EAAML,EAAkBK,CAAG,GAE7B,KAAK,MAAM,EACJA,CACT,EACAH,EAAS,YAAY,UAAU,MAAQ,UAAW,CAChD,YAAK,MAAQ,IAAI,WAAW,CAAC,EAC7B,KAAK,QAAU,EACf,KAAK,MAAQ,CAAE,WAAY,WAAY,YAAa,SAAU,EACvD,IACT,EACAA,EAAS,YAAY,UAAU,SAAW,UAAW,CACnD,IAAIjC,EAAQiC,EAAS,UAAU,SAAS,KAAK,IAAI,EACjD,OAAAjC,EAAM,KAAO0B,EAAoB1B,EAAM,IAAI,EACpCA,CACT,EACAiC,EAAS,YAAY,UAAU,SAAW,SAASjC,EAAO,CACxD,OAAAA,EAAM,KAAOsB,EAAoBtB,EAAM,KAAM,EAAI,EAC1CiC,EAAS,UAAU,SAAS,KAAK,KAAMjC,CAAK,CACrD,EACAiC,EAAS,YAAY,UAAU,QAAUA,EAAS,UAAU,QAC5DA,EAAS,YAAY,UAAU,QAAUA,EAAS,UAAU,QAC5DA,EAAS,YAAY,KAAO,SAASR,EAAKU,EAAK,CAC7C,IAAIG,EAAOhC,EAAW,IAAI,WAAWmB,CAAG,CAAC,EAAGW,EAAM3B,EAAI6B,CAAI,EAC1D,OAAOH,EAAMJ,EAAkBK,CAAG,EAAIA,CACxC,EACOH,CACT,CAAE,CACJ,GAAGrD,EAAQ,EAEX,IAAIqD,GAAWrD,GAAS,QAElB2D,GAAY,KAAK,UAAU,OAAS,KAAK,UAAU,UAAY,KAAK,UAAU,YAE9EC,GAAN,KAAmB,CACjB,OAAO,OAAOC,EAAMC,EAAU,CACX,IAAIF,GAAaC,CAAI,EAC7B,OAAOC,CAAQ,CAC1B,CACA,YAAYD,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,UAAY,QACjB,KAAK,WAAa,KAAK,KAAK,KAAK,KAAK,KAAO,KAAK,SAAS,EAC3D,KAAK,WAAa,CACpB,CACA,OAAOC,EAAU,CACf,KAAK,SAAWA,EAChB,KAAK,UAAY,IAAIT,GAAS,YAC9B,KAAK,WAAa,IAAI,WACtB,KAAK,WAAW,iBAAiB,OAASU,GAAS,KAAK,kBAAkBA,CAAK,CAAE,EACjF,KAAK,WAAW,iBAAiB,QAAUA,GAAS,KAAK,mBAAmBA,CAAK,CAAE,EACnF,KAAK,cAAc,CACrB,CACA,kBAAkBA,EAAO,CAEvB,GADA,KAAK,UAAU,OAAOA,EAAM,OAAO,MAAM,EACrC,CAAC,KAAK,cAAc,EAAG,CACzB,IAAMC,EAAe,KAAK,UAAU,IAAI,EAAI,EACtCC,EAAe,KAAKD,CAAY,EACtC,KAAK,SAAS,KAAMC,CAAY,CAClC,CACF,CACA,mBAAmBF,EAAO,CACxB,KAAK,SAAS,iBAAiB,KAAK,KAAK,MAAM,CACjD,CACA,eAAgB,CACd,GAAI,KAAK,WAAa,KAAK,YAAc,KAAK,YAAc,GAAK,KAAK,YAAc,EAAG,CACrF,IAAMG,EAAQ,KAAK,WAAa,KAAK,UAC/B/B,EAAM,KAAK,IAAI+B,EAAQ,KAAK,UAAW,KAAK,KAAK,IAAI,EACrDd,EAAQO,GAAU,KAAK,KAAK,KAAMO,EAAO/B,CAAG,EAClD,YAAK,WAAW,kBAAkBiB,CAAK,EACvC,KAAK,aACE,EACT,KACE,OAAO,EAEX,CACF,EAEA,SAASe,GAAaC,EAAM,CAC1B,IAAMC,EAAUC,GAAY,SAAS,KAAM,cAAcF,KAAQ,EACjE,GAAIC,EACF,OAAOA,EAAQ,aAAa,SAAS,CAEzC,CAEA,SAASE,GAAaC,EAAMC,EAAU,CAChC,OAAOD,GAAQ,WACjBC,EAAWD,EACXA,EAAO,UAET,IAAME,EAAWF,EAAK,iBAAiBC,CAAQ,EAC/C,OAAOE,GAAQD,CAAQ,CACzB,CAEA,SAASJ,GAAYE,EAAMC,EAAU,CACnC,OAAI,OAAOD,GAAQ,WACjBC,EAAWD,EACXA,EAAO,UAEFA,EAAK,cAAcC,CAAQ,CACpC,CAEA,SAASG,GAAcP,EAASQ,EAAMC,EAAY,CAAC,EAAG,CACpD,GAAM,CAAC,SAAUC,CAAQ,EAAIV,EACvB,CAAC,QAASW,EAAS,WAAYC,EAAY,OAAQC,CAAM,EAAIJ,EAC7Df,EAAQ,SAAS,YAAY,OAAO,EAC1CA,EAAM,UAAUc,EAAMG,GAAW,GAAMC,GAAc,EAAI,EACzDlB,EAAM,OAASmB,GAAU,CAAC,EAC1B,GAAI,CACFb,EAAQ,SAAW,GACnBA,EAAQ,cAAcN,CAAK,CAC7B,QAAE,CACAM,EAAQ,SAAWU,CACrB,CACA,OAAOhB,CACT,CAEA,SAASY,GAAQQ,EAAO,CACtB,OAAI,MAAM,QAAQA,CAAK,EACdA,EACE,MAAM,KACR,MAAM,KAAKA,CAAK,EAEhB,CAAC,EAAE,MAAM,KAAKA,CAAK,CAE9B,CAEA,IAAMC,GAAN,KAAiB,CACf,YAAYvB,EAAMwB,EAAUC,EAAKC,EAAgB,CAAC,EAAG,CACnD,KAAK,KAAO1B,EACZ,KAAK,WAAa,CAChB,SAAUA,EAAK,KACf,aAAcA,EAAK,MAAQ,2BAC3B,UAAWA,EAAK,KAChB,SAAUwB,CACZ,EACA,KAAK,IAAM,IAAI,eACf,KAAK,IAAI,KAAK,OAAQC,EAAK,EAAI,EAC/B,KAAK,IAAI,aAAe,OACxB,KAAK,IAAI,iBAAiB,eAAgB,kBAAkB,EAC5D,KAAK,IAAI,iBAAiB,SAAU,kBAAkB,EACtD,KAAK,IAAI,iBAAiB,mBAAoB,gBAAgB,EAC9D,OAAO,KAAKC,CAAa,EAAE,QAASC,GAAa,CAC/C,KAAK,IAAI,iBAAiBA,EAAWD,EAAcC,EAAU,CAC/D,CAAE,EACF,IAAMC,EAAYtB,GAAa,YAAY,EACvCsB,GAAa,MACf,KAAK,IAAI,iBAAiB,eAAgBA,CAAS,EAErD,KAAK,IAAI,iBAAiB,OAAS1B,GAAS,KAAK,eAAeA,CAAK,CAAE,EACvE,KAAK,IAAI,iBAAiB,QAAUA,GAAS,KAAK,gBAAgBA,CAAK,CAAE,CAC3E,CACA,IAAI,QAAS,CACX,OAAO,KAAK,IAAI,MAClB,CACA,IAAI,UAAW,CACb,GAAM,CAAC,aAAc2B,EAAc,SAAUC,CAAQ,EAAI,KAAK,IAC9D,OAAID,GAAgB,OACXC,EAEA,KAAK,MAAMA,CAAQ,CAE9B,CACA,OAAO7B,EAAU,CACf,KAAK,SAAWA,EAChB,KAAK,IAAI,KAAK,KAAK,UAAU,CAC3B,KAAM,KAAK,UACb,CAAC,CAAC,CACJ,CACA,eAAeC,EAAO,CACpB,GAAI,KAAK,QAAU,KAAO,KAAK,OAAS,IAAK,CAC3C,GAAM,CAAC,SAAU4B,CAAQ,EAAI,KACvB,CAAC,cAAeC,CAAa,EAAID,EACvC,OAAOA,EAAS,cAChB,KAAK,WAAaA,EAClB,KAAK,iBAAmBC,EACxB,KAAK,SAAS,KAAM,KAAK,OAAO,CAAC,CACnC,MACE,KAAK,gBAAgB7B,CAAK,CAE9B,CACA,gBAAgBA,EAAO,CACrB,KAAK,SAAS,4BAA4B,KAAK,KAAK,kBAAkB,KAAK,QAAQ,CACrF,CACA,QAAS,CACP,IAAMb,EAAS,CAAC,EAChB,QAAW2C,KAAO,KAAK,WACrB3C,EAAO2C,GAAO,KAAK,WAAWA,GAEhC,OAAO3C,CACT,CACF,EAEM4C,GAAN,KAAiB,CACf,YAAYC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,KAAOA,EAAK,KACjB,GAAM,CAAC,IAAKT,EAAK,QAASU,CAAO,EAAID,EAAK,iBAC1C,KAAK,IAAM,IAAI,eACf,KAAK,IAAI,KAAK,MAAOT,EAAK,EAAI,EAC9B,KAAK,IAAI,aAAe,OACxB,QAAWO,KAAOG,EAChB,KAAK,IAAI,iBAAiBH,EAAKG,EAAQH,EAAI,EAE7C,KAAK,IAAI,iBAAiB,OAAS9B,GAAS,KAAK,eAAeA,CAAK,CAAE,EACvE,KAAK,IAAI,iBAAiB,QAAUA,GAAS,KAAK,gBAAgBA,CAAK,CAAE,CAC3E,CACA,OAAOD,EAAU,CACf,KAAK,SAAWA,EAChB,KAAK,IAAI,KAAK,KAAK,KAAK,MAAM,CAAC,CACjC,CACA,eAAeC,EAAO,CACpB,GAAM,CAAC,OAAQkC,EAAQ,SAAUN,CAAQ,EAAI,KAAK,IAC9CM,GAAU,KAAOA,EAAS,IAC5B,KAAK,SAAS,KAAMN,CAAQ,EAE5B,KAAK,gBAAgB5B,CAAK,CAE9B,CACA,gBAAgBA,EAAO,CACrB,KAAK,SAAS,kBAAkB,KAAK,KAAK,kBAAkB,KAAK,IAAI,QAAQ,CAC/E,CACF,EAEImC,GAAK,EAEHC,GAAN,KAAmB,CACjB,YAAYtC,EAAMyB,EAAKc,EAAUb,EAAgB,CAAC,EAAG,CACnD,KAAK,GAAK,EAAEW,GACZ,KAAK,KAAOrC,EACZ,KAAK,IAAMyB,EACX,KAAK,SAAWc,EAChB,KAAK,cAAgBb,CACvB,CACA,OAAOzB,EAAU,CACfF,GAAa,OAAO,KAAK,KAAO,CAACyC,EAAOhB,IAAa,CACnD,GAAIgB,EAAO,CACTvC,EAASuC,CAAK,EACd,MACF,CACA,IAAMN,EAAO,IAAIX,GAAW,KAAK,KAAMC,EAAU,KAAK,IAAK,KAAK,aAAa,EAC7EiB,GAAO,KAAK,SAAU,oCAAqCP,EAAK,GAAG,EACnEA,EAAK,OAAQM,GAAS,CACpB,GAAIA,EACFvC,EAASuC,CAAK,MACT,CACL,IAAME,EAAS,IAAIT,GAAWC,CAAI,EAClCO,GAAO,KAAK,SAAU,mCAAoCC,EAAO,GAAG,EACpEA,EAAO,OAAQF,GAAS,CAClBA,EACFvC,EAASuC,CAAK,EAEdvC,EAAS,KAAMiC,EAAK,OAAO,CAAC,CAEhC,CAAE,CACJ,CACF,CAAE,CACJ,CAAE,CACJ,CACF,EAEA,SAASO,GAAOE,EAAQC,KAAeC,EAAU,CAC/C,GAAIF,GAAU,OAAOA,EAAOC,IAAe,WACzC,OAAOD,EAAOC,GAAY,GAAGC,CAAQ,CAEzC,CAEA,IAAMC,GAAN,KAA6B,CAC3B,YAAYC,EAAO/C,EAAM,CACvB,KAAK,MAAQ+C,EACb,KAAK,KAAO/C,EACZ,KAAK,aAAe,IAAIsC,GAAa,KAAK,KAAM,KAAK,IAAK,IAAI,EAC9D,KAAK,SAAS,YAAY,CAC5B,CACA,MAAMrC,EAAU,CACd,IAAM+C,EAAc,SAAS,cAAc,OAAO,EAClDA,EAAY,KAAO,SACnBA,EAAY,KAAO,KAAK,MAAM,KAC9B,KAAK,MAAM,sBAAsB,cAAeA,CAAW,EAC3D,KAAK,SAAS,OAAO,EACrB,KAAK,aAAa,OAAQ,CAACR,EAAOS,IAAe,CAC3CT,GACFQ,EAAY,WAAW,YAAYA,CAAW,EAC9C,KAAK,cAAcR,CAAK,GAExBQ,EAAY,MAAQC,EAAW,UAEjC,KAAK,SAAS,KAAK,EACnBhD,EAASuC,CAAK,CAChB,CAAE,CACJ,CACA,yBAAyBtC,EAAO,CAC9B,IAAMgD,EAAWhD,EAAM,OAASA,EAAM,MAAQ,IAC1CgD,GACF,KAAK,SAAS,WAAY,CACxB,SAAUA,CACZ,CAAC,CAEL,CACA,IAAI,KAAM,CACR,OAAO,KAAK,MAAM,aAAa,wBAAwB,CACzD,CACA,SAAS3C,EAAMc,EAAS,CAAC,EAAG,CAC1B,OAAAA,EAAO,KAAO,KAAK,KACnBA,EAAO,GAAK,KAAK,aAAa,GACvBN,GAAc,KAAK,MAAO,iBAAiBR,IAAQ,CACxD,OAAQc,CACV,CAAC,CACH,CACA,cAAcmB,EAAO,CACL,KAAK,SAAS,QAAS,CACnC,MAAOA,CACT,CAAC,EACU,kBACT,MAAMA,CAAK,CAEf,CACA,kCAAkCW,EAAK,CACrC,KAAK,SAAS,sBAAuB,CACnC,IAAKA,CACP,CAAC,CACH,CACA,iCAAiCA,EAAK,CACpC,KAAK,SAAS,yBAA0B,CACtC,IAAKA,CACP,CAAC,EACDA,EAAI,OAAO,iBAAiB,WAAajD,GAAS,KAAK,yBAAyBA,CAAK,CAAE,CACzF,CACF,EAEMkD,GAAgB,2DAEhBC,GAAN,KAA8B,CAC5B,YAAYC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,OAAS5C,GAAa4C,EAAMF,EAAa,EAAE,OAAQL,GAASA,EAAM,MAAM,MAAO,CACtF,CACA,MAAM9C,EAAU,CACd,IAAMsD,EAAc,KAAK,8BAA8B,EACjDC,EAAsB,IAAM,CAChC,IAAMC,EAAaF,EAAY,MAAM,EACjCE,EACFA,EAAW,MAAOjB,GAAS,CACrBA,GACFvC,EAASuC,CAAK,EACd,KAAK,SAAS,KAAK,GAEnBgB,EAAoB,CAExB,CAAE,GAEFvD,EAAS,EACT,KAAK,SAAS,KAAK,EAEvB,EACA,KAAK,SAAS,OAAO,EACrBuD,EAAoB,CACtB,CACA,+BAAgC,CAC9B,IAAMD,EAAc,CAAC,EACrB,YAAK,OAAO,QAASR,GAAS,CAC5BjC,GAAQiC,EAAM,KAAK,EAAE,QAAS/C,GAAQ,CACpC,IAAMyD,EAAa,IAAIX,GAAuBC,EAAO/C,CAAI,EACzDuD,EAAY,KAAKE,CAAU,CAC7B,CAAE,CACJ,CAAE,EACKF,CACT,CACA,SAAShD,EAAMc,EAAS,CAAC,EAAG,CAC1B,OAAON,GAAc,KAAK,KAAM,kBAAkBR,IAAQ,CACxD,OAAQc,CACV,CAAC,CACH,CACF,EAEMqC,GAAsB,iCAEtBC,GAAsB,IAAI,QAE5BC,GAAU,GAEd,SAASvD,IAAQ,CACVuD,KACHA,GAAU,GACV,SAAS,iBAAiB,QAASC,GAAU,EAAI,EACjD,SAAS,iBAAiB,SAAUC,GAAe,EAAI,EACvD,SAAS,iBAAiB,cAAeC,EAAsB,EAEnE,CAEA,SAASF,GAAS3D,EAAO,CACvB,IAAM8D,EAAS9D,EAAM,OAAO,QAAQ,eAAe,EAC/C8D,GAAUA,EAAO,OAAS,UAAYA,EAAO,MAC/CL,GAAoB,IAAIK,EAAO,KAAMA,CAAM,CAE/C,CAEA,SAASF,GAAc5D,EAAO,CAC5B+D,GAA0B/D,CAAK,CACjC,CAEA,SAAS6D,GAAuB7D,EAAO,CACjCA,EAAM,OAAO,SAAW,QAC1B+D,GAA0B/D,CAAK,CAEnC,CAEA,SAAS+D,GAA0B/D,EAAO,CACxC,IAAMoD,EAAOpD,EAAM,OACnB,GAAIoD,EAAK,aAAaI,EAAmB,EAAG,CAC1CxD,EAAM,eAAe,EACrB,MACF,CACA,IAAMuD,EAAa,IAAIJ,GAAwBC,CAAI,EAC7C,CAAC,OAAQY,CAAM,EAAIT,EACrBS,EAAO,SACThE,EAAM,eAAe,EACrBoD,EAAK,aAAaI,GAAqB,EAAE,EACzCQ,EAAO,QAAQC,EAAO,EACtBV,EAAW,MAAOjB,GAAS,CACzBc,EAAK,gBAAgBI,EAAmB,EACpClB,EACF0B,EAAO,QAAQE,EAAM,EAErBC,GAAWf,CAAI,CAEnB,CAAE,EAEN,CAEA,SAASe,GAAWf,EAAM,CACxB,IAAIU,EAASL,GAAoB,IAAIL,CAAI,GAAK7C,GAAY6C,EAAM,yCAAyC,EACzG,GAAIU,EAAQ,CACV,GAAM,CAAC,SAAU9C,CAAQ,EAAI8C,EAC7BA,EAAO,SAAW,GAClBA,EAAO,MAAM,EACbA,EAAO,MAAM,EACbA,EAAO,SAAW9C,CACpB,MACE8C,EAAS,SAAS,cAAc,OAAO,EACvCA,EAAO,KAAO,SACdA,EAAO,MAAM,QAAU,OACvBV,EAAK,YAAYU,CAAM,EACvBA,EAAO,MAAM,EACbV,EAAK,YAAYU,CAAM,EAEzBL,GAAoB,OAAOL,CAAI,CACjC,CAEA,SAASa,GAAQpB,EAAO,CACtBA,EAAM,SAAW,EACnB,CAEA,SAASqB,GAAOrB,EAAO,CACrBA,EAAM,SAAW,EACnB,CAEA,SAASuB,IAAY,CACf,OAAO,eACTjE,GAAM,CAEV,CAEA,WAAWiE,GAAW,CAAC,EAEvB,IAAMC,GAAN,KAAuB,CACrB,YAAYC,EAAYhE,EAAS,CAC/B,KAAK,WAAagE,EAClB,KAAK,QAAUhE,EACf,KAAK,aAAe,IAAI8B,GAAakC,EAAW,KAAM,KAAK,gBAAiB,IAAI,CAClF,CACA,OAAQ,CACN,KAAK,aAAa,OAAO,KAAK,wBAAwB,KAAK,IAAI,CAAC,CAClE,CACA,iCAAiCrB,EAAK,CACpCA,EAAI,OAAO,iBAAiB,WAAajD,GAAS,CAChD,IAAMgD,EAAWhD,EAAM,OAASA,EAAM,MAAQ,IAC9C,KAAK,WAAW,kBAAkBgD,CAAQ,CAC5C,CAAE,CACJ,CACA,wBAAwBV,EAAOS,EAAY,CACzC,GAAIT,EACF,MAAM,IAAI,MAAM,yBAAyBA,GAAO,EAElD,KAAK,WAAW,cAAc,CAC5B,KAAMS,EAAW,gBACjB,IAAK,KAAK,cAAcA,EAAW,UAAWA,EAAW,QAAQ,CACnE,CAAC,CACH,CACA,cAAcwB,EAAUC,EAAU,CAChC,OAAO,KAAK,gBAAgB,QAAQ,aAAcD,CAAQ,EAAE,QAAQ,YAAa,mBAAmBC,CAAQ,CAAC,CAC/G,CACA,IAAI,iBAAkB,CACpB,OAAO,KAAK,QAAQ,QAAQ,eAC9B,CACA,IAAI,iBAAkB,CACpB,OAAO,KAAK,QAAQ,QAAQ,eAC9B,CACF,EAEA,iBAAiB,sBAAwBxE,GAAS,CAChD,GAAM,CAAC,WAAYsE,EAAY,OAAQhG,CAAM,EAAI0B,EAC7CsE,EAAW,MACE,IAAID,GAAiBC,EAAYhG,CAAM,EAC/C,MAAM,CAEjB,CAAE,ECx3BF,IAAAmG,GAAoB,SAIdC,GAAN,KAAsB,CACpB,aAAc,CACZ,KAAK,UAAY,SAAS,cAAc,gBAAgB,EACxD,KAAK,OAAS,SAAS,cAAc,mBAAmB,EAExD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,CAC7D,CAEA,MAAO,CACD,CAAC,KAAK,SAIV,KAAK,OAAO,iBAAiB,QAAS,KAAK,kBAAkB,EAC7D,KAAK,eAAe,EACtB,CAEA,oBAAqB,CACnB,IAAMC,EAAW,SAAS,WAAa,SACvC,GAAAC,QAAQ,IAAI,sBAAuB,GAAM,CAAE,KAAM,IAAK,QAAS,IAAK,OAAQD,CAAS,CAAC,EAElF,KAAK,WACP,KAAK,UAAU,OAAO,EAGxB,SAAS,cAAc,IAAI,YAAY,yBAAyB,CAAC,CACnE,CAEA,gBAAiB,CACX,UAAW,OACT,OAAO,MAAM,OAAS,OAAO,OAAO,MAAM,MAAM,OAAU,WAC5D,OAAO,MAAM,MAAM,MAAM,EAChB,OAAO,OAAO,MAAM,YAAe,YAC5C,OAAO,MAAM,WAAW,EAEjB,eAAgB,QAAU,OAAO,OAAO,WAAW,YAAe,YAC3E,OAAO,WAAW,WAAW,CAEjC,CACF,EAEA,SAASE,IAAmB,CAC1B,MAAI,UAAW,OACN,aAGL,eAAgB,OACX,kBAGF,kBACT,CAEA,SAAS,iBAAiBA,GAAiB,EAAG,IAAM,CAClD,IAAIH,GAAgB,EAAE,KAAK,CAC7B,EAAG,EAAK",
  "names": ["adapters_default", "init_adapters", "__esmMin", "logger_default", "init_logger", "__esmMin", "init_adapters", "messages", "adapters_default", "now", "secondsSince", "ConnectionMonitor", "connection_monitor_default", "init_connection_monitor", "__esmMin", "init_logger", "time", "connection", "logger_default", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "internal_default", "init_internal", "__esmMin", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "connection_default", "init_connection", "__esmMin", "init_adapters", "init_connection_monitor", "init_internal", "init_logger", "internal_default", "consumer", "connection_monitor_default", "data", "logger_default", "socketProtocols", "adapters_default", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "Subscription", "init_subscription", "__esmMin", "object", "properties", "key", "value", "consumer", "params", "mixin", "action", "data", "SubscriptionGuarantor", "subscription_guarantor_default", "init_subscription_guarantor", "__esmMin", "init_logger", "subscriptions", "subscription", "logger_default", "s", "Subscriptions", "init_subscriptions", "__esmMin", "init_subscription", "init_subscription_guarantor", "init_logger", "consumer", "subscription_guarantor_default", "channelName", "mixin", "channel", "params", "subscription", "Subscription", "identifier", "s", "callbackName", "args", "subscriptions", "logger_default", "command", "createWebSocketURL", "url", "a", "Consumer", "init_consumer", "__esmMin", "init_connection", "init_subscriptions", "Subscriptions", "connection_default", "data", "subprotocol", "src_exports", "__export", "connection_default", "connection_monitor_default", "Consumer", "internal_default", "Subscription", "subscription_guarantor_default", "Subscriptions", "adapters_default", "createConsumer", "createWebSocketURL", "getConfig", "logger_default", "url", "name", "element", "init_src", "__esmMin", "init_connection", "init_connection_monitor", "init_consumer", "init_internal", "init_subscription", "init_subscriptions", "init_subscription_guarantor", "init_adapters", "init_logger", "require_Cookie", "__commonJSMin", "exports", "module", "Cookie", "name", "match", "value", "options", "cookie", "expiresFromLive", "live", "date", "BuiltInHTMLElement", "wrapperForTheName", "prototype", "submitter", "validateSubmitter", "form", "raise", "errorConstructor", "message", "name", "submittersByForm", "findSubmitterFromClickTarget", "target", "element", "candidate", "clickCaptured", "event", "FrameLoadingStyle", "FrameElement", "value", "frameLoadingStyleFromString", "_a", "_b", "style", "expandURL", "locatable", "getAnchor", "url", "anchorMatch", "getAction", "action", "getExtension", "getLastPathComponent", "isHTML", "isPrefixedBy", "baseURL", "prefix", "getPrefix", "locationIsVisitable", "location", "rootLocation", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "addTrailingSlash", "FetchResponse", "response", "activateScriptElement", "createdScriptElement", "cspNonce", "getMetaContent", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "cancelable", "detail", "nextAnimationFrame", "resolve", "nextEventLoopTick", "nextMicrotask", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "i", "uuid", "_", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "isAction", "getVisitAction", "getMetaElement", "setMetaContent", "content", "findClosestRecursively", "selector", "FetchMethod", "fetchMethodFromString", "method", "FetchRequest", "delegate", "body", "_value", "fetchOptions", "error", "fetchResponse", "mimeType", "requestInterception", "AppearanceObserver", "entries", "lastEntry", "StreamMessage", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "FormSubmissionState", "FormEnctype", "formEnctypeFromString", "encoding", "FormSubmission", "_element", "_submitter", "formElement", "mustRedirect", "buildFormData", "mergeFormDataEntries", "formElementAction", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "request", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "searchParams", "Snapshot", "inertDisabledOrHidden", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "View", "x", "y", "renderer", "isPreview", "shouldRender", "renderInterception", "options", "reason", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "link", "doesNotTargetIFrame", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "callback", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "Renderer", "currentSnapshot", "newSnapshot", "renderElement", "willRender", "reject", "elementIsFocusable", "FrameRenderer", "currentElement", "newElement", "destinationRange", "frameElement", "sourceRange", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "tagName", "PageSnapshot", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "index", "source", "option", "clonedPasswordInput", "root", "TimingMetric", "VisitState", "defaultOptions", "SystemStatusCode", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "session", "visit", "_visit", "_formSubmission", "CacheObserver", "FrameRedirector", "_location", "frame", "meta", "History", "turbo", "state", "additionalData", "restorationData", "Navigator", "formSubmission", "visitOptions", "currentAnchor", "isRestorationToTop", "oldURL", "newURL", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "StreamObserver", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "documentElement", "replaceableElement", "parentNode", "PageRenderer", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "SnapshotCache", "size", "key", "PageView", "cachedSnapshot", "Preloader", "responseText", "Session", "adapter", "delay", "mode", "extendURLWithDeprecatedProperties", "defaultPrevented", "render", "_snapshot", "_isPreview", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "Cache", "StreamActions", "e", "targetElement", "cache", "navigator$1", "start", "registerAdapter", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "clearCache", "setProgressBarDelay", "setConfirmMethod", "confirmMethod", "setFormMode", "Turbo", "TurboFrameMissingError", "FrameController", "_fetchResponse", "src", "document", "fetchRequest", "newFrame", "_newElement", "newFrameElement", "pageSnapshot", "wrapped", "getFrameElementById", "activateElement", "sourceURL", "currentURL", "StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "StreamSourceElement", "consumer", "getConsumer", "setConsumer", "createConsumer", "newConsumer", "subscribeTo", "channel", "mixin", "subscriptions", "walk", "obj", "acc", "key", "camel", "m", "x", "TurboCableStreamSourceElement", "connectStreamSource", "subscribeTo", "disconnectStreamSource", "data", "event", "channel", "signed_stream_name", "walk", "encodeMethodIntoRequestBody", "event", "form", "fetchOptions", "submitter", "body", "isBodyInit", "method", "determineFetchMethod", "formMethod", "determineFormMethod", "overrideMethod", "encodeMethodIntoRequestBody", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "captcha_loader_controller_default", "Controller", "cache", "captchaClientKey", "action", "token", "captchaTokenInput", "captchaTokenActionInput", "event", "formId", "form", "quantityInput", "hiddenInput", "captchaTokenInputs", "captchaTokenActionInputs", "input", "turnstileContainer", "state", "triggerElement", "trigger", "cart_controller_default", "Controller", "stripeButton", "stripeSpinner", "stripeError", "elements", "event", "termsCheckbox", "termsError", "cart", "result", "message", "token", "form", "existingInput", "hiddenInput", "__publicField", "cf_checker_controller_default", "Controller", "event", "__publicField", "_defineProperties", "target", "props", "i", "descriptor", "_createClass", "Constructor", "protoProps", "staticProps", "MEDIA_PREFERS_REDUCED_MOTION", "CREATED", "MOUNTED", "IDLE", "MOVING", "SCROLLING", "DRAGGING", "DESTROYED", "STATES", "empty", "array", "slice", "arrayLike", "start", "end", "apply", "func", "nextTick", "noop", "raf", "typeOf", "type", "subject", "isObject", "isNull", "isArray", "isFunction", "isString", "isUndefined", "isHTMLElement", "toArray", "value", "forEach", "values", "iteratee", "includes", "push", "items", "toggleClass", "elm", "classes", "add", "name", "addClass", "append", "parent", "children", "before", "nodes", "ref", "node", "matches", "selector", "children2", "child", "ownKeys", "forOwn", "object", "right", "key", "assign", "source", "merge", "omit", "keys", "removeAttribute", "elms", "attrs", "attr", "setAttribute", "value2", "create", "tag", "style", "prop", "display", "display2", "focus", "getAttribute", "hasClass", "className", "rect", "remove", "parseHtml", "html", "prevent", "e", "stopPropagation", "query", "queryAll", "removeClass", "timeOf", "unit", "PROJECT_CODE", "DATA_ATTRIBUTE", "assert", "condition", "message", "min", "max", "floor", "ceil", "abs", "approximatelyEqual", "x", "y", "epsilon", "between", "number", "exclusive", "minimum", "maximum", "clamp", "sign", "format", "string", "replacements", "forEach", "replacement", "pad", "number", "ids", "uniqueId", "prefix", "EventBinder", "listeners", "bind", "targets", "events", "callback", "options", "forEachEvent", "target", "event", "namespace", "isEventTarget", "remover", "unbind", "listener", "dispatch", "type", "detail", "e", "bubbles", "iteratee", "events2", "eventNS", "fragment", "destroy", "data", "empty", "EVENT_MOUNTED", "EVENT_READY", "EVENT_MOVE", "EVENT_MOVED", "EVENT_CLICK", "EVENT_ACTIVE", "EVENT_INACTIVE", "EVENT_VISIBLE", "EVENT_HIDDEN", "EVENT_REFRESH", "EVENT_UPDATED", "EVENT_RESIZE", "EVENT_RESIZED", "EVENT_DRAG", "EVENT_DRAGGING", "EVENT_DRAGGED", "EVENT_SCROLL", "EVENT_SCROLLED", "EVENT_OVERFLOW", "EVENT_DESTROY", "EVENT_ARROWS_MOUNTED", "EVENT_ARROWS_UPDATED", "EVENT_PAGINATION_MOUNTED", "EVENT_PAGINATION_UPDATED", "EVENT_NAVIGATION_MOUNTED", "EVENT_AUTOPLAY_PLAY", "EVENT_AUTOPLAY_PLAYING", "EVENT_AUTOPLAY_PAUSE", "EVENT_LAZYLOAD_LOADED", "EVENT_SLIDE_KEYDOWN", "EVENT_SHIFTED", "EVENT_END_INDEX_CHANGED", "EventInterface", "Splide2", "bus", "binder", "on", "toArray", "isArray", "emit", "slice", "assign", "apply", "RequestInterval", "interval", "onInterval", "onUpdate", "limit", "now", "startTime", "rate", "id", "paused", "count", "update", "min", "pause", "raf", "start", "resume", "cancel", "rewind", "set", "time", "isPaused", "State", "initialState", "state", "value", "is", "states", "includes", "Throttle", "func", "duration", "Media", "Components2", "breakpoints", "reducedMotion", "queries", "setup", "isMin", "ownKeys", "n", "m", "key", "register", "MEDIA_PREFERS_REDUCED_MOTION", "completely", "options2", "query", "queryList", "destroyed", "DESTROYED", "direction", "merged", "merged2", "entry", "merge", "omit", "reduce", "enable", "opts", "base", "notify", "CREATED", "ARROW", "ARROW_LEFT", "ARROW_RIGHT", "ARROW_UP", "ARROW_DOWN", "RTL", "TTB", "ORIENTATION_MAP", "ARROW_UP", "ARROW_RIGHT", "ARROW_DOWN", "ARROW_LEFT", "Direction", "Splide2", "Components2", "options", "resolve", "prop", "axisOnly", "direction", "index", "match", "offset", "replacement", "orient", "value", "ROLE", "TAB_INDEX", "DISABLED", "ARIA_PREFIX", "ARIA_CONTROLS", "ARIA_CURRENT", "ARIA_SELECTED", "ARIA_LABEL", "ARIA_LABELLEDBY", "ARIA_HIDDEN", "ARIA_ORIENTATION", "ARIA_ROLEDESCRIPTION", "ARIA_LIVE", "ARIA_BUSY", "ARIA_ATOMIC", "ALL_ATTRIBUTES", "CLASS_PREFIX", "PROJECT_CODE", "STATUS_CLASS_PREFIX", "CLASS_ROOT", "CLASS_TRACK", "CLASS_LIST", "CLASS_SLIDE", "CLASS_CLONE", "CLASS_CONTAINER", "CLASS_ARROWS", "CLASS_ARROW", "CLASS_ARROW_PREV", "CLASS_ARROW_NEXT", "CLASS_PAGINATION", "CLASS_PAGINATION_PAGE", "CLASS_PROGRESS", "CLASS_PROGRESS_BAR", "CLASS_TOGGLE", "CLASS_TOGGLE_PLAY", "CLASS_TOGGLE_PAUSE", "CLASS_SPINNER", "CLASS_SR", "CLASS_INITIALIZED", "CLASS_ACTIVE", "CLASS_PREV", "CLASS_NEXT", "CLASS_VISIBLE", "CLASS_LOADING", "CLASS_FOCUS_IN", "CLASS_OVERFLOW", "STATUS_CLASSES", "CLASSES", "closest", "from", "selector", "isFunction", "elm", "matches", "FRICTION", "LOG_INTERVAL", "POINTER_DOWN_EVENTS", "POINTER_MOVE_EVENTS", "POINTER_UP_EVENTS", "Elements", "_EventInterface", "EventInterface", "on", "bind", "root", "i18n", "elements", "slides", "rootClasses", "trackClasses", "track", "list", "isUsingKey", "setup", "collect", "init", "update", "mount", "EVENT_REFRESH", "destroy", "EVENT_UPDATED", "e", "toggleClass", "completely", "attrs", "empty", "removeClass", "removeAttribute", "getClasses", "addClass", "setAttribute", "find", "child", "assert", "push", "children", "forOwn", "className", "key", "assign", "id", "uniqueId", "role", "getAttribute", "query", "base", "SLIDE", "LOOP", "FADE", "Slide$1", "slideIndex", "slide", "event", "emit", "Components", "isNavigation", "updateOnMove", "pagination", "slideFocus", "styles", "label", "isClone", "container", "destroyed", "pad", "format", "listen", "apply", "EVENT_CLICK", "self", "EVENT_SLIDE_KEYDOWN", "EVENT_MOVED", "EVENT_SHIFTED", "EVENT_SCROLLED", "EVENT_NAVIGATION_MOUNTED", "initNavigation", "EVENT_MOVE", "onMove", "controls", "target", "Slide2", "curr", "updateActivity", "updateVisibility", "active", "isActive", "hasClass", "EVENT_ACTIVE", "EVENT_INACTIVE", "visible", "isVisible", "hidden", "MOVING", "SCROLLING", "queryAll", "EVENT_VISIBLE", "EVENT_HIDDEN", "focus", "style$1", "useContainer", "style", "trackRect", "rect", "slideRect", "left", "right", "floor", "ceil", "isWithin", "distance", "diff", "abs", "min", "Slides", "_EventInterface2", "_Components2$Elements", "Slides2", "register", "forEach$1", "object", "Slide1", "get", "excludeClones", "filter", "getIn", "page", "Controller", "max", "between", "getAt", "add", "items", "forEach", "isString", "parseHtml", "isHTMLElement", "ref", "before", "append", "observeImages", "EVENT_RESIZE", "remove$1", "matcher", "remove", "iteratee", "includes", "toArray", "callback", "images", "length", "img", "getLength", "isEnough", "Layout", "_EventInterface3", "_Components2$Elements2", "styleSlides", "vertical", "rootRect", "overflow", "Throttle", "resize", "unit", "cssPadding", "force", "newRect", "cssTrackHeight", "cssSlideWidth", "cssSlideHeight", "EVENT_RESIZED", "isOverflow", "EVENT_OVERFLOW", "padding", "isObject", "height", "cssHeight", "cssSlideSize", "gap", "listSize", "slideSize", "withoutGap", "Slide", "getGap", "totalSize", "sliderSize", "getPadding", "MULTIPLIER", "Clones", "clones", "cloneCount", "remount", "observe", "computeCloneCount", "generate", "count", "isHead", "clone", "cloneDeep", "clones2", "isUndefined", "fixedSize", "fixedCount", "Move", "_EventInterface4", "set", "_Components2$Layout", "_Components2$Directio", "_Components2$Elements3", "Transition", "EVENT_MOUNTED", "reposition", "jump", "move", "dest", "prev", "canShift", "cancel", "translate", "shift", "getPosition", "IDLE", "toPosition", "position", "preventLoop", "destination", "loop", "toIndex", "exceededMax", "exceededMin", "backwards", "excess", "getLimit", "size", "minDistance", "i", "trimming", "trim", "clamp", "shifted", "exceededLimit", "_EventInterface5", "_Components2$Slides", "omitEnd", "isLoop", "isSlide", "getNext", "getAdjacent", "getPrev", "currIndex", "endIndex", "prevIndex", "slideCount", "perMove", "perPage", "EVENT_END_INDEX_CHANGED", "onResized", "getEnd", "go", "control", "allowSameIndex", "isBusy", "parse", "setIndex", "scroll", "duration", "snap", "_ref", "indicator", "number", "computeDestIndex", "hasFocus", "approximatelyEqual", "snapPage", "computeMovableDestIndex", "toPage", "end", "toDest", "getIndex", "XML_NAME_SPACE", "PATH", "SIZE", "Arrows", "classes", "placeholder", "wrapper", "next", "created", "wrapperClasses", "arrows", "enabled", "createArrows", "display", "EVENT_ARROWS_MOUNTED", "create", "createArrow", "prev2", "arrow", "nextIndex", "prevLabel", "nextLabel", "EVENT_ARROWS_UPDATED", "INTERVAL_DATA_ATTRIBUTE", "DATA_ATTRIBUTE", "Autoplay", "_EventInterface6", "interval", "RequestInterval", "onAnimationFrame", "isPaused", "_Components2$Elements4", "toggle", "autoplay", "hovered", "focused", "stopped", "play", "autoToggle", "pause", "EVENT_SCROLL", "EVENT_AUTOPLAY_PLAY", "stop", "EVENT_AUTOPLAY_PAUSE", "rate", "bar", "EVENT_AUTOPLAY_PLAYING", "Cover", "_EventInterface7", "EVENT_LAZYLOAD_LOADED", "cover", "cover2", "BOUNCE_DIFF_THRESHOLD", "BOUNCE_DURATION", "FRICTION_FACTOR", "BASE_VELOCITY", "MIN_DURATION", "Scroll", "_EventInterface8", "friction", "clear", "onScrolled", "noConstrain", "sign", "noDistance", "onEnd", "to", "easing", "t", "easingFunc", "SCROLL_LISTENER_OPTIONS", "Drag", "_EventInterface9", "unbind", "state", "reduce", "_Components2$Directio2", "basePosition", "baseEvent", "prevBaseEvent", "isFree", "dragging", "exceeded", "clickPrevented", "disabled", "noop", "onPointerDown", "onClick", "prevent", "drag", "disable", "isTouch", "isTouchEvent", "isDraggable", "onPointerMove", "onPointerUp", "save", "DRAGGING", "EVENT_DRAG", "constrain", "diffCoord", "expired", "diffTime", "hasExceeded", "EVENT_DRAGGING", "isSliderDirection", "shouldStart", "EVENT_DRAGGED", "velocity", "computeVelocity", "computeDestination", "rewind", "thresholds", "isObj", "mouse", "touch", "time", "orthogonal", "coordOf", "getBaseEvent", "timeOf", "target2", "noDrag", "isDragging", "NORMALIZATION_MAP", "normalizeKey", "KEYBOARD_EVENT", "Keyboard", "_EventInterface10", "keyboard", "onKeydown", "_disabled", "nextTick", "SRC_DATA_ATTRIBUTE", "SRCSET_DATA_ATTRIBUTE", "IMAGE_SELECTOR", "LazyLoad", "_EventInterface11", "off", "isSequential", "events", "entries", "loadNext", "check", "src", "srcset", "parent", "spinner", "data", "load", "onLoad", "Pagination", "paginationClasses", "createPagination", "EVENT_PAGINATION_MOUNTED", "slice", "getDirection", "li", "button", "text", "dir", "nextPage", "item", "_button", "EVENT_PAGINATION_UPDATED", "TRIGGER_KEYS", "Sync", "sync", "navigate", "splide", "Wheel", "_EventInterface12", "lastTime", "onWheel", "deltaY", "timeStamp", "_min", "sleep", "shouldPrevent", "SR_REMOVAL_DELAY", "Live", "_EventInterface13", "sr", "ComponentConstructors", "Media", "I18N", "DEFAULTS", "Fade", "start", "done", "transition", "endCallback", "speed", "getSpeed", "rewindSpeed", "_Splide", "State", "CREATED", "merge", "_proto", "Extensions", "_this", "DESTROYED", "Constructors", "Component", "component", "EVENT_READY", "_this$event", "type", "EVENT_DESTROY", "_createClass", "Splide", "STATES", "homepage_controller_default", "Controller", "carousel", "Splide", "intranet_order_summary_controller_default", "Controller", "totalTarget", "total", "acc", "partial", "intranet_point_of_sale_controller_default", "Controller", "event", "buyTab", "searchTab", "intranet_purchase_billing_info_controller_default", "Controller", "intranet_purchase_summary_controller_default", "Controller", "totalTarget", "total", "acc", "partial", "event", "selectedPaymentType", "paymentType", "paymentMessage", "intranet_reports_controller_default", "Controller", "event", "walletLogsFilters", "transactionLine", "buttonInnerIcon", "burnLineId", "burnLine", "refundLineId", "refundLine", "line", "buttonIcon", "intranet_shopping_cart_controller_default", "Controller", "event", "line", "partial", "price", "quantity", "amount", "intranet_wallet_burner_controller_default", "Controller", "barcode", "event", "button", "capability", "elem", "modal_controller_default", "Controller", "modalHidden", "__publicField", "stripe_controller_default", "Controller", "result", "paymentIntentId", "response", "message", "data", "error", "__publicField", "adapters", "logger", "messages", "now", "secondsSince", "time", "ConnectionMonitor", "connection", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "INTERNAL", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "consumer", "data", "socketProtocols", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "object", "properties", "key", "value", "Subscription", "params", "mixin", "action", "SubscriptionGuarantor", "subscriptions", "subscription", "s", "Subscriptions", "channelName", "channel", "callbackName", "args", "command", "Consumer", "url", "createWebSocketURL", "subprotocol", "a", "createConsumer", "getConfig", "name", "element", "stripe_init_controller_default", "Controller", "createConsumer", "data", "response", "htmlContent", "streamMessage", "__publicField", "toast_controller_default", "Controller", "toggle_visibility_controller_default", "Controller", "hasContent", "__publicField", "user_controller_default", "Controller", "event", "town", "district", "blankDistrict", "address", "cap", "cf", "waiting_room_controller_default", "Controller", "__publicField", "application", "captcha_loader_controller_default", "cart_controller_default", "cf_checker_controller_default", "homepage_controller_default", "intranet_order_summary_controller_default", "intranet_point_of_sale_controller_default", "intranet_purchase_billing_info_controller_default", "intranet_purchase_summary_controller_default", "intranet_reports_controller_default", "intranet_shopping_cart_controller_default", "intranet_wallet_burner_controller_default", "modal_controller_default", "stripe_controller_default", "stripe_init_controller_default", "toast_controller_default", "toggle_visibility_controller_default", "user_controller_default", "waiting_room_controller_default", "attachmentSelector", "attachments", "preview", "presentation", "caption", "name", "size", "file", "attributes", "default", "tagName", "parse", "quote", "nestable", "heading1", "terminal", "breakOnReturn", "group", "code", "htmlAttributes", "text", "plaintext", "bulletList", "bullet", "listAttribute", "test", "element", "parentNode", "this", "numberList", "number", "attachmentGallery", "exclusive", "_element$tagName", "toLowerCase", "androidVersionMatch", "navigator", "userAgent", "match", "androidVersion", "parseInt", "browser$1", "composesExistingText", "recentAndroid", "samsungAndroid", "forcesObjectResizing", "supportsInputEvents", "InputEvent", "every", "prop", "prototype", "lang$1", "attachFiles", "bold", "bullets", "byte", "bytes", "captionPlaceholder", "indent", "italic", "link", "numbers", "outdent", "redo", "remove", "strike", "undo", "unlink", "url", "urlPlaceholder", "GB", "KB", "MB", "PB", "TB", "sizes", "lang", "file_size_formatting", "prefix", "precision", "formatter", "concat", "base", "exp", "Math", "floor", "log", "withoutInsignificantZeros", "pow", "toFixed", "replace", "ZERO_WIDTH_SPACE", "NON_BREAKING_SPACE", "extend", "properties", "key", "value", "html", "document", "documentElement", "matches", "handleEvent", "eventName", "onElement", "matchingSelector", "withCallback", "inPhase", "preventDefault", "times", "arguments", "length", "undefined", "selector", "useCapture", "handler", "event", "destroy", "target", "findClosestElementFromNode", "call", "removeEventListener", "addEventListener", "triggerEvent", "bubbles", "cancelable", "createEvent", "initEvent", "dispatchEvent", "elementMatchesSelector", "nodeType", "node", "untilNode", "Node", "ELEMENT_NODE", "closest", "innerElementIsActive", "activeElement", "elementContainsNode", "findChildIndexOfNode", "_node", "childIndex", "previousSibling", "removeNode", "_node$parentNode", "removeChild", "walkTree", "tree", "onlyNodesOfType", "usingFilter", "expandEntityReferences", "whatToShow", "NodeFilter", "SHOW_ELEMENT", "SHOW_TEXT", "SHOW_COMMENT", "SHOW_ALL", "createTreeWalker", "makeElement", "tag", "options", "createElement", "editable", "contenteditable", "setAttribute", "style", "data", "dataset", "className", "split", "forEach", "classList", "add", "textContent", "childNodes", "childNode", "appendChild", "blockTagNames", "getBlockTagNames", "blockAttributes", "push", "nodeIsBlockContainer", "nodeIsBlockStartComment", "firstChild", "nodeIsBlockStart", "strict", "includes", "nodeIsCommentNode", "COMMENT_NODE", "nodeIsCursorTarget", "nodeIsTextNode", "trixCursorTarget", "nodeIsAttachmentElement", "nodeIsEmptyTextNode", "TEXT_NODE", "input", "level2Enabled", "getLevel", "browser", "pickFiles", "callback", "type", "multiple", "hidden", "id", "fileInputId", "files", "getElementById", "body", "click", "parser", "removeBlankTableCells", "tableCellSeparator", "tableRowSeparator", "text_attributes", "inheritable", "window", "getComputedStyle", "fontWeight", "fontStyle", "href", "groupTagName", "getAttribute", "frozen", "backgroundColor", "toolbar", "getDefaultHTML", "interval", "V", "i", "n", "a", "attachment", "attachmentCaption", "attachmentCaptionEditor", "attachmentMetadata", "attachmentMetadataContainer", "attachmentName", "attachmentProgress", "attachmentSize", "attachmentToolbar", "u", "M", "l", "j", "W", "U", "q", "BasicObject", "expression", "toMethod", "toProperty", "optional", "parseProxyMethodExpression", "subject", "object", "_this$toMethod", "_object", "apply", "proxyMethodExpressionPattern", "Error", "args", "Function", "RegExp", "K", "G", "$", "UTF16String", "box", "fromUCS2String", "toString", "ucs2String", "ucs2decode", "codepoints", "ucs2encode", "constructor", "super", "ucs2Length", "offsetToUCS2Offset", "offset", "slice", "max", "offsetFromUCS2Offset", "ucs2Offset", "fromCodepoints", "charAt", "isEqualTo", "toJSON", "getCacheKey", "hasArrayFrom", "_Array$from", "Array", "from", "hasStringCodePointAt", "_$codePointAt", "codePointAt", "hasStringFromCodePoint", "_String$fromCodePoint", "String", "fromCodePoint", "string", "map", "char", "output", "counter", "charCodeAt", "extra", "array", "result", "fromCharCode", "join", "TrixObject", "jsonString", "fromJSON", "JSON", "hasSameConstructorAs", "inspect", "parts", "contents", "contentsForInspection", "toJSONString", "stringify", "toUTF16String", "arraysAreEqual", "b", "index", "spliceArray", "_len", "_key", "splice", "RTL_PATTERN", "getDirection", "dir", "dirName", "textArea", "form", "supportsDirName", "FormData", "has", "supportsDirSelector", "get", "trim", "allAttributeNames", "blockAttributeNames", "textAttributeNames", "listAttributeNames", "getAllAttributeNames", "getTextAttributeNames", "getBlockAttributeNames", "getBlockConfig", "attributeName", "config", "Object", "keys", "getTextConfig", "installDefaultCSSForTagName", "defaultCSS", "insertStyleElementForTagName", "nonce", "getCSPNonce", "head", "insertBefore", "getMetaElement", "querySelector", "testTransferData", "dataTransferIsPlainText", "dataTransfer", "getData", "DOMParser", "parseFromString", "keyEventIsKeyboardCommand", "platform", "metaKey", "ctrlKey", "defer", "fn", "setTimeout", "copyObject", "objectsAreEqual", "normalizeRange", "range", "isArray", "copyValue", "rangeIsCollapsed", "start", "end", "rangeValuesAreEqual", "rangesAreEqual", "leftRange", "rightRange", "leftStart", "leftEnd", "rightStart", "rightEnd", "left", "right", "SelectionChangeObserver", "update", "bind", "selectionManagers", "started", "stop", "registerSelectionManager", "selectionManager", "unregisterSelectionManager", "filter", "sm", "notifySelectionManagersOfSelectionChange", "selectionDidChange", "reset", "selectionChangeObserver", "getDOMSelection", "selection", "getSelection", "rangeCount", "getDOMRange", "_getDOMSelection", "domRange", "getRangeAt", "domRangeIsPrivate", "setDOMRange", "removeAllRanges", "addRange", "nodeIsPrivate", "startContainer", "endContainer", "getPrototypeOf", "normalizeSpaces", "breakableWhitespacePattern", "squishBreakableWhitespace", "source", "utf16StringDifferences", "diffA", "utf16StringDifference", "utf16String", "diffB", "leftIndex", "rightIndexA", "rightIndexB", "Hash", "fromCommonAttributesOfObjects", "objects", "hash", "getKeys", "getKeysCommonToHash", "values", "copy", "merge", "unbox", "toArray", "isEmpty", "toObject", "keyToRemove", "sort", "ObjectGroup", "groupObjects", "ungroupedObjects", "depth", "asTree", "_object$canBeGrouped2", "_object$canBeGrouped", "_group$canBeGroupedWi", "_group", "canBeGrouped", "canBeGroupedWith", "getObjects", "getDepth", "ObjectMap", "find", "ElementStore", "elements", "getKey", "trixStoreKey", "Operation", "isPerforming", "performing", "hasPerformed", "performed", "hasSucceeded", "succeeded", "hasFailed", "getPromise", "promise", "Promise", "resolve", "reject", "perform", "release", "_this$promise", "_this$promise$cancel", "cancel", "proxyMethod", "ObjectView", "childViews", "rootView", "getNodes", "nodes", "createNodes", "cloneNode", "invalidate", "_this$parentView", "parentView", "invalidateViewForObject", "_this$findViewForObje", "findViewForObject", "findOrCreateCachedChildView", "viewClass", "view", "getCachedViewForObject", "recordChildView", "createChildView", "cacheViewForObject", "ObjectGroupView", "getAllChildViews", "views", "childView", "findElement", "findElementForObject", "getViewCache", "isViewCachingEnabled", "viewCache", "shouldCacheViews", "enableViewCaching", "disableViewCaching", "_this$getViewCache", "cache", "garbageCollectCachedViews", "objectKeys", "objectGroup", "getChildViews", "createContainerElement", "css", "AttachmentView", "uploadProgressDelegate", "attachmentPiece", "piece", "createContentNodes", "innerElement", "figure", "getClassName", "getHref", "tabindex", "hasContent", "innerHTML", "getContent", "createCaptionElement", "isPending", "progressElement", "class", "getUploadProgress", "trixMutable", "createCursorTarget", "figcaption", "getCaption", "captionConfig", "getCaptionConfig", "getFilename", "getFormattedFilesize", "nameElement", "createTextNode", "sizeElement", "names", "getType", "extension", "getExtension", "trixAttachment", "trixContentType", "getContentType", "trixId", "trixAttributes", "trixSerialize", "htmlContainsTagName", "_config$attachments$t", "findProgressElement", "_this$findElement", "attachmentDidChangeUploadProgress", "div", "PreviewableAttachmentView", "previewDelegate", "image", "src", "refresh", "updateAttributesForImage", "getURL", "previewURL", "getPreviewURL", "removeAttribute", "serializedAttributes", "width", "getWidth", "height", "getHeight", "storeKey", "attachmentDidChangeAttributes", "PieceView", "getAttributes", "textConfig", "context", "createAttachmentNodes", "createStringNodes", "_element", "firstElementChild", "isPreviewable", "_this$textConfig", "iterable", "substring", "preserveSpaces", "styles", "pendingElement", "styleProperty", "isLast", "isFirst", "followsWhitespace", "TextView", "pieces", "getPieces", "lastIndex", "endsWithWhitespace", "previousPiece", "hasAttribute", "BlockView", "block", "createComment", "_getBlockConfig", "getLastAttribute", "textView", "shouldAddExtraNewlineElement", "isRTL", "assign", "getBlockBreakPosition", "entries", "_ref", "DocumentView", "render", "sync", "elementStore", "setDocument", "shadowElement", "getBlocks", "isSynced", "elementsHaveEqualHTML", "fragment", "createDocumentFragmentForSync", "lastChild", "didSync", "findStoredElements", "createDocumentFragment", "storedElement", "replaceChild", "querySelectorAll", "otherElement", "ignoreSpaces", "be", "t", "e", "o", "s", "ve", "r", "Ae", "xe", "Piece", "types", "pieceJSON", "copyWithAttributes", "getValue", "copyWithAdditionalAttributes", "copyWithoutAttribute", "attribute", "getAttributesHash", "hasSameStringValueAsPiece", "hasSameAttributesAsPiece", "isBlockBreak", "isSerializable", "getLength", "canBeConsolidatedWith", "_defineProperty", "ImagePreloadOperation", "Image", "onload", "naturalWidth", "naturalHeight", "onerror", "Attachment", "attributesForFile", "setFile", "filename", "filesize", "contentType", "attachmentJSON", "releaseFile", "didChangeAttributes", "setAttributes", "newAttributes", "_this$previewDelegate", "_this$previewDelegate2", "_this$delegate", "_this$delegate$attach", "delegate", "preloadURL", "previewablePattern", "getFilesize", "_this$getFilename$mat", "getFile", "preloadFile", "releasePreloadedFile", "uploadProgress", "setUploadProgress", "_this$uploadProgressD", "_this$uploadProgressD2", "preloadingURL", "setPreviewURL", "_this$previewDelegate3", "_this$previewDelegate4", "_this$delegate2", "_this$delegate2$attac", "attachmentDidChangePreviewURL", "preload", "fileObjectURL", "URL", "createObjectURL", "revokeObjectURL", "then", "catch", "AttachmentPiece", "ensureAttachmentExclusivelyHasAttribute", "removeProhibitedAttributes", "permittedAttributes", "_piece$attachment", "json", "toConsole", "registerType", "StringPiece", "consolidateWith", "splitAtOffset", "SplittableList", "indexOf", "eachObject", "insertObjectAtIndex", "insertSplittableListAtIndex", "splittableList", "insertSplittableListAtPosition", "position", "splitObjectAtPosition", "editObjectAtIndex", "replaceObjectAtIndex", "removeObjectAtIndex", "getObjectAtIndex", "getSplittableListInRange", "rightIndex", "splitObjectsAtRange", "selectSplittableList", "removeObjectsInRange", "transformObjectsInRange", "transform", "transformedObjects", "rightOuterIndex", "leftInnerIndex", "startOfRange", "endOfRange", "getObjectAtPosition", "findIndexAndOffsetAtPosition", "splitIndex", "splitOffset", "leftObject", "rightObject", "consolidate", "pendingObject", "_pendingObject$canBeC", "_pendingObject", "consolidateFromIndexToIndex", "startIndex", "endIndex", "objectsInRange", "consolidatedInRange", "currentPosition", "nextPosition", "findPositionAtIndexAndOffset", "currentIndex", "getEndPosition", "endPosition", "objectArraysAreEqual", "Text", "textJSON", "notEmpty", "pieceList", "copyWithPieceList", "copyUsingObjectMap", "objectMap", "appendText", "insertTextAtPosition", "removeTextAtRange", "replaceTextAtRange", "moveTextFromRangeToPosition", "getTextAtRange", "addAttributeAtRange", "addAttributesAtRange", "removeAttributeAtRange", "setAttributesAtRange", "getAttributesAtPosition", "_this$pieceList$getOb", "getCommonAttributes", "getCommonAttributesAtRange", "getExpandedRangeForAttributeAtOffset", "getStringAtRange", "getStringAtPosition", "startsWithString", "endsWithString", "getAttachmentPieces", "getAttachments", "getAttachmentAndPositionById", "attachmentId", "getAttachmentById", "getRangeOfAttachment", "attachmentAndPosition", "updateAttributesForAttachment", "_text$pieceList", "eachPiece", "getPieceAtPosition", "toSerializableText", "Block", "blockJSON", "applyBlockBreakToText", "copyWithText", "copyWithoutText", "copyWithoutAttributes", "mappedText", "addAttribute", "expandAttribute", "addHTMLAttribute", "removeLastValue", "removeLastAttribute", "getLastElement", "getAttributeLevel", "getAttributeAtLevel", "level", "hasAttributes", "getLastNestableAttribute", "getNestableAttributes", "getNestingLevel", "decreaseNestingLevel", "increaseNestingLevel", "lastIndexOf", "getListItemAttributes", "isListItem", "isTerminalBlock", "_getBlockConfig2", "breaksOnReturn", "_getBlockConfig3", "findLineBreakInDirectionFromPosition", "direction", "newlineText", "textForStringWithAttributes", "getTextWithoutBlockBreak", "textEndsInBlockBreak", "otherBlock", "otherAttributes", "otherAttribute", "getListAttributeNames", "unmarkExistingInnerBlockBreaksInText", "addBlockBreakToText", "modified", "innerPieces", "lastPiece", "unmarkBlockBreakPiece", "blockBreakText", "blockBreak", "Document", "documentJSON", "textAttributes", "blocks", "blockList", "getBlockAtIndex", "consolidateBlocks", "copyUsingObjectsFromDocument", "sourceDocument", "copyWithBaseBlockAttributes", "replaceBlock", "oldBlock", "newBlock", "insertDocumentAtRange", "locationFromPosition", "getBlockAtPosition", "mergeDocumentAtRange", "formattedDocument", "startPosition", "startLocation", "baseBlockAttributes", "getBaseBlockAttributes", "trailingBlockAttributes", "leadingBlockAttributes", "blockCount", "getBlockCount", "firstBlock", "firstText", "insertTextAtRange", "leftPosition", "rightPosition", "leftLocation", "rightLocation", "locationRangeFromRange", "leftOffset", "leftBlock", "rightOffset", "rightBlock", "leftText", "rightText", "affectedBlockCount", "getDocumentAtRange", "movingRightward", "eachBlockAtRange", "textRange", "eachBlock", "getTextAtIndex", "removeAttributeForAttachment", "setHTMLAttributeAtPosition", "updatedBlock", "insertBlockBreakAtRange", "applyBlockAttributeAtRange", "expanded", "expandRangeToLineBreaksAndSplitBlocks", "blockConfig", "removeLastListAttributeAtRange", "exceptAttributeName", "converted", "convertLineBreaksToBlockBreaksInRange", "removeBlockAttributesAtRange", "removeLastTerminalAttributeAtRange", "consolidateBlocksAtRange", "lastAttributeName", "endLocation", "startBlock", "positionFromLocation", "endBlock", "_this$getBlockAtIndex", "getTextAtPosition", "getCharacterAtPosition", "getEditCount", "editCount", "getCommonAttributesAtPosition", "attributesForBlock", "commonAttributes", "attributesLeft", "inheritableAttributes", "getRangeOfCommonAttributeAtPosition", "startOffset", "endOffset", "blockIndex", "lastAttributeIndex", "min", "attachmentPieces", "getLocationRangeOfAttachment", "getAttachmentPieceForAttachment", "findRangesForBlockAttribute", "ranges", "findRangesForTextAttribute", "withValue", "location", "locationRangeFromPosition", "rangeFromLocationRange", "locationRange", "getTexts", "toSerializableDocument", "DEFAULT_ALLOWED_ATTRIBUTES", "DEFAULT_FORBIDDEN_PROTOCOLS", "DEFAULT_FORBIDDEN_ELEMENTS", "HTMLSanitizer", "sanitizer", "sanitize", "allowedAttributes", "forbiddenProtocols", "forbiddenElements", "createBodyElementForHTML", "sanitizeElements", "normalizeListElementNesting", "getHTML", "getBody", "walker", "nodesToRemove", "nextNode", "currentNode", "elementIsRemovable", "sanitizeElement", "protocol", "listElement", "previousElement", "previousElementSibling", "elementIsForbidden", "elementIsntSerializable", "doc", "implementation", "createHTMLDocument", "pieceForString", "parseTrixDataAttribute", "content", "HTMLParser", "referenceElement", "blockElements", "processedElements", "getDocument", "createHiddenContainer", "containerElement", "nodeFilter", "processNode", "translateBlockElementMarginsToNewlines", "removeHiddenContainer", "display", "nextSibling", "isInsignificantTextNode", "appendBlockForTextNode", "processTextNode", "appendBlockForElement", "processElement", "currentBlockElement", "isBlockElement", "appendStringWithAttributes", "_this$currentBlock", "getBlockAttributes", "getBlockHTMLAttributes", "currentBlock", "appendBlockForAttributesWithElement", "elementIsBlockElement", "currentBlockContainsElement", "parentBlockElement", "findParentBlockElement", "appendEmptyBlock", "parentElement", "_node$previousSibling", "elementCanDisplayPreformattedText", "stringEndsWithWhitespace", "leftTrimBreakableWhitespace", "getTextAttributes", "appendAttachmentWithAttributes", "isExtraBR", "dimensions", "needsTableSeparator", "appendPiece", "appendStringToTextAtIndex", "prependStringToTextAtIndex", "unshift", "configAttr", "attributeInheritedFromBlock", "blockElement", "findBlockElementAncestors", "attrConfig", "_attrConfig$test", "reverse", "settings", "ancestors", "stringIsAllBreakableWhitespace", "nodeEndsWithNonWhitespace", "_element$previousSibl", "defaultMargin", "getMarginOfDefaultBlockElement", "margin", "getMarginOfBlockElementAtIndex", "top", "bottom", "getBlockElementMargin", "whiteSpace", "marginTop", "marginBottom", "FILTER_REJECT", "FILTER_ACCEPT", "unserializableAttributeNames", "serializedAttributesAttribute", "serializedAttributesSelector", "blockCommentPattern", "serializers", "serializable", "HTMLElement", "el", "ci", "ManagedAttachment", "attachmentManager", "requestRemovalOfAttachment", "AttachmentManager", "managedAttachments", "manageAttachment", "attachmentIsManaged", "attachmentManagerDidRequestRemovalOfAttachment", "unmanageAttachment", "managedAttachment", "LineBreakInsertion", "composition", "selectedRange", "getSelectedRange", "previousCharacter", "nextCharacter", "shouldInsertBlockBreak", "shouldBreakFormattedBlock", "shouldDecreaseListLevel", "shouldPrependListItem", "shouldRemoveLastBlockAttribute", "Composition", "currentAttributes", "revision", "_this$delegate$compos", "refreshAttachments", "compositionDidChangeDocument", "getSnapshot", "loadSnapshot", "_this$delegate2$compo", "_this$delegate3", "_this$delegate3$compo", "compositionWillLoadSnapshot", "setSelection", "compositionDidLoadSnapshot", "insertText", "updatePosition", "notifyDelegateOfInsertionAtRange", "insertBlock", "insertDocument", "insertString", "getCurrentTextAttributes", "insertBlockBreak", "insertLineBreak", "insertion", "decreaseListLevel", "removeLastBlockAttribute", "breakFormattedBlock", "insertHTML", "replaceHTML", "getLocationRange", "insertFile", "insertFiles", "_this$delegate4", "compositionShouldAcceptFile", "attachmentForFile", "insertAttachments", "insertAttachment", "attachmentText", "textForAttachmentWithAttributes", "shouldManageDeletingInDirection", "shouldManageMovingCursorInDirection", "deleteInDirection", "deletingIntoPreviousBlock", "selectionSpansBlocks", "selectionIsCollapsed", "canDecreaseBlockAttributeLevel", "getBlock", "decreaseBlockAttributeLevel", "getExpandedRangeInDirection", "getAttachmentAtRange", "editAttachment", "moveTextFromRange", "removeAttachment", "stopEditingAttachment", "removeCurrentAttribute", "insertPlaceholder", "placeholderPosition", "getPosition", "selectPlaceholder", "setSelectedRange", "PLACEHOLDER", "forgetPlaceholder", "hasCurrentAttribute", "toggleCurrentAttribute", "setCurrentAttribute", "canSetCurrentAttribute", "canSetCurrentBlockAttribute", "canSetCurrentTextAttribute", "getSelectedDocument", "setBlockAttribute", "setTextAttribute", "notifyDelegateOfCurrentAttributesChange", "setHTMLAtributeAtPosition", "allowedHTMLAttributes", "newDocument", "removeBlockAttribute", "updateCurrentAttributes", "removeTextAttribute", "canDecreaseNestingLevel", "_this$getBlock", "canIncreaseNestingLevel", "previousBlock", "getPreviousBlock", "_this$getBlock2", "_this$getBlock3", "attributeLevel", "ignoreLock", "getCurrentAttributes", "freezeSelection", "thawSelection", "hasFrozenSelection", "_this$delegate5", "compositionDidRequestChangingSelectionToLocationRange", "getSelectionManager", "setLocationRange", "targetLocationRange", "withTargetLocationRange", "withTargetRange", "withTargetDOMRange", "createLocationRangeFromDOMRange", "translateUTF16PositionFromOffset", "editingAttachment", "moveCursorInDirection", "canEditAttachment", "expandSelectionInDirection", "expandSelectionForEditing", "expandSelectionAroundCommonAttribute", "selectionContainsAttachments", "_this$getSelectedAtta", "getSelectedAttachments", "selectionIsInCursorTarget", "positionIsCursorTarget", "locationIsCursorTarget", "positionIsBlockBreak", "_this$document$getPie", "_this$getSelectedDocu", "added", "removed", "oldArray", "newArray", "existingValues", "Set", "currentValues", "_this$delegate6", "_this$delegate6$compo", "compositionDidRemoveAttachment", "_this$delegate7", "_this$delegate7$compo", "compositionDidAddAttachment", "_this$delegate8", "_this$delegate8$compo", "compositionDidEditAttachment", "_this$delegate9", "_this$delegate9$compo", "compositionDidChangeAttachmentPreviewURL", "_this$delegate10", "_this$delegate10$comp", "compositionDidStartEditingAttachment", "_this$delegate11", "_this$delegate11$comp", "compositionDidStopEditingAttachment", "_this$delegate12", "_this$delegate12$comp", "compositionDidChangeCurrentAttributes", "_this$delegate13", "_this$delegate13$comp", "compositionDidPerformInsertionAtRange", "utf16string", "utf16position", "UndoManager", "undoEntries", "redoEntries", "recordUndoEntry", "description", "consolidatable", "previousEntry", "entryHasDescriptionAndContext", "undoEntry", "createEntry", "pop", "redoEntry", "snapshot", "canUndo", "canRedo", "entry", "BLOCK_ATTRIBUTE_NAME", "Filter", "applyBlockAttribute", "findRangesOfBlocks", "findRangesOfPieces", "moveSelectedRangeForward", "attachmentGalleryFilter", "DEFAULT_FILTERS", "Editor", "undoManager", "filters", "loadDocument", "loadHTML", "loadJSON", "getClientRectAtPosition", "getClientRectAtLocationRange", "activateAttribute", "attributeIsActive", "canActivateAttribute", "deactivateAttribute", "LocationMapper", "findLocationFromContainerAndOffset", "container", "foundBlock", "attachmentElement", "findAttachmentElementParentForNode", "rejectAttachmentContents", "nodeLength", "findContainerAndOffsetFromLocation", "nodeOffset", "findNodeAndOffsetFromLocation", "getSignificantNodesForIndex", "acceptSignificantNodes", "recordingNodes", "rejectEmptyTextNodes", "PointMapper", "createDOMRangeFromPoint", "x", "y", "caretPositionFromPoint", "offsetNode", "createRange", "setStart", "caretRangeFromPoint", "createTextRange", "originalDOMRange", "moveToPoint", "select", "getClientRectsForDOMRange", "getClientRects", "SelectionManager", "didMouseDown", "locationMapper", "pointMapper", "lockCount", "currentLocationRange", "lockedLocationRange", "createDOMRangeFromLocationRange", "updateCurrentLocationRange", "setLocationRangeFromPointRange", "pointRange", "getLocationAtPoint", "lock", "unlock", "clearSelection", "_getDOMRange", "collapsed", "selectionIsExpanded", "domRangeWithinElement", "pauseTemporarily", "resumeHandlers", "paused", "resume", "clearTimeout", "resumeTimeout", "_this$delegate$locati", "locationRangeDidChange", "rangeStart", "rangeEnd", "setEnd", "point", "_this$createLocationR", "Di", "ke", "hi", "Re", "Be", "gi", "qe", "xi", "Xe", "Je", "di", "yi", "ui", "ye", "Si", "Li", "Se", "Ee", "Te", "mi", "wi", "ee", "re", "de", "ge", "le", "ae", "ce", "keyNames", "undoable", "commands", "do", "undos", "AttachmentEditorController", "title", "trixAction", "didClickToolbar", "didClickActionButton", "textarea", "placeholder", "textareaClone", "tabIndex", "autoresize", "scrollHeight", "didInputCaption", "didKeyDownCaption", "didChangeCaption", "didBlurCaption", "editingFigcaption", "editCaption", "focus", "install", "makeElementMutable", "addToolbar", "installCaptionEditor", "uninstall", "savePendingCaption", "didUninstallAttachmentEditor", "pendingCaption", "_this$delegate3$attac", "attachmentEditorDidRequestUpdatingAttributesForAttachment", "attachmentEditorDidRequestRemovingAttributeForAttachment", "stopPropagation", "attachmentEditorDidRequestRemovalOfAttachment", "_this$delegate5$attac", "keyCode", "attachmentEditorDidRequestDeselectingAttachment", "CompositionController", "didFocus", "didBlur", "didClickAttachment", "documentView", "_this$blurPromise", "focused", "compositionControllerDidFocus", "blurPromise", "compositionControllerDidBlur", "findAttachmentForElement", "compositionControllerDidSelectAttachment", "getSerializableElement", "isEditingAttachment", "_this$delegate4$compo", "_this$delegate5$compo", "canSyncDocumentView", "compositionControllerWillSyncDocumentView", "compositionControllerDidSyncDocumentView", "compositionControllerDidRender", "rerenderViewForObject", "refreshViewCache", "attachmentEditor", "installAttachmentEditorForAttachment", "_this$attachmentEdito", "uninstallAttachmentEditor", "_this$attachmentEdito2", "compositionControllerWillUpdateAttachment", "compositionControllerDidRequestRemovalOfAttachment", "compositionControllerDidRequestDeselectingAttachment", "Controller", "mutableAttributeName", "mutableSelector", "childList", "characterData", "characterDataOldValue", "subtree", "MutationObserver", "didMutate", "observer", "observe", "disconnect", "mutations", "_this$delegate$elemen", "findSignificantMutations", "elementDidMutate", "getMutationSummary", "mutation", "mutationIsSignificant", "nodeIsMutable", "nodesModifiedByMutation", "nodeIsSignificant", "addedNodes", "removedNodes", "getTextMutationSummary", "additions", "deletions", "getTextChangesFromCharacterData", "textChanges", "getTextChangesFromChildList", "addition", "summary", "textAdded", "deleted", "textDeleted", "getMutationsByType", "textRemoved", "getTextForNodes", "characterMutations", "startMutation", "endMutation", "summarized", "oldString", "newString", "oldValue", "FileVerificationOperation", "reader", "FileReader", "abort", "readAsArrayBuffer", "FlakyAndroidKeyboardDetector", "shouldIgnore", "previousEvent", "checkSamsungKeyboardBuggyModeStart", "checkSamsungKeyboardBuggyModeEnd", "buggyMode", "insertingLongTextAfterUnidentifiedChar", "differsInWhitespace", "innerText", "inputType", "_this$event$data", "isBeforeInputInsertText", "previousEventWasUnidentifiedKeydown", "_this$previousEvent", "_this$previousEvent2", "text1", "text2", "normalize", "whiteSpaceNormalizerRegexp", "InputController", "mutationObserver", "flakyKeyboardDetector", "events", "handlerFor", "mutationSummary", "editorWillSyncDocumentView", "editorDidSyncDocumentView", "requestRender", "_this$delegate$inputC", "inputControllerDidRequestRender", "requestReparse", "_this$delegate2$input", "inputControllerDidRequestReparse", "operations", "all", "handleInput", "_this$responder", "inputControllerWillAttachFiles", "responder", "defaultPrevented", "inputControllerWillHandleInput", "inputControllerDidHandleInput", "createLinkHTML", "outerHTML", "Gi", "pastedFileCount", "Level0InputController", "resetInputSummary", "setInputSummary", "inputSummary", "isComposing", "inputControllerDidAllowUnhandledInput", "mutationIsExpected", "preferDocument", "mutationAdditionMatchesSummary", "mutationDeletionMatchesSummary", "didDelete", "unexpectedNewlineAddition", "unexpectedNewlineDeletion", "_this$compositionInpu", "textChanged", "composedEmptyString", "compositionInput", "getEndData", "getCompositionInput", "CompositionInput", "isEnded", "_this$responder2", "serializeSelectionToDataTransfer", "_this$responder3", "setData", "canAcceptDataTransfer", "Files", "getPastedHTMLUsingHiddenElement", "pageXOffset", "pageYOffset", "opacity", "requestAnimationFrame", "keydown", "didInput", "keyName", "_context2", "modifier", "_context", "character", "inputControllerDidReceiveKeyboardCommand", "keypress", "altKey", "stringFromKeyEvent", "_this$responder9", "inputControllerWillPerformTyping", "textInput", "toUpperCase", "_this$responder10", "dragenter", "dragstart", "_this$delegate5$input", "draggedRange", "inputControllerDidStartDrag", "dragover", "draggingPoint", "clientX", "clientY", "_this$delegate6$input", "inputControllerDidReceiveDragOverPoint", "dragend", "_this$delegate7$input", "inputControllerDidCancelDrag", "drop", "_event$dataTransfer", "_this$responder11", "_this$responder12", "inputControllerWillMoveText", "_this$responder13", "fromJSONString", "cut", "_this$responder14", "clipboardData", "inputControllerWillCutText", "_this$responder15", "paste", "clipboard", "testClipboardData", "pasteEventIsCrippledSafariHTMLPaste", "_this$responder16", "inputControllerWillPaste", "inputControllerDidPaste", "_this$responder17", "_this$delegate14", "_this$responder18", "_this$delegate15", "_this$delegate16", "_this$responder19", "_this$delegate17", "_clipboard$items", "_clipboard$items$getA", "items", "getAsFile", "_this$delegate18", "_this$responder20", "_this$delegate19", "extensionForFile", "compositionstart", "compositionupdate", "compositionend", "beforeinput", "backspace", "_this$delegate20", "delete", "_this$delegate21", "return", "_this$delegate22", "_this$responder21", "tab", "_this$responder22", "_this$responder23", "_this$responder24", "_this$responder25", "control", "d", "_this$delegate23", "h", "_this$delegate24", "_this$delegate25", "_this$responder26", "shift", "_this$delegate26", "_this$responder27", "_this$responder28", "_this$responder29", "alt", "_this$delegate27", "meta", "_this$delegate28", "_file$type", "which", "charCode", "hasPasteboardFlavor", "hasReadableDynamicData", "isExternalHTMLPaste", "isExternalRichTextPaste", "inputController", "isSignificant", "_this$responder5", "_this$responder4", "canApplyToDocument", "_this$responder6", "_this$responder7", "_this$responder8", "_this$data$start", "_this$data$end", "Level2InputController", "scheduledRender", "composing", "reparse", "scheduleRender", "_this$afterRender", "cancelAnimationFrame", "afterRender", "toggleAttributeIfSupported", "inputControllerWillPerformFormatting", "activateAttributeIfSupported", "getTargetDOMRange", "minLength", "_this$event$getTarget", "_this$event", "targetRanges", "getTargetRanges", "staticRangeToRange", "withEvent", "command", "keyboardCommandFromKeyEvent", "shiftKey", "_event$clipboardData", "pasteEventHasFilesOnly", "pasteEventHasPlainTextOnly", "inputTypes", "dragging", "pointFromEvent", "dragEventHasFiles", "ArrowLeft", "ArrowRight", "Backspace", "Tab", "deleteByComposition", "deleteByCut", "deleteByDrag", "deleteByDragRange", "deleteCompositionText", "deleteContent", "deleteContentBackward", "deleteContentForward", "deleteEntireSoftLine", "deleteHardLineBackward", "deleteHardLineForward", "deleteSoftLineBackward", "deleteSoftLineForward", "deleteWordBackward", "deleteWordForward", "formatBackColor", "formatBold", "formatFontColor", "formatFontName", "formatIndent", "formatItalic", "formatJustifyCenter", "formatJustifyFull", "formatJustifyLeft", "formatJustifyRight", "formatOutdent", "formatRemove", "_this$responder30", "formatSetBlockTextDirection", "formatSetInlineTextDirection", "formatStrikeThrough", "formatSubscript", "formatSuperscript", "formatUnderline", "historyRedo", "inputControllerWillPerformRedo", "historyUndo", "inputControllerWillPerformUndo", "insertCompositionText", "insertFromComposition", "insertFromDrop", "_this$responder31", "insertFromPaste", "_dataTransfer$files", "_this$responder32", "_this$responder33", "_this$responder34", "_this$responder35", "insertFromYank", "insertLink", "insertOrderedList", "insertParagraph", "_this$responder36", "insertReplacementText", "replacement", "_this$event$dataTrans", "insertTranspose", "insertUnorderedList", "staticRange", "attributeButtonSelector", "actionButtonSelector", "toolbarButtonSelector", "dialogSelector", "activeDialogSelector", "dialogButtonSelector", "dialogInputSelector", "getInputForDialog", "getAttributeName", "getActionName", "ToolbarController", "didClickAttributeButton", "didClickDialogButton", "didKeyDownDialogInput", "actions", "resetDialogInputs", "toolbarDidClickButton", "actionName", "getDialog", "toggleDialog", "toolbarDidInvokeAction", "toolbarDidToggleAttribute", "refreshAttributeButtons", "dialogElement", "dialog", "hideDialog", "updateActions", "refreshActionButtons", "eachActionButton", "disabled", "updateAttributes", "eachAttributeButton", "dialogIsVisible", "applyKeyboardCommand", "keyString", "button", "buttonKeys", "dialogName", "showDialog", "toolbarWillShowDialog", "disabledInput", "toolbarDidShowDialog", "willValidate", "checkValidity", "toolbarDidUpdateAttribute", "toolbarDidRemoveAttribute", "toolbarDidHideDialog", "EditorController", "editorElement", "compositionController", "toolbarController", "toolbarElement", "editor", "notifyEditorElement", "handlingInput", "updateCurrentActions", "pasting", "pastedRange", "attachmentLocationRange", "loadingSnapshot", "isFocused", "requestedLocationRange", "compositionRevisionWhenLocationRangeRequested", "renderedCompositionRevision", "runEditorFilters", "isFocusedInvisibly", "requestedRender", "recordTypingUndoEntry", "recordFormattingUndoEntry", "locationRangeBeforeDrag", "invokingElement", "invokeAction", "selectionFrozen", "canInvokeAction", "actionIsExternal", "_this$actions$actionN", "_this$actions$actionN2", "getCurrentActions", "currentActions", "snapshotsAreEqual", "updateInputElement", "serializer", "setInputElementValue", "message", "documentChangedSinceLastRender", "notify", "getUndoContext", "getLocationContext", "getTimeContext", "Date", "getTime", "_this$editorElement$o", "ownerDocument", "Rn", "Ii", "Ni", "Oi", "kn", "Ki", "Qi", "on", "Cn", "En", "Ui", "Ft", "Sn", "Vi", "Ce", "TrixToolbarElement", "connectedCallback", "makeEditable", "configureContentEditable", "disableObjectResizing", "setDefaultParagraphSeparator", "_document$queryComman", "_document", "queryCommandSupported", "execCommand", "_document$queryComman2", "_document2", "cursorTargetStyles", "TrixEditorElement", "labels", "label", "_this$ownerDocument", "toolbarId", "_this$inputElement", "inputElement", "_this$ownerDocument2", "inputId", "nextElementSibling", "_this$editorControlle", "editorController", "_this$inputElement2", "_this$inputElement3", "defaultValue", "_this$editor", "texts", "contains", "registerResetListener", "registerClickListener", "disconnectedCallback", "_this$editorControlle2", "unregisterResetListener", "unregisterClickListener", "resetListener", "resetBubbled", "clickListener", "clickBubbled", "Trix", "VERSION", "version", "core", "models", "controllers", "observers", "customElements", "define", "sparkMd5", "module", "exports", "factory", "undefined$1", "hex_chr", "md5cycle", "x", "k", "a", "b", "c", "d", "md5blk", "s", "md5blks", "i", "md5blk_array", "md51", "n", "state", "length", "tail", "tmp", "lo", "hi", "md51_array", "rhex", "j", "hex", "clamp", "val", "from", "to", "begin", "end", "num", "target", "targetArray", "sourceArray", "toUtf8", "str", "utf8Str2ArrayBuffer", "returnUInt8Array", "buff", "arr", "arrayBuffer2Utf8Str", "concatenateArrayBuffers", "first", "second", "result", "hexToBinaryString", "bytes", "SparkMD5", "contents", "raw", "ret", "content", "hash", "fileSlice", "FileChecksum", "file", "callback", "event", "binaryDigest", "base64digest", "start", "getMetaValue", "name", "element", "findElement", "findElements", "root", "selector", "elements", "toArray", "dispatchEvent", "type", "eventInit", "disabled", "bubbles", "cancelable", "detail", "value", "BlobRecord", "checksum", "url", "customHeaders", "headerKey", "csrfToken", "responseType", "response", "direct_upload", "key", "BlobUpload", "blob", "headers", "status", "id", "DirectUpload", "delegate", "error", "notify", "upload", "object", "methodName", "messages", "DirectUploadController", "input", "hiddenInput", "attributes", "progress", "xhr", "inputSelector", "DirectUploadsController", "form", "controllers", "startNextController", "controller", "processingAttribute", "submitButtonsByForm", "started", "didClick", "didSubmitForm", "didSubmitRemoteElement", "button", "handleFormSubmissionEvent", "inputs", "disable", "enable", "submitForm", "autostart", "AttachmentUpload", "attachment", "signedId", "filename", "import_js", "CookiesEuBanner", "isSecure", "Cookies", "getPageLoadEvent"]
}
