{
  "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/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/action_cable.js", "../../../node_modules/jquery/dist/jquery.js", "../../../public/js/clipboard.min.js", "../../../node_modules/html5-qrcode/third_party/zxing-js.umd.js", "../../javascript/src/gauge/gauge.js", "../../../public/js/intl_tel/intlTelInput.min.js", "../../javascript/src/overlayScrollbars.min.js", "../../javascript/src/select2.full.min.js", "../../javascript/src/bootstrap-table.min.js", "../../javascript/src/bootstrap-table-sticky-header.min.js", "../../javascript/src/bootstrap-table-fixed-columns.min.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/cable_stream_source_element.js", "../../javascript/application.js", "../../javascript/src/jquery.js", "../../javascript/src/jquery.visible.js", "../../javascript/src/jquery.triggerNativeEvent.js", "../../javascript/src/jquery-ui.min.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/format.js", "../../../node_modules/@popperjs/core/lib/utils/validateModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/uniqueBy.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../javascript/src/bootstrap.js", "../../javascript/src/admin-walkthrough.js", "../../javascript/src/string_tools.js", "../../javascript/src/all-common.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/account_launchpad_controller.js", "../../javascript/controllers/account_login_tracking_controller.js", "../../javascript/controllers/account_retention_controller.js", "../../javascript/controllers/account_search_controller.js", "../../javascript/controllers/validate_form_controller.js", "../../javascript/controllers/account_setup_verification_controller.js", "../../../node_modules/@rails/request.js/src/fetch_response.js", "../../../node_modules/@rails/request.js/src/request_interceptor.js", "../../../node_modules/@rails/request.js/src/lib/utils.js", "../../../node_modules/@rails/request.js/src/fetch_request.js", "../../../node_modules/@rails/request.js/src/verbs.js", "../../javascript/controllers/account_switcher_controller.js", "../../javascript/controllers/add_association_controller.js", "../../javascript/controllers/add_organization_controller.js", "../../javascript/controllers/additional_tools_controller.js", "../../javascript/controllers/admin_import_controller.js", "../../javascript/controllers/admin_toolkit_controller.js", "../../javascript/controllers/advanced_report_editor_controller.js", "../../javascript/controllers/advanced_report_folders_controller.js", "../../javascript/controllers/alert_controller.js", "../../javascript/controllers/alerts_controller.js", "../../javascript/controllers/animate_controller.js", "../../javascript/controllers/answer_tag_draft_editor_controller.js", "../../javascript/controllers/answer_tag_editor_controller.js", "../../javascript/controllers/answer_theme_review_controller.js", "../../javascript/controllers/arr_controller.js", "../../javascript/controllers/automated_report_editor_controller.js", "../../../node_modules/src/core.ts", "../../../node_modules/src/strings.ts", "../../../node_modules/src/utils.ts", "../../../node_modules/src/zxing-html5-qrcode-decoder.ts", "../../../node_modules/src/native-bar-code-detector.ts", "../../../node_modules/src/code-decoder.ts", "../../../node_modules/src/camera/core-impl.ts", "../../../node_modules/src/camera/factories.ts", "../../../node_modules/src/camera/retriever.ts", "../../../node_modules/src/state-manager.ts", "../../../node_modules/src/html5-qrcode.ts", "../../../node_modules/src/image-assets.ts", "../../../node_modules/src/storage.ts", "../../../node_modules/src/ui.ts", "../../../node_modules/src/camera/permissions.ts", "../../../node_modules/src/ui/scanner/scan-type-selector.ts", "../../../node_modules/src/ui/scanner/base.ts", "../../../node_modules/src/ui/scanner/torch-button.ts", "../../../node_modules/src/ui/scanner/file-selection-ui.ts", "../../../node_modules/src/ui/scanner/camera-selection-ui.ts", "../../../node_modules/src/ui/scanner/camera-zoom-ui.ts", "../../../node_modules/src/html5-qrcode-scanner.ts", "../../javascript/controllers/barcode_scanner_controller.js", "../../javascript/controllers/campaign_manager_controller.js", "../../javascript/controllers/certificate_controller.js", "../../javascript/controllers/checkbox_toggle_controller.js", "../../javascript/controllers/ckeditor_browser_controller.js", "../../javascript/controllers/combined_question_controller.js", "../../javascript/controllers/combined_select_controller.js", "../../javascript/controllers/comparison_chart_modal_controller.js", "../../javascript/controllers/conditional_question_controller.js", "../../javascript/controllers/contracts_controller.js", "../../javascript/controllers/cost_of_burnout_filter_controller.js", "../../javascript/controllers/customer_sub_account_search_controller.js", "../../javascript/controllers/customers_controller.js", "../../javascript/controllers/dashboard_controller.js", "../../javascript/controllers/dev_test_tools_controller.js", "../../javascript/controllers/disassociate_organization_controller.js", "../../javascript/controllers/dismiss_alert_controller.js", "../../javascript/controllers/diy_checklist_controller.js", "../../javascript/controllers/download_reports_controller.js", "../../javascript/controllers/enable_from_checkbox_controller.js", "../../javascript/controllers/export_question_controller.js", "../../javascript/controllers/feedback_theme_show_controller.js", "../../javascript/controllers/free_assessment_controller.js", "../../javascript/controllers/gauge_controller.js", "../../javascript/controllers/gauge_previewer_controller.js", "../../javascript/controllers/hello_controller.js", "../../javascript/controllers/hotspot_brightspot_controller.js", "../../javascript/controllers/institution_search_controller.js", "../../javascript/controllers/invitation_toggle_controller.js", "../../javascript/controllers/invites_controller.js", "../../javascript/controllers/login_controller.js", "../../javascript/controllers/manage_administrator_controller.js", "../../javascript/controllers/mobile_app_signup_controller.js", "../../javascript/controllers/modal_closer_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/multi_select_controller.js", "../../javascript/controllers/nested_form_controller.js", "../../javascript/channels/consumer.js", "../../javascript/channels/admin_notifications_channel.js", "../../javascript/controllers/notification_bell_controller.js", "../../javascript/controllers/notifications_controller.js", "../../javascript/controllers/offerings_controller.js", "../../javascript/controllers/organization_quick_search_controller.js", "../../javascript/controllers/organizations_controller.js", "../../javascript/controllers/participants_controller.js", "../../javascript/controllers/password_controller.js", "../../javascript/controllers/peer_reviewed_resources_controller.js", "../../javascript/controllers/phone_input_controller.js", "../../javascript/controllers/plans_controller.js", "../../javascript/controllers/popover_hint_controller.js", "../../javascript/controllers/prevent_default_controller.js", "../../javascript/controllers/priority_groups_controller.js", "../../javascript/controllers/priority_groups_export_controller.js", "../../javascript/controllers/process_improvement_controller.js", "../../javascript/controllers/process_improvement_result_controller.js", "../../javascript/controllers/refresh_controller.js", "../../javascript/controllers/report_display_controller.js", "../../javascript/controllers/recent_changes_controller.js", "../../javascript/controllers/reports_controller.js", "../../javascript/controllers/resource_sub_account_categories_controller.js", "../../javascript/controllers/resources_controller.js", "../../javascript/controllers/sa_dashboard_controller.js", "../../javascript/controllers/scheduled_settings_controller.js", "../../javascript/controllers/scroll_into_view_controller.js", "../../javascript/controllers/select2_controller.js", "../../javascript/controllers/session_refresh_controller.js", "../../javascript/controllers/signup_controller.js", "../../javascript/controllers/signup_questions_controller.js", "../../javascript/controllers/starter_kit_controller.js", "../../javascript/controllers/sub_account_verification_controller.js", "../../javascript/controllers/super_admin_controller.js", "../../javascript/controllers/support_controller.js", "../../javascript/controllers/terms_acceptance_controller.js", "../../javascript/controllers/theme_classifier_controller.js", "../../javascript/controllers/theme_preview_controller.js", "../../javascript/controllers/theme_quality_review_controller.js", "../../javascript/controllers/tools_controller.js", "../../javascript/controllers/two_factor_authentication_controller.js", "../../javascript/controllers/user_feedback_controller.js", "../../javascript/controllers/user_survey_controller.js", "../../javascript/controllers/verify_account_controller.js", "../../javascript/controllers/validate_email_change_controller.js", "../../javascript/controllers/wbi_version_selector_controller.js", "../../javascript/controllers/wellness_common_controller.js", "../../javascript/controllers/wellness_common_custom_list_controller.js", "../../javascript/controllers/wellness_common_folders_controller.js", "../../javascript/controllers/wellness_journey_controller.js", "../../javascript/controllers/wellness_snapshot_builder_controller.js", "../../javascript/controllers/wellness_snapshot_controller.js", "../../javascript/controllers/wizard_autosave_controller.js", "../../javascript/controllers/wizard_feedback_options_controller.js", "../../javascript/controllers/wizard_questions_controller.js", "../../javascript/controllers/wizard_resource_tabs_controller.js", "../../javascript/controllers/wizard_sidebar_review_controller.js", "../../javascript/controllers/index.js", "../../javascript/src/admin-support.js", "../../javascript/src/jquery.maskedinput.min.js", "../../javascript/src/select2.custom.js", "../../javascript/src/jquery.table-sorter.js", "../../javascript/src/jquery.stickytableheaders.js", "../../javascript/src/jquery.mjs.nestedSortable.js", "../../javascript/src/advanced-report.js", "../../javascript/src/jquery.multiselect-revised.js", "../../javascript/src/jquery.multisortable.js"],
  "sourcesContent": ["export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\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\nconst clamp = (number, min, max) => Math.max(min, Math.min(max, number))\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. pollInterval = ${this.getPollInterval()} ms`)\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 {min, max, multiplier} = this.constructor.pollInterval\n    const interval = multiplier * Math.log(this.reconnectAttempts + 1)\n    return Math.round(clamp(interval, min, max) * 1000)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, pollInterval = ${this.getPollInterval()} ms, time disconnected = ${secondsSince(this.disconnectedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(\"ConnectionMonitor skipping reopening recent disconnect\")\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > 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.pollInterval = {\n  min: 3,\n  max: 30,\n  multiplier: 5\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\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  },\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      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\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    if (this.isActive()) {\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  // 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        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        return this.subscriptions.notify(identifier, \"connected\")\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 Subscription from \"./subscription\"\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.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.sendCommand(subscription, \"subscribe\")\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.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.sendCommand(subscription, \"subscribe\"))\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  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  }\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\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 adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\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", "(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActionCable = {});\n})(this, function(exports) {\n  \"use strict\";\n  var adapters = {\n    logger: self.console,\n    WebSocket: self.WebSocket\n  };\n  var logger = {\n    log: function log() {\n      if (this.enabled) {\n        var _adapters$logger;\n        for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {\n          messages[_key] = arguments[_key];\n        }\n        messages.push(Date.now());\n        (_adapters$logger = adapters.logger).log.apply(_adapters$logger, [ \"[ActionCable]\" ].concat(messages));\n      }\n    }\n  };\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\n    return typeof obj;\n  } : function(obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n  var classCallCheck = function(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n  var createClass = function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function(Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n  var now = function now() {\n    return new Date().getTime();\n  };\n  var secondsSince = function secondsSince(time) {\n    return (now() - time) / 1e3;\n  };\n  var clamp = function clamp(number, min, max) {\n    return Math.max(min, Math.min(max, number));\n  };\n  var ConnectionMonitor = function() {\n    function ConnectionMonitor(connection) {\n      classCallCheck(this, ConnectionMonitor);\n      this.visibilityDidChange = this.visibilityDidChange.bind(this);\n      this.connection = connection;\n      this.reconnectAttempts = 0;\n    }\n    ConnectionMonitor.prototype.start = function 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. pollInterval = \" + this.getPollInterval() + \" ms\");\n      }\n    };\n    ConnectionMonitor.prototype.stop = function 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    ConnectionMonitor.prototype.isRunning = function isRunning() {\n      return this.startedAt && !this.stoppedAt;\n    };\n    ConnectionMonitor.prototype.recordPing = function recordPing() {\n      this.pingedAt = now();\n    };\n    ConnectionMonitor.prototype.recordConnect = function recordConnect() {\n      this.reconnectAttempts = 0;\n      this.recordPing();\n      delete this.disconnectedAt;\n      logger.log(\"ConnectionMonitor recorded connect\");\n    };\n    ConnectionMonitor.prototype.recordDisconnect = function recordDisconnect() {\n      this.disconnectedAt = now();\n      logger.log(\"ConnectionMonitor recorded disconnect\");\n    };\n    ConnectionMonitor.prototype.startPolling = function startPolling() {\n      this.stopPolling();\n      this.poll();\n    };\n    ConnectionMonitor.prototype.stopPolling = function stopPolling() {\n      clearTimeout(this.pollTimeout);\n    };\n    ConnectionMonitor.prototype.poll = function poll() {\n      var _this = this;\n      this.pollTimeout = setTimeout(function() {\n        _this.reconnectIfStale();\n        _this.poll();\n      }, this.getPollInterval());\n    };\n    ConnectionMonitor.prototype.getPollInterval = function getPollInterval() {\n      var _constructor$pollInte = this.constructor.pollInterval, min = _constructor$pollInte.min, max = _constructor$pollInte.max, multiplier = _constructor$pollInte.multiplier;\n      var interval = multiplier * Math.log(this.reconnectAttempts + 1);\n      return Math.round(clamp(interval, min, max) * 1e3);\n    };\n    ConnectionMonitor.prototype.reconnectIfStale = function reconnectIfStale() {\n      if (this.connectionIsStale()) {\n        logger.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + this.getPollInterval() + \" ms, time disconnected = \" + secondsSince(this.disconnectedAt) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n        this.reconnectAttempts++;\n        if (this.disconnectedRecently()) {\n          logger.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n        } else {\n          logger.log(\"ConnectionMonitor reopening\");\n          this.connection.reopen();\n        }\n      }\n    };\n    ConnectionMonitor.prototype.connectionIsStale = function connectionIsStale() {\n      return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold;\n    };\n    ConnectionMonitor.prototype.disconnectedRecently = function disconnectedRecently() {\n      return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n    };\n    ConnectionMonitor.prototype.visibilityDidChange = function visibilityDidChange() {\n      var _this2 = this;\n      if (document.visibilityState === \"visible\") {\n        setTimeout(function() {\n          if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {\n            logger.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = \" + document.visibilityState);\n            _this2.connection.reopen();\n          }\n        }, 200);\n      }\n    };\n    return ConnectionMonitor;\n  }();\n  ConnectionMonitor.pollInterval = {\n    min: 3,\n    max: 30,\n    multiplier: 5\n  };\n  ConnectionMonitor.staleThreshold = 6;\n  var 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    },\n    default_mount_path: \"/cable\",\n    protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n  };\n  var message_types = INTERNAL.message_types, protocols = INTERNAL.protocols;\n  var supportedProtocols = protocols.slice(0, protocols.length - 1);\n  var indexOf = [].indexOf;\n  var Connection = function() {\n    function Connection(consumer) {\n      classCallCheck(this, Connection);\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    Connection.prototype.send = function send(data) {\n      if (this.isOpen()) {\n        this.webSocket.send(JSON.stringify(data));\n        return true;\n      } else {\n        return false;\n      }\n    };\n    Connection.prototype.open = function open() {\n      if (this.isActive()) {\n        logger.log(\"Attempted to open WebSocket, but existing socket is \" + this.getState());\n        return false;\n      } else {\n        logger.log(\"Opening WebSocket, current state is \" + this.getState() + \", subprotocols: \" + protocols);\n        if (this.webSocket) {\n          this.uninstallEventHandlers();\n        }\n        this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n        this.installEventHandlers();\n        this.monitor.start();\n        return true;\n      }\n    };\n    Connection.prototype.close = function close() {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        allowReconnect: true\n      }, allowReconnect = _ref.allowReconnect;\n      if (!allowReconnect) {\n        this.monitor.stop();\n      }\n      if (this.isActive()) {\n        return this.webSocket.close();\n      }\n    };\n    Connection.prototype.reopen = function 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    Connection.prototype.getProtocol = function getProtocol() {\n      if (this.webSocket) {\n        return this.webSocket.protocol;\n      }\n    };\n    Connection.prototype.isOpen = function isOpen() {\n      return this.isState(\"open\");\n    };\n    Connection.prototype.isActive = function isActive() {\n      return this.isState(\"open\", \"connecting\");\n    };\n    Connection.prototype.isProtocolSupported = function isProtocolSupported() {\n      return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n    };\n    Connection.prototype.isState = function isState() {\n      for (var _len = arguments.length, states = Array(_len), _key = 0; _key < _len; _key++) {\n        states[_key] = arguments[_key];\n      }\n      return indexOf.call(states, this.getState()) >= 0;\n    };\n    Connection.prototype.getState = function getState() {\n      if (this.webSocket) {\n        for (var state in adapters.WebSocket) {\n          if (adapters.WebSocket[state] === this.webSocket.readyState) {\n            return state.toLowerCase();\n          }\n        }\n      }\n      return null;\n    };\n    Connection.prototype.installEventHandlers = function installEventHandlers() {\n      for (var eventName in this.events) {\n        var handler = this.events[eventName].bind(this);\n        this.webSocket[\"on\" + eventName] = handler;\n      }\n    };\n    Connection.prototype.uninstallEventHandlers = function uninstallEventHandlers() {\n      for (var eventName in this.events) {\n        this.webSocket[\"on\" + eventName] = function() {};\n      }\n    };\n    return Connection;\n  }();\n  Connection.reopenDelay = 500;\n  Connection.prototype.events = {\n    message: function message(event) {\n      if (!this.isProtocolSupported()) {\n        return;\n      }\n      var _JSON$parse = JSON.parse(event.data), identifier = _JSON$parse.identifier, message = _JSON$parse.message, reason = _JSON$parse.reason, reconnect = _JSON$parse.reconnect, type = _JSON$parse.type;\n      switch (type) {\n       case message_types.welcome:\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        return this.subscriptions.notify(identifier, \"connected\");\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: function 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: function 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: function error() {\n      logger.log(\"WebSocket onerror event\");\n    }\n  };\n  var extend = function extend(object, properties) {\n    if (properties != null) {\n      for (var key in properties) {\n        var value = properties[key];\n        object[key] = value;\n      }\n    }\n    return object;\n  };\n  var Subscription = function() {\n    function Subscription(consumer) {\n      var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var mixin = arguments[2];\n      classCallCheck(this, Subscription);\n      this.consumer = consumer;\n      this.identifier = JSON.stringify(params);\n      extend(this, mixin);\n    }\n    Subscription.prototype.perform = function perform(action) {\n      var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      data.action = action;\n      return this.send(data);\n    };\n    Subscription.prototype.send = function send(data) {\n      return this.consumer.send({\n        command: \"message\",\n        identifier: this.identifier,\n        data: JSON.stringify(data)\n      });\n    };\n    Subscription.prototype.unsubscribe = function unsubscribe() {\n      return this.consumer.subscriptions.remove(this);\n    };\n    return Subscription;\n  }();\n  var Subscriptions = function() {\n    function Subscriptions(consumer) {\n      classCallCheck(this, Subscriptions);\n      this.consumer = consumer;\n      this.subscriptions = [];\n    }\n    Subscriptions.prototype.create = function create(channelName, mixin) {\n      var channel = channelName;\n      var params = (typeof channel === \"undefined\" ? \"undefined\" : _typeof(channel)) === \"object\" ? channel : {\n        channel: channel\n      };\n      var subscription = new Subscription(this.consumer, params, mixin);\n      return this.add(subscription);\n    };\n    Subscriptions.prototype.add = function add(subscription) {\n      this.subscriptions.push(subscription);\n      this.consumer.ensureActiveConnection();\n      this.notify(subscription, \"initialized\");\n      this.sendCommand(subscription, \"subscribe\");\n      return subscription;\n    };\n    Subscriptions.prototype.remove = function remove(subscription) {\n      this.forget(subscription);\n      if (!this.findAll(subscription.identifier).length) {\n        this.sendCommand(subscription, \"unsubscribe\");\n      }\n      return subscription;\n    };\n    Subscriptions.prototype.reject = function reject(identifier) {\n      var _this = this;\n      return this.findAll(identifier).map(function(subscription) {\n        _this.forget(subscription);\n        _this.notify(subscription, \"rejected\");\n        return subscription;\n      });\n    };\n    Subscriptions.prototype.forget = function forget(subscription) {\n      this.subscriptions = this.subscriptions.filter(function(s) {\n        return s !== subscription;\n      });\n      return subscription;\n    };\n    Subscriptions.prototype.findAll = function findAll(identifier) {\n      return this.subscriptions.filter(function(s) {\n        return s.identifier === identifier;\n      });\n    };\n    Subscriptions.prototype.reload = function reload() {\n      var _this2 = this;\n      return this.subscriptions.map(function(subscription) {\n        return _this2.sendCommand(subscription, \"subscribe\");\n      });\n    };\n    Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {\n      var _this3 = this;\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      return this.subscriptions.map(function(subscription) {\n        return _this3.notify.apply(_this3, [ subscription, callbackName ].concat(args));\n      });\n    };\n    Subscriptions.prototype.notify = function notify(subscription, callbackName) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n        args[_key2 - 2] = arguments[_key2];\n      }\n      var subscriptions = void 0;\n      if (typeof subscription === \"string\") {\n        subscriptions = this.findAll(subscription);\n      } else {\n        subscriptions = [ subscription ];\n      }\n      return subscriptions.map(function(subscription) {\n        return typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : undefined;\n      });\n    };\n    Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {\n      var identifier = subscription.identifier;\n      return this.consumer.send({\n        command: command,\n        identifier: identifier\n      });\n    };\n    return Subscriptions;\n  }();\n  var Consumer = function() {\n    function Consumer(url) {\n      classCallCheck(this, Consumer);\n      this._url = url;\n      this.subscriptions = new Subscriptions(this);\n      this.connection = new Connection(this);\n    }\n    Consumer.prototype.send = function send(data) {\n      return this.connection.send(data);\n    };\n    Consumer.prototype.connect = function connect() {\n      return this.connection.open();\n    };\n    Consumer.prototype.disconnect = function disconnect() {\n      return this.connection.close({\n        allowReconnect: false\n      });\n    };\n    Consumer.prototype.ensureActiveConnection = function ensureActiveConnection() {\n      if (!this.connection.isActive()) {\n        return this.connection.open();\n      }\n    };\n    createClass(Consumer, [ {\n      key: \"url\",\n      get: function get$$1() {\n        return createWebSocketURL(this._url);\n      }\n    } ]);\n    return Consumer;\n  }();\n  function createWebSocketURL(url) {\n    if (typeof url === \"function\") {\n      url = url();\n    }\n    if (url && !/^wss?:/i.test(url)) {\n      var 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  function createConsumer() {\n    var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig(\"url\") || INTERNAL.default_mount_path;\n    return new Consumer(url);\n  }\n  function getConfig(name) {\n    var element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n    if (element) {\n      return element.getAttribute(\"content\");\n    }\n  }\n  exports.Connection = Connection;\n  exports.ConnectionMonitor = ConnectionMonitor;\n  exports.Consumer = Consumer;\n  exports.INTERNAL = INTERNAL;\n  exports.Subscription = Subscription;\n  exports.Subscriptions = Subscriptions;\n  exports.adapters = adapters;\n  exports.createWebSocketURL = createWebSocketURL;\n  exports.logger = logger;\n  exports.createConsumer = createConsumer;\n  exports.getConfig = getConfig;\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n});\n", "/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", "/*!\n * clipboard.js v1.5.12\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var e;e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,o){function i(a,c){if(!n[a]){if(!e[a]){var s=\"function\"==typeof require&&require;if(!c&&s)return s(a,!0);if(r)return r(a,!0);var l=new Error(\"Cannot find module '\"+a+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var u=n[a]={exports:{}};e[a][0].call(u.exports,function(t){var n=e[a][1][t];return i(n?n:t)},u,u.exports,t,e,n,o)}return n[a].exports}for(var r=\"function\"==typeof require&&require,a=0;a<o.length;a++)i(o[a]);return i}({1:[function(t,e,n){var o=t(\"matches-selector\");e.exports=function(t,e,n){for(var i=n?t:t.parentNode;i&&i!==document;){if(o(i,e))return i;i=i.parentNode}}},{\"matches-selector\":5}],2:[function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function i(t,e,n,o){return function(n){n.delegateTarget=r(n.target,e,!0),n.delegateTarget&&o.call(t,n)}}var r=t(\"closest\");e.exports=o},{closest:1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&(\"[object NodeList]\"===e||\"[object HTMLCollection]\"===e)&&\"length\"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return\"string\"==typeof t||t instanceof String},n.fn=function(t){var e=Object.prototype.toString.call(t);return\"[object Function]\"===e}},{}],4:[function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error(\"Missing required arguments\");if(!c.string(e))throw new TypeError(\"Second argument must be a String\");if(!c.fn(n))throw new TypeError(\"Third argument must be a Function\");if(c.node(t))return i(t,e,n);if(c.nodeList(t))return r(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError(\"First argument must be a String, HTMLElement, HTMLCollection, or NodeList\")}function i(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function r(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return s(document.body,t,e,n)}var c=t(\"./is\"),s=t(\"delegate\");e.exports=o},{\"./is\":3,delegate:2}],5:[function(t,e,n){function o(t,e){if(r)return r.call(t,e);for(var n=t.parentNode.querySelectorAll(e),o=0;o<n.length;++o)if(n[o]==t)return!0;return!1}var i=Element.prototype,r=i.matchesSelector||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector;e.exports=o},{}],6:[function(t,e,n){function o(t){var e;if(\"INPUT\"===t.nodeName||\"TEXTAREA\"===t.nodeName)t.focus(),t.setSelectionRange(0,t.value.length),e=t.value;else{t.hasAttribute(\"contenteditable\")&&t.focus();var n=window.getSelection(),o=document.createRange();o.selectNodeContents(t),n.removeAllRanges(),n.addRange(o),e=n.toString()}return e}e.exports=o},{}],7:[function(t,e,n){function o(){}o.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){i.off(t,o),e.apply(n,arguments)}var i=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,i=n.length;for(o;i>o;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],i=[];if(o&&e)for(var r=0,a=o.length;a>r;r++)o[r].fn!==e&&o[r].fn._!==e&&i.push(o[r]);return i.length?n[t]=i:delete n[t],this}},e.exports=o},{}],8:[function(e,n,o){!function(i,r){if(\"function\"==typeof t&&t.amd)t([\"module\",\"select\"],r);else if(\"undefined\"!=typeof o)r(n,e(\"select\"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(t,e){\"use strict\";function n(t){return t&&t.__esModule?t:{\"default\":t}}function o(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var i=n(e),r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol?\"symbol\":typeof t},a=function(){function t(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(e,n,o){return n&&t(e.prototype,n),o&&t(e,o),e}}(),c=function(){function t(e){o(this,t),this.resolveOptions(e),this.initSelection()}return t.prototype.resolveOptions=function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.action=e.action,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=\"\"},t.prototype.initSelection=function t(){this.text?this.selectFake():this.target&&this.selectTarget()},t.prototype.selectFake=function t(){var e=this,n=\"rtl\"==document.documentElement.getAttribute(\"dir\");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=document.body.addEventListener(\"click\",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement(\"textarea\"),this.fakeElem.style.fontSize=\"12pt\",this.fakeElem.style.border=\"0\",this.fakeElem.style.padding=\"0\",this.fakeElem.style.margin=\"0\",this.fakeElem.style.position=\"absolute\",this.fakeElem.style[n?\"right\":\"left\"]=\"-9999px\",this.fakeElem.style.top=(window.pageYOffset||document.documentElement.scrollTop)+\"px\",this.fakeElem.setAttribute(\"readonly\",\"\"),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()},t.prototype.removeFake=function t(){this.fakeHandler&&(document.body.removeEventListener(\"click\",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)},t.prototype.selectTarget=function t(){this.selectedText=(0,i.default)(this.target),this.copyText()},t.prototype.copyText=function t(){var e=void 0;try{e=document.execCommand(this.action)}catch(n){e=!1}this.handleResult(e)},t.prototype.handleResult=function t(e){e?this.emitter.emit(\"success\",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)}):this.emitter.emit(\"error\",{action:this.action,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})},t.prototype.clearSelection=function t(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()},t.prototype.destroy=function t(){this.removeFake()},a(t,[{key:\"action\",set:function t(){var e=arguments.length<=0||void 0===arguments[0]?\"copy\":arguments[0];if(this._action=e,\"copy\"!==this._action&&\"cut\"!==this._action)throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"')},get:function t(){return this._action}},{key:\"target\",set:function t(e){if(void 0!==e){if(!e||\"object\"!==(\"undefined\"==typeof e?\"undefined\":r(e))||1!==e.nodeType)throw new Error('Invalid \"target\" value, use a valid Element');if(\"copy\"===this.action&&e.hasAttribute(\"disabled\"))throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');if(\"cut\"===this.action&&(e.hasAttribute(\"readonly\")||e.hasAttribute(\"disabled\")))throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');this._target=e}},get:function t(){return this._target}}]),t}();t.exports=c})},{select:6}],9:[function(e,n,o){!function(i,r){if(\"function\"==typeof t&&t.amd)t([\"module\",\"./clipboard-action\",\"tiny-emitter\",\"good-listener\"],r);else if(\"undefined\"!=typeof o)r(n,e(\"./clipboard-action\"),e(\"tiny-emitter\"),e(\"good-listener\"));else{var a={exports:{}};r(a,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=a.exports}}(this,function(t,e,n,o){\"use strict\";function i(t){return t&&t.__esModule?t:{\"default\":t}}function r(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function a(t,e){if(!t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!e||\"object\"!=typeof e&&\"function\"!=typeof e?t:e}function c(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e){var n=\"data-clipboard-\"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var l=i(e),u=i(n),f=i(o),d=function(t){function e(n,o){r(this,e);var i=a(this,t.call(this));return i.resolveOptions(o),i.listenClick(n),i}return c(e,t),e.prototype.resolveOptions=function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.action=\"function\"==typeof e.action?e.action:this.defaultAction,this.target=\"function\"==typeof e.target?e.target:this.defaultTarget,this.text=\"function\"==typeof e.text?e.text:this.defaultText},e.prototype.listenClick=function t(e){var n=this;this.listener=(0,f.default)(e,\"click\",function(t){return n.onClick(t)})},e.prototype.onClick=function t(e){var n=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})},e.prototype.defaultAction=function t(e){return s(\"action\",e)},e.prototype.defaultTarget=function t(e){var n=s(\"target\",e);return n?document.querySelector(n):void 0},e.prototype.defaultText=function t(e){return s(\"text\",e)},e.prototype.destroy=function t(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)},e}(u.default);t.exports=d})},{\"./clipboard-action\":8,\"good-listener\":4,\"tiny-emitter\":7}]},{},[9])(9)});", "(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ZXing = {}));\n}(this, (function (exports) { 'use strict';\n\n    function isNullOrUndefined(obj) {\n        return obj === null || obj === undefined;\n    }\n\n    /*\n     * Copyright 2008 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /* global Reflect, Promise */\n\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\n    function __extends(d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    }\n\n    function fixProto(target, prototype) {\n        var setPrototypeOf = Object.setPrototypeOf;\n        setPrototypeOf ? setPrototypeOf(target, prototype) : (target.__proto__ = prototype);\n    }\n\n    function fixStack(target, fn) {\n        if (fn === void 0) {\n            fn = target.constructor;\n        }\n        var captureStackTrace = Error.captureStackTrace;\n        captureStackTrace && captureStackTrace(target, fn);\n    }\n\n    var CustomError = (function (_super) {\n        __extends(CustomError, _super);\n        function CustomError(message) {\n            var _newTarget = this.constructor;\n            var _this = _super.call(this, message) || this;\n            Object.defineProperty(_this, 'name', {\n                value: _newTarget.name,\n                enumerable: false\n            });\n            fixProto(_this, _newTarget.prototype);\n            fixStack(_this);\n            return _this;\n        }\n        \n        return CustomError;\n    })(Error);\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class Exception extends CustomError {\n        /**\n         * Allows Exception to be constructed directly\n         * with some message and prototype definition.\n         */\n        constructor(message = undefined) {\n            super(message);\n            this.message = message;\n        }\n        getKind() {\n            const ex = this.constructor;\n            return ex.kind;\n        }\n    }\n    /**\n     * It's typed as string so it can be extended and overriden.\n     */\n    Exception.kind = 'Exception';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ArgumentException extends Exception {\n    }\n    ArgumentException.kind = 'ArgumentException';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class IllegalArgumentException extends Exception {\n    }\n    IllegalArgumentException.kind = 'IllegalArgumentException';\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    class BinaryBitmap {\n        constructor(binarizer) {\n            this.binarizer = binarizer;\n            if (binarizer === null) {\n                throw new IllegalArgumentException('Binarizer must be non-null.');\n            }\n        }\n        /**\n         * @return The width of the bitmap.\n         */\n        getWidth() {\n            return this.binarizer.getWidth();\n        }\n        /**\n         * @return The height of the bitmap.\n         */\n        getHeight() {\n            return this.binarizer.getHeight();\n        }\n        /**\n         * Converts one row of luminance data to 1 bit data. May actually do the conversion, or return\n         * cached data. Callers should assume this method is expensive and call it as seldom as possible.\n         * This method is intended for decoding 1D barcodes and may choose to apply sharpening.\n         *\n         * @param y The row to fetch, which must be in [0, bitmap height)\n         * @param row An optional preallocated array. If null or too small, it will be ignored.\n         *            If used, the Binarizer will call BitArray.clear(). Always use the returned object.\n         * @return The array of bits for this row (true means black).\n         * @throws NotFoundException if row can't be binarized\n         */\n        getBlackRow(y /*int*/, row) {\n            return this.binarizer.getBlackRow(y, row);\n        }\n        /**\n         * Converts a 2D array of luminance data to 1 bit. As above, assume this method is expensive\n         * and do not call it repeatedly. This method is intended for decoding 2D barcodes and may or\n         * may not apply sharpening. Therefore, a row from this matrix may not be identical to one\n         * fetched using getBlackRow(), so don't mix and match between them.\n         *\n         * @return The 2D array of bits for the image (true means black).\n         * @throws NotFoundException if image can't be binarized to make a matrix\n         */\n        getBlackMatrix() {\n            // The matrix is created on demand the first time it is requested, then cached. There are two\n            // reasons for this:\n            // 1. This work will never be done if the caller only installs 1D Reader objects, or if a\n            //    1D Reader finds a barcode before the 2D Readers run.\n            // 2. This work will only be done once even if the caller installs multiple 2D Readers.\n            if (this.matrix === null || this.matrix === undefined) {\n                this.matrix = this.binarizer.getBlackMatrix();\n            }\n            return this.matrix;\n        }\n        /**\n         * @return Whether this bitmap can be cropped.\n         */\n        isCropSupported() {\n            return this.binarizer.getLuminanceSource().isCropSupported();\n        }\n        /**\n         * Returns a new object with cropped image data. Implementations may keep a reference to the\n         * original data rather than a copy. Only callable if isCropSupported() is true.\n         *\n         * @param left The left coordinate, which must be in [0,getWidth())\n         * @param top The top coordinate, which must be in [0,getHeight())\n         * @param width The width of the rectangle to crop.\n         * @param height The height of the rectangle to crop.\n         * @return A cropped version of this object.\n         */\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            const newSource = this.binarizer.getLuminanceSource().crop(left, top, width, height);\n            return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n        }\n        /**\n         * @return Whether this bitmap supports counter-clockwise rotation.\n         */\n        isRotateSupported() {\n            return this.binarizer.getLuminanceSource().isRotateSupported();\n        }\n        /**\n         * Returns a new object with rotated image data by 90 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise() {\n            const newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise();\n            return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n        }\n        /**\n         * Returns a new object with rotated image data by 45 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise45() {\n            const newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise45();\n            return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n        }\n        /*@Override*/\n        toString() {\n            try {\n                return this.getBlackMatrix().toString();\n            }\n            catch (e /*: NotFoundException*/) {\n                return '';\n            }\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ChecksumException extends Exception {\n        static getChecksumInstance() {\n            return new ChecksumException();\n        }\n    }\n    ChecksumException.kind = 'ChecksumException';\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This class hierarchy provides a set of methods to convert luminance data to 1 bit data.\n     * It allows the algorithm to vary polymorphically, for example allowing a very expensive\n     * thresholding technique for servers and a fast one for mobile. It also permits the implementation\n     * to vary, e.g. a JNI version for Android and a Java fallback version for other platforms.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class Binarizer {\n        constructor(source) {\n            this.source = source;\n        }\n        getLuminanceSource() {\n            return this.source;\n        }\n        getWidth() {\n            return this.source.getWidth();\n        }\n        getHeight() {\n            return this.source.getHeight();\n        }\n    }\n\n    class System {\n        // public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)\n        /**\n         * Makes a copy of a array.\n         */\n        static arraycopy(src, srcPos, dest, destPos, length) {\n            // TODO: better use split or set?\n            while (length--) {\n                dest[destPos++] = src[srcPos++];\n            }\n        }\n        /**\n         * Returns the current time in milliseconds.\n         */\n        static currentTimeMillis() {\n            return Date.now();\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class IndexOutOfBoundsException extends Exception {\n    }\n    IndexOutOfBoundsException.kind = 'IndexOutOfBoundsException';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException {\n        constructor(index = undefined, message = undefined) {\n            super(message);\n            this.index = index;\n            this.message = message;\n        }\n    }\n    ArrayIndexOutOfBoundsException.kind = 'ArrayIndexOutOfBoundsException';\n\n    class Arrays {\n        /**\n         * Assigns the specified int value to each element of the specified array\n         * of ints.\n         *\n         * @param a the array to be filled\n         * @param val the value to be stored in all elements of the array\n         */\n        static fill(a, val) {\n            for (let i = 0, len = a.length; i < len; i++)\n                a[i] = val;\n        }\n        /**\n         * Assigns the specified int value to each element of the specified\n         * range of the specified array of ints.  The range to be filled\n         * extends from index {@code fromIndex}, inclusive, to index\n         * {@code toIndex}, exclusive.  (If {@code fromIndex==toIndex}, the\n         * range to be filled is empty.)\n         *\n         * @param a the array to be filled\n         * @param fromIndex the index of the first element (inclusive) to be\n         *        filled with the specified value\n         * @param toIndex the index of the last element (exclusive) to be\n         *        filled with the specified value\n         * @param val the value to be stored in all elements of the array\n         * @throws IllegalArgumentException if {@code fromIndex > toIndex}\n         * @throws ArrayIndexOutOfBoundsException if {@code fromIndex < 0} or\n         *         {@code toIndex > a.length}\n         */\n        static fillWithin(a, fromIndex, toIndex, val) {\n            Arrays.rangeCheck(a.length, fromIndex, toIndex);\n            for (let i = fromIndex; i < toIndex; i++)\n                a[i] = val;\n        }\n        /**\n         * Checks that {@code fromIndex} and {@code toIndex} are in\n         * the range and throws an exception if they aren't.\n         */\n        static rangeCheck(arrayLength, fromIndex, toIndex) {\n            if (fromIndex > toIndex) {\n                throw new IllegalArgumentException('fromIndex(' + fromIndex + ') > toIndex(' + toIndex + ')');\n            }\n            if (fromIndex < 0) {\n                throw new ArrayIndexOutOfBoundsException(fromIndex);\n            }\n            if (toIndex > arrayLength) {\n                throw new ArrayIndexOutOfBoundsException(toIndex);\n            }\n        }\n        static asList(...args) {\n            return args;\n        }\n        static create(rows, cols, value) {\n            let arr = Array.from({ length: rows });\n            return arr.map(x => Array.from({ length: cols }).fill(value));\n        }\n        static createInt32Array(rows, cols, value) {\n            let arr = Array.from({ length: rows });\n            return arr.map(x => Int32Array.from({ length: cols }).fill(value));\n        }\n        static equals(first, second) {\n            if (!first) {\n                return false;\n            }\n            if (!second) {\n                return false;\n            }\n            if (!first.length) {\n                return false;\n            }\n            if (!second.length) {\n                return false;\n            }\n            if (first.length !== second.length) {\n                return false;\n            }\n            for (let i = 0, length = first.length; i < length; i++) {\n                if (first[i] !== second[i]) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        static hashCode(a) {\n            if (a === null) {\n                return 0;\n            }\n            let result = 1;\n            for (const element of a) {\n                result = 31 * result + element;\n            }\n            return result;\n        }\n        static fillUint8Array(a, value) {\n            for (let i = 0; i !== a.length; i++) {\n                a[i] = value;\n            }\n        }\n        static copyOf(original, newLength) {\n            return original.slice(0, newLength);\n        }\n        static copyOfUint8Array(original, newLength) {\n            if (original.length <= newLength) {\n                const newArray = new Uint8Array(newLength);\n                newArray.set(original);\n                return newArray;\n            }\n            return original.slice(0, newLength);\n        }\n        static copyOfRange(original, from, to) {\n            const newLength = to - from;\n            const copy = new Int32Array(newLength);\n            System.arraycopy(original, from, copy, 0, newLength);\n            return copy;\n        }\n        /*\n        * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point\n        * for the new element.\n        * Parameters:\n        *     ar - A sorted array\n        *     el - An element to search for\n        *     comparator - A comparator function. The function takes two arguments: (a, b) and returns:\n        *        a negative number  if a is less than b;\n        *        0 if a is equal to b;\n        *        a positive number of a is greater than b.\n        * The array may contain duplicate elements. If there are more than one equal elements in the array,\n        * the returned value can be the index of any one of the equal elements.\n        *\n        * http://jsfiddle.net/aryzhov/pkfst550/\n        */\n        static binarySearch(ar, el, comparator) {\n            if (undefined === comparator) {\n                comparator = Arrays.numberComparator;\n            }\n            let m = 0;\n            let n = ar.length - 1;\n            while (m <= n) {\n                const k = (n + m) >> 1;\n                const cmp = comparator(el, ar[k]);\n                if (cmp > 0) {\n                    m = k + 1;\n                }\n                else if (cmp < 0) {\n                    n = k - 1;\n                }\n                else {\n                    return k;\n                }\n            }\n            return -m - 1;\n        }\n        static numberComparator(a, b) {\n            return a - b;\n        }\n    }\n\n    /**\n     * Ponyfill for Java's Integer class.\n     */\n    class Integer {\n        static numberOfTrailingZeros(i) {\n            let y;\n            if (i === 0)\n                return 32;\n            let n = 31;\n            y = i << 16;\n            if (y !== 0) {\n                n -= 16;\n                i = y;\n            }\n            y = i << 8;\n            if (y !== 0) {\n                n -= 8;\n                i = y;\n            }\n            y = i << 4;\n            if (y !== 0) {\n                n -= 4;\n                i = y;\n            }\n            y = i << 2;\n            if (y !== 0) {\n                n -= 2;\n                i = y;\n            }\n            return n - ((i << 1) >>> 31);\n        }\n        static numberOfLeadingZeros(i) {\n            // HD, Figure 5-6\n            if (i === 0) {\n                return 32;\n            }\n            let n = 1;\n            if (i >>> 16 === 0) {\n                n += 16;\n                i <<= 16;\n            }\n            if (i >>> 24 === 0) {\n                n += 8;\n                i <<= 8;\n            }\n            if (i >>> 28 === 0) {\n                n += 4;\n                i <<= 4;\n            }\n            if (i >>> 30 === 0) {\n                n += 2;\n                i <<= 2;\n            }\n            n -= i >>> 31;\n            return n;\n        }\n        static toHexString(i) {\n            return i.toString(16);\n        }\n        static toBinaryString(intNumber) {\n            return String(parseInt(String(intNumber), 2));\n        }\n        // Returns the number of one-bits in the two's complement binary representation of the specified int value. This function is sometimes referred to as the population count.\n        // Returns:\n        // the number of one-bits in the two's complement binary representation of the specified int value.\n        static bitCount(i) {\n            // HD, Figure 5-2\n            i = i - ((i >>> 1) & 0x55555555);\n            i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);\n            i = (i + (i >>> 4)) & 0x0f0f0f0f;\n            i = i + (i >>> 8);\n            i = i + (i >>> 16);\n            return i & 0x3f;\n        }\n        static truncDivision(dividend, divisor) {\n            return Math.trunc(dividend / divisor);\n        }\n        /**\n         * Converts A string to an integer.\n         * @param s A string to convert into a number.\n         * @param radix A value between 2 and 36 that specifies the base of the number in numString. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal.\n         */\n        static parseInt(num, radix = undefined) {\n            return parseInt(num, radix);\n        }\n    }\n    Integer.MIN_VALUE_32_BITS = -2147483648;\n    Integer.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n\n    /**\n     * <p>A simple, fast array of bits, represented compactly by an array of ints internally.</p>\n     *\n     * @author Sean Owen\n     */\n    class BitArray /*implements Cloneable*/ {\n        // For testing only\n        constructor(size /*int*/, bits) {\n            if (undefined === size) {\n                this.size = 0;\n                this.bits = new Int32Array(1);\n            }\n            else {\n                this.size = size;\n                if (undefined === bits || null === bits) {\n                    this.bits = BitArray.makeArray(size);\n                }\n                else {\n                    this.bits = bits;\n                }\n            }\n        }\n        getSize() {\n            return this.size;\n        }\n        getSizeInBytes() {\n            return Math.floor((this.size + 7) / 8);\n        }\n        ensureCapacity(size /*int*/) {\n            if (size > this.bits.length * 32) {\n                const newBits = BitArray.makeArray(size);\n                System.arraycopy(this.bits, 0, newBits, 0, this.bits.length);\n                this.bits = newBits;\n            }\n        }\n        /**\n         * @param i bit to get\n         * @return true iff bit i is set\n         */\n        get(i /*int*/) {\n            return (this.bits[Math.floor(i / 32)] & (1 << (i & 0x1F))) !== 0;\n        }\n        /**\n         * Sets bit i.\n         *\n         * @param i bit to set\n         */\n        set(i /*int*/) {\n            this.bits[Math.floor(i / 32)] |= 1 << (i & 0x1F);\n        }\n        /**\n         * Flips bit i.\n         *\n         * @param i bit to set\n         */\n        flip(i /*int*/) {\n            this.bits[Math.floor(i / 32)] ^= 1 << (i & 0x1F);\n        }\n        /**\n         * @param from first bit to check\n         * @return index of first bit that is set, starting from the given index, or size if none are set\n         *  at or beyond this given index\n         * @see #getNextUnset(int)\n         */\n        getNextSet(from /*int*/) {\n            const size = this.size;\n            if (from >= size) {\n                return size;\n            }\n            const bits = this.bits;\n            let bitsOffset = Math.floor(from / 32);\n            let currentBits = bits[bitsOffset];\n            // mask off lesser bits first\n            currentBits &= ~((1 << (from & 0x1F)) - 1);\n            const length = bits.length;\n            while (currentBits === 0) {\n                if (++bitsOffset === length) {\n                    return size;\n                }\n                currentBits = bits[bitsOffset];\n            }\n            const result = (bitsOffset * 32) + Integer.numberOfTrailingZeros(currentBits);\n            return result > size ? size : result;\n        }\n        /**\n         * @param from index to start looking for unset bit\n         * @return index of next unset bit, or {@code size} if none are unset until the end\n         * @see #getNextSet(int)\n         */\n        getNextUnset(from /*int*/) {\n            const size = this.size;\n            if (from >= size) {\n                return size;\n            }\n            const bits = this.bits;\n            let bitsOffset = Math.floor(from / 32);\n            let currentBits = ~bits[bitsOffset];\n            // mask off lesser bits first\n            currentBits &= ~((1 << (from & 0x1F)) - 1);\n            const length = bits.length;\n            while (currentBits === 0) {\n                if (++bitsOffset === length) {\n                    return size;\n                }\n                currentBits = ~bits[bitsOffset];\n            }\n            const result = (bitsOffset * 32) + Integer.numberOfTrailingZeros(currentBits);\n            return result > size ? size : result;\n        }\n        /**\n         * Sets a block of 32 bits, starting at bit i.\n         *\n         * @param i first bit to set\n         * @param newBits the new value of the next 32 bits. Note again that the least-significant bit\n         * corresponds to bit i, the next-least-significant to i+1, and so on.\n         */\n        setBulk(i /*int*/, newBits /*int*/) {\n            this.bits[Math.floor(i / 32)] = newBits;\n        }\n        /**\n         * Sets a range of bits.\n         *\n         * @param start start of range, inclusive.\n         * @param end end of range, exclusive\n         */\n        setRange(start /*int*/, end /*int*/) {\n            if (end < start || start < 0 || end > this.size) {\n                throw new IllegalArgumentException();\n            }\n            if (end === start) {\n                return;\n            }\n            end--; // will be easier to treat this as the last actually set bit -- inclusive\n            const firstInt = Math.floor(start / 32);\n            const lastInt = Math.floor(end / 32);\n            const bits = this.bits;\n            for (let i = firstInt; i <= lastInt; i++) {\n                const firstBit = i > firstInt ? 0 : start & 0x1F;\n                const lastBit = i < lastInt ? 31 : end & 0x1F;\n                // Ones from firstBit to lastBit, inclusive\n                const mask = (2 << lastBit) - (1 << firstBit);\n                bits[i] |= mask;\n            }\n        }\n        /**\n         * Clears all bits (sets to false).\n         */\n        clear() {\n            const max = this.bits.length;\n            const bits = this.bits;\n            for (let i = 0; i < max; i++) {\n                bits[i] = 0;\n            }\n        }\n        /**\n         * Efficient method to check if a range of bits is set, or not set.\n         *\n         * @param start start of range, inclusive.\n         * @param end end of range, exclusive\n         * @param value if true, checks that bits in range are set, otherwise checks that they are not set\n         * \n         * @return true iff all bits are set or not set in range, according to value argument\n         * @throws IllegalArgumentException if end is less than start or the range is not contained in the array\n         */\n        isRange(start /*int*/, end /*int*/, value) {\n            if (end < start || start < 0 || end > this.size) {\n                throw new IllegalArgumentException();\n            }\n            if (end === start) {\n                return true; // empty range matches\n            }\n            end--; // will be easier to treat this as the last actually set bit -- inclusive\n            const firstInt = Math.floor(start / 32);\n            const lastInt = Math.floor(end / 32);\n            const bits = this.bits;\n            for (let i = firstInt; i <= lastInt; i++) {\n                const firstBit = i > firstInt ? 0 : start & 0x1F;\n                const lastBit = i < lastInt ? 31 : end & 0x1F;\n                // Ones from firstBit to lastBit, inclusive\n                const mask = (2 << lastBit) - (1 << firstBit) & 0xFFFFFFFF;\n                // TYPESCRIPTPORT: & 0xFFFFFFFF added to discard anything after 32 bits, as ES has 53 bits\n                // Return false if we're looking for 1s and the masked bits[i] isn't all 1s (is: that,\n                // equals the mask, or we're looking for 0s and the masked portion is not all 0s\n                if ((bits[i] & mask) !== (value ? mask : 0)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        appendBit(bit) {\n            this.ensureCapacity(this.size + 1);\n            if (bit) {\n                this.bits[Math.floor(this.size / 32)] |= 1 << (this.size & 0x1F);\n            }\n            this.size++;\n        }\n        /**\n         * Appends the least-significant bits, from value, in order from most-significant to\n         * least-significant. For example, appending 6 bits from 0x000001E will append the bits\n         * 0, 1, 1, 1, 1, 0 in that order.\n         *\n         * @param value {@code int} containing bits to append\n         * @param numBits bits from value to append\n         */\n        appendBits(value /*int*/, numBits /*int*/) {\n            if (numBits < 0 || numBits > 32) {\n                throw new IllegalArgumentException('Num bits must be between 0 and 32');\n            }\n            this.ensureCapacity(this.size + numBits);\n            // const appendBit = this.appendBit;\n            for (let numBitsLeft = numBits; numBitsLeft > 0; numBitsLeft--) {\n                this.appendBit(((value >> (numBitsLeft - 1)) & 0x01) === 1);\n            }\n        }\n        appendBitArray(other) {\n            const otherSize = other.size;\n            this.ensureCapacity(this.size + otherSize);\n            // const appendBit = this.appendBit;\n            for (let i = 0; i < otherSize; i++) {\n                this.appendBit(other.get(i));\n            }\n        }\n        xor(other) {\n            if (this.size !== other.size) {\n                throw new IllegalArgumentException('Sizes don\\'t match');\n            }\n            const bits = this.bits;\n            for (let i = 0, length = bits.length; i < length; i++) {\n                // The last int could be incomplete (i.e. not have 32 bits in\n                // it) but there is no problem since 0 XOR 0 == 0.\n                bits[i] ^= other.bits[i];\n            }\n        }\n        /**\n         *\n         * @param bitOffset first bit to start writing\n         * @param array array to write into. Bytes are written most-significant byte first. This is the opposite\n         *  of the internal representation, which is exposed by {@link #getBitArray()}\n         * @param offset position in array to start writing\n         * @param numBytes how many bytes to write\n         */\n        toBytes(bitOffset /*int*/, array, offset /*int*/, numBytes /*int*/) {\n            for (let i = 0; i < numBytes; i++) {\n                let theByte = 0;\n                for (let j = 0; j < 8; j++) {\n                    if (this.get(bitOffset)) {\n                        theByte |= 1 << (7 - j);\n                    }\n                    bitOffset++;\n                }\n                array[offset + i] = /*(byte)*/ theByte;\n            }\n        }\n        /**\n         * @return underlying array of ints. The first element holds the first 32 bits, and the least\n         *         significant bit is bit 0.\n         */\n        getBitArray() {\n            return this.bits;\n        }\n        /**\n         * Reverses all bits in the array.\n         */\n        reverse() {\n            const newBits = new Int32Array(this.bits.length);\n            // reverse all int's first\n            const len = Math.floor((this.size - 1) / 32);\n            const oldBitsLen = len + 1;\n            const bits = this.bits;\n            for (let i = 0; i < oldBitsLen; i++) {\n                let x = bits[i];\n                x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);\n                x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);\n                x = ((x >> 4) & 0x0f0f0f0f) | ((x & 0x0f0f0f0f) << 4);\n                x = ((x >> 8) & 0x00ff00ff) | ((x & 0x00ff00ff) << 8);\n                x = ((x >> 16) & 0x0000ffff) | ((x & 0x0000ffff) << 16);\n                newBits[len - i] = /*(int)*/ x;\n            }\n            // now correct the int's if the bit size isn't a multiple of 32\n            if (this.size !== oldBitsLen * 32) {\n                const leftOffset = oldBitsLen * 32 - this.size;\n                let currentInt = newBits[0] >>> leftOffset;\n                for (let i = 1; i < oldBitsLen; i++) {\n                    const nextInt = newBits[i];\n                    currentInt |= nextInt << (32 - leftOffset);\n                    newBits[i - 1] = currentInt;\n                    currentInt = nextInt >>> leftOffset;\n                }\n                newBits[oldBitsLen - 1] = currentInt;\n            }\n            this.bits = newBits;\n        }\n        static makeArray(size /*int*/) {\n            return new Int32Array(Math.floor((size + 31) / 32));\n        }\n        /*@Override*/\n        equals(o) {\n            if (!(o instanceof BitArray)) {\n                return false;\n            }\n            const other = o;\n            return this.size === other.size && Arrays.equals(this.bits, other.bits);\n        }\n        /*@Override*/\n        hashCode() {\n            return 31 * this.size + Arrays.hashCode(this.bits);\n        }\n        /*@Override*/\n        toString() {\n            let result = '';\n            for (let i = 0, size = this.size; i < size; i++) {\n                if ((i & 0x07) === 0) {\n                    result += ' ';\n                }\n                result += this.get(i) ? 'X' : '.';\n            }\n            return result;\n        }\n        /*@Override*/\n        clone() {\n            return new BitArray(this.size, this.bits.slice());\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * Encapsulates a type of hint that a caller may pass to a barcode reader to help it\n     * more quickly or accurately decode it. It is up to implementations to decide what,\n     * if anything, to do with the information that is supplied.\n     *\n     * @author Sean Owen\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @see Reader#decode(BinaryBitmap,java.util.Map)\n     */\n    var DecodeHintType;\n    (function (DecodeHintType) {\n        /**\n         * Unspecified, application-specific hint. Maps to an unspecified {@link Object}.\n         */\n        DecodeHintType[DecodeHintType[\"OTHER\"] = 0] = \"OTHER\"; /*(Object.class)*/\n        /**\n         * Image is a pure monochrome image of a barcode. Doesn't matter what it maps to;\n         * use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"PURE_BARCODE\"] = 1] = \"PURE_BARCODE\"; /*(Void.class)*/\n        /**\n         * Image is known to be of one of a few possible formats.\n         * Maps to a {@link List} of {@link BarcodeFormat}s.\n         */\n        DecodeHintType[DecodeHintType[\"POSSIBLE_FORMATS\"] = 2] = \"POSSIBLE_FORMATS\"; /*(List.class)*/\n        /**\n         * Spend more time to try to find a barcode; optimize for accuracy, not speed.\n         * Doesn't matter what it maps to; use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"TRY_HARDER\"] = 3] = \"TRY_HARDER\"; /*(Void.class)*/\n        /**\n         * Specifies what character encoding to use when decoding, where applicable (type String)\n         */\n        DecodeHintType[DecodeHintType[\"CHARACTER_SET\"] = 4] = \"CHARACTER_SET\"; /*(String.class)*/\n        /**\n         * Allowed lengths of encoded data -- reject anything else. Maps to an {@code Int32Array}.\n         */\n        DecodeHintType[DecodeHintType[\"ALLOWED_LENGTHS\"] = 5] = \"ALLOWED_LENGTHS\"; /*(Int32Array.class)*/\n        /**\n         * Assume Code 39 codes employ a check digit. Doesn't matter what it maps to;\n         * use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"ASSUME_CODE_39_CHECK_DIGIT\"] = 6] = \"ASSUME_CODE_39_CHECK_DIGIT\"; /*(Void.class)*/\n        /**\n         * Assume the barcode is being processed as a GS1 barcode, and modify behavior as needed.\n         * For example this affects FNC1 handling for Code 128 (aka GS1-128). Doesn't matter what it maps to;\n         * use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"ASSUME_GS1\"] = 7] = \"ASSUME_GS1\"; /*(Void.class)*/\n        /**\n         * If true, return the start and end digits in a Codabar barcode instead of stripping them. They\n         * are alpha, whereas the rest are numeric. By default, they are stripped, but this causes them\n         * to not be. Doesn't matter what it maps to; use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"RETURN_CODABAR_START_END\"] = 8] = \"RETURN_CODABAR_START_END\"; /*(Void.class)*/\n        /**\n         * The caller needs to be notified via callback when a possible {@link ResultPoint}\n         * is found. Maps to a {@link ResultPointCallback}.\n         */\n        DecodeHintType[DecodeHintType[\"NEED_RESULT_POINT_CALLBACK\"] = 9] = \"NEED_RESULT_POINT_CALLBACK\"; /*(ResultPointCallback.class)*/\n        /**\n         * Allowed extension lengths for EAN or UPC barcodes. Other formats will ignore this.\n         * Maps to an {@code Int32Array} of the allowed extension lengths, for example [2], [5], or [2, 5].\n         * If it is optional to have an extension, do not set this hint. If this is set,\n         * and a UPC or EAN barcode is found but an extension is not, then no result will be returned\n         * at all.\n         */\n        DecodeHintType[DecodeHintType[\"ALLOWED_EAN_EXTENSIONS\"] = 10] = \"ALLOWED_EAN_EXTENSIONS\"; /*(Int32Array.class)*/\n        // End of enumeration values.\n        /**\n         * Data type the hint is expecting.\n         * Among the possible values the {@link Void} stands out as being used for\n         * hints that do not expect a value to be supplied (flag hints). Such hints\n         * will possibly have their value ignored, or replaced by a\n         * {@link Boolean#TRUE}. Hint suppliers should probably use\n         * {@link Boolean#TRUE} as directed by the actual hint documentation.\n         */\n        // private valueType: Class<?>\n        // DecodeHintType(valueType: Class<?>) {\n        //   this.valueType = valueType\n        // }\n        // public getValueType(): Class<?> {\n        //   return valueType\n        // }\n    })(DecodeHintType || (DecodeHintType = {}));\n    var DecodeHintType$1 = DecodeHintType;\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class FormatException extends Exception {\n        static getFormatInstance() {\n            return new FormatException();\n        }\n    }\n    FormatException.kind = 'FormatException';\n\n    /*import java.util.HashMap;*/\n    /*import java.util.Map;*/\n    var CharacterSetValueIdentifiers;\n    (function (CharacterSetValueIdentifiers) {\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp437\"] = 0] = \"Cp437\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_1\"] = 1] = \"ISO8859_1\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_2\"] = 2] = \"ISO8859_2\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_3\"] = 3] = \"ISO8859_3\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_4\"] = 4] = \"ISO8859_4\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_5\"] = 5] = \"ISO8859_5\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_6\"] = 6] = \"ISO8859_6\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_7\"] = 7] = \"ISO8859_7\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_8\"] = 8] = \"ISO8859_8\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_9\"] = 9] = \"ISO8859_9\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_10\"] = 10] = \"ISO8859_10\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_11\"] = 11] = \"ISO8859_11\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_13\"] = 12] = \"ISO8859_13\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_14\"] = 13] = \"ISO8859_14\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_15\"] = 14] = \"ISO8859_15\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_16\"] = 15] = \"ISO8859_16\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"SJIS\"] = 16] = \"SJIS\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1250\"] = 17] = \"Cp1250\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1251\"] = 18] = \"Cp1251\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1252\"] = 19] = \"Cp1252\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1256\"] = 20] = \"Cp1256\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"UnicodeBigUnmarked\"] = 21] = \"UnicodeBigUnmarked\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"UTF8\"] = 22] = \"UTF8\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ASCII\"] = 23] = \"ASCII\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Big5\"] = 24] = \"Big5\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"GB18030\"] = 25] = \"GB18030\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"EUC_KR\"] = 26] = \"EUC_KR\";\n    })(CharacterSetValueIdentifiers || (CharacterSetValueIdentifiers = {}));\n    /**\n     * Encapsulates a Character Set ECI, according to \"Extended Channel Interpretations\" 5.3.1.1\n     * of ISO 18004.\n     *\n     * @author Sean Owen\n     */\n    class CharacterSetECI {\n        constructor(valueIdentifier, valuesParam, name, ...otherEncodingNames) {\n            this.valueIdentifier = valueIdentifier;\n            this.name = name;\n            if (typeof valuesParam === 'number') {\n                this.values = Int32Array.from([valuesParam]);\n            }\n            else {\n                this.values = valuesParam;\n            }\n            this.otherEncodingNames = otherEncodingNames;\n            CharacterSetECI.VALUE_IDENTIFIER_TO_ECI.set(valueIdentifier, this);\n            CharacterSetECI.NAME_TO_ECI.set(name, this);\n            const values = this.values;\n            for (let i = 0, length = values.length; i !== length; i++) {\n                const v = values[i];\n                CharacterSetECI.VALUES_TO_ECI.set(v, this);\n            }\n            for (const otherName of otherEncodingNames) {\n                CharacterSetECI.NAME_TO_ECI.set(otherName, this);\n            }\n        }\n        // CharacterSetECI(value: number /*int*/) {\n        //   this(new Int32Array {value})\n        // }\n        // CharacterSetECI(value: number /*int*/, String... otherEncodingNames) {\n        //   this.values = new Int32Array {value}\n        //   this.otherEncodingNames = otherEncodingNames\n        // }\n        // CharacterSetECI(values: Int32Array, String... otherEncodingNames) {\n        //   this.values = values\n        //   this.otherEncodingNames = otherEncodingNames\n        // }\n        getValueIdentifier() {\n            return this.valueIdentifier;\n        }\n        getName() {\n            return this.name;\n        }\n        getValue() {\n            return this.values[0];\n        }\n        /**\n         * @param value character set ECI value\n         * @return {@code CharacterSetECI} representing ECI of given value, or null if it is legal but\n         *   unsupported\n         * @throws FormatException if ECI value is invalid\n         */\n        static getCharacterSetECIByValue(value /*int*/) {\n            if (value < 0 || value >= 900) {\n                throw new FormatException('incorect value');\n            }\n            const characterSet = CharacterSetECI.VALUES_TO_ECI.get(value);\n            if (undefined === characterSet) {\n                throw new FormatException('incorect value');\n            }\n            return characterSet;\n        }\n        /**\n         * @param name character set ECI encoding name\n         * @return CharacterSetECI representing ECI for character encoding, or null if it is legal\n         *   but unsupported\n         */\n        static getCharacterSetECIByName(name) {\n            const characterSet = CharacterSetECI.NAME_TO_ECI.get(name);\n            if (undefined === characterSet) {\n                throw new FormatException('incorect value');\n            }\n            return characterSet;\n        }\n        equals(o) {\n            if (!(o instanceof CharacterSetECI)) {\n                return false;\n            }\n            const other = o;\n            return this.getName() === other.getName();\n        }\n    }\n    CharacterSetECI.VALUE_IDENTIFIER_TO_ECI = new Map();\n    CharacterSetECI.VALUES_TO_ECI = new Map();\n    CharacterSetECI.NAME_TO_ECI = new Map();\n    // Enum name is a Java encoding valid for java.lang and java.io\n    // TYPESCRIPTPORT: changed the main label for ISO as the TextEncoder did not recognized them in the form from java\n    // (eg ISO8859_1 must be ISO88591 or ISO8859-1 or ISO-8859-1)\n    // later on: well, except 16 wich does not work with ISO885916 so used ISO-8859-1 form for default\n    CharacterSetECI.Cp437 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp437, Int32Array.from([0, 2]), 'Cp437');\n    CharacterSetECI.ISO8859_1 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_1, Int32Array.from([1, 3]), 'ISO-8859-1', 'ISO88591', 'ISO8859_1');\n    CharacterSetECI.ISO8859_2 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_2, 4, 'ISO-8859-2', 'ISO88592', 'ISO8859_2');\n    CharacterSetECI.ISO8859_3 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_3, 5, 'ISO-8859-3', 'ISO88593', 'ISO8859_3');\n    CharacterSetECI.ISO8859_4 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_4, 6, 'ISO-8859-4', 'ISO88594', 'ISO8859_4');\n    CharacterSetECI.ISO8859_5 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_5, 7, 'ISO-8859-5', 'ISO88595', 'ISO8859_5');\n    CharacterSetECI.ISO8859_6 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_6, 8, 'ISO-8859-6', 'ISO88596', 'ISO8859_6');\n    CharacterSetECI.ISO8859_7 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_7, 9, 'ISO-8859-7', 'ISO88597', 'ISO8859_7');\n    CharacterSetECI.ISO8859_8 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_8, 10, 'ISO-8859-8', 'ISO88598', 'ISO8859_8');\n    CharacterSetECI.ISO8859_9 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_9, 11, 'ISO-8859-9', 'ISO88599', 'ISO8859_9');\n    CharacterSetECI.ISO8859_10 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_10, 12, 'ISO-8859-10', 'ISO885910', 'ISO8859_10');\n    CharacterSetECI.ISO8859_11 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_11, 13, 'ISO-8859-11', 'ISO885911', 'ISO8859_11');\n    CharacterSetECI.ISO8859_13 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_13, 15, 'ISO-8859-13', 'ISO885913', 'ISO8859_13');\n    CharacterSetECI.ISO8859_14 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_14, 16, 'ISO-8859-14', 'ISO885914', 'ISO8859_14');\n    CharacterSetECI.ISO8859_15 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_15, 17, 'ISO-8859-15', 'ISO885915', 'ISO8859_15');\n    CharacterSetECI.ISO8859_16 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_16, 18, 'ISO-8859-16', 'ISO885916', 'ISO8859_16');\n    CharacterSetECI.SJIS = new CharacterSetECI(CharacterSetValueIdentifiers.SJIS, 20, 'SJIS', 'Shift_JIS');\n    CharacterSetECI.Cp1250 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1250, 21, 'Cp1250', 'windows-1250');\n    CharacterSetECI.Cp1251 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1251, 22, 'Cp1251', 'windows-1251');\n    CharacterSetECI.Cp1252 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1252, 23, 'Cp1252', 'windows-1252');\n    CharacterSetECI.Cp1256 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1256, 24, 'Cp1256', 'windows-1256');\n    CharacterSetECI.UnicodeBigUnmarked = new CharacterSetECI(CharacterSetValueIdentifiers.UnicodeBigUnmarked, 25, 'UnicodeBigUnmarked', 'UTF-16BE', 'UnicodeBig');\n    CharacterSetECI.UTF8 = new CharacterSetECI(CharacterSetValueIdentifiers.UTF8, 26, 'UTF8', 'UTF-8');\n    CharacterSetECI.ASCII = new CharacterSetECI(CharacterSetValueIdentifiers.ASCII, Int32Array.from([27, 170]), 'ASCII', 'US-ASCII');\n    CharacterSetECI.Big5 = new CharacterSetECI(CharacterSetValueIdentifiers.Big5, 28, 'Big5');\n    CharacterSetECI.GB18030 = new CharacterSetECI(CharacterSetValueIdentifiers.GB18030, 29, 'GB18030', 'GB2312', 'EUC_CN', 'GBK');\n    CharacterSetECI.EUC_KR = new CharacterSetECI(CharacterSetValueIdentifiers.EUC_KR, 30, 'EUC_KR', 'EUC-KR');\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class UnsupportedOperationException extends Exception {\n    }\n    UnsupportedOperationException.kind = 'UnsupportedOperationException';\n\n    /**\n     * Responsible for en/decoding strings.\n     */\n    class StringEncoding {\n        /**\n         * Decodes some Uint8Array to a string format.\n         */\n        static decode(bytes, encoding) {\n            const encodingName = this.encodingName(encoding);\n            if (this.customDecoder) {\n                return this.customDecoder(bytes, encodingName);\n            }\n            // Increases browser support.\n            if (typeof TextDecoder === 'undefined' || this.shouldDecodeOnFallback(encodingName)) {\n                return this.decodeFallback(bytes, encodingName);\n            }\n            return new TextDecoder(encodingName).decode(bytes);\n        }\n        /**\n         * Checks if the decoding method should use the fallback for decoding\n         * once Node TextDecoder doesn't support all encoding formats.\n         *\n         * @param encodingName\n         */\n        static shouldDecodeOnFallback(encodingName) {\n            return !StringEncoding.isBrowser() && encodingName === 'ISO-8859-1';\n        }\n        /**\n         * Encodes some string into a Uint8Array.\n         */\n        static encode(s, encoding) {\n            const encodingName = this.encodingName(encoding);\n            if (this.customEncoder) {\n                return this.customEncoder(s, encodingName);\n            }\n            // Increases browser support.\n            if (typeof TextEncoder === 'undefined') {\n                return this.encodeFallback(s);\n            }\n            // TextEncoder only encodes to UTF8 by default as specified by encoding.spec.whatwg.org\n            return new TextEncoder().encode(s);\n        }\n        static isBrowser() {\n            return (typeof window !== 'undefined' && {}.toString.call(window) === '[object Window]');\n        }\n        /**\n         * Returns the string value from some encoding character set.\n         */\n        static encodingName(encoding) {\n            return typeof encoding === 'string'\n                ? encoding\n                : encoding.getName();\n        }\n        /**\n         * Returns character set from some encoding character set.\n         */\n        static encodingCharacterSet(encoding) {\n            if (encoding instanceof CharacterSetECI) {\n                return encoding;\n            }\n            return CharacterSetECI.getCharacterSetECIByName(encoding);\n        }\n        /**\n         * Runs a fallback for the native decoding funcion.\n         */\n        static decodeFallback(bytes, encoding) {\n            const characterSet = this.encodingCharacterSet(encoding);\n            if (StringEncoding.isDecodeFallbackSupported(characterSet)) {\n                let s = '';\n                for (let i = 0, length = bytes.length; i < length; i++) {\n                    let h = bytes[i].toString(16);\n                    if (h.length < 2) {\n                        h = '0' + h;\n                    }\n                    s += '%' + h;\n                }\n                return decodeURIComponent(s);\n            }\n            if (characterSet.equals(CharacterSetECI.UnicodeBigUnmarked)) {\n                return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));\n            }\n            throw new UnsupportedOperationException(`Encoding ${this.encodingName(encoding)} not supported by fallback.`);\n        }\n        static isDecodeFallbackSupported(characterSet) {\n            return characterSet.equals(CharacterSetECI.UTF8) ||\n                characterSet.equals(CharacterSetECI.ISO8859_1) ||\n                characterSet.equals(CharacterSetECI.ASCII);\n        }\n        /**\n         * Runs a fallback for the native encoding funcion.\n         *\n         * @see https://stackoverflow.com/a/17192845/4367683\n         */\n        static encodeFallback(s) {\n            const encodedURIstring = btoa(unescape(encodeURIComponent(s)));\n            const charList = encodedURIstring.split('');\n            const uintArray = [];\n            for (let i = 0; i < charList.length; i++) {\n                uintArray.push(charList[i].charCodeAt(0));\n            }\n            return new Uint8Array(uintArray);\n        }\n    }\n\n    /*\n     * Copyright (C) 2010 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * Common string-related functions.\n     *\n     * @author Sean Owen\n     * @author Alex Dupre\n     */\n    class StringUtils {\n        // SHIFT_JIS.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING) ||\n        // EUC_JP.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING);\n        static castAsNonUtf8Char(code, encoding = null) {\n            // ISO 8859-1 is the Java default as UTF-8 is JavaScripts\n            // you can see this method as a Java version of String.fromCharCode\n            const e = encoding ? encoding.getName() : this.ISO88591;\n            // use passed format (fromCharCode will return UTF8 encoding)\n            return StringEncoding.decode(new Uint8Array([code]), e);\n        }\n        /**\n         * @param bytes bytes encoding a string, whose encoding should be guessed\n         * @param hints decode hints if applicable\n         * @return name of guessed encoding; at the moment will only guess one of:\n         *  {@link #SHIFT_JIS}, {@link #UTF8}, {@link #ISO88591}, or the platform\n         *  default encoding if none of these can possibly be correct\n         */\n        static guessEncoding(bytes, hints) {\n            if (hints !== null && hints !== undefined && undefined !== hints.get(DecodeHintType$1.CHARACTER_SET)) {\n                return hints.get(DecodeHintType$1.CHARACTER_SET).toString();\n            }\n            // For now, merely tries to distinguish ISO-8859-1, UTF-8 and Shift_JIS,\n            // which should be by far the most common encodings.\n            const length = bytes.length;\n            let canBeISO88591 = true;\n            let canBeShiftJIS = true;\n            let canBeUTF8 = true;\n            let utf8BytesLeft = 0;\n            // int utf8LowChars = 0\n            let utf2BytesChars = 0;\n            let utf3BytesChars = 0;\n            let utf4BytesChars = 0;\n            let sjisBytesLeft = 0;\n            // int sjisLowChars = 0\n            let sjisKatakanaChars = 0;\n            // int sjisDoubleBytesChars = 0\n            let sjisCurKatakanaWordLength = 0;\n            let sjisCurDoubleBytesWordLength = 0;\n            let sjisMaxKatakanaWordLength = 0;\n            let sjisMaxDoubleBytesWordLength = 0;\n            // int isoLowChars = 0\n            // int isoHighChars = 0\n            let isoHighOther = 0;\n            const utf8bom = bytes.length > 3 &&\n                bytes[0] === /*(byte) */ 0xEF &&\n                bytes[1] === /*(byte) */ 0xBB &&\n                bytes[2] === /*(byte) */ 0xBF;\n            for (let i = 0; i < length && (canBeISO88591 || canBeShiftJIS || canBeUTF8); i++) {\n                const value = bytes[i] & 0xFF;\n                // UTF-8 stuff\n                if (canBeUTF8) {\n                    if (utf8BytesLeft > 0) {\n                        if ((value & 0x80) === 0) {\n                            canBeUTF8 = false;\n                        }\n                        else {\n                            utf8BytesLeft--;\n                        }\n                    }\n                    else if ((value & 0x80) !== 0) {\n                        if ((value & 0x40) === 0) {\n                            canBeUTF8 = false;\n                        }\n                        else {\n                            utf8BytesLeft++;\n                            if ((value & 0x20) === 0) {\n                                utf2BytesChars++;\n                            }\n                            else {\n                                utf8BytesLeft++;\n                                if ((value & 0x10) === 0) {\n                                    utf3BytesChars++;\n                                }\n                                else {\n                                    utf8BytesLeft++;\n                                    if ((value & 0x08) === 0) {\n                                        utf4BytesChars++;\n                                    }\n                                    else {\n                                        canBeUTF8 = false;\n                                    }\n                                }\n                            }\n                        }\n                    } // else {\n                    // utf8LowChars++\n                    // }\n                }\n                // ISO-8859-1 stuff\n                if (canBeISO88591) {\n                    if (value > 0x7F && value < 0xA0) {\n                        canBeISO88591 = false;\n                    }\n                    else if (value > 0x9F) {\n                        if (value < 0xC0 || value === 0xD7 || value === 0xF7) {\n                            isoHighOther++;\n                        } // else {\n                        // isoHighChars++\n                        // }\n                    } // else {\n                    // isoLowChars++\n                    // }\n                }\n                // Shift_JIS stuff\n                if (canBeShiftJIS) {\n                    if (sjisBytesLeft > 0) {\n                        if (value < 0x40 || value === 0x7F || value > 0xFC) {\n                            canBeShiftJIS = false;\n                        }\n                        else {\n                            sjisBytesLeft--;\n                        }\n                    }\n                    else if (value === 0x80 || value === 0xA0 || value > 0xEF) {\n                        canBeShiftJIS = false;\n                    }\n                    else if (value > 0xA0 && value < 0xE0) {\n                        sjisKatakanaChars++;\n                        sjisCurDoubleBytesWordLength = 0;\n                        sjisCurKatakanaWordLength++;\n                        if (sjisCurKatakanaWordLength > sjisMaxKatakanaWordLength) {\n                            sjisMaxKatakanaWordLength = sjisCurKatakanaWordLength;\n                        }\n                    }\n                    else if (value > 0x7F) {\n                        sjisBytesLeft++;\n                        // sjisDoubleBytesChars++\n                        sjisCurKatakanaWordLength = 0;\n                        sjisCurDoubleBytesWordLength++;\n                        if (sjisCurDoubleBytesWordLength > sjisMaxDoubleBytesWordLength) {\n                            sjisMaxDoubleBytesWordLength = sjisCurDoubleBytesWordLength;\n                        }\n                    }\n                    else {\n                        // sjisLowChars++\n                        sjisCurKatakanaWordLength = 0;\n                        sjisCurDoubleBytesWordLength = 0;\n                    }\n                }\n            }\n            if (canBeUTF8 && utf8BytesLeft > 0) {\n                canBeUTF8 = false;\n            }\n            if (canBeShiftJIS && sjisBytesLeft > 0) {\n                canBeShiftJIS = false;\n            }\n            // Easy -- if there is BOM or at least 1 valid not-single byte character (and no evidence it can't be UTF-8), done\n            if (canBeUTF8 && (utf8bom || utf2BytesChars + utf3BytesChars + utf4BytesChars > 0)) {\n                return StringUtils.UTF8;\n            }\n            // Easy -- if assuming Shift_JIS or at least 3 valid consecutive not-ascii characters (and no evidence it can't be), done\n            if (canBeShiftJIS && (StringUtils.ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || sjisMaxDoubleBytesWordLength >= 3)) {\n                return StringUtils.SHIFT_JIS;\n            }\n            // Distinguishing Shift_JIS and ISO-8859-1 can be a little tough for short words. The crude heuristic is:\n            // - If we saw\n            //   - only two consecutive katakana chars in the whole text, or\n            //   - at least 10% of bytes that could be \"upper\" not-alphanumeric Latin1,\n            // - then we conclude Shift_JIS, else ISO-8859-1\n            if (canBeISO88591 && canBeShiftJIS) {\n                return (sjisMaxKatakanaWordLength === 2 && sjisKatakanaChars === 2) || isoHighOther * 10 >= length\n                    ? StringUtils.SHIFT_JIS : StringUtils.ISO88591;\n            }\n            // Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to default platform encoding\n            if (canBeISO88591) {\n                return StringUtils.ISO88591;\n            }\n            if (canBeShiftJIS) {\n                return StringUtils.SHIFT_JIS;\n            }\n            if (canBeUTF8) {\n                return StringUtils.UTF8;\n            }\n            // Otherwise, we take a wild guess with platform encoding\n            return StringUtils.PLATFORM_DEFAULT_ENCODING;\n        }\n        /**\n         *\n         * @see https://stackoverflow.com/a/13439711/4367683\n         *\n         * @param append The new string to append.\n         * @param args Argumets values to be formated.\n         */\n        static format(append, ...args) {\n            let i = -1;\n            function callback(exp, p0, p1, p2, p3, p4) {\n                if (exp === '%%')\n                    return '%';\n                if (args[++i] === undefined)\n                    return undefined;\n                exp = p2 ? parseInt(p2.substr(1)) : undefined;\n                let base = p3 ? parseInt(p3.substr(1)) : undefined;\n                let val;\n                switch (p4) {\n                    case 's':\n                        val = args[i];\n                        break;\n                    case 'c':\n                        val = args[i][0];\n                        break;\n                    case 'f':\n                        val = parseFloat(args[i]).toFixed(exp);\n                        break;\n                    case 'p':\n                        val = parseFloat(args[i]).toPrecision(exp);\n                        break;\n                    case 'e':\n                        val = parseFloat(args[i]).toExponential(exp);\n                        break;\n                    case 'x':\n                        val = parseInt(args[i]).toString(base ? base : 16);\n                        break;\n                    case 'd':\n                        val = parseFloat(parseInt(args[i], base ? base : 10).toPrecision(exp)).toFixed(0);\n                        break;\n                }\n                val = typeof val === 'object' ? JSON.stringify(val) : (+val).toString(base);\n                let size = parseInt(p1); /* padding size */\n                let ch = p1 && (p1[0] + '') === '0' ? '0' : ' '; /* isnull? */\n                while (val.length < size)\n                    val = p0 !== undefined ? val + ch : ch + val; /* isminus? */\n                return val;\n            }\n            let regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n            return append.replace(regex, callback);\n        }\n        /**\n         *\n         */\n        static getBytes(str, encoding) {\n            return StringEncoding.encode(str, encoding);\n        }\n        /**\n         * Returns the charcode at the specified index or at index zero.\n         */\n        static getCharCode(str, index = 0) {\n            return str.charCodeAt(index);\n        }\n        /**\n         * Returns char for given charcode\n         */\n        static getCharAt(charCode) {\n            return String.fromCharCode(charCode);\n        }\n    }\n    StringUtils.SHIFT_JIS = CharacterSetECI.SJIS.getName(); // \"SJIS\"\n    StringUtils.GB2312 = 'GB2312';\n    StringUtils.ISO88591 = CharacterSetECI.ISO8859_1.getName(); // \"ISO8859_1\"\n    StringUtils.EUC_JP = 'EUC_JP';\n    StringUtils.UTF8 = CharacterSetECI.UTF8.getName(); // \"UTF8\"\n    StringUtils.PLATFORM_DEFAULT_ENCODING = StringUtils.UTF8; // \"UTF8\"//Charset.defaultCharset().name()\n    StringUtils.ASSUME_SHIFT_JIS = false;\n\n    class StringBuilder {\n        constructor(value = '') {\n            this.value = value;\n        }\n        enableDecoding(encoding) {\n            this.encoding = encoding;\n            return this;\n        }\n        append(s) {\n            if (typeof s === 'string') {\n                this.value += s.toString();\n            }\n            else if (this.encoding) {\n                // use passed format (fromCharCode will return UTF8 encoding)\n                this.value += StringUtils.castAsNonUtf8Char(s, this.encoding);\n            }\n            else {\n                // correctly converts from UTF-8, but not other encodings\n                this.value += String.fromCharCode(s);\n            }\n            return this;\n        }\n        appendChars(str, offset, len) {\n            for (let i = offset; offset < offset + len; i++) {\n                this.append(str[i]);\n            }\n            return this;\n        }\n        length() {\n            return this.value.length;\n        }\n        charAt(n) {\n            return this.value.charAt(n);\n        }\n        deleteCharAt(n) {\n            this.value = this.value.substr(0, n) + this.value.substring(n + 1);\n        }\n        setCharAt(n, c) {\n            this.value = this.value.substr(0, n) + c + this.value.substr(n + 1);\n        }\n        substring(start, end) {\n            return this.value.substring(start, end);\n        }\n        /**\n         * @note helper method for RSS Expanded\n         */\n        setLengthToZero() {\n            this.value = '';\n        }\n        toString() {\n            return this.value;\n        }\n        insert(n, c) {\n            this.value = this.value.substr(0, n) + c + this.value.substr(n + c.length);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Represents a 2D matrix of bits. In function arguments below, and throughout the common\n     * module, x is the column position, and y is the row position. The ordering is always x, y.\n     * The origin is at the top-left.</p>\n     *\n     * <p>Internally the bits are represented in a 1-D array of 32-bit ints. However, each row begins\n     * with a new int. This is done intentionally so that we can copy out a row into a BitArray very\n     * efficiently.</p>\n     *\n     * <p>The ordering of bits is row-major. Within each int, the least significant bits are used first,\n     * meaning they represent lower x values. This is compatible with BitArray's implementation.</p>\n     *\n     * @author Sean Owen\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class BitMatrix /*implements Cloneable*/ {\n        /**\n         * Creates an empty square {@link BitMatrix}.\n         *\n         * @param dimension height and width\n         */\n        // public constructor(dimension: number /*int*/) {\n        //   this(dimension, dimension)\n        // }\n        /**\n         * Creates an empty {@link BitMatrix}.\n         *\n         * @param width bit matrix width\n         * @param height bit matrix height\n         */\n        // public constructor(width: number /*int*/, height: number /*int*/) {\n        //   if (width < 1 || height < 1) {\n        //     throw new IllegalArgumentException(\"Both dimensions must be greater than 0\")\n        //   }\n        //   this.width = width\n        //   this.height = height\n        //   this.rowSize = (width + 31) / 32\n        //   bits = new int[rowSize * height];\n        // }\n        constructor(width /*int*/, height /*int*/, rowSize /*int*/, bits) {\n            this.width = width;\n            this.height = height;\n            this.rowSize = rowSize;\n            this.bits = bits;\n            if (undefined === height || null === height) {\n                height = width;\n            }\n            this.height = height;\n            if (width < 1 || height < 1) {\n                throw new IllegalArgumentException('Both dimensions must be greater than 0');\n            }\n            if (undefined === rowSize || null === rowSize) {\n                rowSize = Math.floor((width + 31) / 32);\n            }\n            this.rowSize = rowSize;\n            if (undefined === bits || null === bits) {\n                this.bits = new Int32Array(this.rowSize * this.height);\n            }\n        }\n        /**\n         * Interprets a 2D array of booleans as a {@link BitMatrix}, where \"true\" means an \"on\" bit.\n         *\n         * @function parse\n         * @param image bits of the image, as a row-major 2D array. Elements are arrays representing rows\n         * @return {@link BitMatrix} representation of image\n         */\n        static parseFromBooleanArray(image) {\n            const height = image.length;\n            const width = image[0].length;\n            const bits = new BitMatrix(width, height);\n            for (let i = 0; i < height; i++) {\n                const imageI = image[i];\n                for (let j = 0; j < width; j++) {\n                    if (imageI[j]) {\n                        bits.set(j, i);\n                    }\n                }\n            }\n            return bits;\n        }\n        /**\n         *\n         * @function parse\n         * @param stringRepresentation\n         * @param setString\n         * @param unsetString\n         */\n        static parseFromString(stringRepresentation, setString, unsetString) {\n            if (stringRepresentation === null) {\n                throw new IllegalArgumentException('stringRepresentation cannot be null');\n            }\n            const bits = new Array(stringRepresentation.length);\n            let bitsPos = 0;\n            let rowStartPos = 0;\n            let rowLength = -1;\n            let nRows = 0;\n            let pos = 0;\n            while (pos < stringRepresentation.length) {\n                if (stringRepresentation.charAt(pos) === '\\n' ||\n                    stringRepresentation.charAt(pos) === '\\r') {\n                    if (bitsPos > rowStartPos) {\n                        if (rowLength === -1) {\n                            rowLength = bitsPos - rowStartPos;\n                        }\n                        else if (bitsPos - rowStartPos !== rowLength) {\n                            throw new IllegalArgumentException('row lengths do not match');\n                        }\n                        rowStartPos = bitsPos;\n                        nRows++;\n                    }\n                    pos++;\n                }\n                else if (stringRepresentation.substring(pos, pos + setString.length) === setString) {\n                    pos += setString.length;\n                    bits[bitsPos] = true;\n                    bitsPos++;\n                }\n                else if (stringRepresentation.substring(pos, pos + unsetString.length) === unsetString) {\n                    pos += unsetString.length;\n                    bits[bitsPos] = false;\n                    bitsPos++;\n                }\n                else {\n                    throw new IllegalArgumentException('illegal character encountered: ' + stringRepresentation.substring(pos));\n                }\n            }\n            // no EOL at end?\n            if (bitsPos > rowStartPos) {\n                if (rowLength === -1) {\n                    rowLength = bitsPos - rowStartPos;\n                }\n                else if (bitsPos - rowStartPos !== rowLength) {\n                    throw new IllegalArgumentException('row lengths do not match');\n                }\n                nRows++;\n            }\n            const matrix = new BitMatrix(rowLength, nRows);\n            for (let i = 0; i < bitsPos; i++) {\n                if (bits[i]) {\n                    matrix.set(Math.floor(i % rowLength), Math.floor(i / rowLength));\n                }\n            }\n            return matrix;\n        }\n        /**\n         * <p>Gets the requested bit, where true means black.</p>\n         *\n         * @param x The horizontal component (i.e. which column)\n         * @param y The vertical component (i.e. which row)\n         * @return value of given bit in matrix\n         */\n        get(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            return ((this.bits[offset] >>> (x & 0x1f)) & 1) !== 0;\n        }\n        /**\n         * <p>Sets the given bit to true.</p>\n         *\n         * @param x The horizontal component (i.e. which column)\n         * @param y The vertical component (i.e. which row)\n         */\n        set(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            this.bits[offset] |= (1 << (x & 0x1f)) & 0xFFFFFFFF;\n        }\n        unset(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            this.bits[offset] &= ~((1 << (x & 0x1f)) & 0xFFFFFFFF);\n        }\n        /**\n         * <p>Flips the given bit.</p>\n         *\n         * @param x The horizontal component (i.e. which column)\n         * @param y The vertical component (i.e. which row)\n         */\n        flip(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            this.bits[offset] ^= ((1 << (x & 0x1f)) & 0xFFFFFFFF);\n        }\n        /**\n         * Exclusive-or (XOR): Flip the bit in this {@code BitMatrix} if the corresponding\n         * mask bit is set.\n         *\n         * @param mask XOR mask\n         */\n        xor(mask) {\n            if (this.width !== mask.getWidth() || this.height !== mask.getHeight()\n                || this.rowSize !== mask.getRowSize()) {\n                throw new IllegalArgumentException('input matrix dimensions do not match');\n            }\n            const rowArray = new BitArray(Math.floor(this.width / 32) + 1);\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            for (let y = 0, height = this.height; y < height; y++) {\n                const offset = y * rowSize;\n                const row = mask.getRow(y, rowArray).getBitArray();\n                for (let x = 0; x < rowSize; x++) {\n                    bits[offset + x] ^= row[x];\n                }\n            }\n        }\n        /**\n         * Clears all bits (sets to false).\n         */\n        clear() {\n            const bits = this.bits;\n            const max = bits.length;\n            for (let i = 0; i < max; i++) {\n                bits[i] = 0;\n            }\n        }\n        /**\n         * <p>Sets a square region of the bit matrix to true.</p>\n         *\n         * @param left The horizontal position to begin at (inclusive)\n         * @param top The vertical position to begin at (inclusive)\n         * @param width The width of the region\n         * @param height The height of the region\n         */\n        setRegion(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            if (top < 0 || left < 0) {\n                throw new IllegalArgumentException('Left and top must be nonnegative');\n            }\n            if (height < 1 || width < 1) {\n                throw new IllegalArgumentException('Height and width must be at least 1');\n            }\n            const right = left + width;\n            const bottom = top + height;\n            if (bottom > this.height || right > this.width) {\n                throw new IllegalArgumentException('The region must fit inside the matrix');\n            }\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            for (let y = top; y < bottom; y++) {\n                const offset = y * rowSize;\n                for (let x = left; x < right; x++) {\n                    bits[offset + Math.floor(x / 32)] |= ((1 << (x & 0x1f)) & 0xFFFFFFFF);\n                }\n            }\n        }\n        /**\n         * A fast method to retrieve one row of data from the matrix as a BitArray.\n         *\n         * @param y The row to retrieve\n         * @param row An optional caller-allocated BitArray, will be allocated if null or too small\n         * @return The resulting BitArray - this reference should always be used even when passing\n         *         your own row\n         */\n        getRow(y /*int*/, row) {\n            if (row === null || row === undefined || row.getSize() < this.width) {\n                row = new BitArray(this.width);\n            }\n            else {\n                row.clear();\n            }\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            const offset = y * rowSize;\n            for (let x = 0; x < rowSize; x++) {\n                row.setBulk(x * 32, bits[offset + x]);\n            }\n            return row;\n        }\n        /**\n         * @param y row to set\n         * @param row {@link BitArray} to copy from\n         */\n        setRow(y /*int*/, row) {\n            System.arraycopy(row.getBitArray(), 0, this.bits, y * this.rowSize, this.rowSize);\n        }\n        /**\n         * Modifies this {@code BitMatrix} to represent the same but rotated 180 degrees\n         */\n        rotate180() {\n            const width = this.getWidth();\n            const height = this.getHeight();\n            let topRow = new BitArray(width);\n            let bottomRow = new BitArray(width);\n            for (let i = 0, length = Math.floor((height + 1) / 2); i < length; i++) {\n                topRow = this.getRow(i, topRow);\n                bottomRow = this.getRow(height - 1 - i, bottomRow);\n                topRow.reverse();\n                bottomRow.reverse();\n                this.setRow(i, bottomRow);\n                this.setRow(height - 1 - i, topRow);\n            }\n        }\n        /**\n         * This is useful in detecting the enclosing rectangle of a 'pure' barcode.\n         *\n         * @return {@code left,top,width,height} enclosing rectangle of all 1 bits, or null if it is all white\n         */\n        getEnclosingRectangle() {\n            const width = this.width;\n            const height = this.height;\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            let left = width;\n            let top = height;\n            let right = -1;\n            let bottom = -1;\n            for (let y = 0; y < height; y++) {\n                for (let x32 = 0; x32 < rowSize; x32++) {\n                    const theBits = bits[y * rowSize + x32];\n                    if (theBits !== 0) {\n                        if (y < top) {\n                            top = y;\n                        }\n                        if (y > bottom) {\n                            bottom = y;\n                        }\n                        if (x32 * 32 < left) {\n                            let bit = 0;\n                            while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n                                bit++;\n                            }\n                            if ((x32 * 32 + bit) < left) {\n                                left = x32 * 32 + bit;\n                            }\n                        }\n                        if (x32 * 32 + 31 > right) {\n                            let bit = 31;\n                            while ((theBits >>> bit) === 0) {\n                                bit--;\n                            }\n                            if ((x32 * 32 + bit) > right) {\n                                right = x32 * 32 + bit;\n                            }\n                        }\n                    }\n                }\n            }\n            if (right < left || bottom < top) {\n                return null;\n            }\n            return Int32Array.from([left, top, right - left + 1, bottom - top + 1]);\n        }\n        /**\n         * This is useful in detecting a corner of a 'pure' barcode.\n         *\n         * @return {@code x,y} coordinate of top-left-most 1 bit, or null if it is all white\n         */\n        getTopLeftOnBit() {\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            let bitsOffset = 0;\n            while (bitsOffset < bits.length && bits[bitsOffset] === 0) {\n                bitsOffset++;\n            }\n            if (bitsOffset === bits.length) {\n                return null;\n            }\n            const y = bitsOffset / rowSize;\n            let x = (bitsOffset % rowSize) * 32;\n            const theBits = bits[bitsOffset];\n            let bit = 0;\n            while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n                bit++;\n            }\n            x += bit;\n            return Int32Array.from([x, y]);\n        }\n        getBottomRightOnBit() {\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            let bitsOffset = bits.length - 1;\n            while (bitsOffset >= 0 && bits[bitsOffset] === 0) {\n                bitsOffset--;\n            }\n            if (bitsOffset < 0) {\n                return null;\n            }\n            const y = Math.floor(bitsOffset / rowSize);\n            let x = Math.floor(bitsOffset % rowSize) * 32;\n            const theBits = bits[bitsOffset];\n            let bit = 31;\n            while ((theBits >>> bit) === 0) {\n                bit--;\n            }\n            x += bit;\n            return Int32Array.from([x, y]);\n        }\n        /**\n         * @return The width of the matrix\n         */\n        getWidth() {\n            return this.width;\n        }\n        /**\n         * @return The height of the matrix\n         */\n        getHeight() {\n            return this.height;\n        }\n        /**\n         * @return The row size of the matrix\n         */\n        getRowSize() {\n            return this.rowSize;\n        }\n        /*@Override*/\n        equals(o) {\n            if (!(o instanceof BitMatrix)) {\n                return false;\n            }\n            const other = o;\n            return this.width === other.width && this.height === other.height && this.rowSize === other.rowSize &&\n                Arrays.equals(this.bits, other.bits);\n        }\n        /*@Override*/\n        hashCode() {\n            let hash = this.width;\n            hash = 31 * hash + this.width;\n            hash = 31 * hash + this.height;\n            hash = 31 * hash + this.rowSize;\n            hash = 31 * hash + Arrays.hashCode(this.bits);\n            return hash;\n        }\n        /**\n         * @return string representation using \"X\" for set and \" \" for unset bits\n         */\n        /*@Override*/\n        // public toString(): string {\n        //   return toString(\": \"X, \"  \")\n        // }\n        /**\n         * @param setString representation of a set bit\n         * @param unsetString representation of an unset bit\n         * @return string representation of entire matrix utilizing given strings\n         */\n        // public toString(setString: string = \"X \", unsetString: string = \"  \"): string {\n        //   return this.buildToString(setString, unsetString, \"\\n\")\n        // }\n        /**\n         * @param setString representation of a set bit\n         * @param unsetString representation of an unset bit\n         * @param lineSeparator newline character in string representation\n         * @return string representation of entire matrix utilizing given strings and line separator\n         * @deprecated call {@link #toString(String,String)} only, which uses \\n line separator always\n         */\n        // @Deprecated\n        toString(setString = 'X ', unsetString = '  ', lineSeparator = '\\n') {\n            return this.buildToString(setString, unsetString, lineSeparator);\n        }\n        buildToString(setString, unsetString, lineSeparator) {\n            let result = new StringBuilder();\n            // result.append(lineSeparator);\n            for (let y = 0, height = this.height; y < height; y++) {\n                for (let x = 0, width = this.width; x < width; x++) {\n                    result.append(this.get(x, y) ? setString : unsetString);\n                }\n                result.append(lineSeparator);\n            }\n            return result.toString();\n        }\n        /*@Override*/\n        clone() {\n            return new BitMatrix(this.width, this.height, this.rowSize, this.bits.slice());\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class NotFoundException extends Exception {\n        static getNotFoundInstance() {\n            return new NotFoundException();\n        }\n    }\n    NotFoundException.kind = 'NotFoundException';\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This Binarizer implementation uses the old ZXing global histogram approach. It is suitable\n     * for low-end mobile devices which don't have enough CPU or memory to use a local thresholding\n     * algorithm. However, because it picks a global black point, it cannot handle difficult shadows\n     * and gradients.\n     *\n     * Faster mobile devices and all desktop applications should probably use HybridBinarizer instead.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     */\n    class GlobalHistogramBinarizer extends Binarizer {\n        constructor(source) {\n            super(source);\n            this.luminances = GlobalHistogramBinarizer.EMPTY;\n            this.buckets = new Int32Array(GlobalHistogramBinarizer.LUMINANCE_BUCKETS);\n        }\n        // Applies simple sharpening to the row data to improve performance of the 1D Readers.\n        /*@Override*/\n        getBlackRow(y /*int*/, row) {\n            const source = this.getLuminanceSource();\n            const width = source.getWidth();\n            if (row === undefined || row === null || row.getSize() < width) {\n                row = new BitArray(width);\n            }\n            else {\n                row.clear();\n            }\n            this.initArrays(width);\n            const localLuminances = source.getRow(y, this.luminances);\n            const localBuckets = this.buckets;\n            for (let x = 0; x < width; x++) {\n                localBuckets[(localLuminances[x] & 0xff) >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n            }\n            const blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n            if (width < 3) {\n                // Special case for very small images\n                for (let x = 0; x < width; x++) {\n                    if ((localLuminances[x] & 0xff) < blackPoint) {\n                        row.set(x);\n                    }\n                }\n            }\n            else {\n                let left = localLuminances[0] & 0xff;\n                let center = localLuminances[1] & 0xff;\n                for (let x = 1; x < width - 1; x++) {\n                    const right = localLuminances[x + 1] & 0xff;\n                    // A simple -1 4 -1 box filter with a weight of 2.\n                    if (((center * 4) - left - right) / 2 < blackPoint) {\n                        row.set(x);\n                    }\n                    left = center;\n                    center = right;\n                }\n            }\n            return row;\n        }\n        // Does not sharpen the data, as this call is intended to only be used by 2D Readers.\n        /*@Override*/\n        getBlackMatrix() {\n            const source = this.getLuminanceSource();\n            const width = source.getWidth();\n            const height = source.getHeight();\n            const matrix = new BitMatrix(width, height);\n            // Quickly calculates the histogram by sampling four rows from the image. This proved to be\n            // more robust on the blackbox tests than sampling a diagonal as we used to do.\n            this.initArrays(width);\n            const localBuckets = this.buckets;\n            for (let y = 1; y < 5; y++) {\n                const row = Math.floor((height * y) / 5);\n                const localLuminances = source.getRow(row, this.luminances);\n                const right = Math.floor((width * 4) / 5);\n                for (let x = Math.floor(width / 5); x < right; x++) {\n                    const pixel = localLuminances[x] & 0xff;\n                    localBuckets[pixel >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n                }\n            }\n            const blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n            // We delay reading the entire image luminance until the black point estimation succeeds.\n            // Although we end up reading four rows twice, it is consistent with our motto of\n            // \"fail quickly\" which is necessary for continuous scanning.\n            const localLuminances = source.getMatrix();\n            for (let y = 0; y < height; y++) {\n                const offset = y * width;\n                for (let x = 0; x < width; x++) {\n                    const pixel = localLuminances[offset + x] & 0xff;\n                    if (pixel < blackPoint) {\n                        matrix.set(x, y);\n                    }\n                }\n            }\n            return matrix;\n        }\n        /*@Override*/\n        createBinarizer(source) {\n            return new GlobalHistogramBinarizer(source);\n        }\n        initArrays(luminanceSize /*int*/) {\n            if (this.luminances.length < luminanceSize) {\n                this.luminances = new Uint8ClampedArray(luminanceSize);\n            }\n            const buckets = this.buckets;\n            for (let x = 0; x < GlobalHistogramBinarizer.LUMINANCE_BUCKETS; x++) {\n                buckets[x] = 0;\n            }\n        }\n        static estimateBlackPoint(buckets) {\n            // Find the tallest peak in the histogram.\n            const numBuckets = buckets.length;\n            let maxBucketCount = 0;\n            let firstPeak = 0;\n            let firstPeakSize = 0;\n            for (let x = 0; x < numBuckets; x++) {\n                if (buckets[x] > firstPeakSize) {\n                    firstPeak = x;\n                    firstPeakSize = buckets[x];\n                }\n                if (buckets[x] > maxBucketCount) {\n                    maxBucketCount = buckets[x];\n                }\n            }\n            // Find the second-tallest peak which is somewhat far from the tallest peak.\n            let secondPeak = 0;\n            let secondPeakScore = 0;\n            for (let x = 0; x < numBuckets; x++) {\n                const distanceToBiggest = x - firstPeak;\n                // Encourage more distant second peaks by multiplying by square of distance.\n                const score = buckets[x] * distanceToBiggest * distanceToBiggest;\n                if (score > secondPeakScore) {\n                    secondPeak = x;\n                    secondPeakScore = score;\n                }\n            }\n            // Make sure firstPeak corresponds to the black peak.\n            if (firstPeak > secondPeak) {\n                const temp = firstPeak;\n                firstPeak = secondPeak;\n                secondPeak = temp;\n            }\n            // If there is too little contrast in the image to pick a meaningful black point, throw rather\n            // than waste time trying to decode the image, and risk false positives.\n            if (secondPeak - firstPeak <= numBuckets / 16) {\n                throw new NotFoundException();\n            }\n            // Find a valley between them that is low and closer to the white peak.\n            let bestValley = secondPeak - 1;\n            let bestValleyScore = -1;\n            for (let x = secondPeak - 1; x > firstPeak; x--) {\n                const fromFirst = x - firstPeak;\n                const score = fromFirst * fromFirst * (secondPeak - x) * (maxBucketCount - buckets[x]);\n                if (score > bestValleyScore) {\n                    bestValley = x;\n                    bestValleyScore = score;\n                }\n            }\n            return bestValley << GlobalHistogramBinarizer.LUMINANCE_SHIFT;\n        }\n    }\n    GlobalHistogramBinarizer.LUMINANCE_BITS = 5;\n    GlobalHistogramBinarizer.LUMINANCE_SHIFT = 8 - GlobalHistogramBinarizer.LUMINANCE_BITS;\n    GlobalHistogramBinarizer.LUMINANCE_BUCKETS = 1 << GlobalHistogramBinarizer.LUMINANCE_BITS;\n    GlobalHistogramBinarizer.EMPTY = Uint8ClampedArray.from([0]);\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This class implements a local thresholding algorithm, which while slower than the\n     * GlobalHistogramBinarizer, is fairly efficient for what it does. It is designed for\n     * high frequency images of barcodes with black data on white backgrounds. For this application,\n     * it does a much better job than a global blackpoint with severe shadows and gradients.\n     * However it tends to produce artifacts on lower frequency images and is therefore not\n     * a good general purpose binarizer for uses outside ZXing.\n     *\n     * This class extends GlobalHistogramBinarizer, using the older histogram approach for 1D readers,\n     * and the newer local approach for 2D readers. 1D decoding using a per-row histogram is already\n     * inherently local, and only fails for horizontal gradients. We can revisit that problem later,\n     * but for now it was not a win to use local blocks for 1D.\n     *\n     * This Binarizer is the default for the unit tests and the recommended class for library users.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class HybridBinarizer extends GlobalHistogramBinarizer {\n        constructor(source) {\n            super(source);\n            this.matrix = null;\n        }\n        /**\n         * Calculates the final BitMatrix once for all requests. This could be called once from the\n         * constructor instead, but there are some advantages to doing it lazily, such as making\n         * profiling easier, and not doing heavy lifting when callers don't expect it.\n         */\n        /*@Override*/\n        getBlackMatrix() {\n            if (this.matrix !== null) {\n                return this.matrix;\n            }\n            const source = this.getLuminanceSource();\n            const width = source.getWidth();\n            const height = source.getHeight();\n            if (width >= HybridBinarizer.MINIMUM_DIMENSION && height >= HybridBinarizer.MINIMUM_DIMENSION) {\n                const luminances = source.getMatrix();\n                let subWidth = width >> HybridBinarizer.BLOCK_SIZE_POWER;\n                if ((width & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n                    subWidth++;\n                }\n                let subHeight = height >> HybridBinarizer.BLOCK_SIZE_POWER;\n                if ((height & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n                    subHeight++;\n                }\n                const blackPoints = HybridBinarizer.calculateBlackPoints(luminances, subWidth, subHeight, width, height);\n                const newMatrix = new BitMatrix(width, height);\n                HybridBinarizer.calculateThresholdForBlock(luminances, subWidth, subHeight, width, height, blackPoints, newMatrix);\n                this.matrix = newMatrix;\n            }\n            else {\n                // If the image is too small, fall back to the global histogram approach.\n                this.matrix = super.getBlackMatrix();\n            }\n            return this.matrix;\n        }\n        /*@Override*/\n        createBinarizer(source) {\n            return new HybridBinarizer(source);\n        }\n        /**\n         * For each block in the image, calculate the average black point using a 5x5 grid\n         * of the blocks around it. Also handles the corner cases (fractional blocks are computed based\n         * on the last pixels in the row/column which are also used in the previous block).\n         */\n        static calculateThresholdForBlock(luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/, blackPoints, matrix) {\n            const maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n            const maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n            for (let y = 0; y < subHeight; y++) {\n                let yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n                if (yoffset > maxYOffset) {\n                    yoffset = maxYOffset;\n                }\n                const top = HybridBinarizer.cap(y, 2, subHeight - 3);\n                for (let x = 0; x < subWidth; x++) {\n                    let xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n                    if (xoffset > maxXOffset) {\n                        xoffset = maxXOffset;\n                    }\n                    const left = HybridBinarizer.cap(x, 2, subWidth - 3);\n                    let sum = 0;\n                    for (let z = -2; z <= 2; z++) {\n                        const blackRow = blackPoints[top + z];\n                        sum += blackRow[left - 2] + blackRow[left - 1] + blackRow[left] + blackRow[left + 1] + blackRow[left + 2];\n                    }\n                    const average = sum / 25;\n                    HybridBinarizer.thresholdBlock(luminances, xoffset, yoffset, average, width, matrix);\n                }\n            }\n        }\n        static cap(value /*int*/, min /*int*/, max /*int*/) {\n            return value < min ? min : value > max ? max : value;\n        }\n        /**\n         * Applies a single threshold to a block of pixels.\n         */\n        static thresholdBlock(luminances, xoffset /*int*/, yoffset /*int*/, threshold /*int*/, stride /*int*/, matrix) {\n            for (let y = 0, offset = yoffset * stride + xoffset; y < HybridBinarizer.BLOCK_SIZE; y++, offset += stride) {\n                for (let x = 0; x < HybridBinarizer.BLOCK_SIZE; x++) {\n                    // Comparison needs to be <= so that black == 0 pixels are black even if the threshold is 0.\n                    if ((luminances[offset + x] & 0xFF) <= threshold) {\n                        matrix.set(xoffset + x, yoffset + y);\n                    }\n                }\n            }\n        }\n        /**\n         * Calculates a single black point for each block of pixels and saves it away.\n         * See the following thread for a discussion of this algorithm:\n         *  http://groups.google.com/group/zxing/browse_thread/thread/d06efa2c35a7ddc0\n         */\n        static calculateBlackPoints(luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/) {\n            const maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n            const maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n            // tslint:disable-next-line:whitespace\n            const blackPoints = new Array(subHeight); // subWidth\n            for (let y = 0; y < subHeight; y++) {\n                blackPoints[y] = new Int32Array(subWidth);\n                let yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n                if (yoffset > maxYOffset) {\n                    yoffset = maxYOffset;\n                }\n                for (let x = 0; x < subWidth; x++) {\n                    let xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n                    if (xoffset > maxXOffset) {\n                        xoffset = maxXOffset;\n                    }\n                    let sum = 0;\n                    let min = 0xFF;\n                    let max = 0;\n                    for (let yy = 0, offset = yoffset * width + xoffset; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n                        for (let xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n                            const pixel = luminances[offset + xx] & 0xFF;\n                            sum += pixel;\n                            // still looking for good contrast\n                            if (pixel < min) {\n                                min = pixel;\n                            }\n                            if (pixel > max) {\n                                max = pixel;\n                            }\n                        }\n                        // short-circuit min/max tests once dynamic range is met\n                        if (max - min > HybridBinarizer.MIN_DYNAMIC_RANGE) {\n                            // finish the rest of the rows quickly\n                            for (yy++, offset += width; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n                                for (let xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n                                    sum += luminances[offset + xx] & 0xFF;\n                                }\n                            }\n                        }\n                    }\n                    // The default estimate is the average of the values in the block.\n                    let average = sum >> (HybridBinarizer.BLOCK_SIZE_POWER * 2);\n                    if (max - min <= HybridBinarizer.MIN_DYNAMIC_RANGE) {\n                        // If variation within the block is low, assume this is a block with only light or only\n                        // dark pixels. In that case we do not want to use the average, as it would divide this\n                        // low contrast area into black and white pixels, essentially creating data out of noise.\n                        //\n                        // The default assumption is that the block is light/background. Since no estimate for\n                        // the level of dark pixels exists locally, use half the min for the block.\n                        average = min / 2;\n                        if (y > 0 && x > 0) {\n                            // Correct the \"white background\" assumption for blocks that have neighbors by comparing\n                            // the pixels in this block to the previously calculated black points. This is based on\n                            // the fact that dark barcode symbology is always surrounded by some amount of light\n                            // background for which reasonable black point estimates were made. The bp estimated at\n                            // the boundaries is used for the interior.\n                            // The (min < bp) is arbitrary but works better than other heuristics that were tried.\n                            const averageNeighborBlackPoint = (blackPoints[y - 1][x] + (2 * blackPoints[y][x - 1]) + blackPoints[y - 1][x - 1]) / 4;\n                            if (min < averageNeighborBlackPoint) {\n                                average = averageNeighborBlackPoint;\n                            }\n                        }\n                    }\n                    blackPoints[y][x] = average;\n                }\n            }\n            return blackPoints;\n        }\n    }\n    // This class uses 5x5 blocks to compute local luminance, where each block is 8x8 pixels.\n    // So this is the smallest dimension in each axis we can accept.\n    HybridBinarizer.BLOCK_SIZE_POWER = 3;\n    HybridBinarizer.BLOCK_SIZE = 1 << HybridBinarizer.BLOCK_SIZE_POWER; // ...0100...00\n    HybridBinarizer.BLOCK_SIZE_MASK = HybridBinarizer.BLOCK_SIZE - 1; // ...0011...11\n    HybridBinarizer.MINIMUM_DIMENSION = HybridBinarizer.BLOCK_SIZE * 5;\n    HybridBinarizer.MIN_DYNAMIC_RANGE = 24;\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * The purpose of this class hierarchy is to abstract different bitmap implementations across\n     * platforms into a standard interface for requesting greyscale luminance values. The interface\n     * only provides immutable methods; therefore crop and rotation create copies. This is to ensure\n     * that one Reader does not modify the original luminance source and leave it in an unknown state\n     * for other Readers in the chain.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class LuminanceSource {\n        constructor(width /*int*/, height /*int*/) {\n            this.width = width;\n            this.height = height;\n        }\n        /**\n         * @return The width of the bitmap.\n         */\n        getWidth() {\n            return this.width;\n        }\n        /**\n         * @return The height of the bitmap.\n         */\n        getHeight() {\n            return this.height;\n        }\n        /**\n         * @return Whether this subclass supports cropping.\n         */\n        isCropSupported() {\n            return false;\n        }\n        /**\n         * Returns a new object with cropped image data. Implementations may keep a reference to the\n         * original data rather than a copy. Only callable if isCropSupported() is true.\n         *\n         * @param left The left coordinate, which must be in [0,getWidth())\n         * @param top The top coordinate, which must be in [0,getHeight())\n         * @param width The width of the rectangle to crop.\n         * @param height The height of the rectangle to crop.\n         * @return A cropped version of this object.\n         */\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            throw new UnsupportedOperationException('This luminance source does not support cropping.');\n        }\n        /**\n         * @return Whether this subclass supports counter-clockwise rotation.\n         */\n        isRotateSupported() {\n            return false;\n        }\n        /**\n         * Returns a new object with rotated image data by 90 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise() {\n            throw new UnsupportedOperationException('This luminance source does not support rotation by 90 degrees.');\n        }\n        /**\n         * Returns a new object with rotated image data by 45 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise45() {\n            throw new UnsupportedOperationException('This luminance source does not support rotation by 45 degrees.');\n        }\n        /*@Override*/\n        toString() {\n            const row = new Uint8ClampedArray(this.width);\n            let result = new StringBuilder();\n            for (let y = 0; y < this.height; y++) {\n                const sourceRow = this.getRow(y, row);\n                for (let x = 0; x < this.width; x++) {\n                    const luminance = sourceRow[x] & 0xFF;\n                    let c;\n                    if (luminance < 0x40) {\n                        c = '#';\n                    }\n                    else if (luminance < 0x80) {\n                        c = '+';\n                    }\n                    else if (luminance < 0xC0) {\n                        c = '.';\n                    }\n                    else {\n                        c = ' ';\n                    }\n                    result.append(c);\n                }\n                result.append('\\n');\n            }\n            return result.toString();\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * A wrapper implementation of {@link LuminanceSource} which inverts the luminances it returns -- black becomes\n     * white and vice versa, and each value becomes (255-value).\n     *\n     * @author Sean Owen\n     */\n    class InvertedLuminanceSource extends LuminanceSource {\n        constructor(delegate) {\n            super(delegate.getWidth(), delegate.getHeight());\n            this.delegate = delegate;\n        }\n        /*@Override*/\n        getRow(y /*int*/, row) {\n            const sourceRow = this.delegate.getRow(y, row);\n            const width = this.getWidth();\n            for (let i = 0; i < width; i++) {\n                sourceRow[i] = /*(byte)*/ (255 - (sourceRow[i] & 0xFF));\n            }\n            return sourceRow;\n        }\n        /*@Override*/\n        getMatrix() {\n            const matrix = this.delegate.getMatrix();\n            const length = this.getWidth() * this.getHeight();\n            const invertedMatrix = new Uint8ClampedArray(length);\n            for (let i = 0; i < length; i++) {\n                invertedMatrix[i] = /*(byte)*/ (255 - (matrix[i] & 0xFF));\n            }\n            return invertedMatrix;\n        }\n        /*@Override*/\n        isCropSupported() {\n            return this.delegate.isCropSupported();\n        }\n        /*@Override*/\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            return new InvertedLuminanceSource(this.delegate.crop(left, top, width, height));\n        }\n        /*@Override*/\n        isRotateSupported() {\n            return this.delegate.isRotateSupported();\n        }\n        /**\n         * @return original delegate {@link LuminanceSource} since invert undoes itself\n         */\n        /*@Override*/\n        invert() {\n            return this.delegate;\n        }\n        /*@Override*/\n        rotateCounterClockwise() {\n            return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise());\n        }\n        /*@Override*/\n        rotateCounterClockwise45() {\n            return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise45());\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     */\n    class HTMLCanvasElementLuminanceSource extends LuminanceSource {\n        constructor(canvas) {\n            super(canvas.width, canvas.height);\n            this.canvas = canvas;\n            this.tempCanvasElement = null;\n            this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(canvas);\n        }\n        static makeBufferFromCanvasImageData(canvas) {\n            const imageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);\n            return HTMLCanvasElementLuminanceSource.toGrayscaleBuffer(imageData.data, canvas.width, canvas.height);\n        }\n        static toGrayscaleBuffer(imageBuffer, width, height) {\n            const grayscaleBuffer = new Uint8ClampedArray(width * height);\n            for (let i = 0, j = 0, length = imageBuffer.length; i < length; i += 4, j++) {\n                let gray;\n                const alpha = imageBuffer[i + 3];\n                // The color of fully-transparent pixels is irrelevant. They are often, technically, fully-transparent\n                // black (0 alpha, and then 0 RGB). They are often used, of course as the \"white\" area in a\n                // barcode image. Force any such pixel to be white:\n                if (alpha === 0) {\n                    gray = 0xFF;\n                }\n                else {\n                    const pixelR = imageBuffer[i];\n                    const pixelG = imageBuffer[i + 1];\n                    const pixelB = imageBuffer[i + 2];\n                    // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),\n                    // (306*R) >> 10 is approximately equal to R*0.299, and so on.\n                    // 0x200 >> 10 is 0.5, it implements rounding.\n                    gray = (306 * pixelR +\n                        601 * pixelG +\n                        117 * pixelB +\n                        0x200) >> 10;\n                }\n                grayscaleBuffer[j] = gray;\n            }\n            return grayscaleBuffer;\n        }\n        getRow(y /*int*/, row) {\n            if (y < 0 || y >= this.getHeight()) {\n                throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n            }\n            const width = this.getWidth();\n            const start = y * width;\n            if (row === null) {\n                row = this.buffer.slice(start, start + width);\n            }\n            else {\n                if (row.length < width) {\n                    row = new Uint8ClampedArray(width);\n                }\n                // The underlying raster of image consists of bytes with the luminance values\n                // TODO: can avoid set/slice?\n                row.set(this.buffer.slice(start, start + width));\n            }\n            return row;\n        }\n        getMatrix() {\n            return this.buffer;\n        }\n        isCropSupported() {\n            return true;\n        }\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            super.crop(left, top, width, height);\n            return this;\n        }\n        /**\n         * This is always true, since the image is a gray-scale image.\n         *\n         * @return true\n         */\n        isRotateSupported() {\n            return true;\n        }\n        rotateCounterClockwise() {\n            this.rotate(-90);\n            return this;\n        }\n        rotateCounterClockwise45() {\n            this.rotate(-45);\n            return this;\n        }\n        getTempCanvasElement() {\n            if (null === this.tempCanvasElement) {\n                const tempCanvasElement = this.canvas.ownerDocument.createElement('canvas');\n                tempCanvasElement.width = this.canvas.width;\n                tempCanvasElement.height = this.canvas.height;\n                this.tempCanvasElement = tempCanvasElement;\n            }\n            return this.tempCanvasElement;\n        }\n        rotate(angle) {\n            const tempCanvasElement = this.getTempCanvasElement();\n            const tempContext = tempCanvasElement.getContext('2d');\n            const angleRadians = angle * HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS;\n            // Calculate and set new dimensions for temp canvas\n            const width = this.canvas.width;\n            const height = this.canvas.height;\n            const newWidth = Math.ceil(Math.abs(Math.cos(angleRadians)) * width + Math.abs(Math.sin(angleRadians)) * height);\n            const newHeight = Math.ceil(Math.abs(Math.sin(angleRadians)) * width + Math.abs(Math.cos(angleRadians)) * height);\n            tempCanvasElement.width = newWidth;\n            tempCanvasElement.height = newHeight;\n            // Draw at center of temp canvas to prevent clipping of image data\n            tempContext.translate(newWidth / 2, newHeight / 2);\n            tempContext.rotate(angleRadians);\n            tempContext.drawImage(this.canvas, width / -2, height / -2);\n            this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(tempCanvasElement);\n            return this;\n        }\n        invert() {\n            return new InvertedLuminanceSource(this);\n        }\n    }\n    HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS = Math.PI / 180;\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * Video input device metadata containing the id and label of the device if available.\n     */\n    class VideoInputDevice {\n        /**\n         * Creates an instance of VideoInputDevice.\n         *\n         * @param {string} deviceId the video input device id\n         * @param {string} label the label of the device if available\n         */\n        constructor(deviceId, label, groupId) {\n            this.deviceId = deviceId;\n            this.label = label;\n            /** @inheritdoc */\n            this.kind = 'videoinput';\n            this.groupId = groupId || undefined;\n        }\n        /** @inheritdoc */\n        toJSON() {\n            return {\n                kind: this.kind,\n                groupId: this.groupId,\n                deviceId: this.deviceId,\n                label: this.label,\n            };\n        }\n    }\n\n    var __awaiter = ((globalThis || global || self || window || undefined) && (globalThis || global || self || window || undefined).__awaiter) || function (thisArg, _arguments, P, generator) {\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n        return new (P || (P = Promise))(function (resolve, reject) {\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\n        });\n    };\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * Base class for browser code reader.\n     */\n    class BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserCodeReader.\n         * @param {Reader} reader The reader instance to decode the barcode\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent successful decode tries\n         *\n         * @memberOf BrowserCodeReader\n         */\n        constructor(reader, timeBetweenScansMillis = 500, _hints) {\n            this.reader = reader;\n            this.timeBetweenScansMillis = timeBetweenScansMillis;\n            this._hints = _hints;\n            /**\n             * This will break the loop.\n             */\n            this._stopContinuousDecode = false;\n            /**\n             * This will break the loop.\n             */\n            this._stopAsyncDecode = false;\n            /**\n             * Delay time between decode attempts made by the scanner.\n             */\n            this._timeBetweenDecodingAttempts = 0;\n        }\n        /**\n         * If navigator is present.\n         */\n        get hasNavigator() {\n            return typeof navigator !== 'undefined';\n        }\n        /**\n         * If mediaDevices under navigator is supported.\n         */\n        get isMediaDevicesSuported() {\n            return this.hasNavigator && !!navigator.mediaDevices;\n        }\n        /**\n         * If enumerateDevices under navigator is supported.\n         */\n        get canEnumerateDevices() {\n            return !!(this.isMediaDevicesSuported && navigator.mediaDevices.enumerateDevices);\n        }\n        /** Time between two decoding tries in milli seconds. */\n        get timeBetweenDecodingAttempts() {\n            return this._timeBetweenDecodingAttempts;\n        }\n        /**\n         * Change the time span the decoder waits between two decoding tries.\n         *\n         * @param {number} millis Time between two decoding tries in milli seconds.\n         */\n        set timeBetweenDecodingAttempts(millis) {\n            this._timeBetweenDecodingAttempts = millis < 0 ? 0 : millis;\n        }\n        /**\n         * Sets the hints.\n         */\n        set hints(hints) {\n            this._hints = hints || null;\n        }\n        /**\n         * Sets the hints.\n         */\n        get hints() {\n            return this._hints;\n        }\n        /**\n         * Lists all the available video input devices.\n         */\n        listVideoInputDevices() {\n            return __awaiter(this, void 0, void 0, function* () {\n                if (!this.hasNavigator) {\n                    throw new Error('Can\\'t enumerate devices, navigator is not present.');\n                }\n                if (!this.canEnumerateDevices) {\n                    throw new Error('Can\\'t enumerate devices, method not supported.');\n                }\n                const devices = yield navigator.mediaDevices.enumerateDevices();\n                const videoDevices = [];\n                for (const device of devices) {\n                    const kind = device.kind === 'video' ? 'videoinput' : device.kind;\n                    if (kind !== 'videoinput') {\n                        continue;\n                    }\n                    const deviceId = device.deviceId || device.id;\n                    const label = device.label || `Video device ${videoDevices.length + 1}`;\n                    const groupId = device.groupId;\n                    const videoDevice = { deviceId, label, kind, groupId };\n                    videoDevices.push(videoDevice);\n                }\n                return videoDevices;\n            });\n        }\n        /**\n         * Obtain the list of available devices with type 'videoinput'.\n         *\n         * @returns {Promise<VideoInputDevice[]>} an array of available video input devices\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @deprecated Use `listVideoInputDevices` instead.\n         */\n        getVideoInputDevices() {\n            return __awaiter(this, void 0, void 0, function* () {\n                const devices = yield this.listVideoInputDevices();\n                return devices.map(d => new VideoInputDevice(d.deviceId, d.label));\n            });\n        }\n        /**\n         * Let's you find a device using it's Id.\n         */\n        findDeviceById(deviceId) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const devices = yield this.listVideoInputDevices();\n                if (!devices) {\n                    return null;\n                }\n                return devices.find(x => x.deviceId === deviceId);\n            });\n        }\n        /**\n         * Decodes the barcode from the device specified by deviceId while showing the video in the specified video element.\n         *\n         * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @deprecated Use `decodeOnceFromVideoDevice` instead.\n         */\n        decodeFromInputVideoDevice(deviceId, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                return yield this.decodeOnceFromVideoDevice(deviceId, videoSource);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from the device specified by deviceId while showing the video in the specified video element.\n         *\n         * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeOnceFromVideoDevice(deviceId, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                this.reset();\n                let videoConstraints;\n                if (!deviceId) {\n                    videoConstraints = { facingMode: 'environment' };\n                }\n                else {\n                    videoConstraints = { deviceId: { exact: deviceId } };\n                }\n                const constraints = { video: videoConstraints };\n                return yield this.decodeOnceFromConstraints(constraints, videoSource);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param constraints the media stream constraints to get s valid media stream to decode from\n         * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeOnceFromConstraints(constraints, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const stream = yield navigator.mediaDevices.getUserMedia(constraints);\n                return yield this.decodeOnceFromStream(stream, videoSource);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n         * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeOnceFromStream(stream, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                this.reset();\n                const video = yield this.attachStreamToVideo(stream, videoSource);\n                const result = yield this.decodeOnce(video);\n                return result;\n            });\n        }\n        /**\n         * Continuously decodes the barcode from the device specified by device while showing the video in the specified video element.\n         *\n         * @param {string|null} [deviceId] the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<void>}\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @deprecated Use `decodeFromVideoDevice` instead.\n         */\n        decodeFromInputVideoDeviceContinuously(deviceId, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                return yield this.decodeFromVideoDevice(deviceId, videoSource, callbackFn);\n            });\n        }\n        /**\n         * Continuously tries to decode the barcode from the device specified by device while showing the video in the specified video element.\n         *\n         * @param {string|null} [deviceId] the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<void>}\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromVideoDevice(deviceId, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                let videoConstraints;\n                if (!deviceId) {\n                    videoConstraints = { facingMode: 'environment' };\n                }\n                else {\n                    videoConstraints = { deviceId: { exact: deviceId } };\n                }\n                const constraints = { video: videoConstraints };\n                return yield this.decodeFromConstraints(constraints, videoSource, callbackFn);\n            });\n        }\n        /**\n         * Continuously tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n         * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromConstraints(constraints, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const stream = yield navigator.mediaDevices.getUserMedia(constraints);\n                return yield this.decodeFromStream(stream, videoSource, callbackFn);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n         * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromStream(stream, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                this.reset();\n                const video = yield this.attachStreamToVideo(stream, videoSource);\n                return yield this.decodeContinuously(video, callbackFn);\n            });\n        }\n        /**\n         * Breaks the decoding loop.\n         */\n        stopAsyncDecode() {\n            this._stopAsyncDecode = true;\n        }\n        /**\n         * Breaks the decoding loop.\n         */\n        stopContinuousDecode() {\n            this._stopContinuousDecode = true;\n        }\n        /**\n         * Sets the new stream and request a new decoding-with-delay.\n         *\n         * @param stream The stream to be shown in the video element.\n         * @param decodeFn A callback for the decode method.\n         */\n        attachStreamToVideo(stream, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const videoElement = this.prepareVideoElement(videoSource);\n                this.addVideoSource(videoElement, stream);\n                this.videoElement = videoElement;\n                this.stream = stream;\n                yield this.playVideoOnLoadAsync(videoElement);\n                return videoElement;\n            });\n        }\n        /**\n         *\n         * @param videoElement\n         */\n        playVideoOnLoadAsync(videoElement) {\n            return new Promise((resolve, reject) => this.playVideoOnLoad(videoElement, () => resolve()));\n        }\n        /**\n         * Binds listeners and callbacks to the videoElement.\n         *\n         * @param element\n         * @param callbackFn\n         */\n        playVideoOnLoad(element, callbackFn) {\n            this.videoEndedListener = () => this.stopStreams();\n            this.videoCanPlayListener = () => this.tryPlayVideo(element);\n            element.addEventListener('ended', this.videoEndedListener);\n            element.addEventListener('canplay', this.videoCanPlayListener);\n            element.addEventListener('playing', callbackFn);\n            // if canplay was already fired, we won't know when to play, so just give it a try\n            this.tryPlayVideo(element);\n        }\n        /**\n         * Checks if the given video element is currently playing.\n         */\n        isVideoPlaying(video) {\n            return video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2;\n        }\n        /**\n         * Just tries to play the video and logs any errors.\n         * The play call is only made is the video is not already playing.\n         */\n        tryPlayVideo(videoElement) {\n            return __awaiter(this, void 0, void 0, function* () {\n                if (this.isVideoPlaying(videoElement)) {\n                    console.warn('Trying to play video that is already playing.');\n                    return;\n                }\n                try {\n                    yield videoElement.play();\n                }\n                catch (_a) {\n                    console.warn('It was not possible to play the video.');\n                }\n            });\n        }\n        /**\n         * Searches and validates a media element.\n         */\n        getMediaElement(mediaElementId, type) {\n            const mediaElement = document.getElementById(mediaElementId);\n            if (!mediaElement) {\n                throw new ArgumentException(`element with id '${mediaElementId}' not found`);\n            }\n            if (mediaElement.nodeName.toLowerCase() !== type.toLowerCase()) {\n                throw new ArgumentException(`element with id '${mediaElementId}' must be an ${type} element`);\n            }\n            return mediaElement;\n        }\n        /**\n         * Decodes the barcode from an image.\n         *\n         * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n         * @param {string} [url]\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromImage(source, url) {\n            if (!source && !url) {\n                throw new ArgumentException('either imageElement with a src set or an url must be provided');\n            }\n            if (url && !source) {\n                return this.decodeFromImageUrl(url);\n            }\n            return this.decodeFromImageElement(source);\n        }\n        /**\n         * Decodes the barcode from a video.\n         *\n         * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n         * @param {string} [url]\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromVideo(source, url) {\n            if (!source && !url) {\n                throw new ArgumentException('Either an element with a src set or an URL must be provided');\n            }\n            if (url && !source) {\n                return this.decodeFromVideoUrl(url);\n            }\n            return this.decodeFromVideoElement(source);\n        }\n        /**\n         * Decodes continuously the barcode from a video.\n         *\n         * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n         * @param {string} [url]\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @experimental\n         */\n        decodeFromVideoContinuously(source, url, callbackFn) {\n            if (undefined === source && undefined === url) {\n                throw new ArgumentException('Either an element with a src set or an URL must be provided');\n            }\n            if (url && !source) {\n                return this.decodeFromVideoUrlContinuously(url, callbackFn);\n            }\n            return this.decodeFromVideoElementContinuously(source, callbackFn);\n        }\n        /**\n         * Decodes something from an image HTML element.\n         */\n        decodeFromImageElement(source) {\n            if (!source) {\n                throw new ArgumentException('An image element must be provided.');\n            }\n            this.reset();\n            const element = this.prepareImageElement(source);\n            this.imageElement = element;\n            let task;\n            if (this.isImageLoaded(element)) {\n                task = this.decodeOnce(element, false, true);\n            }\n            else {\n                task = this._decodeOnLoadImage(element);\n            }\n            return task;\n        }\n        /**\n         * Decodes something from an image HTML element.\n         */\n        decodeFromVideoElement(source) {\n            const element = this._decodeFromVideoElementSetup(source);\n            return this._decodeOnLoadVideo(element);\n        }\n        /**\n         * Decodes something from an image HTML element.\n         */\n        decodeFromVideoElementContinuously(source, callbackFn) {\n            const element = this._decodeFromVideoElementSetup(source);\n            return this._decodeOnLoadVideoContinuously(element, callbackFn);\n        }\n        /**\n         * Sets up the video source so it can be decoded when loaded.\n         *\n         * @param source The video source element.\n         */\n        _decodeFromVideoElementSetup(source) {\n            if (!source) {\n                throw new ArgumentException('A video element must be provided.');\n            }\n            this.reset();\n            const element = this.prepareVideoElement(source);\n            // defines the video element before starts decoding\n            this.videoElement = element;\n            return element;\n        }\n        /**\n         * Decodes an image from a URL.\n         */\n        decodeFromImageUrl(url) {\n            if (!url) {\n                throw new ArgumentException('An URL must be provided.');\n            }\n            this.reset();\n            const element = this.prepareImageElement();\n            this.imageElement = element;\n            const decodeTask = this._decodeOnLoadImage(element);\n            element.src = url;\n            return decodeTask;\n        }\n        /**\n         * Decodes an image from a URL.\n         */\n        decodeFromVideoUrl(url) {\n            if (!url) {\n                throw new ArgumentException('An URL must be provided.');\n            }\n            this.reset();\n            // creates a new element\n            const element = this.prepareVideoElement();\n            const decodeTask = this.decodeFromVideoElement(element);\n            element.src = url;\n            return decodeTask;\n        }\n        /**\n         * Decodes an image from a URL.\n         *\n         * @experimental\n         */\n        decodeFromVideoUrlContinuously(url, callbackFn) {\n            if (!url) {\n                throw new ArgumentException('An URL must be provided.');\n            }\n            this.reset();\n            // creates a new element\n            const element = this.prepareVideoElement();\n            const decodeTask = this.decodeFromVideoElementContinuously(element, callbackFn);\n            element.src = url;\n            return decodeTask;\n        }\n        _decodeOnLoadImage(element) {\n            return new Promise((resolve, reject) => {\n                this.imageLoadedListener = () => this.decodeOnce(element, false, true).then(resolve, reject);\n                element.addEventListener('load', this.imageLoadedListener);\n            });\n        }\n        _decodeOnLoadVideo(videoElement) {\n            return __awaiter(this, void 0, void 0, function* () {\n                // plays the video\n                yield this.playVideoOnLoadAsync(videoElement);\n                // starts decoding after played the video\n                return yield this.decodeOnce(videoElement);\n            });\n        }\n        _decodeOnLoadVideoContinuously(videoElement, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                // plays the video\n                yield this.playVideoOnLoadAsync(videoElement);\n                // starts decoding after played the video\n                this.decodeContinuously(videoElement, callbackFn);\n            });\n        }\n        isImageLoaded(img) {\n            // During the onload event, IE correctly identifies any images that\n            // weren\u2019t downloaded as not complete. Others should too. Gecko-based\n            // browsers act like NS4 in that they report this incorrectly.\n            if (!img.complete) {\n                return false;\n            }\n            // However, they do have two very useful properties: naturalWidth and\n            // naturalHeight. These give the true size of the image. If it failed\n            // to load, either of these should be zero.\n            if (img.naturalWidth === 0) {\n                return false;\n            }\n            // No other way of checking: assume it\u2019s ok.\n            return true;\n        }\n        prepareImageElement(imageSource) {\n            let imageElement;\n            if (typeof imageSource === 'undefined') {\n                imageElement = document.createElement('img');\n                imageElement.width = 200;\n                imageElement.height = 200;\n            }\n            if (typeof imageSource === 'string') {\n                imageElement = this.getMediaElement(imageSource, 'img');\n            }\n            if (imageSource instanceof HTMLImageElement) {\n                imageElement = imageSource;\n            }\n            return imageElement;\n        }\n        /**\n         * Sets a HTMLVideoElement for scanning or creates a new one.\n         *\n         * @param videoSource The HTMLVideoElement to be set.\n         */\n        prepareVideoElement(videoSource) {\n            let videoElement;\n            if (!videoSource && typeof document !== 'undefined') {\n                videoElement = document.createElement('video');\n                videoElement.width = 200;\n                videoElement.height = 200;\n            }\n            if (typeof videoSource === 'string') {\n                videoElement = this.getMediaElement(videoSource, 'video');\n            }\n            if (videoSource instanceof HTMLVideoElement) {\n                videoElement = videoSource;\n            }\n            // Needed for iOS 11\n            videoElement.setAttribute('autoplay', 'true');\n            videoElement.setAttribute('muted', 'true');\n            videoElement.setAttribute('playsinline', 'true');\n            return videoElement;\n        }\n        /**\n         * Tries to decode from the video input until it finds some value.\n         */\n        decodeOnce(element, retryIfNotFound = true, retryIfChecksumOrFormatError = true) {\n            this._stopAsyncDecode = false;\n            const loop = (resolve, reject) => {\n                if (this._stopAsyncDecode) {\n                    reject(new NotFoundException('Video stream has ended before any code could be detected.'));\n                    this._stopAsyncDecode = undefined;\n                    return;\n                }\n                try {\n                    const result = this.decode(element);\n                    resolve(result);\n                }\n                catch (e) {\n                    const ifNotFound = retryIfNotFound && e instanceof NotFoundException;\n                    const isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n                    const ifChecksumOrFormat = isChecksumOrFormatError && retryIfChecksumOrFormatError;\n                    if (ifNotFound || ifChecksumOrFormat) {\n                        // trying again\n                        return setTimeout(loop, this._timeBetweenDecodingAttempts, resolve, reject);\n                    }\n                    reject(e);\n                }\n            };\n            return new Promise((resolve, reject) => loop(resolve, reject));\n        }\n        /**\n         * Continuously decodes from video input.\n         */\n        decodeContinuously(element, callbackFn) {\n            this._stopContinuousDecode = false;\n            const loop = () => {\n                if (this._stopContinuousDecode) {\n                    this._stopContinuousDecode = undefined;\n                    return;\n                }\n                try {\n                    const result = this.decode(element);\n                    callbackFn(result, null);\n                    setTimeout(loop, this.timeBetweenScansMillis);\n                }\n                catch (e) {\n                    callbackFn(null, e);\n                    const isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n                    const isNotFound = e instanceof NotFoundException;\n                    if (isChecksumOrFormatError || isNotFound) {\n                        // trying again\n                        setTimeout(loop, this._timeBetweenDecodingAttempts);\n                    }\n                }\n            };\n            loop();\n        }\n        /**\n         * Gets the BinaryBitmap for ya! (and decodes it)\n         */\n        decode(element) {\n            // get binary bitmap for decode function\n            const binaryBitmap = this.createBinaryBitmap(element);\n            return this.decodeBitmap(binaryBitmap);\n        }\n        /**\n         * Returns true if media element is indeed a {@link HtmlVideoElement}.\n         */\n        _isHTMLVideoElement(mediaElement) {\n            const potentialVideo = mediaElement;\n            return potentialVideo.videoWidth !== 0;\n        }\n        /**\n         * Overwriting this allows you to manipulate the next frame in anyway\n         * you want before decode.\n         */\n        drawFrameOnCanvas(\n            srcElement, dimensions, canvasElementContext) {\n            if (!dimensions) {\n                dimensions = {\n                    sx: 0,\n                    sy: 0,\n                    sWidth: srcElement.videoWidth,\n                    sHeight: srcElement.videoHeight,\n                    dx: 0,\n                    dy: 0,\n                    dWidth: srcElement.videoWidth,\n                    dHeight: srcElement.videoHeight};\n            }\n            if (!canvasElementContext) {\n                canvasElementContext = this.captureCanvasContext;\n            }\n            canvasElementContext.drawImage(\n                srcElement,\n                dimensions.sx,\n                dimensions.sy,\n                dimensions.sWidth,\n                dimensions.sHeight,\n                dimensions.dx,\n                dimensions.dy,\n                dimensions.dWidth,\n                dimensions.dHeight);\n        }\n        /**\n         * Ovewriting this allows you to manipulate the snapshot image in anyway\n         *  you want before decode.\n         */\n        drawImageOnCanvas(\n            srcElement,\n            dimensions,\n            canvasElementContext = this.captureCanvasContext) {\n            if (!dimensions) {\n                dimensions = {\n                    sx: 0,\n                    sy: 0,\n                    sWidth: srcElement.naturalWidth,\n                    sHeight: srcElement.naturalHeight,\n                    dx: 0,\n                    dy: 0,\n                    dWidth: srcElement.naturalWidth,\n                    dHeight: srcElement.naturalHeight\n                };\n            }\n            if (!canvasElementContext) {\n                canvasElementContext = this.captureCanvasContext;\n            }\n            canvasElementContext.drawImage(\n                srcElement,\n                dimensions.sx,\n                dimensions.sy,\n                dimensions.sWidth,\n                dimensions.sHeight,\n                dimensions.dx,\n                dimensions.dy,\n                dimensions.dWidth,\n                dimensions.dHeight);\n        }\n        /**\n         * Creates a binaryBitmap based in some image source.\n         *\n         * @param mediaElement HTML element containing drawable image source.\n         */\n        createBinaryBitmap(mediaElement) {\n            const ctx = this.getCaptureCanvasContext(mediaElement);\n            if (this._isHTMLVideoElement(mediaElement)) {\n                this.drawFrameOnCanvas(mediaElement);\n            } else {\n                this.drawImageOnCanvas(mediaElement);\n            }\n            const canvas = this.getCaptureCanvas(mediaElement);\n            const luminanceSource = new HTMLCanvasElementLuminanceSource(canvas);\n            const hybridBinarizer = new HybridBinarizer(luminanceSource);\n\n            return new BinaryBitmap(hybridBinarizer);\n        }\n\n        getCaptureCanvasContext(mediaElement) {\n            if (!this.captureCanvasContext) {\n                const elem = this.getCaptureCanvas(mediaElement);\n                const ctx = elem.getContext('2d');\n                this.captureCanvasContext = ctx;\n            }\n            return this.captureCanvasContext;\n        }\n        getCaptureCanvas(mediaElement) {\n            if (!this.captureCanvas) {\n                const elem = this.createCaptureCanvas(mediaElement);\n                this.captureCanvas = elem;\n            }\n            return this.captureCanvas;\n        }\n        /**\n         * Call the encapsulated readers decode\n         */\n        decodeBitmap(binaryBitmap) {\n            return this.reader.decode(binaryBitmap, this._hints);\n        }\n        /**\n         * \uD83D\uDD8C Prepares the canvas for capture and scan frames.\n         */\n        createCaptureCanvas(mediaElement) {\n            if (typeof document === 'undefined') {\n                this._destroyCaptureCanvas();\n                return null;\n            }\n            const canvasElement = document.createElement('canvas');\n            let width;\n            let height;\n            if (typeof mediaElement !== 'undefined') {\n                if (mediaElement instanceof HTMLVideoElement) {\n                    width = mediaElement.videoWidth;\n                    height = mediaElement.videoHeight;\n                }\n                else if (mediaElement instanceof HTMLImageElement) {\n                    width = mediaElement.naturalWidth || mediaElement.width;\n                    height = mediaElement.naturalHeight || mediaElement.height;\n                }\n            }\n            canvasElement.style.width = width + 'px';\n            canvasElement.style.height = height + 'px';\n            canvasElement.width = width;\n            canvasElement.height = height;\n            return canvasElement;\n        }\n        /**\n         * Stops the continuous scan and cleans the stream.\n         */\n        stopStreams() {\n            if (this.stream) {\n                this.stream.getVideoTracks().forEach(t => t.stop());\n                this.stream = undefined;\n            }\n            if (this._stopAsyncDecode === false) {\n                this.stopAsyncDecode();\n            }\n            if (this._stopContinuousDecode === false) {\n                this.stopContinuousDecode();\n            }\n        }\n        /**\n         * Resets the code reader to the initial state. Cancels any ongoing barcode scanning from video or camera.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        reset() {\n            // stops the camera, preview and scan \uD83D\uDD34\n            this.stopStreams();\n            // clean and forget about HTML elements\n            this._destroyVideoElement();\n            this._destroyImageElement();\n            this._destroyCaptureCanvas();\n        }\n        _destroyVideoElement() {\n            if (!this.videoElement) {\n                return;\n            }\n            // first gives freedon to the element \uD83D\uDD4A\n            if (typeof this.videoEndedListener !== 'undefined') {\n                this.videoElement.removeEventListener('ended', this.videoEndedListener);\n            }\n            if (typeof this.videoPlayingEventListener !== 'undefined') {\n                this.videoElement.removeEventListener('playing', this.videoPlayingEventListener);\n            }\n            if (typeof this.videoCanPlayListener !== 'undefined') {\n                this.videoElement.removeEventListener('loadedmetadata', this.videoCanPlayListener);\n            }\n            // then forgets about that element \uD83D\uDE22\n            this.cleanVideoSource(this.videoElement);\n            this.videoElement = undefined;\n        }\n        _destroyImageElement() {\n            if (!this.imageElement) {\n                return;\n            }\n            // first gives freedon to the element \uD83D\uDD4A\n            if (undefined !== this.imageLoadedListener) {\n                this.imageElement.removeEventListener('load', this.imageLoadedListener);\n            }\n            // then forget about that element \uD83D\uDE22\n            this.imageElement.src = undefined;\n            this.imageElement.removeAttribute('src');\n            this.imageElement = undefined;\n        }\n        /**\n         * Cleans canvas references \uD83D\uDD8C\n         */\n        _destroyCaptureCanvas() {\n            // then forget about that element \uD83D\uDE22\n            this.captureCanvasContext = undefined;\n            this.captureCanvas = undefined;\n        }\n        /**\n         * Defines what the videoElement src will be.\n         *\n         * @param videoElement\n         * @param stream\n         */\n        addVideoSource(videoElement, stream) {\n            // Older browsers may not have `srcObject`\n            try {\n                // @note Throws Exception if interrupted by a new loaded request\n                videoElement.srcObject = stream;\n            }\n            catch (err) {\n                // @note Avoid using this in new browsers, as it is going away.\n                videoElement.src = URL.createObjectURL(stream);\n            }\n        }\n        /**\n         * Unbinds a HTML video src property.\n         *\n         * @param videoElement\n         */\n        cleanVideoSource(videoElement) {\n            try {\n                videoElement.srcObject = null;\n            }\n            catch (err) {\n                videoElement.src = '';\n            }\n            this.videoElement.removeAttribute('src');\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates the result of decoding a barcode within an image.</p>\n     *\n     * @author Sean Owen\n     */\n    class Result {\n        // public constructor(private text: string,\n        //               Uint8Array rawBytes,\n        //               ResultPoconst resultPoints: Int32Array,\n        //               BarcodeFormat format) {\n        //   this(text, rawBytes, resultPoints, format, System.currentTimeMillis())\n        // }\n        // public constructor(text: string,\n        //               Uint8Array rawBytes,\n        //               ResultPoconst resultPoints: Int32Array,\n        //               BarcodeFormat format,\n        //               long timestamp) {\n        //   this(text, rawBytes, rawBytes == null ? 0 : 8 * rawBytes.length,\n        //        resultPoints, format, timestamp)\n        // }\n        constructor(text, rawBytes, numBits = rawBytes == null ? 0 : 8 * rawBytes.length, resultPoints, format, timestamp = System.currentTimeMillis()) {\n            this.text = text;\n            this.rawBytes = rawBytes;\n            this.numBits = numBits;\n            this.resultPoints = resultPoints;\n            this.format = format;\n            this.timestamp = timestamp;\n            this.text = text;\n            this.rawBytes = rawBytes;\n            if (undefined === numBits || null === numBits) {\n                this.numBits = (rawBytes === null || rawBytes === undefined) ? 0 : 8 * rawBytes.length;\n            }\n            else {\n                this.numBits = numBits;\n            }\n            this.resultPoints = resultPoints;\n            this.format = format;\n            this.resultMetadata = null;\n            if (undefined === timestamp || null === timestamp) {\n                this.timestamp = System.currentTimeMillis();\n            }\n            else {\n                this.timestamp = timestamp;\n            }\n        }\n        /**\n         * @return raw text encoded by the barcode\n         */\n        getText() {\n            return this.text;\n        }\n        /**\n         * @return raw bytes encoded by the barcode, if applicable, otherwise {@code null}\n         */\n        getRawBytes() {\n            return this.rawBytes;\n        }\n        /**\n         * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length\n         * @since 3.3.0\n         */\n        getNumBits() {\n            return this.numBits;\n        }\n        /**\n         * @return points related to the barcode in the image. These are typically points\n         *         identifying finder patterns or the corners of the barcode. The exact meaning is\n         *         specific to the type of barcode that was decoded.\n         */\n        getResultPoints() {\n            return this.resultPoints;\n        }\n        /**\n         * @return {@link BarcodeFormat} representing the format of the barcode that was decoded\n         */\n        getBarcodeFormat() {\n            return this.format;\n        }\n        /**\n         * @return {@link Map} mapping {@link ResultMetadataType} keys to values. May be\n         *   {@code null}. This contains optional metadata about what was detected about the barcode,\n         *   like orientation.\n         */\n        getResultMetadata() {\n            return this.resultMetadata;\n        }\n        putMetadata(type, value) {\n            if (this.resultMetadata === null) {\n                this.resultMetadata = new Map();\n            }\n            this.resultMetadata.set(type, value);\n        }\n        putAllMetadata(metadata) {\n            if (metadata !== null) {\n                if (this.resultMetadata === null) {\n                    this.resultMetadata = metadata;\n                }\n                else {\n                    this.resultMetadata = new Map(metadata);\n                }\n            }\n        }\n        addResultPoints(newPoints) {\n            const oldPoints = this.resultPoints;\n            if (oldPoints === null) {\n                this.resultPoints = newPoints;\n            }\n            else if (newPoints !== null && newPoints.length > 0) {\n                const allPoints = new Array(oldPoints.length + newPoints.length);\n                System.arraycopy(oldPoints, 0, allPoints, 0, oldPoints.length);\n                System.arraycopy(newPoints, 0, allPoints, oldPoints.length, newPoints.length);\n                this.resultPoints = allPoints;\n            }\n        }\n        getTimestamp() {\n            return this.timestamp;\n        }\n        /*@Override*/\n        toString() {\n            return this.text;\n        }\n    }\n\n    /*\n     * Direct port to TypeScript of ZXing by Adrian To\u0219c\u0103\n     */\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * Enumerates barcode formats known to this package. Please keep alphabetized.\n     *\n     * @author Sean Owen\n     */\n    var BarcodeFormat;\n    (function (BarcodeFormat) {\n        /** Aztec 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"AZTEC\"] = 0] = \"AZTEC\";\n        /** CODABAR 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODABAR\"] = 1] = \"CODABAR\";\n        /** Code 39 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODE_39\"] = 2] = \"CODE_39\";\n        /** Code 93 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODE_93\"] = 3] = \"CODE_93\";\n        /** Code 128 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODE_128\"] = 4] = \"CODE_128\";\n        /** Data Matrix 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"DATA_MATRIX\"] = 5] = \"DATA_MATRIX\";\n        /** EAN-8 1D format. */\n        BarcodeFormat[BarcodeFormat[\"EAN_8\"] = 6] = \"EAN_8\";\n        /** EAN-13 1D format. */\n        BarcodeFormat[BarcodeFormat[\"EAN_13\"] = 7] = \"EAN_13\";\n        /** ITF (Interleaved Two of Five) 1D format. */\n        BarcodeFormat[BarcodeFormat[\"ITF\"] = 8] = \"ITF\";\n        /** MaxiCode 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"MAXICODE\"] = 9] = \"MAXICODE\";\n        /** PDF417 format. */\n        BarcodeFormat[BarcodeFormat[\"PDF_417\"] = 10] = \"PDF_417\";\n        /** QR Code 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"QR_CODE\"] = 11] = \"QR_CODE\";\n        /** RSS 14 */\n        BarcodeFormat[BarcodeFormat[\"RSS_14\"] = 12] = \"RSS_14\";\n        /** RSS EXPANDED */\n        BarcodeFormat[BarcodeFormat[\"RSS_EXPANDED\"] = 13] = \"RSS_EXPANDED\";\n        /** UPC-A 1D format. */\n        BarcodeFormat[BarcodeFormat[\"UPC_A\"] = 14] = \"UPC_A\";\n        /** UPC-E 1D format. */\n        BarcodeFormat[BarcodeFormat[\"UPC_E\"] = 15] = \"UPC_E\";\n        /** UPC/EAN extension format. Not a stand-alone format. */\n        BarcodeFormat[BarcodeFormat[\"UPC_EAN_EXTENSION\"] = 16] = \"UPC_EAN_EXTENSION\";\n    })(BarcodeFormat || (BarcodeFormat = {}));\n    var BarcodeFormat$1 = BarcodeFormat;\n\n    /*namespace com.google.zxing {*/\n    /**\n     * Represents some type of metadata about the result of the decoding that the decoder\n     * wishes to communicate back to the caller.\n     *\n     * @author Sean Owen\n     */\n    var ResultMetadataType;\n    (function (ResultMetadataType) {\n        /**\n         * Unspecified, application-specific metadata. Maps to an unspecified {@link Object}.\n         */\n        ResultMetadataType[ResultMetadataType[\"OTHER\"] = 0] = \"OTHER\";\n        /**\n         * Denotes the likely approximate orientation of the barcode in the image. This value\n         * is given as degrees rotated clockwise from the normal, upright orientation.\n         * For example a 1D barcode which was found by reading top-to-bottom would be\n         * said to have orientation \"90\". This key maps to an {@link Integer} whose\n         * value is in the range [0,360).\n         */\n        ResultMetadataType[ResultMetadataType[\"ORIENTATION\"] = 1] = \"ORIENTATION\";\n        /**\n         * <p>2D barcode formats typically encode text, but allow for a sort of 'byte mode'\n         * which is sometimes used to encode binary data. While {@link Result} makes available\n         * the complete raw bytes in the barcode for these formats, it does not offer the bytes\n         * from the byte segments alone.</p>\n         *\n         * <p>This maps to a {@link java.util.List} of byte arrays corresponding to the\n         * raw bytes in the byte segments in the barcode, in order.</p>\n         */\n        ResultMetadataType[ResultMetadataType[\"BYTE_SEGMENTS\"] = 2] = \"BYTE_SEGMENTS\";\n        /**\n         * Error correction level used, if applicable. The value type depends on the\n         * format, but is typically a String.\n         */\n        ResultMetadataType[ResultMetadataType[\"ERROR_CORRECTION_LEVEL\"] = 3] = \"ERROR_CORRECTION_LEVEL\";\n        /**\n         * For some periodicals, indicates the issue number as an {@link Integer}.\n         */\n        ResultMetadataType[ResultMetadataType[\"ISSUE_NUMBER\"] = 4] = \"ISSUE_NUMBER\";\n        /**\n         * For some products, indicates the suggested retail price in the barcode as a\n         * formatted {@link String}.\n         */\n        ResultMetadataType[ResultMetadataType[\"SUGGESTED_PRICE\"] = 5] = \"SUGGESTED_PRICE\";\n        /**\n         * For some products, the possible country of manufacture as a {@link String} denoting the\n         * ISO country code. Some map to multiple possible countries, like \"US/CA\".\n         */\n        ResultMetadataType[ResultMetadataType[\"POSSIBLE_COUNTRY\"] = 6] = \"POSSIBLE_COUNTRY\";\n        /**\n         * For some products, the extension text\n         */\n        ResultMetadataType[ResultMetadataType[\"UPC_EAN_EXTENSION\"] = 7] = \"UPC_EAN_EXTENSION\";\n        /**\n         * PDF417-specific metadata\n         */\n        ResultMetadataType[ResultMetadataType[\"PDF417_EXTRA_METADATA\"] = 8] = \"PDF417_EXTRA_METADATA\";\n        /**\n         * If the code format supports structured append and the current scanned code is part of one then the\n         * sequence number is given with it.\n         */\n        ResultMetadataType[ResultMetadataType[\"STRUCTURED_APPEND_SEQUENCE\"] = 9] = \"STRUCTURED_APPEND_SEQUENCE\";\n        /**\n         * If the code format supports structured append and the current scanned code is part of one then the\n         * parity is given with it.\n         */\n        ResultMetadataType[ResultMetadataType[\"STRUCTURED_APPEND_PARITY\"] = 10] = \"STRUCTURED_APPEND_PARITY\";\n    })(ResultMetadataType || (ResultMetadataType = {}));\n    var ResultMetadataType$1 = ResultMetadataType;\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing.common {*/\n    /*import java.util.List;*/\n    /**\n     * <p>Encapsulates the result of decoding a matrix of bits. This typically\n     * applies to 2D barcode formats. For now it contains the raw bytes obtained,\n     * as well as a String interpretation of those bytes, if applicable.</p>\n     *\n     * @author Sean Owen\n     */\n    class DecoderResult {\n        // public constructor(rawBytes: Uint8Array,\n        //                      text: string,\n        //                      List<Uint8Array> byteSegments,\n        //                      String ecLevel) {\n        //   this(rawBytes, text, byteSegments, ecLevel, -1, -1)\n        // }\n        constructor(rawBytes, text, byteSegments, ecLevel, structuredAppendSequenceNumber = -1, structuredAppendParity = -1) {\n            this.rawBytes = rawBytes;\n            this.text = text;\n            this.byteSegments = byteSegments;\n            this.ecLevel = ecLevel;\n            this.structuredAppendSequenceNumber = structuredAppendSequenceNumber;\n            this.structuredAppendParity = structuredAppendParity;\n            this.numBits = (rawBytes === undefined || rawBytes === null) ? 0 : 8 * rawBytes.length;\n        }\n        /**\n         * @return raw bytes representing the result, or {@code null} if not applicable\n         */\n        getRawBytes() {\n            return this.rawBytes;\n        }\n        /**\n         * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length\n         * @since 3.3.0\n         */\n        getNumBits() {\n            return this.numBits;\n        }\n        /**\n         * @param numBits overrides the number of bits that are valid in {@link #getRawBytes()}\n         * @since 3.3.0\n         */\n        setNumBits(numBits /*int*/) {\n            this.numBits = numBits;\n        }\n        /**\n         * @return text representation of the result\n         */\n        getText() {\n            return this.text;\n        }\n        /**\n         * @return list of byte segments in the result, or {@code null} if not applicable\n         */\n        getByteSegments() {\n            return this.byteSegments;\n        }\n        /**\n         * @return name of error correction level used, or {@code null} if not applicable\n         */\n        getECLevel() {\n            return this.ecLevel;\n        }\n        /**\n         * @return number of errors corrected, or {@code null} if not applicable\n         */\n        getErrorsCorrected() {\n            return this.errorsCorrected;\n        }\n        setErrorsCorrected(errorsCorrected /*Integer*/) {\n            this.errorsCorrected = errorsCorrected;\n        }\n        /**\n         * @return number of erasures corrected, or {@code null} if not applicable\n         */\n        getErasures() {\n            return this.erasures;\n        }\n        setErasures(erasures /*Integer*/) {\n            this.erasures = erasures;\n        }\n        /**\n         * @return arbitrary additional metadata\n         */\n        getOther() {\n            return this.other;\n        }\n        setOther(other) {\n            this.other = other;\n        }\n        hasStructuredAppend() {\n            return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0;\n        }\n        getStructuredAppendParity() {\n            return this.structuredAppendParity;\n        }\n        getStructuredAppendSequenceNumber() {\n            return this.structuredAppendSequenceNumber;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>This class contains utility methods for performing mathematical operations over\n     * the Galois Fields. Operations use a given primitive polynomial in calculations.</p>\n     *\n     * <p>Throughout this package, elements of the GF are represented as an {@code int}\n     * for convenience and speed (but at the cost of memory).\n     * </p>\n     *\n     * @author Sean Owen\n     * @author David Olivier\n     */\n    class AbstractGenericGF {\n        /**\n         * @return 2 to the power of a in GF(size)\n         */\n        exp(a) {\n            return this.expTable[a];\n        }\n        /**\n         * @return base 2 log of a in GF(size)\n         */\n        log(a /*int*/) {\n            if (a === 0) {\n                throw new IllegalArgumentException();\n            }\n            return this.logTable[a];\n        }\n        /**\n         * Implements both addition and subtraction -- they are the same in GF(size).\n         *\n         * @return sum/difference of a and b\n         */\n        static addOrSubtract(a /*int*/, b /*int*/) {\n            return a ^ b;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Represents a polynomial whose coefficients are elements of a GF.\n     * Instances of this class are immutable.</p>\n     *\n     * <p>Much credit is due to William Rucklidge since portions of this code are an indirect\n     * port of his C++ Reed-Solomon implementation.</p>\n     *\n     * @author Sean Owen\n     */\n    class GenericGFPoly {\n        /**\n         * @param field the {@link GenericGF} instance representing the field to use\n         * to perform computations\n         * @param coefficients coefficients as ints representing elements of GF(size), arranged\n         * from most significant (highest-power term) coefficient to least significant\n         * @throws IllegalArgumentException if argument is null or empty,\n         * or if leading coefficient is 0 and this is not a\n         * constant polynomial (that is, it is not the monomial \"0\")\n         */\n        constructor(field, coefficients) {\n            if (coefficients.length === 0) {\n                throw new IllegalArgumentException();\n            }\n            this.field = field;\n            const coefficientsLength = coefficients.length;\n            if (coefficientsLength > 1 && coefficients[0] === 0) {\n                // Leading term must be non-zero for anything except the constant polynomial \"0\"\n                let firstNonZero = 1;\n                while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n                    firstNonZero++;\n                }\n                if (firstNonZero === coefficientsLength) {\n                    this.coefficients = Int32Array.from([0]);\n                }\n                else {\n                    this.coefficients = new Int32Array(coefficientsLength - firstNonZero);\n                    System.arraycopy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.length);\n                }\n            }\n            else {\n                this.coefficients = coefficients;\n            }\n        }\n        getCoefficients() {\n            return this.coefficients;\n        }\n        /**\n         * @return degree of this polynomial\n         */\n        getDegree() {\n            return this.coefficients.length - 1;\n        }\n        /**\n         * @return true iff this polynomial is the monomial \"0\"\n         */\n        isZero() {\n            return this.coefficients[0] === 0;\n        }\n        /**\n         * @return coefficient of x^degree term in this polynomial\n         */\n        getCoefficient(degree /*int*/) {\n            return this.coefficients[this.coefficients.length - 1 - degree];\n        }\n        /**\n         * @return evaluation of this polynomial at a given point\n         */\n        evaluateAt(a /*int*/) {\n            if (a === 0) {\n                // Just return the x^0 coefficient\n                return this.getCoefficient(0);\n            }\n            const coefficients = this.coefficients;\n            let result;\n            if (a === 1) {\n                // Just the sum of the coefficients\n                result = 0;\n                for (let i = 0, length = coefficients.length; i !== length; i++) {\n                    const coefficient = coefficients[i];\n                    result = AbstractGenericGF.addOrSubtract(result, coefficient);\n                }\n                return result;\n            }\n            result = coefficients[0];\n            const size = coefficients.length;\n            const field = this.field;\n            for (let i = 1; i < size; i++) {\n                result = AbstractGenericGF.addOrSubtract(field.multiply(a, result), coefficients[i]);\n            }\n            return result;\n        }\n        addOrSubtract(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n            }\n            if (this.isZero()) {\n                return other;\n            }\n            if (other.isZero()) {\n                return this;\n            }\n            let smallerCoefficients = this.coefficients;\n            let largerCoefficients = other.coefficients;\n            if (smallerCoefficients.length > largerCoefficients.length) {\n                const temp = smallerCoefficients;\n                smallerCoefficients = largerCoefficients;\n                largerCoefficients = temp;\n            }\n            let sumDiff = new Int32Array(largerCoefficients.length);\n            const lengthDiff = largerCoefficients.length - smallerCoefficients.length;\n            // Copy high-order terms only found in higher-degree polynomial's coefficients\n            System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);\n            for (let i = lengthDiff; i < largerCoefficients.length; i++) {\n                sumDiff[i] = AbstractGenericGF.addOrSubtract(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n            }\n            return new GenericGFPoly(this.field, sumDiff);\n        }\n        multiply(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n            }\n            if (this.isZero() || other.isZero()) {\n                return this.field.getZero();\n            }\n            const aCoefficients = this.coefficients;\n            const aLength = aCoefficients.length;\n            const bCoefficients = other.coefficients;\n            const bLength = bCoefficients.length;\n            const product = new Int32Array(aLength + bLength - 1);\n            const field = this.field;\n            for (let i = 0; i < aLength; i++) {\n                const aCoeff = aCoefficients[i];\n                for (let j = 0; j < bLength; j++) {\n                    product[i + j] = AbstractGenericGF.addOrSubtract(product[i + j], field.multiply(aCoeff, bCoefficients[j]));\n                }\n            }\n            return new GenericGFPoly(field, product);\n        }\n        multiplyScalar(scalar /*int*/) {\n            if (scalar === 0) {\n                return this.field.getZero();\n            }\n            if (scalar === 1) {\n                return this;\n            }\n            const size = this.coefficients.length;\n            const field = this.field;\n            const product = new Int32Array(size);\n            const coefficients = this.coefficients;\n            for (let i = 0; i < size; i++) {\n                product[i] = field.multiply(coefficients[i], scalar);\n            }\n            return new GenericGFPoly(field, product);\n        }\n        multiplyByMonomial(degree /*int*/, coefficient /*int*/) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return this.field.getZero();\n            }\n            const coefficients = this.coefficients;\n            const size = coefficients.length;\n            const product = new Int32Array(size + degree);\n            const field = this.field;\n            for (let i = 0; i < size; i++) {\n                product[i] = field.multiply(coefficients[i], coefficient);\n            }\n            return new GenericGFPoly(field, product);\n        }\n        divide(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n            }\n            if (other.isZero()) {\n                throw new IllegalArgumentException('Divide by 0');\n            }\n            const field = this.field;\n            let quotient = field.getZero();\n            let remainder = this;\n            const denominatorLeadingTerm = other.getCoefficient(other.getDegree());\n            const inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);\n            while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n                const degreeDifference = remainder.getDegree() - other.getDegree();\n                const scale = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n                const term = other.multiplyByMonomial(degreeDifference, scale);\n                const iterationQuotient = field.buildMonomial(degreeDifference, scale);\n                quotient = quotient.addOrSubtract(iterationQuotient);\n                remainder = remainder.addOrSubtract(term);\n            }\n            return [quotient, remainder];\n        }\n        /*@Override*/\n        toString() {\n            let result = '';\n            for (let degree = this.getDegree(); degree >= 0; degree--) {\n                let coefficient = this.getCoefficient(degree);\n                if (coefficient !== 0) {\n                    if (coefficient < 0) {\n                        result += ' - ';\n                        coefficient = -coefficient;\n                    }\n                    else {\n                        if (result.length > 0) {\n                            result += ' + ';\n                        }\n                    }\n                    if (degree === 0 || coefficient !== 1) {\n                        const alphaPower = this.field.log(coefficient);\n                        if (alphaPower === 0) {\n                            result += '1';\n                        }\n                        else if (alphaPower === 1) {\n                            result += 'a';\n                        }\n                        else {\n                            result += 'a^';\n                            result += alphaPower;\n                        }\n                    }\n                    if (degree !== 0) {\n                        if (degree === 1) {\n                            result += 'x';\n                        }\n                        else {\n                            result += 'x^';\n                            result += degree;\n                        }\n                    }\n                }\n            }\n            return result;\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ArithmeticException extends Exception {\n    }\n    ArithmeticException.kind = 'ArithmeticException';\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>This class contains utility methods for performing mathematical operations over\n     * the Galois Fields. Operations use a given primitive polynomial in calculations.</p>\n     *\n     * <p>Throughout this package, elements of the GF are represented as an {@code int}\n     * for convenience and speed (but at the cost of memory).\n     * </p>\n     *\n     * @author Sean Owen\n     * @author David Olivier\n     */\n    class GenericGF extends AbstractGenericGF {\n        /**\n         * Create a representation of GF(size) using the given primitive polynomial.\n         *\n         * @param primitive irreducible polynomial whose coefficients are represented by\n         *  the bits of an int, where the least-significant bit represents the constant\n         *  coefficient\n         * @param size the size of the field\n         * @param b the factor b in the generator polynomial can be 0- or 1-based\n         *  (g(x) = (x+a^b)(x+a^(b+1))...(x+a^(b+2t-1))).\n         *  In most cases it should be 1, but for QR code it is 0.\n         */\n        constructor(primitive /*int*/, size /*int*/, generatorBase /*int*/) {\n            super();\n            this.primitive = primitive;\n            this.size = size;\n            this.generatorBase = generatorBase;\n            const expTable = new Int32Array(size);\n            let x = 1;\n            for (let i = 0; i < size; i++) {\n                expTable[i] = x;\n                x *= 2; // we're assuming the generator alpha is 2\n                if (x >= size) {\n                    x ^= primitive;\n                    x &= size - 1;\n                }\n            }\n            this.expTable = expTable;\n            const logTable = new Int32Array(size);\n            for (let i = 0; i < size - 1; i++) {\n                logTable[expTable[i]] = i;\n            }\n            this.logTable = logTable;\n            // logTable[0] == 0 but this should never be used\n            this.zero = new GenericGFPoly(this, Int32Array.from([0]));\n            this.one = new GenericGFPoly(this, Int32Array.from([1]));\n        }\n        getZero() {\n            return this.zero;\n        }\n        getOne() {\n            return this.one;\n        }\n        /**\n         * @return the monomial representing coefficient * x^degree\n         */\n        buildMonomial(degree /*int*/, coefficient /*int*/) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return this.zero;\n            }\n            const coefficients = new Int32Array(degree + 1);\n            coefficients[0] = coefficient;\n            return new GenericGFPoly(this, coefficients);\n        }\n        /**\n         * @return multiplicative inverse of a\n         */\n        inverse(a /*int*/) {\n            if (a === 0) {\n                throw new ArithmeticException();\n            }\n            return this.expTable[this.size - this.logTable[a] - 1];\n        }\n        /**\n         * @return product of a and b in GF(size)\n         */\n        multiply(a /*int*/, b /*int*/) {\n            if (a === 0 || b === 0) {\n                return 0;\n            }\n            return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)];\n        }\n        getSize() {\n            return this.size;\n        }\n        getGeneratorBase() {\n            return this.generatorBase;\n        }\n        /*@Override*/\n        toString() {\n            return ('GF(0x' + Integer.toHexString(this.primitive) + ',' + this.size + ')');\n        }\n        equals(o) {\n            return o === this;\n        }\n    }\n    GenericGF.AZTEC_DATA_12 = new GenericGF(0x1069, 4096, 1); // x^12 + x^6 + x^5 + x^3 + 1\n    GenericGF.AZTEC_DATA_10 = new GenericGF(0x409, 1024, 1); // x^10 + x^3 + 1\n    GenericGF.AZTEC_DATA_6 = new GenericGF(0x43, 64, 1); // x^6 + x + 1\n    GenericGF.AZTEC_PARAM = new GenericGF(0x13, 16, 1); // x^4 + x + 1\n    GenericGF.QR_CODE_FIELD_256 = new GenericGF(0x011d, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1\n    GenericGF.DATA_MATRIX_FIELD_256 = new GenericGF(0x012d, 256, 1); // x^8 + x^5 + x^3 + x^2 + 1\n    GenericGF.AZTEC_DATA_8 = GenericGF.DATA_MATRIX_FIELD_256;\n    GenericGF.MAXICODE_FIELD_64 = GenericGF.AZTEC_DATA_6;\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ReedSolomonException extends Exception {\n    }\n    ReedSolomonException.kind = 'ReedSolomonException';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class IllegalStateException extends Exception {\n    }\n    IllegalStateException.kind = 'IllegalStateException';\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Implements Reed-Solomon decoding, as the name implies.</p>\n     *\n     * <p>The algorithm will not be explained here, but the following references were helpful\n     * in creating this implementation:</p>\n     *\n     * <ul>\n     * <li>Bruce Maggs.\n     * <a href=\"http://www.cs.cmu.edu/afs/cs.cmu.edu/project/pscico-guyb/realworld/www/rs_decode.ps\">\n     * \"Decoding Reed-Solomon Codes\"</a> (see discussion of Forney's Formula)</li>\n     * <li>J.I. Hall. <a href=\"www.mth.msu.edu/~jhall/classes/codenotes/GRS.pdf\">\n     * \"Chapter 5. Generalized Reed-Solomon Codes\"</a>\n     * (see discussion of Euclidean algorithm)</li>\n     * </ul>\n     *\n     * <p>Much credit is due to William Rucklidge since portions of this code are an indirect\n     * port of his C++ Reed-Solomon implementation.</p>\n     *\n     * @author Sean Owen\n     * @author William Rucklidge\n     * @author sanfordsquires\n     */\n    class ReedSolomonDecoder {\n        constructor(field) {\n            this.field = field;\n        }\n        /**\n         * <p>Decodes given set of received codewords, which include both data and error-correction\n         * codewords. Really, this means it uses Reed-Solomon to detect and correct errors, in-place,\n         * in the input.</p>\n         *\n         * @param received data and error-correction codewords\n         * @param twoS number of error-correction codewords available\n         * @throws ReedSolomonException if decoding fails for any reason\n         */\n        decode(received, twoS /*int*/) {\n            const field = this.field;\n            const poly = new GenericGFPoly(field, received);\n            const syndromeCoefficients = new Int32Array(twoS);\n            let noError = true;\n            for (let i = 0; i < twoS; i++) {\n                const evalResult = poly.evaluateAt(field.exp(i + field.getGeneratorBase()));\n                syndromeCoefficients[syndromeCoefficients.length - 1 - i] = evalResult;\n                if (evalResult !== 0) {\n                    noError = false;\n                }\n            }\n            if (noError) {\n                return;\n            }\n            const syndrome = new GenericGFPoly(field, syndromeCoefficients);\n            const sigmaOmega = this.runEuclideanAlgorithm(field.buildMonomial(twoS, 1), syndrome, twoS);\n            const sigma = sigmaOmega[0];\n            const omega = sigmaOmega[1];\n            const errorLocations = this.findErrorLocations(sigma);\n            const errorMagnitudes = this.findErrorMagnitudes(omega, errorLocations);\n            for (let i = 0; i < errorLocations.length; i++) {\n                const position = received.length - 1 - field.log(errorLocations[i]);\n                if (position < 0) {\n                    throw new ReedSolomonException('Bad error location');\n                }\n                received[position] = GenericGF.addOrSubtract(received[position], errorMagnitudes[i]);\n            }\n        }\n        runEuclideanAlgorithm(a, b, R /*int*/) {\n            // Assume a's degree is >= b's\n            if (a.getDegree() < b.getDegree()) {\n                const temp = a;\n                a = b;\n                b = temp;\n            }\n            const field = this.field;\n            let rLast = a;\n            let r = b;\n            let tLast = field.getZero();\n            let t = field.getOne();\n            // Run Euclidean algorithm until r's degree is less than R/2\n            while (r.getDegree() >= (R / 2 | 0)) {\n                let rLastLast = rLast;\n                let tLastLast = tLast;\n                rLast = r;\n                tLast = t;\n                // Divide rLastLast by rLast, with quotient in q and remainder in r\n                if (rLast.isZero()) {\n                    // Oops, Euclidean algorithm already terminated?\n                    throw new ReedSolomonException('r_{i-1} was zero');\n                }\n                r = rLastLast;\n                let q = field.getZero();\n                const denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n                const dltInverse = field.inverse(denominatorLeadingTerm);\n                while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n                    const degreeDiff = r.getDegree() - rLast.getDegree();\n                    const scale = field.multiply(r.getCoefficient(r.getDegree()), dltInverse);\n                    q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));\n                    r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));\n                }\n                t = q.multiply(tLast).addOrSubtract(tLastLast);\n                if (r.getDegree() >= rLast.getDegree()) {\n                    throw new IllegalStateException('Division algorithm failed to reduce polynomial?');\n                }\n            }\n            const sigmaTildeAtZero = t.getCoefficient(0);\n            if (sigmaTildeAtZero === 0) {\n                throw new ReedSolomonException('sigmaTilde(0) was zero');\n            }\n            const inverse = field.inverse(sigmaTildeAtZero);\n            const sigma = t.multiplyScalar(inverse);\n            const omega = r.multiplyScalar(inverse);\n            return [sigma, omega];\n        }\n        findErrorLocations(errorLocator) {\n            // This is a direct application of Chien's search\n            const numErrors = errorLocator.getDegree();\n            if (numErrors === 1) { // shortcut\n                return Int32Array.from([errorLocator.getCoefficient(1)]);\n            }\n            const result = new Int32Array(numErrors);\n            let e = 0;\n            const field = this.field;\n            for (let i = 1; i < field.getSize() && e < numErrors; i++) {\n                if (errorLocator.evaluateAt(i) === 0) {\n                    result[e] = field.inverse(i);\n                    e++;\n                }\n            }\n            if (e !== numErrors) {\n                throw new ReedSolomonException('Error locator degree does not match number of roots');\n            }\n            return result;\n        }\n        findErrorMagnitudes(errorEvaluator, errorLocations) {\n            // This is directly applying Forney's Formula\n            const s = errorLocations.length;\n            const result = new Int32Array(s);\n            const field = this.field;\n            for (let i = 0; i < s; i++) {\n                const xiInverse = field.inverse(errorLocations[i]);\n                let denominator = 1;\n                for (let j = 0; j < s; j++) {\n                    if (i !== j) {\n                        // denominator = field.multiply(denominator,\n                        //    GenericGF.addOrSubtract(1, field.multiply(errorLocations[j], xiInverse)))\n                        // Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.\n                        // Below is a funny-looking workaround from Steven Parkes\n                        const term = field.multiply(errorLocations[j], xiInverse);\n                        const termPlus1 = (term & 0x1) === 0 ? term | 1 : term & ~1;\n                        denominator = field.multiply(denominator, termPlus1);\n                    }\n                }\n                result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator));\n                if (field.getGeneratorBase() !== 0) {\n                    result[i] = field.multiply(result[i], xiInverse);\n                }\n            }\n            return result;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.Arrays;\n    var Table;\n    (function (Table) {\n        Table[Table[\"UPPER\"] = 0] = \"UPPER\";\n        Table[Table[\"LOWER\"] = 1] = \"LOWER\";\n        Table[Table[\"MIXED\"] = 2] = \"MIXED\";\n        Table[Table[\"DIGIT\"] = 3] = \"DIGIT\";\n        Table[Table[\"PUNCT\"] = 4] = \"PUNCT\";\n        Table[Table[\"BINARY\"] = 5] = \"BINARY\";\n    })(Table || (Table = {}));\n    /**\n     * <p>The main class which implements Aztec Code decoding -- as opposed to locating and extracting\n     * the Aztec Code from an image.</p>\n     *\n     * @author David Olivier\n     */\n    class Decoder {\n        decode(detectorResult) {\n            this.ddata = detectorResult;\n            let matrix = detectorResult.getBits();\n            let rawbits = this.extractBits(matrix);\n            let correctedBits = this.correctBits(rawbits);\n            let rawBytes = Decoder.convertBoolArrayToByteArray(correctedBits);\n            let result = Decoder.getEncodedData(correctedBits);\n            let decoderResult = new DecoderResult(rawBytes, result, null, null);\n            decoderResult.setNumBits(correctedBits.length);\n            return decoderResult;\n        }\n        // This method is used for testing the high-level encoder\n        static highLevelDecode(correctedBits) {\n            return this.getEncodedData(correctedBits);\n        }\n        /**\n         * Gets the string encoded in the aztec code bits\n         *\n         * @return the decoded string\n         */\n        static getEncodedData(correctedBits) {\n            let endIndex = correctedBits.length;\n            let latchTable = Table.UPPER; // table most recently latched to\n            let shiftTable = Table.UPPER; // table to use for the next read\n            let result = '';\n            let index = 0;\n            while (index < endIndex) {\n                if (shiftTable === Table.BINARY) {\n                    if (endIndex - index < 5) {\n                        break;\n                    }\n                    let length = Decoder.readCode(correctedBits, index, 5);\n                    index += 5;\n                    if (length === 0) {\n                        if (endIndex - index < 11) {\n                            break;\n                        }\n                        length = Decoder.readCode(correctedBits, index, 11) + 31;\n                        index += 11;\n                    }\n                    for (let charCount = 0; charCount < length; charCount++) {\n                        if (endIndex - index < 8) {\n                            index = endIndex; // Force outer loop to exit\n                            break;\n                        }\n                        const code = Decoder.readCode(correctedBits, index, 8);\n                        result += /*(char)*/ StringUtils.castAsNonUtf8Char(code);\n                        index += 8;\n                    }\n                    // Go back to whatever mode we had been in\n                    shiftTable = latchTable;\n                }\n                else {\n                    let size = shiftTable === Table.DIGIT ? 4 : 5;\n                    if (endIndex - index < size) {\n                        break;\n                    }\n                    let code = Decoder.readCode(correctedBits, index, size);\n                    index += size;\n                    let str = Decoder.getCharacter(shiftTable, code);\n                    if (str.startsWith('CTRL_')) {\n                        // Table changes\n                        // ISO/IEC 24778:2008 prescribes ending a shift sequence in the mode from which it was invoked.\n                        // That's including when that mode is a shift.\n                        // Our test case dlusbs.png for issue #642 exercises that.\n                        latchTable = shiftTable; // Latch the current mode, so as to return to Upper after U/S B/S\n                        shiftTable = Decoder.getTable(str.charAt(5));\n                        if (str.charAt(6) === 'L') {\n                            latchTable = shiftTable;\n                        }\n                    }\n                    else {\n                        result += str;\n                        // Go back to whatever mode we had been in\n                        shiftTable = latchTable;\n                    }\n                }\n            }\n            return result;\n        }\n        /**\n         * gets the table corresponding to the char passed\n         */\n        static getTable(t) {\n            switch (t) {\n                case 'L':\n                    return Table.LOWER;\n                case 'P':\n                    return Table.PUNCT;\n                case 'M':\n                    return Table.MIXED;\n                case 'D':\n                    return Table.DIGIT;\n                case 'B':\n                    return Table.BINARY;\n                case 'U':\n                default:\n                    return Table.UPPER;\n            }\n        }\n        /**\n         * Gets the character (or string) corresponding to the passed code in the given table\n         *\n         * @param table the table used\n         * @param code the code of the character\n         */\n        static getCharacter(table, code) {\n            switch (table) {\n                case Table.UPPER:\n                    return Decoder.UPPER_TABLE[code];\n                case Table.LOWER:\n                    return Decoder.LOWER_TABLE[code];\n                case Table.MIXED:\n                    return Decoder.MIXED_TABLE[code];\n                case Table.PUNCT:\n                    return Decoder.PUNCT_TABLE[code];\n                case Table.DIGIT:\n                    return Decoder.DIGIT_TABLE[code];\n                default:\n                    // Should not reach here.\n                    throw new IllegalStateException('Bad table');\n            }\n        }\n        /**\n         * <p>Performs RS error correction on an array of bits.</p>\n         *\n         * @return the corrected array\n         * @throws FormatException if the input contains too many errors\n         */\n        correctBits(rawbits) {\n            let gf;\n            let codewordSize;\n            if (this.ddata.getNbLayers() <= 2) {\n                codewordSize = 6;\n                gf = GenericGF.AZTEC_DATA_6;\n            }\n            else if (this.ddata.getNbLayers() <= 8) {\n                codewordSize = 8;\n                gf = GenericGF.AZTEC_DATA_8;\n            }\n            else if (this.ddata.getNbLayers() <= 22) {\n                codewordSize = 10;\n                gf = GenericGF.AZTEC_DATA_10;\n            }\n            else {\n                codewordSize = 12;\n                gf = GenericGF.AZTEC_DATA_12;\n            }\n            let numDataCodewords = this.ddata.getNbDatablocks();\n            let numCodewords = rawbits.length / codewordSize;\n            if (numCodewords < numDataCodewords) {\n                throw new FormatException();\n            }\n            let offset = rawbits.length % codewordSize;\n            let dataWords = new Int32Array(numCodewords);\n            for (let i = 0; i < numCodewords; i++, offset += codewordSize) {\n                dataWords[i] = Decoder.readCode(rawbits, offset, codewordSize);\n            }\n            try {\n                let rsDecoder = new ReedSolomonDecoder(gf);\n                rsDecoder.decode(dataWords, numCodewords - numDataCodewords);\n            }\n            catch (ex) {\n                throw new FormatException(ex);\n            }\n            // Now perform the unstuffing operation.\n            // First, count how many bits are going to be thrown out as stuffing\n            let mask = (1 << codewordSize) - 1;\n            let stuffedBits = 0;\n            for (let i = 0; i < numDataCodewords; i++) {\n                let dataWord = dataWords[i];\n                if (dataWord === 0 || dataWord === mask) {\n                    throw new FormatException();\n                }\n                else if (dataWord === 1 || dataWord === mask - 1) {\n                    stuffedBits++;\n                }\n            }\n            // Now, actually unpack the bits and remove the stuffing\n            let correctedBits = new Array(numDataCodewords * codewordSize - stuffedBits);\n            let index = 0;\n            for (let i = 0; i < numDataCodewords; i++) {\n                let dataWord = dataWords[i];\n                if (dataWord === 1 || dataWord === mask - 1) {\n                    // next codewordSize-1 bits are all zeros or all ones\n                    correctedBits.fill(dataWord > 1, index, index + codewordSize - 1);\n                    // Arrays.fill(correctedBits, index, index + codewordSize - 1, dataWord > 1);\n                    index += codewordSize - 1;\n                }\n                else {\n                    for (let bit = codewordSize - 1; bit >= 0; --bit) {\n                        correctedBits[index++] = (dataWord & (1 << bit)) !== 0;\n                    }\n                }\n            }\n            return correctedBits;\n        }\n        /**\n         * Gets the array of bits from an Aztec Code matrix\n         *\n         * @return the array of bits\n         */\n        extractBits(matrix) {\n            let compact = this.ddata.isCompact();\n            let layers = this.ddata.getNbLayers();\n            let baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n            let alignmentMap = new Int32Array(baseMatrixSize);\n            let rawbits = new Array(this.totalBitsInLayer(layers, compact));\n            if (compact) {\n                for (let i = 0; i < alignmentMap.length; i++) {\n                    alignmentMap[i] = i;\n                }\n            }\n            else {\n                let matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n                let origCenter = baseMatrixSize / 2;\n                let center = Integer.truncDivision(matrixSize, 2);\n                for (let i = 0; i < origCenter; i++) {\n                    let newOffset = i + Integer.truncDivision(i, 15);\n                    alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n                    alignmentMap[origCenter + i] = center + newOffset + 1;\n                }\n            }\n            for (let i = 0, rowOffset = 0; i < layers; i++) {\n                let rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n                // The top-left most point of this layer is <low, low> (not including alignment lines)\n                let low = i * 2;\n                // The bottom-right most point of this layer is <high, high> (not including alignment lines)\n                let high = baseMatrixSize - 1 - low;\n                // We pull bits from the two 2 x rowSize columns and two rowSize x 2 rows\n                for (let j = 0; j < rowSize; j++) {\n                    let columnOffset = j * 2;\n                    for (let k = 0; k < 2; k++) {\n                        // left column\n                        rawbits[rowOffset + columnOffset + k] =\n                            matrix.get(alignmentMap[low + k], alignmentMap[low + j]);\n                        // bottom row\n                        rawbits[rowOffset + 2 * rowSize + columnOffset + k] =\n                            matrix.get(alignmentMap[low + j], alignmentMap[high - k]);\n                        // right column\n                        rawbits[rowOffset + 4 * rowSize + columnOffset + k] =\n                            matrix.get(alignmentMap[high - k], alignmentMap[high - j]);\n                        // top row\n                        rawbits[rowOffset + 6 * rowSize + columnOffset + k] =\n                            matrix.get(alignmentMap[high - j], alignmentMap[low + k]);\n                    }\n                }\n                rowOffset += rowSize * 8;\n            }\n            return rawbits;\n        }\n        /**\n         * Reads a code of given length and at given index in an array of bits\n         */\n        static readCode(rawbits, startIndex, length) {\n            let res = 0;\n            for (let i = startIndex; i < startIndex + length; i++) {\n                res <<= 1;\n                if (rawbits[i]) {\n                    res |= 0x01;\n                }\n            }\n            return res;\n        }\n        /**\n         * Reads a code of length 8 in an array of bits, padding with zeros\n         */\n        static readByte(rawbits, startIndex) {\n            let n = rawbits.length - startIndex;\n            if (n >= 8) {\n                return Decoder.readCode(rawbits, startIndex, 8);\n            }\n            return Decoder.readCode(rawbits, startIndex, n) << (8 - n);\n        }\n        /**\n         * Packs a bit array into bytes, most significant bit first\n         */\n        static convertBoolArrayToByteArray(boolArr) {\n            let byteArr = new Uint8Array((boolArr.length + 7) / 8);\n            for (let i = 0; i < byteArr.length; i++) {\n                byteArr[i] = Decoder.readByte(boolArr, 8 * i);\n            }\n            return byteArr;\n        }\n        totalBitsInLayer(layers, compact) {\n            return ((compact ? 88 : 112) + 16 * layers) * layers;\n        }\n    }\n    Decoder.UPPER_TABLE = [\n        'CTRL_PS', ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',\n        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'CTRL_LL', 'CTRL_ML', 'CTRL_DL', 'CTRL_BS'\n    ];\n    Decoder.LOWER_TABLE = [\n        'CTRL_PS', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',\n        'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'CTRL_US', 'CTRL_ML', 'CTRL_DL', 'CTRL_BS'\n    ];\n    Decoder.MIXED_TABLE = [\n        // Module parse failed: Octal literal in strict mode (50:29)\n        // so number string were scaped\n        'CTRL_PS', ' ', '\\\\1', '\\\\2', '\\\\3', '\\\\4', '\\\\5', '\\\\6', '\\\\7', '\\b', '\\t', '\\n',\n        '\\\\13', '\\f', '\\r', '\\\\33', '\\\\34', '\\\\35', '\\\\36', '\\\\37', '@', '\\\\', '^', '_',\n        '`', '|', '~', '\\\\177', 'CTRL_LL', 'CTRL_UL', 'CTRL_PL', 'CTRL_BS'\n    ];\n    Decoder.PUNCT_TABLE = [\n        '', '\\r', '\\r\\n', '. ', ', ', ': ', '!', '\"', '#', '$', '%', '&', '\\'', '(', ')',\n        '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '[', ']', '{', '}', 'CTRL_UL'\n    ];\n    Decoder.DIGIT_TABLE = [\n        'CTRL_PS', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.', 'CTRL_UL', 'CTRL_US'\n    ];\n\n    /*\n     * Copyright 2012 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing.common.detector {*/\n    /**\n     * General math-related and numeric utility functions.\n     */\n    class MathUtils {\n        constructor() { }\n        /**\n         * Ends up being a bit faster than {@link Math#round(float)}. This merely rounds its\n         * argument to the nearest int, where x.5 rounds up to x+1. Semantics of this shortcut\n         * differ slightly from {@link Math#round(float)} in that half rounds down for negative\n         * values. -2.5 rounds to -3, not -2. For purposes here it makes no difference.\n         *\n         * @param d real value to round\n         * @return nearest {@code int}\n         */\n        static round(d /*float*/) {\n            if (NaN === d)\n                return 0;\n            if (d <= Number.MIN_SAFE_INTEGER)\n                return Number.MIN_SAFE_INTEGER;\n            if (d >= Number.MAX_SAFE_INTEGER)\n                return Number.MAX_SAFE_INTEGER;\n            return /*(int) */ (d + (d < 0.0 ? -0.5 : 0.5)) | 0;\n        }\n        // TYPESCRIPTPORT: maybe remove round method and call directly Math.round, it looks like it doesn't make sense for js\n        /**\n         * @param aX point A x coordinate\n         * @param aY point A y coordinate\n         * @param bX point B x coordinate\n         * @param bY point B y coordinate\n         * @return Euclidean distance between points A and B\n         */\n        static distance(aX /*float|int*/, aY /*float|int*/, bX /*float|int*/, bY /*float|int*/) {\n            const xDiff = aX - bX;\n            const yDiff = aY - bY;\n            return /*(float) */ Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n        }\n        /**\n         * @param aX point A x coordinate\n         * @param aY point A y coordinate\n         * @param bX point B x coordinate\n         * @param bY point B y coordinate\n         * @return Euclidean distance between points A and B\n         */\n        // public static distance(aX: number /*int*/, aY: number /*int*/, bX: number /*int*/, bY: number /*int*/): float {\n        //   const xDiff = aX - bX\n        //   const yDiff = aY - bY\n        //   return (float) Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n        // }\n        /**\n         * @param array values to sum\n         * @return sum of values in array\n         */\n        static sum(array) {\n            let count = 0;\n            for (let i = 0, length = array.length; i !== length; i++) {\n                const a = array[i];\n                count += a;\n            }\n            return count;\n        }\n    }\n\n    /**\n     * Ponyfill for Java's Float class.\n     */\n    class Float {\n        /**\n         * SincTS has no difference between int and float, there's all numbers,\n         * this is used only to polyfill Java code.\n         */\n        static floatToIntBits(f) {\n            return f;\n        }\n    }\n    /**\n     * The float max value in JS is the number max value.\n     */\n    Float.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a point of interest in an image containing a barcode. Typically, this\n     * would be the location of a finder pattern or the corner of the barcode, for example.</p>\n     *\n     * @author Sean Owen\n     */\n    class ResultPoint {\n        constructor(x, y) {\n            this.x = x;\n            this.y = y;\n        }\n        getX() {\n            return this.x;\n        }\n        getY() {\n            return this.y;\n        }\n        /*@Override*/\n        equals(other) {\n            if (other instanceof ResultPoint) {\n                const otherPoint = other;\n                return this.x === otherPoint.x && this.y === otherPoint.y;\n            }\n            return false;\n        }\n        /*@Override*/\n        hashCode() {\n            return 31 * Float.floatToIntBits(this.x) + Float.floatToIntBits(this.y);\n        }\n        /*@Override*/\n        toString() {\n            return '(' + this.x + ',' + this.y + ')';\n        }\n        /**\n         * Orders an array of three ResultPoints in an order [A,B,C] such that AB is less than AC\n         * and BC is less than AC, and the angle between BC and BA is less than 180 degrees.\n         *\n         * @param patterns array of three {@code ResultPoint} to order\n         */\n        static orderBestPatterns(patterns) {\n            // Find distances between pattern centers\n            const zeroOneDistance = this.distance(patterns[0], patterns[1]);\n            const oneTwoDistance = this.distance(patterns[1], patterns[2]);\n            const zeroTwoDistance = this.distance(patterns[0], patterns[2]);\n            let pointA;\n            let pointB;\n            let pointC;\n            // Assume one closest to other two is B; A and C will just be guesses at first\n            if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) {\n                pointB = patterns[0];\n                pointA = patterns[1];\n                pointC = patterns[2];\n            }\n            else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) {\n                pointB = patterns[1];\n                pointA = patterns[0];\n                pointC = patterns[2];\n            }\n            else {\n                pointB = patterns[2];\n                pointA = patterns[0];\n                pointC = patterns[1];\n            }\n            // Use cross product to figure out whether A and C are correct or flipped.\n            // This asks whether BC x BA has a positive z component, which is the arrangement\n            // we want for A, B, C. If it's negative, then we've got it flipped around and\n            // should swap A and C.\n            if (this.crossProductZ(pointA, pointB, pointC) < 0.0) {\n                const temp = pointA;\n                pointA = pointC;\n                pointC = temp;\n            }\n            patterns[0] = pointA;\n            patterns[1] = pointB;\n            patterns[2] = pointC;\n        }\n        /**\n         * @param pattern1 first pattern\n         * @param pattern2 second pattern\n         * @return distance between two points\n         */\n        static distance(pattern1, pattern2) {\n            return MathUtils.distance(pattern1.x, pattern1.y, pattern2.x, pattern2.y);\n        }\n        /**\n         * Returns the z component of the cross product between vectors BC and BA.\n         */\n        static crossProductZ(pointA, pointB, pointC) {\n            const bX = pointB.x;\n            const bY = pointB.y;\n            return ((pointC.x - bX) * (pointA.y - bY)) - ((pointC.y - bY) * (pointA.x - bX));\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates the result of detecting a barcode in an image. This includes the raw\n     * matrix of black/white pixels corresponding to the barcode, and possibly points of interest\n     * in the image, like the location of finder patterns or corners of the barcode in the image.</p>\n     *\n     * @author Sean Owen\n     */\n    class DetectorResult {\n        constructor(bits, points) {\n            this.bits = bits;\n            this.points = points;\n        }\n        getBits() {\n            return this.bits;\n        }\n        getPoints() {\n            return this.points;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Extends {@link DetectorResult} with more information specific to the Aztec format,\n     * like the number of layers and whether it's compact.</p>\n     *\n     * @author Sean Owen\n     */\n    class AztecDetectorResult extends DetectorResult {\n        constructor(bits, points, compact, nbDatablocks, nbLayers) {\n            super(bits, points);\n            this.compact = compact;\n            this.nbDatablocks = nbDatablocks;\n            this.nbLayers = nbLayers;\n        }\n        getNbLayers() {\n            return this.nbLayers;\n        }\n        getNbDatablocks() {\n            return this.nbDatablocks;\n        }\n        isCompact() {\n            return this.compact;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>\n     * Detects a candidate barcode-like rectangular region within an image. It\n     * starts around the center of the image, increases the size of the candidate\n     * region until it finds a white rectangular region. By keeping track of the\n     * last black points it encountered, it determines the corners of the barcode.\n     * </p>\n     *\n     * @author David Olivier\n     */\n    class WhiteRectangleDetector {\n        // public constructor(private image: BitMatrix) /*throws NotFoundException*/ {\n        //   this(image, INIT_SIZE, image.getWidth() / 2, image.getHeight() / 2)\n        // }\n        /**\n         * @param image barcode image to find a rectangle in\n         * @param initSize initial size of search area around center\n         * @param x x position of search center\n         * @param y y position of search center\n         * @throws NotFoundException if image is too small to accommodate {@code initSize}\n         */\n        constructor(image, initSize /*int*/, x /*int*/, y /*int*/) {\n            this.image = image;\n            this.height = image.getHeight();\n            this.width = image.getWidth();\n            if (undefined === initSize || null === initSize) {\n                initSize = WhiteRectangleDetector.INIT_SIZE;\n            }\n            if (undefined === x || null === x) {\n                x = image.getWidth() / 2 | 0;\n            }\n            if (undefined === y || null === y) {\n                y = image.getHeight() / 2 | 0;\n            }\n            const halfsize = initSize / 2 | 0;\n            this.leftInit = x - halfsize;\n            this.rightInit = x + halfsize;\n            this.upInit = y - halfsize;\n            this.downInit = y + halfsize;\n            if (this.upInit < 0 || this.leftInit < 0 || this.downInit >= this.height || this.rightInit >= this.width) {\n                throw new NotFoundException();\n            }\n        }\n        /**\n         * <p>\n         * Detects a candidate barcode-like rectangular region within an image. It\n         * starts around the center of the image, increases the size of the candidate\n         * region until it finds a white rectangular region.\n         * </p>\n         *\n         * @return {@link ResultPoint}[] describing the corners of the rectangular\n         *         region. The first and last points are opposed on the diagonal, as\n         *         are the second and third. The first point will be the topmost\n         *         point and the last, the bottommost. The second point will be\n         *         leftmost and the third, the rightmost\n         * @throws NotFoundException if no Data Matrix Code can be found\n         */\n        detect() {\n            let left = this.leftInit;\n            let right = this.rightInit;\n            let up = this.upInit;\n            let down = this.downInit;\n            let sizeExceeded = false;\n            let aBlackPointFoundOnBorder = true;\n            let atLeastOneBlackPointFoundOnBorder = false;\n            let atLeastOneBlackPointFoundOnRight = false;\n            let atLeastOneBlackPointFoundOnBottom = false;\n            let atLeastOneBlackPointFoundOnLeft = false;\n            let atLeastOneBlackPointFoundOnTop = false;\n            const width = this.width;\n            const height = this.height;\n            while (aBlackPointFoundOnBorder) {\n                aBlackPointFoundOnBorder = false;\n                // .....\n                // .   |\n                // .....\n                let rightBorderNotWhite = true;\n                while ((rightBorderNotWhite || !atLeastOneBlackPointFoundOnRight) && right < width) {\n                    rightBorderNotWhite = this.containsBlackPoint(up, down, right, false);\n                    if (rightBorderNotWhite) {\n                        right++;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnRight = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnRight) {\n                        right++;\n                    }\n                }\n                if (right >= width) {\n                    sizeExceeded = true;\n                    break;\n                }\n                // .....\n                // .   .\n                // .___.\n                let bottomBorderNotWhite = true;\n                while ((bottomBorderNotWhite || !atLeastOneBlackPointFoundOnBottom) && down < height) {\n                    bottomBorderNotWhite = this.containsBlackPoint(left, right, down, true);\n                    if (bottomBorderNotWhite) {\n                        down++;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnBottom = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnBottom) {\n                        down++;\n                    }\n                }\n                if (down >= height) {\n                    sizeExceeded = true;\n                    break;\n                }\n                // .....\n                // |   .\n                // .....\n                let leftBorderNotWhite = true;\n                while ((leftBorderNotWhite || !atLeastOneBlackPointFoundOnLeft) && left >= 0) {\n                    leftBorderNotWhite = this.containsBlackPoint(up, down, left, false);\n                    if (leftBorderNotWhite) {\n                        left--;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnLeft = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnLeft) {\n                        left--;\n                    }\n                }\n                if (left < 0) {\n                    sizeExceeded = true;\n                    break;\n                }\n                // .___.\n                // .   .\n                // .....\n                let topBorderNotWhite = true;\n                while ((topBorderNotWhite || !atLeastOneBlackPointFoundOnTop) && up >= 0) {\n                    topBorderNotWhite = this.containsBlackPoint(left, right, up, true);\n                    if (topBorderNotWhite) {\n                        up--;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnTop = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnTop) {\n                        up--;\n                    }\n                }\n                if (up < 0) {\n                    sizeExceeded = true;\n                    break;\n                }\n                if (aBlackPointFoundOnBorder) {\n                    atLeastOneBlackPointFoundOnBorder = true;\n                }\n            }\n            if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) {\n                const maxSize = right - left;\n                let z = null;\n                for (let i = 1; z === null && i < maxSize; i++) {\n                    z = this.getBlackPointOnSegment(left, down - i, left + i, down);\n                }\n                if (z == null) {\n                    throw new NotFoundException();\n                }\n                let t = null;\n                // go down right\n                for (let i = 1; t === null && i < maxSize; i++) {\n                    t = this.getBlackPointOnSegment(left, up + i, left + i, up);\n                }\n                if (t == null) {\n                    throw new NotFoundException();\n                }\n                let x = null;\n                // go down left\n                for (let i = 1; x === null && i < maxSize; i++) {\n                    x = this.getBlackPointOnSegment(right, up + i, right - i, up);\n                }\n                if (x == null) {\n                    throw new NotFoundException();\n                }\n                let y = null;\n                // go up left\n                for (let i = 1; y === null && i < maxSize; i++) {\n                    y = this.getBlackPointOnSegment(right, down - i, right - i, down);\n                }\n                if (y == null) {\n                    throw new NotFoundException();\n                }\n                return this.centerEdges(y, z, x, t);\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n        getBlackPointOnSegment(aX /*float*/, aY /*float*/, bX /*float*/, bY /*float*/) {\n            const dist = MathUtils.round(MathUtils.distance(aX, aY, bX, bY));\n            const xStep = (bX - aX) / dist;\n            const yStep = (bY - aY) / dist;\n            const image = this.image;\n            for (let i = 0; i < dist; i++) {\n                const x = MathUtils.round(aX + i * xStep);\n                const y = MathUtils.round(aY + i * yStep);\n                if (image.get(x, y)) {\n                    return new ResultPoint(x, y);\n                }\n            }\n            return null;\n        }\n        /**\n         * recenters the points of a constant distance towards the center\n         *\n         * @param y bottom most point\n         * @param z left most point\n         * @param x right most point\n         * @param t top most point\n         * @return {@link ResultPoint}[] describing the corners of the rectangular\n         *         region. The first and last points are opposed on the diagonal, as\n         *         are the second and third. The first point will be the topmost\n         *         point and the last, the bottommost. The second point will be\n         *         leftmost and the third, the rightmost\n         */\n        centerEdges(y, z, x, t) {\n            //\n            //       t            t\n            //  z                      x\n            //        x    OR    z\n            //   y                    y\n            //\n            const yi = y.getX();\n            const yj = y.getY();\n            const zi = z.getX();\n            const zj = z.getY();\n            const xi = x.getX();\n            const xj = x.getY();\n            const ti = t.getX();\n            const tj = t.getY();\n            const CORR = WhiteRectangleDetector.CORR;\n            if (yi < this.width / 2.0) {\n                return [\n                    new ResultPoint(ti - CORR, tj + CORR),\n                    new ResultPoint(zi + CORR, zj + CORR),\n                    new ResultPoint(xi - CORR, xj - CORR),\n                    new ResultPoint(yi + CORR, yj - CORR)\n                ];\n            }\n            else {\n                return [\n                    new ResultPoint(ti + CORR, tj + CORR),\n                    new ResultPoint(zi + CORR, zj - CORR),\n                    new ResultPoint(xi - CORR, xj + CORR),\n                    new ResultPoint(yi - CORR, yj - CORR)\n                ];\n            }\n        }\n        /**\n         * Determines whether a segment contains a black point\n         *\n         * @param a          min value of the scanned coordinate\n         * @param b          max value of the scanned coordinate\n         * @param fixed      value of fixed coordinate\n         * @param horizontal set to true if scan must be horizontal, false if vertical\n         * @return true if a black point has been found, else false.\n         */\n        containsBlackPoint(a /*int*/, b /*int*/, fixed /*int*/, horizontal) {\n            const image = this.image;\n            if (horizontal) {\n                for (let x = a; x <= b; x++) {\n                    if (image.get(x, fixed)) {\n                        return true;\n                    }\n                }\n            }\n            else {\n                for (let y = a; y <= b; y++) {\n                    if (image.get(fixed, y)) {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n    }\n    WhiteRectangleDetector.INIT_SIZE = 10;\n    WhiteRectangleDetector.CORR = 1;\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * Implementations of this class can, given locations of finder patterns for a QR code in an\n     * image, sample the right points in the image to reconstruct the QR code, accounting for\n     * perspective distortion. It is abstracted since it is relatively expensive and should be allowed\n     * to take advantage of platform-specific optimized implementations, like Sun's Java Advanced\n     * Imaging library, but which may not be available in other environments such as J2ME, and vice\n     * versa.\n     *\n     * The implementation used can be controlled by calling {@link #setGridSampler(GridSampler)}\n     * with an instance of a class which implements this interface.\n     *\n     * @author Sean Owen\n     */\n    class GridSampler {\n        /**\n         * <p>Checks a set of points that have been transformed to sample points on an image against\n         * the image's dimensions to see if the point are even within the image.</p>\n         *\n         * <p>This method will actually \"nudge\" the endpoints back onto the image if they are found to be\n         * barely (less than 1 pixel) off the image. This accounts for imperfect detection of finder\n         * patterns in an image where the QR Code runs all the way to the image border.</p>\n         *\n         * <p>For efficiency, the method will check points from either end of the line until one is found\n         * to be within the image. Because the set of points are assumed to be linear, this is valid.</p>\n         *\n         * @param image image into which the points should map\n         * @param points actual points in x1,y1,...,xn,yn form\n         * @throws NotFoundException if an endpoint is lies outside the image boundaries\n         */\n        static checkAndNudgePoints(image, points) {\n            const width = image.getWidth();\n            const height = image.getHeight();\n            // Check and nudge points from start until we see some that are OK:\n            let nudged = true;\n            for (let offset = 0; offset < points.length && nudged; offset += 2) {\n                const x = Math.floor(points[offset]);\n                const y = Math.floor(points[offset + 1]);\n                if (x < -1 || x > width || y < -1 || y > height) {\n                    throw new NotFoundException();\n                }\n                nudged = false;\n                if (x === -1) {\n                    points[offset] = 0.0;\n                    nudged = true;\n                }\n                else if (x === width) {\n                    points[offset] = width - 1;\n                    nudged = true;\n                }\n                if (y === -1) {\n                    points[offset + 1] = 0.0;\n                    nudged = true;\n                }\n                else if (y === height) {\n                    points[offset + 1] = height - 1;\n                    nudged = true;\n                }\n            }\n            // Check and nudge points from end:\n            nudged = true;\n            for (let offset = points.length - 2; offset >= 0 && nudged; offset -= 2) {\n                const x = Math.floor(points[offset]);\n                const y = Math.floor(points[offset + 1]);\n                if (x < -1 || x > width || y < -1 || y > height) {\n                    throw new NotFoundException();\n                }\n                nudged = false;\n                if (x === -1) {\n                    points[offset] = 0.0;\n                    nudged = true;\n                }\n                else if (x === width) {\n                    points[offset] = width - 1;\n                    nudged = true;\n                }\n                if (y === -1) {\n                    points[offset + 1] = 0.0;\n                    nudged = true;\n                }\n                else if (y === height) {\n                    points[offset + 1] = height - 1;\n                    nudged = true;\n                }\n            }\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing.common {*/\n    /**\n     * <p>This class implements a perspective transform in two dimensions. Given four source and four\n     * destination points, it will compute the transformation implied between them. The code is based\n     * directly upon section 3.4.2 of George Wolberg's \"Digital Image Warping\"; see pages 54-56.</p>\n     *\n     * @author Sean Owen\n     */\n    class PerspectiveTransform {\n        constructor(a11 /*float*/, a21 /*float*/, a31 /*float*/, a12 /*float*/, a22 /*float*/, a32 /*float*/, a13 /*float*/, a23 /*float*/, a33 /*float*/) {\n            this.a11 = a11;\n            this.a21 = a21;\n            this.a31 = a31;\n            this.a12 = a12;\n            this.a22 = a22;\n            this.a32 = a32;\n            this.a13 = a13;\n            this.a23 = a23;\n            this.a33 = a33;\n        }\n        static quadrilateralToQuadrilateral(x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/, x0p /*float*/, y0p /*float*/, x1p /*float*/, y1p /*float*/, x2p /*float*/, y2p /*float*/, x3p /*float*/, y3p /*float*/) {\n            const qToS = PerspectiveTransform.quadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3);\n            const sToQ = PerspectiveTransform.squareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p);\n            return sToQ.times(qToS);\n        }\n        transformPoints(points) {\n            const max = points.length;\n            const a11 = this.a11;\n            const a12 = this.a12;\n            const a13 = this.a13;\n            const a21 = this.a21;\n            const a22 = this.a22;\n            const a23 = this.a23;\n            const a31 = this.a31;\n            const a32 = this.a32;\n            const a33 = this.a33;\n            for (let i = 0; i < max; i += 2) {\n                const x = points[i];\n                const y = points[i + 1];\n                const denominator = a13 * x + a23 * y + a33;\n                points[i] = (a11 * x + a21 * y + a31) / denominator;\n                points[i + 1] = (a12 * x + a22 * y + a32) / denominator;\n            }\n        }\n        transformPointsWithValues(xValues, yValues) {\n            const a11 = this.a11;\n            const a12 = this.a12;\n            const a13 = this.a13;\n            const a21 = this.a21;\n            const a22 = this.a22;\n            const a23 = this.a23;\n            const a31 = this.a31;\n            const a32 = this.a32;\n            const a33 = this.a33;\n            const n = xValues.length;\n            for (let i = 0; i < n; i++) {\n                const x = xValues[i];\n                const y = yValues[i];\n                const denominator = a13 * x + a23 * y + a33;\n                xValues[i] = (a11 * x + a21 * y + a31) / denominator;\n                yValues[i] = (a12 * x + a22 * y + a32) / denominator;\n            }\n        }\n        static squareToQuadrilateral(x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n            const dx3 = x0 - x1 + x2 - x3;\n            const dy3 = y0 - y1 + y2 - y3;\n            if (dx3 === 0.0 && dy3 === 0.0) {\n                // Affine\n                return new PerspectiveTransform(x1 - x0, x2 - x1, x0, y1 - y0, y2 - y1, y0, 0.0, 0.0, 1.0);\n            }\n            else {\n                const dx1 = x1 - x2;\n                const dx2 = x3 - x2;\n                const dy1 = y1 - y2;\n                const dy2 = y3 - y2;\n                const denominator = dx1 * dy2 - dx2 * dy1;\n                const a13 = (dx3 * dy2 - dx2 * dy3) / denominator;\n                const a23 = (dx1 * dy3 - dx3 * dy1) / denominator;\n                return new PerspectiveTransform(x1 - x0 + a13 * x1, x3 - x0 + a23 * x3, x0, y1 - y0 + a13 * y1, y3 - y0 + a23 * y3, y0, a13, a23, 1.0);\n            }\n        }\n        static quadrilateralToSquare(x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n            // Here, the adjoint serves as the inverse:\n            return PerspectiveTransform.squareToQuadrilateral(x0, y0, x1, y1, x2, y2, x3, y3).buildAdjoint();\n        }\n        buildAdjoint() {\n            // Adjoint is the transpose of the cofactor matrix:\n            return new PerspectiveTransform(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21);\n        }\n        times(other) {\n            return new PerspectiveTransform(this.a11 * other.a11 + this.a21 * other.a12 + this.a31 * other.a13, this.a11 * other.a21 + this.a21 * other.a22 + this.a31 * other.a23, this.a11 * other.a31 + this.a21 * other.a32 + this.a31 * other.a33, this.a12 * other.a11 + this.a22 * other.a12 + this.a32 * other.a13, this.a12 * other.a21 + this.a22 * other.a22 + this.a32 * other.a23, this.a12 * other.a31 + this.a22 * other.a32 + this.a32 * other.a33, this.a13 * other.a11 + this.a23 * other.a12 + this.a33 * other.a13, this.a13 * other.a21 + this.a23 * other.a22 + this.a33 * other.a23, this.a13 * other.a31 + this.a23 * other.a32 + this.a33 * other.a33);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Sean Owen\n     */\n    class DefaultGridSampler extends GridSampler {\n        /*@Override*/\n        sampleGrid(image, dimensionX /*int*/, dimensionY /*int*/, p1ToX /*float*/, p1ToY /*float*/, p2ToX /*float*/, p2ToY /*float*/, p3ToX /*float*/, p3ToY /*float*/, p4ToX /*float*/, p4ToY /*float*/, p1FromX /*float*/, p1FromY /*float*/, p2FromX /*float*/, p2FromY /*float*/, p3FromX /*float*/, p3FromY /*float*/, p4FromX /*float*/, p4FromY /*float*/) {\n            const transform = PerspectiveTransform.quadrilateralToQuadrilateral(p1ToX, p1ToY, p2ToX, p2ToY, p3ToX, p3ToY, p4ToX, p4ToY, p1FromX, p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY);\n            return this.sampleGridWithTransform(image, dimensionX, dimensionY, transform);\n        }\n        /*@Override*/\n        sampleGridWithTransform(image, dimensionX /*int*/, dimensionY /*int*/, transform) {\n            if (dimensionX <= 0 || dimensionY <= 0) {\n                throw new NotFoundException();\n            }\n            const bits = new BitMatrix(dimensionX, dimensionY);\n            const points = new Float32Array(2 * dimensionX);\n            for (let y = 0; y < dimensionY; y++) {\n                const max = points.length;\n                const iValue = y + 0.5;\n                for (let x = 0; x < max; x += 2) {\n                    points[x] = (x / 2) + 0.5;\n                    points[x + 1] = iValue;\n                }\n                transform.transformPoints(points);\n                // Quick check to see if points transformed to something inside the image\n                // sufficient to check the endpoints\n                GridSampler.checkAndNudgePoints(image, points);\n                try {\n                    for (let x = 0; x < max; x += 2) {\n                        if (image.get(Math.floor(points[x]), Math.floor(points[x + 1]))) {\n                            // Black(-ish) pixel\n                            bits.set(x / 2, y);\n                        }\n                    }\n                }\n                catch (aioobe /*: ArrayIndexOutOfBoundsException*/) {\n                    // This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting\n                    // transform gets \"twisted\" such that it maps a straight line of points to a set of points\n                    // whose endpoints are in bounds, but others are not. There is probably some mathematical\n                    // way to detect this about the transformation that I don't know yet.\n                    // This results in an ugly runtime exception despite our clever checks above -- can't have\n                    // that. We could check each point's coordinates but that feels duplicative. We settle for\n                    // catching and wrapping ArrayIndexOutOfBoundsException.\n                    throw new NotFoundException();\n                }\n            }\n            return bits;\n        }\n    }\n\n    class GridSamplerInstance {\n        /**\n         * Sets the implementation of GridSampler used by the library. One global\n         * instance is stored, which may sound problematic. But, the implementation provided\n         * ought to be appropriate for the entire platform, and all uses of this library\n         * in the whole lifetime of the JVM. For instance, an Android activity can swap in\n         * an implementation that takes advantage of native platform libraries.\n         *\n         * @param newGridSampler The platform-specific object to install.\n         */\n        static setGridSampler(newGridSampler) {\n            GridSamplerInstance.gridSampler = newGridSampler;\n        }\n        /**\n         * @return the current implementation of GridSampler\n         */\n        static getInstance() {\n            return GridSamplerInstance.gridSampler;\n        }\n    }\n    GridSamplerInstance.gridSampler = new DefaultGridSampler();\n\n    /*\n     * Copyright 2010 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    class Point {\n        constructor(x, y) {\n            this.x = x;\n            this.y = y;\n        }\n        toResultPoint() {\n            return new ResultPoint(this.getX(), this.getY());\n        }\n        getX() {\n            return this.x;\n        }\n        getY() {\n            return this.y;\n        }\n    }\n    /**\n     * Encapsulates logic that can detect an Aztec Code in an image, even if the Aztec Code\n     * is rotated or skewed, or partially obscured.\n     *\n     * @author David Olivier\n     * @author Frank Yellin\n     */\n    class Detector {\n        constructor(image) {\n            this.EXPECTED_CORNER_BITS = new Int32Array([\n                0xee0,\n                0x1dc,\n                0x83b,\n                0x707,\n            ]);\n            this.image = image;\n        }\n        detect() {\n            return this.detectMirror(false);\n        }\n        /**\n         * Detects an Aztec Code in an image.\n         *\n         * @param isMirror if true, image is a mirror-image of original\n         * @return {@link AztecDetectorResult} encapsulating results of detecting an Aztec Code\n         * @throws NotFoundException if no Aztec Code can be found\n         */\n        detectMirror(isMirror) {\n            // 1. Get the center of the aztec matrix\n            let pCenter = this.getMatrixCenter();\n            // 2. Get the center points of the four diagonal points just outside the bull's eye\n            //  [topRight, bottomRight, bottomLeft, topLeft]\n            let bullsEyeCorners = this.getBullsEyeCorners(pCenter);\n            if (isMirror) {\n                let temp = bullsEyeCorners[0];\n                bullsEyeCorners[0] = bullsEyeCorners[2];\n                bullsEyeCorners[2] = temp;\n            }\n            // 3. Get the size of the matrix and other parameters from the bull's eye\n            this.extractParameters(bullsEyeCorners);\n            // 4. Sample the grid\n            let bits = this.sampleGrid(this.image, bullsEyeCorners[this.shift % 4], bullsEyeCorners[(this.shift + 1) % 4], bullsEyeCorners[(this.shift + 2) % 4], bullsEyeCorners[(this.shift + 3) % 4]);\n            // 5. Get the corners of the matrix.\n            let corners = this.getMatrixCornerPoints(bullsEyeCorners);\n            return new AztecDetectorResult(bits, corners, this.compact, this.nbDataBlocks, this.nbLayers);\n        }\n        /**\n         * Extracts the number of data layers and data blocks from the layer around the bull's eye.\n         *\n         * @param bullsEyeCorners the array of bull's eye corners\n         * @throws NotFoundException in case of too many errors or invalid parameters\n         */\n        extractParameters(bullsEyeCorners) {\n            if (!this.isValidPoint(bullsEyeCorners[0]) || !this.isValidPoint(bullsEyeCorners[1]) ||\n                !this.isValidPoint(bullsEyeCorners[2]) || !this.isValidPoint(bullsEyeCorners[3])) {\n                throw new NotFoundException();\n            }\n            let length = 2 * this.nbCenterLayers;\n            // Get the bits around the bull's eye\n            let sides = new Int32Array([\n                this.sampleLine(bullsEyeCorners[0], bullsEyeCorners[1], length),\n                this.sampleLine(bullsEyeCorners[1], bullsEyeCorners[2], length),\n                this.sampleLine(bullsEyeCorners[2], bullsEyeCorners[3], length),\n                this.sampleLine(bullsEyeCorners[3], bullsEyeCorners[0], length) // Top\n            ]);\n            // bullsEyeCorners[shift] is the corner of the bulls'eye that has three\n            // orientation marks.\n            // sides[shift] is the row/column that goes from the corner with three\n            // orientation marks to the corner with two.\n            this.shift = this.getRotation(sides, length);\n            // Flatten the parameter bits into a single 28- or 40-bit long\n            let parameterData = 0;\n            for (let i = 0; i < 4; i++) {\n                let side = sides[(this.shift + i) % 4];\n                if (this.compact) {\n                    // Each side of the form ..XXXXXXX. where Xs are parameter data\n                    parameterData <<= 7;\n                    parameterData += (side >> 1) & 0x7F;\n                }\n                else {\n                    // Each side of the form ..XXXXX.XXXXX. where Xs are parameter data\n                    parameterData <<= 10;\n                    parameterData += ((side >> 2) & (0x1f << 5)) + ((side >> 1) & 0x1F);\n                }\n            }\n            // Corrects parameter data using RS.  Returns just the data portion\n            // without the error correction.\n            let correctedData = this.getCorrectedParameterData(parameterData, this.compact);\n            if (this.compact) {\n                // 8 bits:  2 bits layers and 6 bits data blocks\n                this.nbLayers = (correctedData >> 6) + 1;\n                this.nbDataBlocks = (correctedData & 0x3F) + 1;\n            }\n            else {\n                // 16 bits:  5 bits layers and 11 bits data blocks\n                this.nbLayers = (correctedData >> 11) + 1;\n                this.nbDataBlocks = (correctedData & 0x7FF) + 1;\n            }\n        }\n        getRotation(sides, length) {\n            // In a normal pattern, we expect to See\n            //   **    .*             D       A\n            //   *      *\n            //\n            //   .      *\n            //   ..    ..             C       B\n            //\n            // Grab the 3 bits from each of the sides the form the locator pattern and concatenate\n            // into a 12-bit integer.  Start with the bit at A\n            let cornerBits = 0;\n            sides.forEach((side, idx, arr) => {\n                // XX......X where X's are orientation marks\n                let t = ((side >> (length - 2)) << 1) + (side & 1);\n                cornerBits = (cornerBits << 3) + t;\n            });\n            // for (var side in sides) {\n            //     // XX......X where X's are orientation marks\n            //     var t = ((side >> (length - 2)) << 1) + (side & 1);\n            //     cornerBits = (cornerBits << 3) + t;\n            // }\n            // Mov the bottom bit to the top, so that the three bits of the locator pattern at A are\n            // together.  cornerBits is now:\n            //  3 orientation bits at A || 3 orientation bits at B || ... || 3 orientation bits at D\n            cornerBits = ((cornerBits & 1) << 11) + (cornerBits >> 1);\n            // The result shift indicates which element of BullsEyeCorners[] goes into the top-left\n            // corner. Since the four rotation values have a Hamming distance of 8, we\n            // can easily tolerate two errors.\n            for (let shift = 0; shift < 4; shift++) {\n                if (Integer.bitCount(cornerBits ^ this.EXPECTED_CORNER_BITS[shift]) <= 2) {\n                    return shift;\n                }\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * Corrects the parameter bits using Reed-Solomon algorithm.\n         *\n         * @param parameterData parameter bits\n         * @param compact true if this is a compact Aztec code\n         * @throws NotFoundException if the array contains too many errors\n         */\n        getCorrectedParameterData(parameterData, compact) {\n            let numCodewords;\n            let numDataCodewords;\n            if (compact) {\n                numCodewords = 7;\n                numDataCodewords = 2;\n            }\n            else {\n                numCodewords = 10;\n                numDataCodewords = 4;\n            }\n            let numECCodewords = numCodewords - numDataCodewords;\n            let parameterWords = new Int32Array(numCodewords);\n            for (let i = numCodewords - 1; i >= 0; --i) {\n                parameterWords[i] = parameterData & 0xF;\n                parameterData >>= 4;\n            }\n            try {\n                let rsDecoder = new ReedSolomonDecoder(GenericGF.AZTEC_PARAM);\n                rsDecoder.decode(parameterWords, numECCodewords);\n            }\n            catch (ignored) {\n                throw new NotFoundException();\n            }\n            // Toss the error correction.  Just return the data as an integer\n            let result = 0;\n            for (let i = 0; i < numDataCodewords; i++) {\n                result = (result << 4) + parameterWords[i];\n            }\n            return result;\n        }\n        /**\n         * Finds the corners of a bull-eye centered on the passed point.\n         * This returns the centers of the diagonal points just outside the bull's eye\n         * Returns [topRight, bottomRight, bottomLeft, topLeft]\n         *\n         * @param pCenter Center point\n         * @return The corners of the bull-eye\n         * @throws NotFoundException If no valid bull-eye can be found\n         */\n        getBullsEyeCorners(pCenter) {\n            let pina = pCenter;\n            let pinb = pCenter;\n            let pinc = pCenter;\n            let pind = pCenter;\n            let color = true;\n            for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) {\n                let pouta = this.getFirstDifferent(pina, color, 1, -1);\n                let poutb = this.getFirstDifferent(pinb, color, 1, 1);\n                let poutc = this.getFirstDifferent(pinc, color, -1, 1);\n                let poutd = this.getFirstDifferent(pind, color, -1, -1);\n                // d      a\n                //\n                // c      b\n                if (this.nbCenterLayers > 2) {\n                    let q = (this.distancePoint(poutd, pouta) * this.nbCenterLayers) / (this.distancePoint(pind, pina) * (this.nbCenterLayers + 2));\n                    if (q < 0.75 || q > 1.25 || !this.isWhiteOrBlackRectangle(pouta, poutb, poutc, poutd)) {\n                        break;\n                    }\n                }\n                pina = pouta;\n                pinb = poutb;\n                pinc = poutc;\n                pind = poutd;\n                color = !color;\n            }\n            if (this.nbCenterLayers !== 5 && this.nbCenterLayers !== 7) {\n                throw new NotFoundException();\n            }\n            this.compact = this.nbCenterLayers === 5;\n            // Expand the square by .5 pixel in each direction so that we're on the border\n            // between the white square and the black square\n            let pinax = new ResultPoint(pina.getX() + 0.5, pina.getY() - 0.5);\n            let pinbx = new ResultPoint(pinb.getX() + 0.5, pinb.getY() + 0.5);\n            let pincx = new ResultPoint(pinc.getX() - 0.5, pinc.getY() + 0.5);\n            let pindx = new ResultPoint(pind.getX() - 0.5, pind.getY() - 0.5);\n            // Expand the square so that its corners are the centers of the points\n            // just outside the bull's eye.\n            return this.expandSquare([pinax, pinbx, pincx, pindx], 2 * this.nbCenterLayers - 3, 2 * this.nbCenterLayers);\n        }\n        /**\n         * Finds a candidate center point of an Aztec code from an image\n         *\n         * @return the center point\n         */\n        getMatrixCenter() {\n            let pointA;\n            let pointB;\n            let pointC;\n            let pointD;\n            // Get a white rectangle that can be the border of the matrix in center bull's eye or\n            try {\n                let cornerPoints = new WhiteRectangleDetector(this.image).detect();\n                pointA = cornerPoints[0];\n                pointB = cornerPoints[1];\n                pointC = cornerPoints[2];\n                pointD = cornerPoints[3];\n            }\n            catch (e) {\n                // This exception can be in case the initial rectangle is white\n                // In that case, surely in the bull's eye, we try to expand the rectangle.\n                let cx = this.image.getWidth() / 2;\n                let cy = this.image.getHeight() / 2;\n                pointA = this.getFirstDifferent(new Point(cx + 7, cy - 7), false, 1, -1).toResultPoint();\n                pointB = this.getFirstDifferent(new Point(cx + 7, cy + 7), false, 1, 1).toResultPoint();\n                pointC = this.getFirstDifferent(new Point(cx - 7, cy + 7), false, -1, 1).toResultPoint();\n                pointD = this.getFirstDifferent(new Point(cx - 7, cy - 7), false, -1, -1).toResultPoint();\n            }\n            // Compute the center of the rectangle\n            let cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n            let cy = MathUtils.round((pointA.getY() + pointD.getY() + pointB.getY() + pointC.getY()) / 4.0);\n            // Redetermine the white rectangle starting from previously computed center.\n            // This will ensure that we end up with a white rectangle in center bull's eye\n            // in order to compute a more accurate center.\n            try {\n                let cornerPoints = new WhiteRectangleDetector(this.image, 15, cx, cy).detect();\n                pointA = cornerPoints[0];\n                pointB = cornerPoints[1];\n                pointC = cornerPoints[2];\n                pointD = cornerPoints[3];\n            }\n            catch (e) {\n                // This exception can be in case the initial rectangle is white\n                // In that case we try to expand the rectangle.\n                pointA = this.getFirstDifferent(new Point(cx + 7, cy - 7), false, 1, -1).toResultPoint();\n                pointB = this.getFirstDifferent(new Point(cx + 7, cy + 7), false, 1, 1).toResultPoint();\n                pointC = this.getFirstDifferent(new Point(cx - 7, cy + 7), false, -1, 1).toResultPoint();\n                pointD = this.getFirstDifferent(new Point(cx - 7, cy - 7), false, -1, -1).toResultPoint();\n            }\n            // Recompute the center of the rectangle\n            cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n            cy = MathUtils.round((pointA.getY() + pointD.getY() + pointB.getY() + pointC.getY()) / 4.0);\n            return new Point(cx, cy);\n        }\n        /**\n         * Gets the Aztec code corners from the bull's eye corners and the parameters.\n         *\n         * @param bullsEyeCorners the array of bull's eye corners\n         * @return the array of aztec code corners\n         */\n        getMatrixCornerPoints(bullsEyeCorners) {\n            return this.expandSquare(bullsEyeCorners, 2 * this.nbCenterLayers, this.getDimension());\n        }\n        /**\n         * Creates a BitMatrix by sampling the provided image.\n         * topLeft, topRight, bottomRight, and bottomLeft are the centers of the squares on the\n         * diagonal just outside the bull's eye.\n         */\n        sampleGrid(image, topLeft, topRight, bottomRight, bottomLeft) {\n            let sampler = GridSamplerInstance.getInstance();\n            let dimension = this.getDimension();\n            let low = dimension / 2 - this.nbCenterLayers;\n            let high = dimension / 2 + this.nbCenterLayers;\n            return sampler.sampleGrid(image, dimension, dimension, low, low, // topleft\n            high, low, // topright\n            high, high, // bottomright\n            low, high, // bottomleft\n            topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRight.getX(), bottomRight.getY(), bottomLeft.getX(), bottomLeft.getY());\n        }\n        /**\n         * Samples a line.\n         *\n         * @param p1   start point (inclusive)\n         * @param p2   end point (exclusive)\n         * @param size number of bits\n         * @return the array of bits as an int (first bit is high-order bit of result)\n         */\n        sampleLine(p1, p2, size) {\n            let result = 0;\n            let d = this.distanceResultPoint(p1, p2);\n            let moduleSize = d / size;\n            let px = p1.getX();\n            let py = p1.getY();\n            let dx = moduleSize * (p2.getX() - p1.getX()) / d;\n            let dy = moduleSize * (p2.getY() - p1.getY()) / d;\n            for (let i = 0; i < size; i++) {\n                if (this.image.get(MathUtils.round(px + i * dx), MathUtils.round(py + i * dy))) {\n                    result |= 1 << (size - i - 1);\n                }\n            }\n            return result;\n        }\n        /**\n         * @return true if the border of the rectangle passed in parameter is compound of white points only\n         *         or black points only\n         */\n        isWhiteOrBlackRectangle(p1, p2, p3, p4) {\n            let corr = 3;\n            p1 = new Point(p1.getX() - corr, p1.getY() + corr);\n            p2 = new Point(p2.getX() - corr, p2.getY() - corr);\n            p3 = new Point(p3.getX() + corr, p3.getY() - corr);\n            p4 = new Point(p4.getX() + corr, p4.getY() + corr);\n            let cInit = this.getColor(p4, p1);\n            if (cInit === 0) {\n                return false;\n            }\n            let c = this.getColor(p1, p2);\n            if (c !== cInit) {\n                return false;\n            }\n            c = this.getColor(p2, p3);\n            if (c !== cInit) {\n                return false;\n            }\n            c = this.getColor(p3, p4);\n            return c === cInit;\n        }\n        /**\n         * Gets the color of a segment\n         *\n         * @return 1 if segment more than 90% black, -1 if segment is more than 90% white, 0 else\n         */\n        getColor(p1, p2) {\n            let d = this.distancePoint(p1, p2);\n            let dx = (p2.getX() - p1.getX()) / d;\n            let dy = (p2.getY() - p1.getY()) / d;\n            let error = 0;\n            let px = p1.getX();\n            let py = p1.getY();\n            let colorModel = this.image.get(p1.getX(), p1.getY());\n            let iMax = Math.ceil(d);\n            for (let i = 0; i < iMax; i++) {\n                px += dx;\n                py += dy;\n                if (this.image.get(MathUtils.round(px), MathUtils.round(py)) !== colorModel) {\n                    error++;\n                }\n            }\n            let errRatio = error / d;\n            if (errRatio > 0.1 && errRatio < 0.9) {\n                return 0;\n            }\n            return (errRatio <= 0.1) === colorModel ? 1 : -1;\n        }\n        /**\n         * Gets the coordinate of the first point with a different color in the given direction\n         */\n        getFirstDifferent(init, color, dx, dy) {\n            let x = init.getX() + dx;\n            let y = init.getY() + dy;\n            while (this.isValid(x, y) && this.image.get(x, y) === color) {\n                x += dx;\n                y += dy;\n            }\n            x -= dx;\n            y -= dy;\n            while (this.isValid(x, y) && this.image.get(x, y) === color) {\n                x += dx;\n            }\n            x -= dx;\n            while (this.isValid(x, y) && this.image.get(x, y) === color) {\n                y += dy;\n            }\n            y -= dy;\n            return new Point(x, y);\n        }\n        /**\n         * Expand the square represented by the corner points by pushing out equally in all directions\n         *\n         * @param cornerPoints the corners of the square, which has the bull's eye at its center\n         * @param oldSide the original length of the side of the square in the target bit matrix\n         * @param newSide the new length of the size of the square in the target bit matrix\n         * @return the corners of the expanded square\n         */\n        expandSquare(cornerPoints, oldSide, newSide) {\n            let ratio = newSide / (2.0 * oldSide);\n            let dx = cornerPoints[0].getX() - cornerPoints[2].getX();\n            let dy = cornerPoints[0].getY() - cornerPoints[2].getY();\n            let centerx = (cornerPoints[0].getX() + cornerPoints[2].getX()) / 2.0;\n            let centery = (cornerPoints[0].getY() + cornerPoints[2].getY()) / 2.0;\n            let result0 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n            let result2 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n            dx = cornerPoints[1].getX() - cornerPoints[3].getX();\n            dy = cornerPoints[1].getY() - cornerPoints[3].getY();\n            centerx = (cornerPoints[1].getX() + cornerPoints[3].getX()) / 2.0;\n            centery = (cornerPoints[1].getY() + cornerPoints[3].getY()) / 2.0;\n            let result1 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n            let result3 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n            let results = [result0, result1, result2, result3];\n            return results;\n        }\n        isValid(x, y) {\n            return x >= 0 && x < this.image.getWidth() && y > 0 && y < this.image.getHeight();\n        }\n        isValidPoint(point) {\n            let x = MathUtils.round(point.getX());\n            let y = MathUtils.round(point.getY());\n            return this.isValid(x, y);\n        }\n        distancePoint(a, b) {\n            return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n        }\n        distanceResultPoint(a, b) {\n            return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n        }\n        getDimension() {\n            if (this.compact) {\n                return 4 * this.nbLayers + 11;\n            }\n            if (this.nbLayers <= 4) {\n                return 4 * this.nbLayers + 15;\n            }\n            return 4 * this.nbLayers + 2 * (Integer.truncDivision((this.nbLayers - 4), 8) + 1) + 15;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.List;\n    // import java.util.Map;\n    /**\n     * This implementation can detect and decode Aztec codes in an image.\n     *\n     * @author David Olivier\n     */\n    class AztecReader {\n        /**\n         * Locates and decodes a Data Matrix code in an image.\n         *\n         * @return a String representing the content encoded by the Data Matrix code\n         * @throws NotFoundException if a Data Matrix code cannot be found\n         * @throws FormatException if a Data Matrix code cannot be decoded\n         */\n        decode(image, hints = null) {\n            let exception = null;\n            let detector = new Detector(image.getBlackMatrix());\n            let points = null;\n            let decoderResult = null;\n            try {\n                let detectorResult = detector.detectMirror(false);\n                points = detectorResult.getPoints();\n                this.reportFoundResultPoints(hints, points);\n                decoderResult = new Decoder().decode(detectorResult);\n            }\n            catch (e) {\n                exception = e;\n            }\n            if (decoderResult == null) {\n                try {\n                    let detectorResult = detector.detectMirror(true);\n                    points = detectorResult.getPoints();\n                    this.reportFoundResultPoints(hints, points);\n                    decoderResult = new Decoder().decode(detectorResult);\n                }\n                catch (e) {\n                    if (exception != null) {\n                        throw exception;\n                    }\n                    throw e;\n                }\n            }\n            let result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), decoderResult.getNumBits(), points, BarcodeFormat$1.AZTEC, System.currentTimeMillis());\n            let byteSegments = decoderResult.getByteSegments();\n            if (byteSegments != null) {\n                result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);\n            }\n            let ecLevel = decoderResult.getECLevel();\n            if (ecLevel != null) {\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);\n            }\n            return result;\n        }\n        reportFoundResultPoints(hints, points) {\n            if (hints != null) {\n                let rpcb = hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n                if (rpcb != null) {\n                    points.forEach((point, idx, arr) => {\n                        rpcb.foundPossibleResultPoint(point);\n                    });\n                }\n            }\n        }\n        // @Override\n        reset() {\n            // do nothing\n        }\n    }\n\n    /**\n     * Aztec Code reader to use from browser.\n     *\n     * @class BrowserAztecCodeReader\n     * @extends {BrowserCodeReader}\n     */\n    class BrowserAztecCodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserAztecCodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         *\n         * @memberOf BrowserAztecCodeReader\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new AztecReader(), timeBetweenScansMillis);\n        }\n    }\n\n    /**\n     * Encapsulates functionality and implementation that is common to all families\n     * of one-dimensional barcodes.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     */\n    class OneDReader {\n        /*\n        @Override\n        public Result decode(BinaryBitmap image) throws NotFoundException, FormatException {\n          return decode(image, null);\n        }\n        */\n        // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n        // @Override\n        decode(image, hints) {\n            try {\n                return this.doDecode(image, hints);\n            }\n            catch (nfe) {\n                const tryHarder = hints && (hints.get(DecodeHintType$1.TRY_HARDER) === true);\n                if (tryHarder && image.isRotateSupported()) {\n                    const rotatedImage = image.rotateCounterClockwise();\n                    const result = this.doDecode(rotatedImage, hints);\n                    // Record that we found it rotated 90 degrees CCW / 270 degrees CW\n                    const metadata = result.getResultMetadata();\n                    let orientation = 270;\n                    if (metadata !== null && (metadata.get(ResultMetadataType$1.ORIENTATION) === true)) {\n                        // But if we found it reversed in doDecode(), add in that result here:\n                        orientation = (orientation + metadata.get(ResultMetadataType$1.ORIENTATION) % 360);\n                    }\n                    result.putMetadata(ResultMetadataType$1.ORIENTATION, orientation);\n                    // Update result points\n                    const points = result.getResultPoints();\n                    if (points !== null) {\n                        const height = rotatedImage.getHeight();\n                        for (let i = 0; i < points.length; i++) {\n                            points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX());\n                        }\n                    }\n                    return result;\n                }\n                else {\n                    throw new NotFoundException();\n                }\n            }\n        }\n        // @Override\n        reset() {\n            // do nothing\n        }\n        /**\n         * We're going to examine rows from the middle outward, searching alternately above and below the\n         * middle, and farther out each time. rowStep is the number of rows between each successive\n         * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then\n         * middle + rowStep, then middle - (2 * rowStep), etc.\n         * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily\n         * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the\n         * image if \"trying harder\".\n         *\n         * @param image The image to decode\n         * @param hints Any hints that were requested\n         * @return The contents of the decoded barcode\n         * @throws NotFoundException Any spontaneous errors which occur\n         */\n        doDecode(image, hints) {\n            const width = image.getWidth();\n            const height = image.getHeight();\n            let row = new BitArray(width);\n            const tryHarder = hints && (hints.get(DecodeHintType$1.TRY_HARDER) === true);\n            const rowStep = Math.max(1, height >> (tryHarder ? 8 : 5));\n            let maxLines;\n            if (tryHarder) {\n                maxLines = height; // Look at the whole image, not just the center\n            }\n            else {\n                maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image\n            }\n            const middle = Math.trunc(height / 2);\n            for (let x = 0; x < maxLines; x++) {\n                // Scanning from the middle out. Determine which row we're looking at next:\n                const rowStepsAboveOrBelow = Math.trunc((x + 1) / 2);\n                const isAbove = (x & 0x01) === 0; // i.e. is x even?\n                const rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);\n                if (rowNumber < 0 || rowNumber >= height) {\n                    // Oops, if we run off the top or bottom, stop\n                    break;\n                }\n                // Estimate black point for this row and load it:\n                try {\n                    row = image.getBlackRow(rowNumber, row);\n                }\n                catch (ignored) {\n                    continue;\n                }\n                // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to\n                // handle decoding upside down barcodes.\n                for (let attempt = 0; attempt < 2; attempt++) {\n                    if (attempt === 1) { // trying again?\n                        row.reverse(); // reverse the row and continue\n                        // This means we will only ever draw result points *once* in the life of this method\n                        // since we want to avoid drawing the wrong points after flipping the row, and,\n                        // don't want to clutter with noise from every single row scan -- just the scans\n                        // that start on the center line.\n                        if (hints && (hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK) === true)) {\n                            const newHints = new Map();\n                            hints.forEach((hint, key) => newHints.set(key, hint));\n                            newHints.delete(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n                            hints = newHints;\n                        }\n                    }\n                    try {\n                        // Look for a barcode\n                        const result = this.decodeRow(rowNumber, row, hints);\n                        // We found our barcode\n                        if (attempt === 1) {\n                            // But it was upside down, so note that\n                            result.putMetadata(ResultMetadataType$1.ORIENTATION, 180);\n                            // And remember to flip the result points horizontally.\n                            const points = result.getResultPoints();\n                            if (points !== null) {\n                                points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY());\n                                points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY());\n                            }\n                        }\n                        return result;\n                    }\n                    catch (re) {\n                        // continue -- just couldn't decode this row\n                    }\n                }\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * Records the size of successive runs of white and black pixels in a row, starting at a given point.\n         * The values are recorded in the given array, and the number of runs recorded is equal to the size\n         * of the array. If the row starts on a white pixel at the given start point, then the first count\n         * recorded is the run of white pixels starting from that point; likewise it is the count of a run\n         * of black pixels if the row begin on a black pixels at that point.\n         *\n         * @param row row to count from\n         * @param start offset into row to start at\n         * @param counters array into which to record counts\n         * @throws NotFoundException if counters cannot be filled entirely from row before running out\n         *  of pixels\n         */\n        static recordPattern(row, start, counters) {\n            const numCounters = counters.length;\n            for (let index = 0; index < numCounters; index++)\n                counters[index] = 0;\n            const end = row.getSize();\n            if (start >= end) {\n                throw new NotFoundException();\n            }\n            let isWhite = !row.get(start);\n            let counterPosition = 0;\n            let i = start;\n            while (i < end) {\n                if (row.get(i) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (++counterPosition === numCounters) {\n                        break;\n                    }\n                    else {\n                        counters[counterPosition] = 1;\n                        isWhite = !isWhite;\n                    }\n                }\n                i++;\n            }\n            // If we read fully the last section of pixels and filled up our counters -- or filled\n            // the last counter but ran off the side of the image, OK. Otherwise, a problem.\n            if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) {\n                throw new NotFoundException();\n            }\n        }\n        static recordPatternInReverse(row, start, counters) {\n            // This could be more efficient I guess\n            let numTransitionsLeft = counters.length;\n            let last = row.get(start);\n            while (start > 0 && numTransitionsLeft >= 0) {\n                if (row.get(--start) !== last) {\n                    numTransitionsLeft--;\n                    last = !last;\n                }\n            }\n            if (numTransitionsLeft >= 0) {\n                throw new NotFoundException();\n            }\n            OneDReader.recordPattern(row, start + 1, counters);\n        }\n        /**\n         * Determines how closely a set of observed counts of runs of black/white values matches a given\n         * target pattern. This is reported as the ratio of the total variance from the expected pattern\n         * proportions across all pattern elements, to the length of the pattern.\n         *\n         * @param counters observed counters\n         * @param pattern expected pattern\n         * @param maxIndividualVariance The most any counter can differ before we give up\n         * @return ratio of total variance between counters and pattern compared to total pattern size\n         */\n        static patternMatchVariance(counters, pattern, maxIndividualVariance) {\n            const numCounters = counters.length;\n            let total = 0;\n            let patternLength = 0;\n            for (let i = 0; i < numCounters; i++) {\n                total += counters[i];\n                patternLength += pattern[i];\n            }\n            if (total < patternLength) {\n                // If we don't even have one pixel per unit of bar width, assume this is too small\n                // to reliably match, so fail:\n                return Number.POSITIVE_INFINITY;\n            }\n            const unitBarWidth = total / patternLength;\n            maxIndividualVariance *= unitBarWidth;\n            let totalVariance = 0.0;\n            for (let x = 0; x < numCounters; x++) {\n                const counter = counters[x];\n                const scaledPattern = pattern[x] * unitBarWidth;\n                const variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;\n                if (variance > maxIndividualVariance) {\n                    return Number.POSITIVE_INFINITY;\n                }\n                totalVariance += variance;\n            }\n            return totalVariance / total;\n        }\n    }\n\n    /**\n     * <p>Decodes Code 128 barcodes.</p>\n     *\n     * @author Sean Owen\n     */\n    class Code128Reader extends OneDReader {\n        static findStartPattern(row) {\n            const width = row.getSize();\n            const rowOffset = row.getNextSet(0);\n            let counterPosition = 0;\n            let counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n            let patternStart = rowOffset;\n            let isWhite = false;\n            const patternLength = 6;\n            for (let i = rowOffset; i < width; i++) {\n                if (row.get(i) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === (patternLength - 1)) {\n                        let bestVariance = Code128Reader.MAX_AVG_VARIANCE;\n                        let bestMatch = -1;\n                        for (let startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) {\n                            const variance = OneDReader.patternMatchVariance(counters, Code128Reader.CODE_PATTERNS[startCode], Code128Reader.MAX_INDIVIDUAL_VARIANCE);\n                            if (variance < bestVariance) {\n                                bestVariance = variance;\n                                bestMatch = startCode;\n                            }\n                        }\n                        // Look for whitespace before start pattern, >= 50% of width of start pattern\n                        if (bestMatch >= 0 &&\n                            row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) {\n                            return Int32Array.from([patternStart, i, bestMatch]);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters = counters.slice(2, counters.length - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static decodeCode(row, counters, rowOffset) {\n            OneDReader.recordPattern(row, rowOffset, counters);\n            let bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept\n            let bestMatch = -1;\n            for (let d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) {\n                const pattern = Code128Reader.CODE_PATTERNS[d];\n                const variance = this.patternMatchVariance(counters, pattern, Code128Reader.MAX_INDIVIDUAL_VARIANCE);\n                if (variance < bestVariance) {\n                    bestVariance = variance;\n                    bestMatch = d;\n                }\n            }\n            // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6.\n            if (bestMatch >= 0) {\n                return bestMatch;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n        decodeRow(rowNumber, row, hints) {\n            const convertFNC1 = hints && (hints.get(DecodeHintType$1.ASSUME_GS1) === true);\n            const startPatternInfo = Code128Reader.findStartPattern(row);\n            const startCode = startPatternInfo[2];\n            let currentRawCodesIndex = 0;\n            const rawCodes = new Uint8Array(20);\n            rawCodes[currentRawCodesIndex++] = startCode;\n            let codeSet;\n            switch (startCode) {\n                case Code128Reader.CODE_START_A:\n                    codeSet = Code128Reader.CODE_CODE_A;\n                    break;\n                case Code128Reader.CODE_START_B:\n                    codeSet = Code128Reader.CODE_CODE_B;\n                    break;\n                case Code128Reader.CODE_START_C:\n                    codeSet = Code128Reader.CODE_CODE_C;\n                    break;\n                default:\n                    throw new FormatException();\n            }\n            let done = false;\n            let isNextShifted = false;\n            let result = '';\n            let lastStart = startPatternInfo[0];\n            let nextStart = startPatternInfo[1];\n            const counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n            let lastCode = 0;\n            let code = 0;\n            let checksumTotal = startCode;\n            let multiplier = 0;\n            let lastCharacterWasPrintable = true;\n            let upperMode = false;\n            let shiftUpperMode = false;\n            while (!done) {\n                const unshift = isNextShifted;\n                isNextShifted = false;\n                // Save off last code\n                lastCode = code;\n                // Decode another code from image\n                code = Code128Reader.decodeCode(row, counters, nextStart);\n                rawCodes[currentRawCodesIndex++] = code;\n                // Remember whether the last code was printable or not (excluding CODE_STOP)\n                if (code !== Code128Reader.CODE_STOP) {\n                    lastCharacterWasPrintable = true;\n                }\n                // Add to checksum computation (if not CODE_STOP of course)\n                if (code !== Code128Reader.CODE_STOP) {\n                    multiplier++;\n                    checksumTotal += multiplier * code;\n                }\n                // Advance to where the next code will to start\n                lastStart = nextStart;\n                nextStart += counters.reduce((previous, current) => previous + current, 0);\n                // Take care of illegal start codes\n                switch (code) {\n                    case Code128Reader.CODE_START_A:\n                    case Code128Reader.CODE_START_B:\n                    case Code128Reader.CODE_START_C:\n                        throw new FormatException();\n                }\n                switch (codeSet) {\n                    case Code128Reader.CODE_CODE_A:\n                        if (code < 64) {\n                            if (shiftUpperMode === upperMode) {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code));\n                            }\n                            else {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code + 128));\n                            }\n                            shiftUpperMode = false;\n                        }\n                        else if (code < 96) {\n                            if (shiftUpperMode === upperMode) {\n                                result += String.fromCharCode((code - 64));\n                            }\n                            else {\n                                result += String.fromCharCode((code + 64));\n                            }\n                            shiftUpperMode = false;\n                        }\n                        else {\n                            // Don't let CODE_STOP, which always appears, affect whether whether we think the last\n                            // code was printable or not.\n                            if (code !== Code128Reader.CODE_STOP) {\n                                lastCharacterWasPrintable = false;\n                            }\n                            switch (code) {\n                                case Code128Reader.CODE_FNC_1:\n                                    if (convertFNC1) {\n                                        if (result.length === 0) {\n                                            // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n                                            // is FNC1 then this is GS1-128. We add the symbology identifier.\n                                            result += ']C1';\n                                        }\n                                        else {\n                                            // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n                                            result += String.fromCharCode(29);\n                                        }\n                                    }\n                                    break;\n                                case Code128Reader.CODE_FNC_2:\n                                case Code128Reader.CODE_FNC_3:\n                                    // do nothing?\n                                    break;\n                                case Code128Reader.CODE_FNC_4_A:\n                                    if (!upperMode && shiftUpperMode) {\n                                        upperMode = true;\n                                        shiftUpperMode = false;\n                                    }\n                                    else if (upperMode && shiftUpperMode) {\n                                        upperMode = false;\n                                        shiftUpperMode = false;\n                                    }\n                                    else {\n                                        shiftUpperMode = true;\n                                    }\n                                    break;\n                                case Code128Reader.CODE_SHIFT:\n                                    isNextShifted = true;\n                                    codeSet = Code128Reader.CODE_CODE_B;\n                                    break;\n                                case Code128Reader.CODE_CODE_B:\n                                    codeSet = Code128Reader.CODE_CODE_B;\n                                    break;\n                                case Code128Reader.CODE_CODE_C:\n                                    codeSet = Code128Reader.CODE_CODE_C;\n                                    break;\n                                case Code128Reader.CODE_STOP:\n                                    done = true;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Code128Reader.CODE_CODE_B:\n                        if (code < 96) {\n                            if (shiftUpperMode === upperMode) {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code));\n                            }\n                            else {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code + 128));\n                            }\n                            shiftUpperMode = false;\n                        }\n                        else {\n                            if (code !== Code128Reader.CODE_STOP) {\n                                lastCharacterWasPrintable = false;\n                            }\n                            switch (code) {\n                                case Code128Reader.CODE_FNC_1:\n                                    if (convertFNC1) {\n                                        if (result.length === 0) {\n                                            // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n                                            // is FNC1 then this is GS1-128. We add the symbology identifier.\n                                            result += ']C1';\n                                        }\n                                        else {\n                                            // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n                                            result += String.fromCharCode(29);\n                                        }\n                                    }\n                                    break;\n                                case Code128Reader.CODE_FNC_2:\n                                case Code128Reader.CODE_FNC_3:\n                                    // do nothing?\n                                    break;\n                                case Code128Reader.CODE_FNC_4_B:\n                                    if (!upperMode && shiftUpperMode) {\n                                        upperMode = true;\n                                        shiftUpperMode = false;\n                                    }\n                                    else if (upperMode && shiftUpperMode) {\n                                        upperMode = false;\n                                        shiftUpperMode = false;\n                                    }\n                                    else {\n                                        shiftUpperMode = true;\n                                    }\n                                    break;\n                                case Code128Reader.CODE_SHIFT:\n                                    isNextShifted = true;\n                                    codeSet = Code128Reader.CODE_CODE_A;\n                                    break;\n                                case Code128Reader.CODE_CODE_A:\n                                    codeSet = Code128Reader.CODE_CODE_A;\n                                    break;\n                                case Code128Reader.CODE_CODE_C:\n                                    codeSet = Code128Reader.CODE_CODE_C;\n                                    break;\n                                case Code128Reader.CODE_STOP:\n                                    done = true;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Code128Reader.CODE_CODE_C:\n                        if (code < 100) {\n                            if (code < 10) {\n                                result += '0';\n                            }\n                            result += code;\n                        }\n                        else {\n                            if (code !== Code128Reader.CODE_STOP) {\n                                lastCharacterWasPrintable = false;\n                            }\n                            switch (code) {\n                                case Code128Reader.CODE_FNC_1:\n                                    if (convertFNC1) {\n                                        if (result.length === 0) {\n                                            // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n                                            // is FNC1 then this is GS1-128. We add the symbology identifier.\n                                            result += ']C1';\n                                        }\n                                        else {\n                                            // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n                                            result += String.fromCharCode(29);\n                                        }\n                                    }\n                                    break;\n                                case Code128Reader.CODE_CODE_A:\n                                    codeSet = Code128Reader.CODE_CODE_A;\n                                    break;\n                                case Code128Reader.CODE_CODE_B:\n                                    codeSet = Code128Reader.CODE_CODE_B;\n                                    break;\n                                case Code128Reader.CODE_STOP:\n                                    done = true;\n                                    break;\n                            }\n                        }\n                        break;\n                }\n                // Unshift back to another code set if we were shifted\n                if (unshift) {\n                    codeSet = codeSet === Code128Reader.CODE_CODE_A ? Code128Reader.CODE_CODE_B : Code128Reader.CODE_CODE_A;\n                }\n            }\n            const lastPatternSize = nextStart - lastStart;\n            // Check for ample whitespace following pattern, but, to do this we first need to remember that\n            // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left\n            // to read off. Would be slightly better to properly read. Here we just skip it:\n            nextStart = row.getNextUnset(nextStart);\n            if (!row.isRange(nextStart, Math.min(row.getSize(), nextStart + (nextStart - lastStart) / 2), false)) {\n                throw new NotFoundException();\n            }\n            // Pull out from sum the value of the penultimate check code\n            checksumTotal -= multiplier * lastCode;\n            // lastCode is the checksum then:\n            if (checksumTotal % 103 !== lastCode) {\n                throw new ChecksumException();\n            }\n            // Need to pull out the check digits from string\n            const resultLength = result.length;\n            if (resultLength === 0) {\n                // false positive\n                throw new NotFoundException();\n            }\n            // Only bother if the result had at least one character, and if the checksum digit happened to\n            // be a printable character. If it was just interpreted as a control code, nothing to remove.\n            if (resultLength > 0 && lastCharacterWasPrintable) {\n                if (codeSet === Code128Reader.CODE_CODE_C) {\n                    result = result.substring(0, resultLength - 2);\n                }\n                else {\n                    result = result.substring(0, resultLength - 1);\n                }\n            }\n            const left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0;\n            const right = lastStart + lastPatternSize / 2.0;\n            const rawCodesSize = rawCodes.length;\n            const rawBytes = new Uint8Array(rawCodesSize);\n            for (let i = 0; i < rawCodesSize; i++) {\n                rawBytes[i] = rawCodes[i];\n            }\n            const points = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n            return new Result(result, rawBytes, 0, points, BarcodeFormat$1.CODE_128, new Date().getTime());\n        }\n    }\n    Code128Reader.CODE_PATTERNS = [\n        Int32Array.from([2, 1, 2, 2, 2, 2]),\n        Int32Array.from([2, 2, 2, 1, 2, 2]),\n        Int32Array.from([2, 2, 2, 2, 2, 1]),\n        Int32Array.from([1, 2, 1, 2, 2, 3]),\n        Int32Array.from([1, 2, 1, 3, 2, 2]),\n        Int32Array.from([1, 3, 1, 2, 2, 2]),\n        Int32Array.from([1, 2, 2, 2, 1, 3]),\n        Int32Array.from([1, 2, 2, 3, 1, 2]),\n        Int32Array.from([1, 3, 2, 2, 1, 2]),\n        Int32Array.from([2, 2, 1, 2, 1, 3]),\n        Int32Array.from([2, 2, 1, 3, 1, 2]),\n        Int32Array.from([2, 3, 1, 2, 1, 2]),\n        Int32Array.from([1, 1, 2, 2, 3, 2]),\n        Int32Array.from([1, 2, 2, 1, 3, 2]),\n        Int32Array.from([1, 2, 2, 2, 3, 1]),\n        Int32Array.from([1, 1, 3, 2, 2, 2]),\n        Int32Array.from([1, 2, 3, 1, 2, 2]),\n        Int32Array.from([1, 2, 3, 2, 2, 1]),\n        Int32Array.from([2, 2, 3, 2, 1, 1]),\n        Int32Array.from([2, 2, 1, 1, 3, 2]),\n        Int32Array.from([2, 2, 1, 2, 3, 1]),\n        Int32Array.from([2, 1, 3, 2, 1, 2]),\n        Int32Array.from([2, 2, 3, 1, 1, 2]),\n        Int32Array.from([3, 1, 2, 1, 3, 1]),\n        Int32Array.from([3, 1, 1, 2, 2, 2]),\n        Int32Array.from([3, 2, 1, 1, 2, 2]),\n        Int32Array.from([3, 2, 1, 2, 2, 1]),\n        Int32Array.from([3, 1, 2, 2, 1, 2]),\n        Int32Array.from([3, 2, 2, 1, 1, 2]),\n        Int32Array.from([3, 2, 2, 2, 1, 1]),\n        Int32Array.from([2, 1, 2, 1, 2, 3]),\n        Int32Array.from([2, 1, 2, 3, 2, 1]),\n        Int32Array.from([2, 3, 2, 1, 2, 1]),\n        Int32Array.from([1, 1, 1, 3, 2, 3]),\n        Int32Array.from([1, 3, 1, 1, 2, 3]),\n        Int32Array.from([1, 3, 1, 3, 2, 1]),\n        Int32Array.from([1, 1, 2, 3, 1, 3]),\n        Int32Array.from([1, 3, 2, 1, 1, 3]),\n        Int32Array.from([1, 3, 2, 3, 1, 1]),\n        Int32Array.from([2, 1, 1, 3, 1, 3]),\n        Int32Array.from([2, 3, 1, 1, 1, 3]),\n        Int32Array.from([2, 3, 1, 3, 1, 1]),\n        Int32Array.from([1, 1, 2, 1, 3, 3]),\n        Int32Array.from([1, 1, 2, 3, 3, 1]),\n        Int32Array.from([1, 3, 2, 1, 3, 1]),\n        Int32Array.from([1, 1, 3, 1, 2, 3]),\n        Int32Array.from([1, 1, 3, 3, 2, 1]),\n        Int32Array.from([1, 3, 3, 1, 2, 1]),\n        Int32Array.from([3, 1, 3, 1, 2, 1]),\n        Int32Array.from([2, 1, 1, 3, 3, 1]),\n        Int32Array.from([2, 3, 1, 1, 3, 1]),\n        Int32Array.from([2, 1, 3, 1, 1, 3]),\n        Int32Array.from([2, 1, 3, 3, 1, 1]),\n        Int32Array.from([2, 1, 3, 1, 3, 1]),\n        Int32Array.from([3, 1, 1, 1, 2, 3]),\n        Int32Array.from([3, 1, 1, 3, 2, 1]),\n        Int32Array.from([3, 3, 1, 1, 2, 1]),\n        Int32Array.from([3, 1, 2, 1, 1, 3]),\n        Int32Array.from([3, 1, 2, 3, 1, 1]),\n        Int32Array.from([3, 3, 2, 1, 1, 1]),\n        Int32Array.from([3, 1, 4, 1, 1, 1]),\n        Int32Array.from([2, 2, 1, 4, 1, 1]),\n        Int32Array.from([4, 3, 1, 1, 1, 1]),\n        Int32Array.from([1, 1, 1, 2, 2, 4]),\n        Int32Array.from([1, 1, 1, 4, 2, 2]),\n        Int32Array.from([1, 2, 1, 1, 2, 4]),\n        Int32Array.from([1, 2, 1, 4, 2, 1]),\n        Int32Array.from([1, 4, 1, 1, 2, 2]),\n        Int32Array.from([1, 4, 1, 2, 2, 1]),\n        Int32Array.from([1, 1, 2, 2, 1, 4]),\n        Int32Array.from([1, 1, 2, 4, 1, 2]),\n        Int32Array.from([1, 2, 2, 1, 1, 4]),\n        Int32Array.from([1, 2, 2, 4, 1, 1]),\n        Int32Array.from([1, 4, 2, 1, 1, 2]),\n        Int32Array.from([1, 4, 2, 2, 1, 1]),\n        Int32Array.from([2, 4, 1, 2, 1, 1]),\n        Int32Array.from([2, 2, 1, 1, 1, 4]),\n        Int32Array.from([4, 1, 3, 1, 1, 1]),\n        Int32Array.from([2, 4, 1, 1, 1, 2]),\n        Int32Array.from([1, 3, 4, 1, 1, 1]),\n        Int32Array.from([1, 1, 1, 2, 4, 2]),\n        Int32Array.from([1, 2, 1, 1, 4, 2]),\n        Int32Array.from([1, 2, 1, 2, 4, 1]),\n        Int32Array.from([1, 1, 4, 2, 1, 2]),\n        Int32Array.from([1, 2, 4, 1, 1, 2]),\n        Int32Array.from([1, 2, 4, 2, 1, 1]),\n        Int32Array.from([4, 1, 1, 2, 1, 2]),\n        Int32Array.from([4, 2, 1, 1, 1, 2]),\n        Int32Array.from([4, 2, 1, 2, 1, 1]),\n        Int32Array.from([2, 1, 2, 1, 4, 1]),\n        Int32Array.from([2, 1, 4, 1, 2, 1]),\n        Int32Array.from([4, 1, 2, 1, 2, 1]),\n        Int32Array.from([1, 1, 1, 1, 4, 3]),\n        Int32Array.from([1, 1, 1, 3, 4, 1]),\n        Int32Array.from([1, 3, 1, 1, 4, 1]),\n        Int32Array.from([1, 1, 4, 1, 1, 3]),\n        Int32Array.from([1, 1, 4, 3, 1, 1]),\n        Int32Array.from([4, 1, 1, 1, 1, 3]),\n        Int32Array.from([4, 1, 1, 3, 1, 1]),\n        Int32Array.from([1, 1, 3, 1, 4, 1]),\n        Int32Array.from([1, 1, 4, 1, 3, 1]),\n        Int32Array.from([3, 1, 1, 1, 4, 1]),\n        Int32Array.from([4, 1, 1, 1, 3, 1]),\n        Int32Array.from([2, 1, 1, 4, 1, 2]),\n        Int32Array.from([2, 1, 1, 2, 1, 4]),\n        Int32Array.from([2, 1, 1, 2, 3, 2]),\n        Int32Array.from([2, 3, 3, 1, 1, 1, 2]),\n    ];\n    Code128Reader.MAX_AVG_VARIANCE = 0.25;\n    Code128Reader.MAX_INDIVIDUAL_VARIANCE = 0.7;\n    Code128Reader.CODE_SHIFT = 98;\n    Code128Reader.CODE_CODE_C = 99;\n    Code128Reader.CODE_CODE_B = 100;\n    Code128Reader.CODE_CODE_A = 101;\n    Code128Reader.CODE_FNC_1 = 102;\n    Code128Reader.CODE_FNC_2 = 97;\n    Code128Reader.CODE_FNC_3 = 96;\n    Code128Reader.CODE_FNC_4_A = 101;\n    Code128Reader.CODE_FNC_4_B = 100;\n    Code128Reader.CODE_START_A = 103;\n    Code128Reader.CODE_START_B = 104;\n    Code128Reader.CODE_START_C = 105;\n    Code128Reader.CODE_STOP = 106;\n\n    /**\n     * <p>Decodes Code 39 barcodes. Supports \"Full ASCII Code 39\" if USE_CODE_39_EXTENDED_MODE is set.</p>\n     *\n     * @author Sean Owen\n     * @see Code93Reader\n     */\n    class Code39Reader extends OneDReader {\n        /**\n         * Creates a reader that assumes all encoded data is data, and does not treat the final\n         * character as a check digit. It will not decoded \"extended Code 39\" sequences.\n         */\n        // public Code39Reader() {\n        //   this(false);\n        // }\n        /**\n         * Creates a reader that can be configured to check the last character as a check digit.\n         * It will not decoded \"extended Code 39\" sequences.\n         *\n         * @param usingCheckDigit if true, treat the last data character as a check digit, not\n         * data, and verify that the checksum passes.\n         */\n        // public Code39Reader(boolean usingCheckDigit) {\n        //   this(usingCheckDigit, false);\n        // }\n        /**\n         * Creates a reader that can be configured to check the last character as a check digit,\n         * or optionally attempt to decode \"extended Code 39\" sequences that are used to encode\n         * the full ASCII character set.\n         *\n         * @param usingCheckDigit if true, treat the last data character as a check digit, not\n         * data, and verify that the checksum passes.\n         * @param extendedMode if true, will attempt to decode extended Code 39 sequences in the\n         * text.\n         */\n        constructor(usingCheckDigit = false, extendedMode = false) {\n            super();\n            this.usingCheckDigit = usingCheckDigit;\n            this.extendedMode = extendedMode;\n            this.decodeRowResult = '';\n            this.counters = new Int32Array(9);\n        }\n        decodeRow(rowNumber, row, hints) {\n            let theCounters = this.counters;\n            theCounters.fill(0);\n            this.decodeRowResult = '';\n            let start = Code39Reader.findAsteriskPattern(row, theCounters);\n            // Read off white space\n            let nextStart = row.getNextSet(start[1]);\n            let end = row.getSize();\n            let decodedChar;\n            let lastStart;\n            do {\n                Code39Reader.recordPattern(row, nextStart, theCounters);\n                let pattern = Code39Reader.toNarrowWidePattern(theCounters);\n                if (pattern < 0) {\n                    throw new NotFoundException();\n                }\n                decodedChar = Code39Reader.patternToChar(pattern);\n                this.decodeRowResult += decodedChar;\n                lastStart = nextStart;\n                for (let counter of theCounters) {\n                    nextStart += counter;\n                }\n                // Read off white space\n                nextStart = row.getNextSet(nextStart);\n            } while (decodedChar !== '*');\n            this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1); // remove asterisk\n            // Look for whitespace after pattern:\n            let lastPatternSize = 0;\n            for (let counter of theCounters) {\n                lastPatternSize += counter;\n            }\n            let whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;\n            // If 50% of last pattern size, following last pattern, is not whitespace, fail\n            // (but if it's whitespace to the very end of the image, that's OK)\n            if (nextStart !== end && (whiteSpaceAfterEnd * 2) < lastPatternSize) {\n                throw new NotFoundException();\n            }\n            if (this.usingCheckDigit) {\n                let max = this.decodeRowResult.length - 1;\n                let total = 0;\n                for (let i = 0; i < max; i++) {\n                    total += Code39Reader.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(i));\n                }\n                if (this.decodeRowResult.charAt(max) !== Code39Reader.ALPHABET_STRING.charAt(total % 43)) {\n                    throw new ChecksumException();\n                }\n                this.decodeRowResult = this.decodeRowResult.substring(0, max);\n            }\n            if (this.decodeRowResult.length === 0) {\n                // false positive\n                throw new NotFoundException();\n            }\n            let resultString;\n            if (this.extendedMode) {\n                resultString = Code39Reader.decodeExtended(this.decodeRowResult);\n            }\n            else {\n                resultString = this.decodeRowResult;\n            }\n            let left = (start[1] + start[0]) / 2.0;\n            let right = lastStart + lastPatternSize / 2.0;\n            return new Result(resultString, null, 0, [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)], BarcodeFormat$1.CODE_39, new Date().getTime());\n        }\n        static findAsteriskPattern(row, counters) {\n            let width = row.getSize();\n            let rowOffset = row.getNextSet(0);\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            let isWhite = false;\n            let patternLength = counters.length;\n            for (let i = rowOffset; i < width; i++) {\n                if (row.get(i) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        // Look for whitespace before start pattern, >= 50% of width of start pattern\n                        if (this.toNarrowWidePattern(counters) === Code39Reader.ASTERISK_ENCODING &&\n                            row.isRange(Math.max(0, patternStart - Math.floor((i - patternStart) / 2)), patternStart, false)) {\n                            return [patternStart, i];\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters.copyWithin(0, 2, 2 + counterPosition - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        // For efficiency, returns -1 on failure. Not throwing here saved as many as 700 exceptions\n        // per image when using some of our blackbox images.\n        static toNarrowWidePattern(counters) {\n            let numCounters = counters.length;\n            let maxNarrowCounter = 0;\n            let wideCounters;\n            do {\n                let minCounter = 0x7fffffff;\n                for (let counter of counters) {\n                    if (counter < minCounter && counter > maxNarrowCounter) {\n                        minCounter = counter;\n                    }\n                }\n                maxNarrowCounter = minCounter;\n                wideCounters = 0;\n                let totalWideCountersWidth = 0;\n                let pattern = 0;\n                for (let i = 0; i < numCounters; i++) {\n                    let counter = counters[i];\n                    if (counter > maxNarrowCounter) {\n                        pattern |= 1 << (numCounters - 1 - i);\n                        wideCounters++;\n                        totalWideCountersWidth += counter;\n                    }\n                }\n                if (wideCounters === 3) {\n                    // Found 3 wide counters, but are they close enough in width?\n                    // We can perform a cheap, conservative check to see if any individual\n                    // counter is more than 1.5 times the average:\n                    for (let i = 0; i < numCounters && wideCounters > 0; i++) {\n                        let counter = counters[i];\n                        if (counter > maxNarrowCounter) {\n                            wideCounters--;\n                            // totalWideCountersWidth = 3 * average, so this checks if counter >= 3/2 * average\n                            if ((counter * 2) >= totalWideCountersWidth) {\n                                return -1;\n                            }\n                        }\n                    }\n                    return pattern;\n                }\n            } while (wideCounters > 3);\n            return -1;\n        }\n        static patternToChar(pattern) {\n            for (let i = 0; i < Code39Reader.CHARACTER_ENCODINGS.length; i++) {\n                if (Code39Reader.CHARACTER_ENCODINGS[i] === pattern) {\n                    return Code39Reader.ALPHABET_STRING.charAt(i);\n                }\n            }\n            if (pattern === Code39Reader.ASTERISK_ENCODING) {\n                return '*';\n            }\n            throw new NotFoundException();\n        }\n        static decodeExtended(encoded) {\n            let length = encoded.length;\n            let decoded = '';\n            for (let i = 0; i < length; i++) {\n                let c = encoded.charAt(i);\n                if (c === '+' || c === '$' || c === '%' || c === '/') {\n                    let next = encoded.charAt(i + 1);\n                    let decodedChar = '\\0';\n                    switch (c) {\n                        case '+':\n                            // +A to +Z map to a to z\n                            if (next >= 'A' && next <= 'Z') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) + 32);\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case '$':\n                            // $A to $Z map to control codes SH to SB\n                            if (next >= 'A' && next <= 'Z') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 64);\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case '%':\n                            // %A to %E map to control codes ESC to US\n                            if (next >= 'A' && next <= 'E') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 38);\n                            }\n                            else if (next >= 'F' && next <= 'J') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 11);\n                            }\n                            else if (next >= 'K' && next <= 'O') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) + 16);\n                            }\n                            else if (next >= 'P' && next <= 'T') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) + 43);\n                            }\n                            else if (next === 'U') {\n                                decodedChar = '\\0';\n                            }\n                            else if (next === 'V') {\n                                decodedChar = '@';\n                            }\n                            else if (next === 'W') {\n                                decodedChar = '`';\n                            }\n                            else if (next === 'X' || next === 'Y' || next === 'Z') {\n                                decodedChar = '\\x7f';\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case '/':\n                            // /A to /O map to ! to , and /Z maps to :\n                            if (next >= 'A' && next <= 'O') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 32);\n                            }\n                            else if (next === 'Z') {\n                                decodedChar = ':';\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                    }\n                    decoded += decodedChar;\n                    // bump up i again since we read two characters\n                    i++;\n                }\n                else {\n                    decoded += c;\n                }\n            }\n            return decoded;\n        }\n    }\n    Code39Reader.ALPHABET_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';\n    /**\n     * These represent the encodings of characters, as patterns of wide and narrow bars.\n     * The 9 least-significant bits of each int correspond to the pattern of wide and narrow,\n     * with 1s representing \"wide\" and 0s representing narrow.\n     */\n    Code39Reader.CHARACTER_ENCODINGS = [\n        0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064,\n        0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C,\n        0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016,\n        0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x0A8,\n        0x0A2, 0x08A, 0x02A // /-%\n    ];\n    Code39Reader.ASTERISK_ENCODING = 0x094;\n\n    /**\n     * <p>Decodes ITF barcodes.</p>\n     *\n     * @author Tjieco\n     */\n    class ITFReader extends OneDReader {\n        constructor() {\n            // private static W = 3; // Pixel width of a 3x wide line\n            // private static w = 2; // Pixel width of a 2x wide line\n            // private static N = 1; // Pixed width of a narrow line\n            super(...arguments);\n            // Stores the actual narrow line width of the image being decoded.\n            this.narrowLineWidth = -1;\n        }\n        // See ITFWriter.PATTERNS\n        /*\n      \n        /!**\n         * Patterns of Wide / Narrow lines to indicate each digit\n         *!/\n        */\n        decodeRow(rowNumber, row, hints) {\n            // Find out where the Middle section (payload) starts & ends\n            let startRange = this.decodeStart(row);\n            let endRange = this.decodeEnd(row);\n            let result = new StringBuilder();\n            ITFReader.decodeMiddle(row, startRange[1], endRange[0], result);\n            let resultString = result.toString();\n            let allowedLengths = null;\n            if (hints != null) {\n                allowedLengths = hints.get(DecodeHintType$1.ALLOWED_LENGTHS);\n            }\n            if (allowedLengths == null) {\n                allowedLengths = ITFReader.DEFAULT_ALLOWED_LENGTHS;\n            }\n            // To avoid false positives with 2D barcodes (and other patterns), make\n            // an assumption that the decoded string must be a 'standard' length if it's short\n            let length = resultString.length;\n            let lengthOK = false;\n            let maxAllowedLength = 0;\n            for (let value of allowedLengths) {\n                if (length === value) {\n                    lengthOK = true;\n                    break;\n                }\n                if (value > maxAllowedLength) {\n                    maxAllowedLength = value;\n                }\n            }\n            if (!lengthOK && length > maxAllowedLength) {\n                lengthOK = true;\n            }\n            if (!lengthOK) {\n                throw new FormatException();\n            }\n            const points = [new ResultPoint(startRange[1], rowNumber), new ResultPoint(endRange[0], rowNumber)];\n            let resultReturn = new Result(resultString, null, // no natural byte representation for these barcodes\n            0, points, BarcodeFormat$1.ITF, new Date().getTime());\n            return resultReturn;\n        }\n        /*\n        /!**\n         * @param row          row of black/white values to search\n         * @param payloadStart offset of start pattern\n         * @param resultString {@link StringBuilder} to append decoded chars to\n         * @throws NotFoundException if decoding could not complete successfully\n         *!/*/\n        static decodeMiddle(row, payloadStart, payloadEnd, resultString) {\n            // Digits are interleaved in pairs - 5 black lines for one digit, and the\n            // 5\n            // interleaved white lines for the second digit.\n            // Therefore, need to scan 10 lines and then\n            // split these into two arrays\n            let counterDigitPair = new Int32Array(10); // 10\n            let counterBlack = new Int32Array(5); // 5\n            let counterWhite = new Int32Array(5); // 5\n            counterDigitPair.fill(0);\n            counterBlack.fill(0);\n            counterWhite.fill(0);\n            while (payloadStart < payloadEnd) {\n                // Get 10 runs of black/white.\n                OneDReader.recordPattern(row, payloadStart, counterDigitPair);\n                // Split them into each array\n                for (let k = 0; k < 5; k++) {\n                    let twoK = 2 * k;\n                    counterBlack[k] = counterDigitPair[twoK];\n                    counterWhite[k] = counterDigitPair[twoK + 1];\n                }\n                let bestMatch = ITFReader.decodeDigit(counterBlack);\n                resultString.append(bestMatch.toString());\n                bestMatch = this.decodeDigit(counterWhite);\n                resultString.append(bestMatch.toString());\n                counterDigitPair.forEach(function (counterDigit) {\n                    payloadStart += counterDigit;\n                });\n            }\n        }\n        /*/!**\n         * Identify where the start of the middle / payload section starts.\n         *\n         * @param row row of black/white values to search\n         * @return Array, containing index of start of 'start block' and end of\n         *         'start block'\n         *!/*/\n        decodeStart(row) {\n            let endStart = ITFReader.skipWhiteSpace(row);\n            let startPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.START_PATTERN);\n            // Determine the width of a narrow line in pixels. We can do this by\n            // getting the width of the start pattern and dividing by 4 because its\n            // made up of 4 narrow lines.\n            this.narrowLineWidth = (startPattern[1] - startPattern[0]) / 4;\n            this.validateQuietZone(row, startPattern[0]);\n            return startPattern;\n        }\n        /*/!**\n         * The start & end patterns must be pre/post fixed by a quiet zone. This\n         * zone must be at least 10 times the width of a narrow line.  Scan back until\n         * we either get to the start of the barcode or match the necessary number of\n         * quiet zone pixels.\n         *\n         * Note: Its assumed the row is reversed when using this method to find\n         * quiet zone after the end pattern.\n         *\n         * ref: http://www.barcode-1.net/i25code.html\n         *\n         * @param row bit array representing the scanned barcode.\n         * @param startPattern index into row of the start or end pattern.\n         * @throws NotFoundException if the quiet zone cannot be found\n         *!/*/\n        validateQuietZone(row, startPattern) {\n            let quietCount = this.narrowLineWidth * 10; // expect to find this many pixels of quiet zone\n            // if there are not so many pixel at all let's try as many as possible\n            quietCount = quietCount < startPattern ? quietCount : startPattern;\n            for (let i = startPattern - 1; quietCount > 0 && i >= 0; i--) {\n                if (row.get(i)) {\n                    break;\n                }\n                quietCount--;\n            }\n            if (quietCount !== 0) {\n                // Unable to find the necessary number of quiet zone pixels.\n                throw new NotFoundException();\n            }\n        }\n        /*\n        /!**\n         * Skip all whitespace until we get to the first black line.\n         *\n         * @param row row of black/white values to search\n         * @return index of the first black line.\n         * @throws NotFoundException Throws exception if no black lines are found in the row\n         *!/*/\n        static skipWhiteSpace(row) {\n            const width = row.getSize();\n            const endStart = row.getNextSet(0);\n            if (endStart === width) {\n                throw new NotFoundException();\n            }\n            return endStart;\n        }\n        /*/!**\n         * Identify where the end of the middle / payload section ends.\n         *\n         * @param row row of black/white values to search\n         * @return Array, containing index of start of 'end block' and end of 'end\n         *         block'\n         *!/*/\n        decodeEnd(row) {\n            // For convenience, reverse the row and then\n            // search from 'the start' for the end block\n            row.reverse();\n            try {\n                let endStart = ITFReader.skipWhiteSpace(row);\n                let endPattern;\n                try {\n                    endPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.END_PATTERN_REVERSED[0]);\n                }\n                catch (error) {\n                    if (error instanceof NotFoundException) {\n                        endPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.END_PATTERN_REVERSED[1]);\n                    }\n                }\n                // The start & end patterns must be pre/post fixed by a quiet zone. This\n                // zone must be at least 10 times the width of a narrow line.\n                // ref: http://www.barcode-1.net/i25code.html\n                this.validateQuietZone(row, endPattern[0]);\n                // Now recalculate the indices of where the 'endblock' starts & stops to\n                // accommodate\n                // the reversed nature of the search\n                let temp = endPattern[0];\n                endPattern[0] = row.getSize() - endPattern[1];\n                endPattern[1] = row.getSize() - temp;\n                return endPattern;\n            }\n            finally {\n                // Put the row back the right way.\n                row.reverse();\n            }\n        }\n        /*\n        /!**\n         * @param row       row of black/white values to search\n         * @param rowOffset position to start search\n         * @param pattern   pattern of counts of number of black and white pixels that are\n         *                  being searched for as a pattern\n         * @return start/end horizontal offset of guard pattern, as an array of two\n         *         ints\n         * @throws NotFoundException if pattern is not found\n         *!/*/\n        static findGuardPattern(row, rowOffset, pattern) {\n            let patternLength = pattern.length;\n            let counters = new Int32Array(patternLength);\n            let width = row.getSize();\n            let isWhite = false;\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            counters.fill(0);\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        if (OneDReader.patternMatchVariance(counters, pattern, ITFReader.MAX_INDIVIDUAL_VARIANCE) < ITFReader.MAX_AVG_VARIANCE) {\n                            return [patternStart, x];\n                        }\n                        patternStart += counters[0] + counters[1];\n                        System.arraycopy(counters, 2, counters, 0, counterPosition - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        /*/!**\n         * Attempts to decode a sequence of ITF black/white lines into single\n         * digit.\n         *\n         * @param counters the counts of runs of observed black/white/black/... values\n         * @return The decoded digit\n         * @throws NotFoundException if digit cannot be decoded\n         *!/*/\n        static decodeDigit(counters) {\n            let bestVariance = ITFReader.MAX_AVG_VARIANCE; // worst variance we'll accept\n            let bestMatch = -1;\n            let max = ITFReader.PATTERNS.length;\n            for (let i = 0; i < max; i++) {\n                let pattern = ITFReader.PATTERNS[i];\n                let variance = OneDReader.patternMatchVariance(counters, pattern, ITFReader.MAX_INDIVIDUAL_VARIANCE);\n                if (variance < bestVariance) {\n                    bestVariance = variance;\n                    bestMatch = i;\n                }\n                else if (variance === bestVariance) {\n                    // if we find a second 'best match' with the same variance, we can not reliably report to have a suitable match\n                    bestMatch = -1;\n                }\n            }\n            if (bestMatch >= 0) {\n                return bestMatch % 10;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n    }\n    ITFReader.PATTERNS = [\n        Int32Array.from([1, 1, 2, 2, 1]),\n        Int32Array.from([2, 1, 1, 1, 2]),\n        Int32Array.from([1, 2, 1, 1, 2]),\n        Int32Array.from([2, 2, 1, 1, 1]),\n        Int32Array.from([1, 1, 2, 1, 2]),\n        Int32Array.from([2, 1, 2, 1, 1]),\n        Int32Array.from([1, 2, 2, 1, 1]),\n        Int32Array.from([1, 1, 1, 2, 2]),\n        Int32Array.from([2, 1, 1, 2, 1]),\n        Int32Array.from([1, 2, 1, 2, 1]),\n        Int32Array.from([1, 1, 3, 3, 1]),\n        Int32Array.from([3, 1, 1, 1, 3]),\n        Int32Array.from([1, 3, 1, 1, 3]),\n        Int32Array.from([3, 3, 1, 1, 1]),\n        Int32Array.from([1, 1, 3, 1, 3]),\n        Int32Array.from([3, 1, 3, 1, 1]),\n        Int32Array.from([1, 3, 3, 1, 1]),\n        Int32Array.from([1, 1, 1, 3, 3]),\n        Int32Array.from([3, 1, 1, 3, 1]),\n        Int32Array.from([1, 3, 1, 3, 1]) // 9\n    ];\n    ITFReader.MAX_AVG_VARIANCE = 0.38;\n    ITFReader.MAX_INDIVIDUAL_VARIANCE = 0.5;\n    /* /!** Valid ITF lengths. Anything longer than the largest value is also allowed. *!/*/\n    ITFReader.DEFAULT_ALLOWED_LENGTHS = [6, 8, 10, 12, 14];\n    /*/!**\n     * Start/end guard pattern.\n     *\n     * Note: The end pattern is reversed because the row is reversed before\n     * searching for the END_PATTERN\n     *!/*/\n    ITFReader.START_PATTERN = Int32Array.from([1, 1, 1, 1]);\n    ITFReader.END_PATTERN_REVERSED = [\n        Int32Array.from([1, 1, 2]),\n        Int32Array.from([1, 1, 3]) // 3x\n    ];\n\n    /**\n     * <p>Encapsulates functionality and implementation that is common to UPC and EAN families\n     * of one-dimensional barcodes.</p>\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author alasdair@google.com (Alasdair Mackintosh)\n     */\n    class AbstractUPCEANReader extends OneDReader {\n        constructor() {\n            super(...arguments);\n            this.decodeRowStringBuffer = '';\n        }\n\n        static findStartGuardPattern(row) {\n            let foundStart = false;\n            let startRange;\n            let nextStart = 0;\n            let counters = Int32Array.from([0, 0, 0]);\n            while (!foundStart) {\n                counters = Int32Array.from([0, 0, 0]);\n                startRange = AbstractUPCEANReader.findGuardPattern(row, nextStart, false, this.START_END_PATTERN, counters);\n                let start = startRange[0];\n                nextStart = startRange[1];\n                let quietStart = start - (nextStart - start);\n                if (quietStart >= 0) {\n                    foundStart = row.isRange(quietStart, start, false);\n                }\n            }\n            return startRange;\n        }\n        static checkChecksum(s) {\n            return AbstractUPCEANReader.checkStandardUPCEANChecksum(s);\n        }\n        static checkStandardUPCEANChecksum(s) {\n            let length = s.length;\n            if (length === 0)\n                return false;\n            let check = parseInt(s.charAt(length - 1), 10);\n            return AbstractUPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n        }\n        static getStandardUPCEANChecksum(s) {\n            let length = s.length;\n            let sum = 0;\n            for (let i = length - 1; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            sum *= 3;\n            for (let i = length - 2; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            return (1000 - sum) % 10;\n        }\n        static decodeEnd(row, endStart) {\n            return AbstractUPCEANReader.findGuardPattern(row, endStart, false, AbstractUPCEANReader.START_END_PATTERN, new Int32Array(AbstractUPCEANReader.START_END_PATTERN.length).fill(0));\n        }\n        /**\n         * @throws NotFoundException\n         */\n        static findGuardPatternWithoutCounters(row, rowOffset, whiteFirst, pattern) {\n            return this.findGuardPattern(row, rowOffset, whiteFirst, pattern, new Int32Array(pattern.length));\n        }\n        /**\n         * @param row row of black/white values to search\n         * @param rowOffset position to start search\n         * @param whiteFirst if true, indicates that the pattern specifies white/black/white/...\n         * pixel counts, otherwise, it is interpreted as black/white/black/...\n         * @param pattern pattern of counts of number of black and white pixels that are being\n         * searched for as a pattern\n         * @param counters array of counters, as long as pattern, to re-use\n         * @return start/end horizontal offset of guard pattern, as an array of two ints\n         * @throws NotFoundException if pattern is not found\n         */\n        static findGuardPattern(row, rowOffset, whiteFirst, pattern, counters) {\n            let width = row.getSize();\n            rowOffset = whiteFirst ? row.getNextUnset(rowOffset) : row.getNextSet(rowOffset);\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            let patternLength = pattern.length;\n            let isWhite = whiteFirst;\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        if (OneDReader.patternMatchVariance(counters, pattern, AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE) < AbstractUPCEANReader.MAX_AVG_VARIANCE) {\n                            return Int32Array.from([patternStart, x]);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        let slice = counters.slice(2, counters.length - 1);\n                        for (let i = 0; i < counterPosition - 1; i++) {\n                            counters[i] = slice[i];\n                        }\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static decodeDigit(row, counters, rowOffset, patterns) {\n            this.recordPattern(row, rowOffset, counters);\n            let bestVariance = this.MAX_AVG_VARIANCE;\n            let bestMatch = -1;\n            let max = patterns.length;\n            for (let i = 0; i < max; i++) {\n                let pattern = patterns[i];\n                let variance = OneDReader.patternMatchVariance(counters, pattern, AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE);\n                if (variance < bestVariance) {\n                    bestVariance = variance;\n                    bestMatch = i;\n                }\n            }\n            if (bestMatch >= 0) {\n                return bestMatch;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n    }\n    // These two values are critical for determining how permissive the decoding will be.\n    // We've arrived at these values through a lot of trial and error. Setting them any higher\n    // lets false positives creep in quickly.\n    AbstractUPCEANReader.MAX_AVG_VARIANCE = 0.48;\n    AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE = 0.7;\n    /**\n     * Start/end guard pattern.\n     */\n    AbstractUPCEANReader.START_END_PATTERN = Int32Array.from([1, 1, 1]);\n    /**\n     * Pattern marking the middle of a UPC/EAN pattern, separating the two halves.\n     */\n    AbstractUPCEANReader.MIDDLE_PATTERN = Int32Array.from([1, 1, 1, 1, 1]);\n    /**\n     * end guard pattern.\n     */\n    AbstractUPCEANReader.END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]);\n    /**\n     * \"Odd\", or \"L\" patterns used to encode UPC/EAN digits.\n     */\n    AbstractUPCEANReader.L_PATTERNS = [\n        Int32Array.from([3, 2, 1, 1]),\n        Int32Array.from([2, 2, 2, 1]),\n        Int32Array.from([2, 1, 2, 2]),\n        Int32Array.from([1, 4, 1, 1]),\n        Int32Array.from([1, 1, 3, 2]),\n        Int32Array.from([1, 2, 3, 1]),\n        Int32Array.from([1, 1, 1, 4]),\n        Int32Array.from([1, 3, 1, 2]),\n        Int32Array.from([1, 2, 1, 3]),\n        Int32Array.from([3, 1, 1, 2]),\n    ];\n\n    /**\n     * @see UPCEANExtension2Support\n     */\n    class UPCEANExtension5Support {\n        constructor() {\n            this.CHECK_DIGIT_ENCODINGS = [0x18, 0x14, 0x12, 0x11, 0x0C, 0x06, 0x03, 0x0A, 0x09, 0x05];\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n            this.decodeRowStringBuffer = '';\n        }\n        decodeRow(rowNumber, row, extensionStartRange) {\n            let result = this.decodeRowStringBuffer;\n            let end = this.decodeMiddle(row, extensionStartRange, result);\n            let resultString = result.toString();\n            let extensionData = UPCEANExtension5Support.parseExtensionString(resultString);\n            let resultPoints = [\n                new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n                new ResultPoint(end, rowNumber)\n            ];\n            let extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat$1.UPC_EAN_EXTENSION, new Date().getTime());\n            if (extensionData != null) {\n                extensionResult.putAllMetadata(extensionData);\n            }\n            return extensionResult;\n        }\n        decodeMiddle(row, startRange, resultString) {\n            let counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            let lgPatternFound = 0;\n            for (let x = 0; x < 5 && rowOffset < end; x++) {\n                let bestMatch = AbstractUPCEANReader.decodeDigit(\n                    row,\n                    counters,\n                    rowOffset,\n                    AbstractUPCEANReader.L_AND_G_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    lgPatternFound |= 1 << (4 - x);\n                }\n                if (x !== 4) {\n                    // Read off separator if not last\n                    rowOffset = row.getNextSet(rowOffset);\n                    rowOffset = row.getNextUnset(rowOffset);\n                }\n            }\n            if (resultString.length !== 5) {\n                throw new NotFoundException();\n            }\n            let checkDigit = this.determineCheckDigit(lgPatternFound);\n            if (UPCEANExtension5Support.extensionChecksum(resultString.toString()) !== checkDigit) {\n                throw new NotFoundException();\n            }\n            return rowOffset;\n        }\n        static extensionChecksum(s) {\n            let length = s.length;\n            let sum = 0;\n            for (let i = length - 2; i >= 0; i -= 2) {\n                sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n            }\n            sum *= 3;\n            for (let i = length - 1; i >= 0; i -= 2) {\n                sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n            }\n            sum *= 3;\n            return sum % 10;\n        }\n        determineCheckDigit(lgPatternFound) {\n            for (let d = 0; d < 10; d++) {\n                if (lgPatternFound === this.CHECK_DIGIT_ENCODINGS[d]) {\n                    return d;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static parseExtensionString(raw) {\n            if (raw.length !== 5) {\n                return null;\n            }\n            let value = UPCEANExtension5Support.parseExtension5String(raw);\n            if (value == null) {\n                return null;\n            }\n            return new Map([[ResultMetadataType$1.SUGGESTED_PRICE, value]]);\n        }\n        static parseExtension5String(raw) {\n            let currency;\n            switch (raw.charAt(0)) {\n                case '0':\n                    currency = '\u00A3';\n                    break;\n                case '5':\n                    currency = '$';\n                    break;\n                case '9':\n                    // Reference: http://www.jollytech.com\n                    switch (raw) {\n                        case '90000':\n                            // No suggested retail price\n                            return null;\n                        case '99991':\n                            // Complementary\n                            return '0.00';\n                        case '99990':\n                            return 'Used';\n                    }\n                    // Otherwise... unknown currency?\n                    currency = '';\n                    break;\n                default:\n                    currency = '';\n                    break;\n            }\n            let rawAmount = parseInt(raw.substring(1));\n            let unitsString = (rawAmount / 100).toString();\n            let hundredths = rawAmount % 100;\n            let hundredthsString = hundredths < 10 ? '0' + hundredths : hundredths.toString(); // fixme\n            return currency + unitsString + '.' + hundredthsString;\n        }\n    }\n\n    /**\n     * @see UPCEANExtension5Support\n     */\n    class UPCEANExtension2Support {\n        constructor() {\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n            this.decodeRowStringBuffer = '';\n        }\n        decodeRow(rowNumber, row, extensionStartRange) {\n            let result = this.decodeRowStringBuffer;\n            let end = this.decodeMiddle(row, extensionStartRange, result);\n            let resultString = result.toString();\n            let extensionData = UPCEANExtension2Support.parseExtensionString(resultString);\n            let resultPoints = [\n                new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n                new ResultPoint(end, rowNumber)\n            ];\n            let extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat$1.UPC_EAN_EXTENSION, new Date().getTime());\n            if (extensionData != null) {\n                extensionResult.putAllMetadata(extensionData);\n            }\n            return extensionResult;\n        }\n        decodeMiddle(row, startRange, resultString) {\n            let counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            let checkParity = 0;\n            for (let x = 0; x < 2 && rowOffset < end; x++) {\n                let bestMatch = AbstractUPCEANReader.decodeDigit(row, counters, rowOffset, AbstractUPCEANReader.L_AND_G_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    checkParity |= 1 << (1 - x);\n                }\n                if (x !== 1) {\n                    // Read off separator if not last\n                    rowOffset = row.getNextSet(rowOffset);\n                    rowOffset = row.getNextUnset(rowOffset);\n                }\n            }\n            if (resultString.length !== 2) {\n                throw new NotFoundException();\n            }\n            if (parseInt(resultString.toString()) % 4 !== checkParity) {\n                throw new NotFoundException();\n            }\n            return rowOffset;\n        }\n        static parseExtensionString(raw) {\n            if (raw.length !== 2) {\n                return null;\n            }\n            return new Map([[ResultMetadataType$1.ISSUE_NUMBER, parseInt(raw)]]);\n        }\n    }\n\n    class UPCEANExtensionSupport {\n        static decodeRow(rowNumber, row, rowOffset) {\n            let extensionStartRange = AbstractUPCEANReader.findGuardPattern(\n                row,\n                rowOffset,\n                false,\n                this.EXTENSION_START_PATTERN,\n                new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));\n            try {\n                // return null;\n                let fiveSupport = new UPCEANExtension5Support();\n                return fiveSupport.decodeRow(rowNumber, row, extensionStartRange);\n            }\n            catch (err) {\n                // return null;\n                let twoSupport = new UPCEANExtension2Support();\n                return twoSupport.decodeRow(rowNumber, row, extensionStartRange);\n            }\n        }\n    }\n    UPCEANExtensionSupport.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]);\n\n    /**\n     * <p>Encapsulates functionality and implementation that is common to UPC and EAN families\n     * of one-dimensional barcodes.</p>\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author alasdair@google.com (Alasdair Mackintosh)\n     */\n    class UPCEANReader extends AbstractUPCEANReader {\n        constructor() {\n            super();\n            this.decodeRowStringBuffer = '';\n            UPCEANReader.L_AND_G_PATTERNS = UPCEANReader.L_PATTERNS.map(arr => Int32Array.from(arr));\n            for (let i = 10; i < 20; i++) {\n                let widths = UPCEANReader.L_PATTERNS[i - 10];\n                let reversedWidths = new Int32Array(widths.length);\n                for (let j = 0; j < widths.length; j++) {\n                    reversedWidths[j] = widths[widths.length - j - 1];\n                }\n                UPCEANReader.L_AND_G_PATTERNS[i] = reversedWidths;\n            }\n        }\n        decodeRow(rowNumber, row, hints) {\n            let startGuardRange = UPCEANReader.findStartGuardPattern(row);\n            let resultPointCallback = hints == null ? null : hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n            if (resultPointCallback != null) {\n                const resultPoint = new ResultPoint((startGuardRange[0] + startGuardRange[1]) / 2.0, rowNumber);\n                resultPointCallback.foundPossibleResultPoint(resultPoint);\n            }\n            let budello = this.decodeMiddle(row, startGuardRange, this.decodeRowStringBuffer);\n            let endStart = budello.rowOffset;\n            let result = budello.resultString;\n            if (resultPointCallback != null) {\n                const resultPoint = new ResultPoint(endStart, rowNumber);\n                resultPointCallback.foundPossibleResultPoint(resultPoint);\n            }\n            let endRange = this.decodeEnd(row, endStart);\n            if (resultPointCallback != null) {\n                const resultPoint = new ResultPoint((endRange[0] + endRange[1]) / 2.0, rowNumber);\n                resultPointCallback.foundPossibleResultPoint(resultPoint);\n            }\n            // Make sure there is a quiet zone at least as big as the end pattern after the barcode. The\n            // spec might want more whitespace, but in practice this is the maximum we can count on.\n            let end = endRange[1];\n            let quietEnd = end + (end - endRange[0]);\n            if (quietEnd >= row.getSize() || !row.isRange(end, quietEnd, false)) {\n                throw new NotFoundException();\n            }\n            let resultString = result.toString();\n            // UPC/EAN should never be less than 8 chars anyway\n            if (resultString.length < 8) {\n                throw new FormatException();\n            }\n            if (!UPCEANReader.checkChecksum(resultString)) {\n                throw new ChecksumException();\n            }\n            let left = (startGuardRange[1] + startGuardRange[0]) / 2.0;\n            let right = (endRange[1] + endRange[0]) / 2.0;\n            let format = this.getBarcodeFormat();\n            let resultPoint = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n            let decodeResult = new Result(resultString, null, 0, resultPoint, format, new Date().getTime());\n            let extensionLength = 0;\n            try {\n                let extensionResult = UPCEANExtensionSupport.decodeRow(rowNumber, row, endRange[1]);\n                decodeResult.putMetadata(ResultMetadataType$1.UPC_EAN_EXTENSION, extensionResult.getText());\n                decodeResult.putAllMetadata(extensionResult.getResultMetadata());\n                decodeResult.addResultPoints(extensionResult.getResultPoints());\n                extensionLength = extensionResult.getText().length;\n            }\n            catch (ignoreError) {}\n            let allowedExtensions = hints == null ? null : hints.get(DecodeHintType$1.ALLOWED_EAN_EXTENSIONS);\n            if (allowedExtensions != null) {\n                let valid = false;\n                for (let length in allowedExtensions) {\n                    if (extensionLength.toString() === length) { // check me\n                        valid = true;\n                        break;\n                    }\n                }\n                if (!valid) {\n                    throw new NotFoundException();\n                }\n            }\n            return decodeResult;\n        }\n        decodeEnd(row, endStart) {\n            return UPCEANReader.findGuardPattern(\n                row, endStart, false, UPCEANReader.START_END_PATTERN,\n                new Int32Array(UPCEANReader.START_END_PATTERN.length).fill(0));\n        }\n        static checkChecksum(s) {\n            return UPCEANReader.checkStandardUPCEANChecksum(s);\n        }\n        static checkStandardUPCEANChecksum(s) {\n            let length = s.length;\n            if (length === 0)\n                return false;\n            let check = parseInt(s.charAt(length - 1), 10);\n            return UPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n        }\n        static getStandardUPCEANChecksum(s) {\n            let length = s.length;\n            let sum = 0;\n            for (let i = length - 1; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            sum *= 3;\n            for (let i = length - 2; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            return (1000 - sum) % 10;\n        }\n    }\n\n    /**\n     * <p>Implements decoding of the EAN-13 format.</p>\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author alasdair@google.com (Alasdair Mackintosh)\n     */\n    class EAN13Reader extends UPCEANReader {\n        constructor() {\n            super();\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        }\n        decodeMiddle(row, startRange, resultString) {\n            let counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            let lgPatternFound = 0;\n            for (let x = 0; x < 6 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_AND_G_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    lgPatternFound |= 1 << (5 - x);\n                }\n            }\n            resultString = EAN13Reader.determineFirstDigit(resultString, lgPatternFound);\n            let middleRange = UPCEANReader.findGuardPattern(\n                row,\n                rowOffset,\n                true,\n                UPCEANReader.MIDDLE_PATTERN,\n                new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n            rowOffset = middleRange[1];\n            for (let x = 0; x < 6 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n            }\n            return { rowOffset, resultString };\n        }\n        getBarcodeFormat() {\n            return BarcodeFormat$1.EAN_13;\n        }\n        static determineFirstDigit(resultString, lgPatternFound) {\n            for (let d = 0; d < 10; d++) {\n                if (lgPatternFound === this.FIRST_DIGIT_ENCODINGS[d]) {\n                    resultString = String.fromCharCode(('0'.charCodeAt(0) + d)) + resultString;\n                    return resultString;\n                }\n            }\n            throw new NotFoundException();\n        }\n    }\n    EAN13Reader.FIRST_DIGIT_ENCODINGS = [0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A];\n\n    /**\n     * <p>Implements decoding of the EAN-8 format.</p>\n     *\n     * @author Sean Owen\n     */\n    class EAN8Reader extends UPCEANReader {\n        constructor() {\n            super();\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        }\n        decodeMiddle(row, startRange, resultString) {\n            const counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            for (let x = 0; x < 4 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n            }\n            let middleRange = UPCEANReader.findGuardPattern(row, rowOffset, true, UPCEANReader.MIDDLE_PATTERN, new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n            rowOffset = middleRange[1];\n            for (let x = 0; x < 4 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n            }\n            return { rowOffset, resultString };\n        }\n        getBarcodeFormat() {\n            return BarcodeFormat$1.EAN_8;\n        }\n    }\n\n    /**\n     * Encapsulates functionality and implementation that is common to all families\n     * of one-dimensional barcodes.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author sam2332 (Sam Rudloff)\n     *\n     * @source https://github.com/zxing/zxing/blob/3c96923276dd5785d58eb970b6ba3f80d36a9505/core/src/main/java/com/google/zxing/oned/UPCAReader.java\n     *\n     * @experimental\n     */\n    class UPCAReader extends UPCEANReader {\n        constructor() {\n            super(...arguments);\n            this.ean13Reader = new EAN13Reader();\n        }\n        // @Override\n        getBarcodeFormat() {\n            return BarcodeFormat$1.UPC_A;\n        }\n        // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n        // @Override\n        decode(image, hints) {\n            return this.maybeReturnResult(this.ean13Reader.decode(image));\n        }\n        // @Override\n        decodeRow(rowNumber, row, hints) {\n            return this.maybeReturnResult(this.ean13Reader.decodeRow(rowNumber, row, hints));\n        }\n        // @Override\n        decodeMiddle(row, startRange, resultString) {\n            return this.ean13Reader.decodeMiddle(row, startRange, resultString);\n        }\n        maybeReturnResult(result) {\n            let text = result.getText();\n            if (text.charAt(0) === '0') {\n                let upcaResult = new Result(text.substring(1), null, null, result.getResultPoints(), BarcodeFormat$1.UPC_A);\n                if (result.getResultMetadata() != null) {\n                    upcaResult.putAllMetadata(result.getResultMetadata());\n                }\n                return upcaResult;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n        reset() {\n            this.ean13Reader.reset();\n        }\n    }\n\n    /**\n     * <p>Implements decoding of the UPC-E format.</p>\n     * <p><a href=\"http://www.barcodeisland.com/upce.phtml\">This</a> is a great reference for\n     * UPC-E information.</p>\n     *\n     * @author Sean Owen\n     *\n     * @source https://github.com/zxing/zxing/blob/3c96923276dd5785d58eb970b6ba3f80d36a9505/core/src/main/java/com/google/zxing/oned/UPCEReader.java\n     *\n     * @experimental\n     */\n    /* final */ class UPCEReader extends UPCEANReader {\n        constructor() {\n            super();\n            this.decodeMiddleCounters = new Int32Array(4);\n        }\n        /**\n         * @throws NotFoundException\n         */\n        // @Override\n        decodeMiddle(row, startRange, result) {\n            const counters = this.decodeMiddleCounters.map(x => x);\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            const end = row.getSize();\n            let rowOffset = startRange[1];\n            let lgPatternFound = 0;\n            for (let x = 0; x < 6 && rowOffset < end; x++) {\n                const bestMatch = UPCEReader.decodeDigit(\n                    row, counters, rowOffset, UPCEReader.L_AND_G_PATTERNS);\n                result += String.fromCharCode(('0'.charCodeAt(0) + (bestMatch % 10)));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    lgPatternFound |= (1 << (5 - x));\n                }\n            }\n            let resultString = UPCEReader.determineNumSysAndCheckDigit(\n                result, lgPatternFound);\n            return {rowOffset, resultString};\n        }\n        /**\n         * @throws NotFoundException\n         */\n        // @Override\n        decodeEnd(row, endStart) {\n            return UPCEReader.findGuardPatternWithoutCounters(\n                row, endStart, true, UPCEReader.MIDDLE_END_PATTERN);\n        }\n        /**\n         * @throws FormatException\n         */\n        // @Override\n        checkChecksum(s) {\n            return UPCEANReader.checkChecksum(UPCEReader.convertUPCEtoUPCA(s));\n        }\n        /**\n         * @throws NotFoundException\n         */\n        static determineNumSysAndCheckDigit(resultString, lgPatternFound) {\n            for (let numSys = 0; numSys <= 1; numSys++) {\n                for (let d = 0; d < 10; d++) {\n                    if (lgPatternFound === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {\n                        let prefix = String.fromCharCode('0'.charCodeAt(0) + numSys);\n                        let suffix = String.fromCharCode('0'.charCodeAt(0) + d);\n                        return prefix + resultString + suffix;\n                    }\n                }\n            }\n            throw NotFoundException.getNotFoundInstance();\n        }\n        // @Override\n        getBarcodeFormat() {\n            return BarcodeFormat$1.UPC_E;\n        }\n        /**\n         * Expands a UPC-E value back into its full, equivalent UPC-A code value.\n         *\n         * @param upce UPC-E code as string of digits\n         * @return equivalent UPC-A code as string of digits\n         */\n        static convertUPCEtoUPCA(upce) {\n            // the following line is equivalent to upce.getChars(1, 7, upceChars, 0);\n            const upceChars = upce.slice(1, 7).split('').map(x => x.charCodeAt(0));\n            const result = new StringBuilder( /*12*/);\n            result.append(upce.charAt(0));\n            let lastChar = upceChars[5];\n            switch (lastChar) {\n                case 0:\n                case 1:\n                case 2:\n                    result.appendChars(upceChars, 0, 2);\n                    result.append(lastChar);\n                    result.append('0000');\n                    result.appendChars(upceChars, 2, 3);\n                    break;\n                case 3:\n                    result.appendChars(upceChars, 0, 3);\n                    result.append('00000');\n                    result.appendChars(upceChars, 3, 2);\n                    break;\n                case 4:\n                    result.appendChars(upceChars, 0, 4);\n                    result.append('00000');\n                    result.append(upceChars[4]);\n                    break;\n                default:\n                    result.appendChars(upceChars, 0, 5);\n                    result.append('0000');\n                    result.append(lastChar);\n                    break;\n            }\n            // Only append check digit in conversion if supplied\n            if (upce.length >= 8) {\n                result.append(upce.charAt(7));\n            }\n            return result.toString();\n        }\n    }\n    /**\n     * The pattern that marks the middle, and end, of a UPC-E pattern.\n     * There is no \"second half\" to a UPC-E barcode.\n     */\n    UPCEReader.MIDDLE_END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]);\n    // For an UPC-E barcode, the final digit is represented by the parities used\n    // to encode the middle six digits, according to the table below.\n    //\n    //                Parity of next 6 digits\n    //    Digit   0     1     2     3     4     5\n    //       0    Even   Even  Even Odd  Odd   Odd\n    //       1    Even   Even  Odd  Even Odd   Odd\n    //       2    Even   Even  Odd  Odd  Even  Odd\n    //       3    Even   Even  Odd  Odd  Odd   Even\n    //       4    Even   Odd   Even Even Odd   Odd\n    //       5    Even   Odd   Odd  Even Even  Odd\n    //       6    Even   Odd   Odd  Odd  Even  Even\n    //       7    Even   Odd   Even Odd  Even  Odd\n    //       8    Even   Odd   Even Odd  Odd   Even\n    //       9    Even   Odd   Odd  Even Odd   Even\n    //\n    // The encoding is represented by the following array, which is a bit pattern\n    // using Odd = 0 and Even = 1. For example, 5 is represented by:\n    //\n    //              Odd Even Even Odd Odd Even\n    // in binary:\n    //                0    1    1   0   0    1   == 0x19\n    //\n    /**\n     * See {@link #L_AND_G_PATTERNS}; these values similarly represent patterns of\n     * even-odd parity encodings of digits that imply both the number system (0 or 1)\n     * used, and the check digit.\n     */\n    UPCEReader.NUMSYS_AND_CHECK_DIGIT_PATTERNS = [\n        Int32Array.from([0x38, 0x34, 0x32, 0x31, 0x2C, 0x26, 0x23, 0x2A, 0x29, 0x25]),\n        Int32Array.from([0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A]),\n    ];\n\n    /**\n     * <p>A reader that can read all available UPC/EAN formats. If a caller wants to try to\n     * read all such formats, it is most efficient to use this implementation rather than invoke\n     * individual readers.</p>\n     *\n     * @author Sean Owen\n     */\n    class MultiFormatUPCEANReader extends OneDReader {\n        constructor(hints) {\n            super();\n            let possibleFormats = hints == null ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n            let readers = [];\n            if (!isNullOrUndefined(possibleFormats)) {\n                if (possibleFormats.indexOf(BarcodeFormat$1.EAN_13) > -1) {\n                    readers.push(new EAN13Reader());\n                }\n                if (possibleFormats.indexOf(BarcodeFormat$1.UPC_A) > -1) {\n                    readers.push(new UPCAReader());\n                }\n                if (possibleFormats.indexOf(BarcodeFormat$1.EAN_8) > -1) {\n                    readers.push(new EAN8Reader());\n                }\n                if (possibleFormats.indexOf(BarcodeFormat$1.UPC_E) > -1) {\n                    readers.push(new UPCEReader());\n                }\n            } else {\n                // No hints provided.\n                readers.push(new EAN13Reader());\n                readers.push(new UPCAReader());\n                readers.push(new EAN8Reader());\n                readers.push(new UPCEReader());\n            }\n            this.readers = readers;\n        }\n        decodeRow(rowNumber, row, hints) {\n            for (let reader of this.readers) {\n                try {\n                    // const result: Result = reader.decodeRow(rowNumber, row, startGuardPattern, hints);\n                    const result = reader.decodeRow(rowNumber, row, hints);\n                    // Special case: a 12-digit code encoded in UPC-A is identical to a \"0\"\n                    // followed by those 12 digits encoded as EAN-13. Each will recognize such a code,\n                    // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with \"0\".\n                    // Individually these are correct and their readers will both read such a code\n                    // and correctly call it EAN-13, or UPC-A, respectively.\n                    //\n                    // In this case, if we've been looking for both types, we'd like to call it\n                    // a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read\n                    // UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A\n                    // result if appropriate.\n                    //\n                    // But, don't return UPC-A if UPC-A was not a requested format!\n                    const ean13MayBeUPCA = result.getBarcodeFormat() === BarcodeFormat$1.EAN_13 &&\n                        result.getText().charAt(0) === '0';\n                    // @SuppressWarnings(\"unchecked\")\n                    const possibleFormats = hints == null ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n                    const canReturnUPCA = possibleFormats == null || possibleFormats.includes(BarcodeFormat$1.UPC_A);\n                    if (ean13MayBeUPCA && canReturnUPCA) {\n                        const rawBytes = result.getRawBytes();\n                        // Transfer the metadata across\n                        const resultUPCA = new Result(\n                            result.getText().substring(1),\n                            rawBytes,\n                            (rawBytes ? rawBytes.length : null),\n                            result.getResultPoints(),\n                            BarcodeFormat$1.UPC_A);\n                        resultUPCA.putAllMetadata(result.getResultMetadata());\n                        return resultUPCA;\n                    }\n                    return result;\n                }\n                catch (err) {\n                    // continue;\n                }\n            }\n            throw new NotFoundException();\n        }\n        reset() {\n            for (let reader of this.readers) {\n                reader.reset();\n            }\n        }\n    }\n\n    // import Integer from '../../util/Integer';\n    // import Float from '../../util/Float';\n    class AbstractRSSReader extends OneDReader {\n        constructor() {\n            super();\n            this.decodeFinderCounters = new Int32Array(4);\n            this.dataCharacterCounters = new Int32Array(8);\n            this.oddRoundingErrors = new Array(4);\n            this.evenRoundingErrors = new Array(4);\n            this.oddCounts = new Array(this.dataCharacterCounters.length / 2);\n            this.evenCounts = new Array(this.dataCharacterCounters.length / 2);\n        }\n        getDecodeFinderCounters() {\n            return this.decodeFinderCounters;\n        }\n        getDataCharacterCounters() {\n            return this.dataCharacterCounters;\n        }\n        getOddRoundingErrors() {\n            return this.oddRoundingErrors;\n        }\n        getEvenRoundingErrors() {\n            return this.evenRoundingErrors;\n        }\n        getOddCounts() {\n            return this.oddCounts;\n        }\n        getEvenCounts() {\n            return this.evenCounts;\n        }\n        parseFinderValue(counters, finderPatterns) {\n            for (let value = 0; value < finderPatterns.length; value++) {\n                if (OneDReader.patternMatchVariance(counters, finderPatterns[value], AbstractRSSReader.MAX_INDIVIDUAL_VARIANCE) < AbstractRSSReader.MAX_AVG_VARIANCE) {\n                    return value;\n                }\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * @param array values to sum\n         * @return sum of values\n         * @deprecated call {@link MathUtils#sum(int[])}\n         */\n        static count(array) {\n            return MathUtils.sum(new Int32Array(array));\n        }\n        static increment(array, errors) {\n            let index = 0;\n            let biggestError = errors[0];\n            for (let i = 1; i < array.length; i++) {\n                if (errors[i] > biggestError) {\n                    biggestError = errors[i];\n                    index = i;\n                }\n            }\n            array[index]++;\n        }\n        static decrement(array, errors) {\n            let index = 0;\n            let biggestError = errors[0];\n            for (let i = 1; i < array.length; i++) {\n                if (errors[i] < biggestError) {\n                    biggestError = errors[i];\n                    index = i;\n                }\n            }\n            array[index]--;\n        }\n        static isFinderPattern(counters) {\n            let firstTwoSum = counters[0] + counters[1];\n            let sum = firstTwoSum + counters[2] + counters[3];\n            let ratio = firstTwoSum / sum;\n            if (ratio >= AbstractRSSReader.MIN_FINDER_PATTERN_RATIO && ratio <= AbstractRSSReader.MAX_FINDER_PATTERN_RATIO) {\n                // passes ratio test in spec, but see if the counts are unreasonable\n                let minCounter = Number.MAX_SAFE_INTEGER;\n                let maxCounter = Number.MIN_SAFE_INTEGER;\n                for (let counter of counters) {\n                    if (counter > maxCounter) {\n                        maxCounter = counter;\n                    }\n                    if (counter < minCounter) {\n                        minCounter = counter;\n                    }\n                }\n                return maxCounter < 10 * minCounter;\n            }\n            return false;\n        }\n    }\n    AbstractRSSReader.MAX_AVG_VARIANCE = 0.2;\n    AbstractRSSReader.MAX_INDIVIDUAL_VARIANCE = 0.45;\n    AbstractRSSReader.MIN_FINDER_PATTERN_RATIO = 9.5 / 12.0;\n    AbstractRSSReader.MAX_FINDER_PATTERN_RATIO = 12.5 / 14.0;\n\n    class DataCharacter {\n        constructor(value, checksumPortion) {\n            this.value = value;\n            this.checksumPortion = checksumPortion;\n        }\n        getValue() {\n            return this.value;\n        }\n        getChecksumPortion() {\n            return this.checksumPortion;\n        }\n        toString() {\n            return this.value + '(' + this.checksumPortion + ')';\n        }\n        equals(o) {\n            if (!(o instanceof DataCharacter)) {\n                return false;\n            }\n            const that = o;\n            return this.value === that.value && this.checksumPortion === that.checksumPortion;\n        }\n        hashCode() {\n            return this.value ^ this.checksumPortion;\n        }\n    }\n\n    class FinderPattern {\n        constructor(value, startEnd, start, end, rowNumber) {\n            this.value = value;\n            this.startEnd = startEnd;\n            this.value = value;\n            this.startEnd = startEnd;\n            this.resultPoints = new Array();\n            this.resultPoints.push(new ResultPoint(start, rowNumber));\n            this.resultPoints.push(new ResultPoint(end, rowNumber));\n        }\n        getValue() {\n            return this.value;\n        }\n        getStartEnd() {\n            return this.startEnd;\n        }\n        getResultPoints() {\n            return this.resultPoints;\n        }\n        equals(o) {\n            if (!(o instanceof FinderPattern)) {\n                return false;\n            }\n            const that = o;\n            return this.value === that.value;\n        }\n        hashCode() {\n            return this.value;\n        }\n    }\n\n    /**\n     * RSS util functions.\n     */\n    class RSSUtils {\n        constructor() { }\n        static getRSSvalue(widths, maxWidth, noNarrow) {\n            let n = 0;\n            for (let width of widths) {\n                n += width;\n            }\n            let val = 0;\n            let narrowMask = 0;\n            let elements = widths.length;\n            for (let bar = 0; bar < elements - 1; bar++) {\n                let elmWidth;\n                for (elmWidth = 1, narrowMask |= 1 << bar; elmWidth < widths[bar]; elmWidth++, narrowMask &= ~(1 << bar)) {\n                    let subVal = RSSUtils.combins(n - elmWidth - 1, elements - bar - 2);\n                    if (noNarrow && (narrowMask === 0) && (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {\n                        subVal -= RSSUtils.combins(n - elmWidth - (elements - bar), elements - bar - 2);\n                    }\n                    if (elements - bar - 1 > 1) {\n                        let lessVal = 0;\n                        for (let mxwElement = n - elmWidth - (elements - bar - 2); mxwElement > maxWidth; mxwElement--) {\n                            lessVal += RSSUtils.combins(n - elmWidth - mxwElement - 1, elements - bar - 3);\n                        }\n                        subVal -= lessVal * (elements - 1 - bar);\n                    }\n                    else if (n - elmWidth > maxWidth) {\n                        subVal--;\n                    }\n                    val += subVal;\n                }\n                n -= elmWidth;\n            }\n            return val;\n        }\n        static combins(n, r) {\n            let maxDenom;\n            let minDenom;\n            if (n - r > r) {\n                minDenom = r;\n                maxDenom = n - r;\n            }\n            else {\n                minDenom = n - r;\n                maxDenom = r;\n            }\n            let val = 1;\n            let j = 1;\n            for (let i = n; i > maxDenom; i--) {\n                val *= i;\n                if (j <= minDenom) {\n                    val /= j;\n                    j++;\n                }\n            }\n            while ((j <= minDenom)) {\n                val /= j;\n                j++;\n            }\n            return val;\n        }\n    }\n\n    class BitArrayBuilder {\n        static buildBitArray(pairs) {\n            let charNumber = (pairs.length * 2) - 1;\n            if (pairs[pairs.length - 1].getRightChar() == null) {\n                charNumber -= 1;\n            }\n            let size = 12 * charNumber;\n            let binary = new BitArray(size);\n            let accPos = 0;\n            let firstPair = pairs[0];\n            let firstValue = firstPair.getRightChar().getValue();\n            for (let i = 11; i >= 0; --i) {\n                if ((firstValue & (1 << i)) != 0) {\n                    binary.set(accPos);\n                }\n                accPos++;\n            }\n            for (let i = 1; i < pairs.length; ++i) {\n                let currentPair = pairs[i];\n                let leftValue = currentPair.getLeftChar().getValue();\n                for (let j = 11; j >= 0; --j) {\n                    if ((leftValue & (1 << j)) != 0) {\n                        binary.set(accPos);\n                    }\n                    accPos++;\n                }\n                if (currentPair.getRightChar() != null) {\n                    let rightValue = currentPair.getRightChar().getValue();\n                    for (let j = 11; j >= 0; --j) {\n                        if ((rightValue & (1 << j)) != 0) {\n                            binary.set(accPos);\n                        }\n                        accPos++;\n                    }\n                }\n            }\n            return binary;\n        }\n    }\n\n    class BlockParsedResult {\n        constructor(finished, decodedInformation) {\n            if (decodedInformation) {\n                this.decodedInformation = null;\n            }\n            else {\n                this.finished = finished;\n                this.decodedInformation = decodedInformation;\n            }\n        }\n        getDecodedInformation() {\n            return this.decodedInformation;\n        }\n        isFinished() {\n            return this.finished;\n        }\n    }\n\n    class DecodedObject {\n        constructor(newPosition) {\n            this.newPosition = newPosition;\n        }\n        getNewPosition() {\n            return this.newPosition;\n        }\n    }\n\n    class DecodedChar extends DecodedObject {\n        constructor(newPosition, value) {\n            super(newPosition);\n            this.value = value;\n        }\n        getValue() {\n            return this.value;\n        }\n        isFNC1() {\n            return this.value === DecodedChar.FNC1;\n        }\n    }\n    DecodedChar.FNC1 = '$';\n\n    class DecodedInformation extends DecodedObject {\n        constructor(newPosition, newString, remainingValue) {\n            super(newPosition);\n            if (remainingValue) {\n                this.remaining = true;\n                this.remainingValue = this.remainingValue;\n            }\n            else {\n                this.remaining = false;\n                this.remainingValue = 0;\n            }\n            this.newString = newString;\n        }\n        getNewString() {\n            return this.newString;\n        }\n        isRemaining() {\n            return this.remaining;\n        }\n        getRemainingValue() {\n            return this.remainingValue;\n        }\n    }\n\n    class DecodedNumeric extends DecodedObject {\n        constructor(newPosition, firstDigit, secondDigit) {\n            super(newPosition);\n            if (firstDigit < 0 || firstDigit > 10 || secondDigit < 0 || secondDigit > 10) {\n                throw new FormatException();\n            }\n            this.firstDigit = firstDigit;\n            this.secondDigit = secondDigit;\n        }\n        getFirstDigit() {\n            return this.firstDigit;\n        }\n        getSecondDigit() {\n            return this.secondDigit;\n        }\n        getValue() {\n            return this.firstDigit * 10 + this.secondDigit;\n        }\n        isFirstDigitFNC1() {\n            return this.firstDigit === DecodedNumeric.FNC1;\n        }\n        isSecondDigitFNC1() {\n            return this.secondDigit === DecodedNumeric.FNC1;\n        }\n        isAnyFNC1() {\n            return this.firstDigit === DecodedNumeric.FNC1 || this.secondDigit === DecodedNumeric.FNC1;\n        }\n    }\n    DecodedNumeric.FNC1 = 10;\n\n    class FieldParser {\n        constructor() {\n        }\n        static parseFieldsInGeneralPurpose(rawInformation) {\n            if (!rawInformation) {\n                return null;\n            }\n            // Processing 2-digit AIs\n            if (rawInformation.length < 2) {\n                throw new NotFoundException();\n            }\n            let firstTwoDigits = rawInformation.substring(0, 2);\n            for (let dataLength of FieldParser.TWO_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstTwoDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(2, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(2, dataLength[1], rawInformation);\n                }\n            }\n            if (rawInformation.length < 3) {\n                throw new NotFoundException();\n            }\n            let firstThreeDigits = rawInformation.substring(0, 3);\n            for (let dataLength of FieldParser.THREE_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstThreeDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(3, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(3, dataLength[1], rawInformation);\n                }\n            }\n            for (let dataLength of FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstThreeDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(4, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(4, dataLength[1], rawInformation);\n                }\n            }\n            if (rawInformation.length < 4) {\n                throw new NotFoundException();\n            }\n            let firstFourDigits = rawInformation.substring(0, 4);\n            for (let dataLength of FieldParser.FOUR_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstFourDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(4, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(4, dataLength[1], rawInformation);\n                }\n            }\n            throw new NotFoundException();\n        }\n        static processFixedAI(aiSize, fieldSize, rawInformation) {\n            if (rawInformation.length < aiSize) {\n                throw new NotFoundException();\n            }\n            let ai = rawInformation.substring(0, aiSize);\n            if (rawInformation.length < aiSize + fieldSize) {\n                throw new NotFoundException();\n            }\n            let field = rawInformation.substring(aiSize, aiSize + fieldSize);\n            let remaining = rawInformation.substring(aiSize + fieldSize);\n            let result = '(' + ai + ')' + field;\n            let parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n            return parsedAI == null ? result : result + parsedAI;\n        }\n        static processVariableAI(aiSize, variableFieldSize, rawInformation) {\n            let ai = rawInformation.substring(0, aiSize);\n            let maxSize;\n            if (rawInformation.length < aiSize + variableFieldSize) {\n                maxSize = rawInformation.length;\n            }\n            else {\n                maxSize = aiSize + variableFieldSize;\n            }\n            let field = rawInformation.substring(aiSize, maxSize);\n            let remaining = rawInformation.substring(maxSize);\n            let result = '(' + ai + ')' + field;\n            let parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n            return parsedAI == null ? result : result + parsedAI;\n        }\n    }\n    FieldParser.VARIABLE_LENGTH = [];\n    FieldParser.TWO_DIGIT_DATA_LENGTH = [\n        ['00', 18],\n        ['01', 14],\n        ['02', 14],\n        ['10', FieldParser.VARIABLE_LENGTH, 20],\n        ['11', 6],\n        ['12', 6],\n        ['13', 6],\n        ['15', 6],\n        ['17', 6],\n        ['20', 2],\n        ['21', FieldParser.VARIABLE_LENGTH, 20],\n        ['22', FieldParser.VARIABLE_LENGTH, 29],\n        ['30', FieldParser.VARIABLE_LENGTH, 8],\n        ['37', FieldParser.VARIABLE_LENGTH, 8],\n        // internal company codes\n        ['90', FieldParser.VARIABLE_LENGTH, 30],\n        ['91', FieldParser.VARIABLE_LENGTH, 30],\n        ['92', FieldParser.VARIABLE_LENGTH, 30],\n        ['93', FieldParser.VARIABLE_LENGTH, 30],\n        ['94', FieldParser.VARIABLE_LENGTH, 30],\n        ['95', FieldParser.VARIABLE_LENGTH, 30],\n        ['96', FieldParser.VARIABLE_LENGTH, 30],\n        ['97', FieldParser.VARIABLE_LENGTH, 3],\n        ['98', FieldParser.VARIABLE_LENGTH, 30],\n        ['99', FieldParser.VARIABLE_LENGTH, 30],\n    ];\n    FieldParser.THREE_DIGIT_DATA_LENGTH = [\n        // Same format as above\n        ['240', FieldParser.VARIABLE_LENGTH, 30],\n        ['241', FieldParser.VARIABLE_LENGTH, 30],\n        ['242', FieldParser.VARIABLE_LENGTH, 6],\n        ['250', FieldParser.VARIABLE_LENGTH, 30],\n        ['251', FieldParser.VARIABLE_LENGTH, 30],\n        ['253', FieldParser.VARIABLE_LENGTH, 17],\n        ['254', FieldParser.VARIABLE_LENGTH, 20],\n        ['400', FieldParser.VARIABLE_LENGTH, 30],\n        ['401', FieldParser.VARIABLE_LENGTH, 30],\n        ['402', 17],\n        ['403', FieldParser.VARIABLE_LENGTH, 30],\n        ['410', 13],\n        ['411', 13],\n        ['412', 13],\n        ['413', 13],\n        ['414', 13],\n        ['420', FieldParser.VARIABLE_LENGTH, 20],\n        ['421', FieldParser.VARIABLE_LENGTH, 15],\n        ['422', 3],\n        ['423', FieldParser.VARIABLE_LENGTH, 15],\n        ['424', 3],\n        ['425', 3],\n        ['426', 3],\n    ];\n    FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [\n        // Same format as above\n        ['310', 6],\n        ['311', 6],\n        ['312', 6],\n        ['313', 6],\n        ['314', 6],\n        ['315', 6],\n        ['316', 6],\n        ['320', 6],\n        ['321', 6],\n        ['322', 6],\n        ['323', 6],\n        ['324', 6],\n        ['325', 6],\n        ['326', 6],\n        ['327', 6],\n        ['328', 6],\n        ['329', 6],\n        ['330', 6],\n        ['331', 6],\n        ['332', 6],\n        ['333', 6],\n        ['334', 6],\n        ['335', 6],\n        ['336', 6],\n        ['340', 6],\n        ['341', 6],\n        ['342', 6],\n        ['343', 6],\n        ['344', 6],\n        ['345', 6],\n        ['346', 6],\n        ['347', 6],\n        ['348', 6],\n        ['349', 6],\n        ['350', 6],\n        ['351', 6],\n        ['352', 6],\n        ['353', 6],\n        ['354', 6],\n        ['355', 6],\n        ['356', 6],\n        ['357', 6],\n        ['360', 6],\n        ['361', 6],\n        ['362', 6],\n        ['363', 6],\n        ['364', 6],\n        ['365', 6],\n        ['366', 6],\n        ['367', 6],\n        ['368', 6],\n        ['369', 6],\n        ['390', FieldParser.VARIABLE_LENGTH, 15],\n        ['391', FieldParser.VARIABLE_LENGTH, 18],\n        ['392', FieldParser.VARIABLE_LENGTH, 15],\n        ['393', FieldParser.VARIABLE_LENGTH, 18],\n        ['703', FieldParser.VARIABLE_LENGTH, 30],\n    ];\n    FieldParser.FOUR_DIGIT_DATA_LENGTH = [\n        // Same format as above\n        ['7001', 13],\n        ['7002', FieldParser.VARIABLE_LENGTH, 30],\n        ['7003', 10],\n        ['8001', 14],\n        ['8002', FieldParser.VARIABLE_LENGTH, 20],\n        ['8003', FieldParser.VARIABLE_LENGTH, 30],\n        ['8004', FieldParser.VARIABLE_LENGTH, 30],\n        ['8005', 6],\n        ['8006', 18],\n        ['8007', FieldParser.VARIABLE_LENGTH, 30],\n        ['8008', FieldParser.VARIABLE_LENGTH, 12],\n        ['8018', 18],\n        ['8020', FieldParser.VARIABLE_LENGTH, 25],\n        ['8100', 6],\n        ['8101', 10],\n        ['8102', 2],\n        ['8110', FieldParser.VARIABLE_LENGTH, 70],\n        ['8200', FieldParser.VARIABLE_LENGTH, 70],\n    ];\n\n    class GeneralAppIdDecoder {\n        constructor(information) {\n            this.buffer = new StringBuilder();\n            this.information = information;\n        }\n        decodeAllCodes(buff, initialPosition) {\n            let currentPosition = initialPosition;\n            let remaining = null;\n            do {\n                let info = this.decodeGeneralPurposeField(currentPosition, remaining);\n                let parsedFields = FieldParser.parseFieldsInGeneralPurpose(info.getNewString());\n                if (parsedFields != null) {\n                    buff.append(parsedFields);\n                }\n                if (info.isRemaining()) {\n                    remaining = '' + info.getRemainingValue();\n                }\n                else {\n                    remaining = null;\n                }\n                if (currentPosition === info.getNewPosition()) { // No step forward!\n                    break;\n                }\n                currentPosition = info.getNewPosition();\n            } while (true);\n            return buff.toString();\n        }\n        isStillNumeric(pos) {\n            // It's numeric if it still has 7 positions\n            // and one of the first 4 bits is \"1\".\n            if (pos + 7 > this.information.getSize()) {\n                return pos + 4 <= this.information.getSize();\n            }\n            for (let i = pos; i < pos + 3; ++i) {\n                if (this.information.get(i)) {\n                    return true;\n                }\n            }\n            return this.information.get(pos + 3);\n        }\n        decodeNumeric(pos) {\n            if (pos + 7 > this.information.getSize()) {\n                let numeric = this.extractNumericValueFromBitArray(pos, 4);\n                if (numeric === 0) {\n                    return new DecodedNumeric(this.information.getSize(), DecodedNumeric.FNC1, DecodedNumeric.FNC1);\n                }\n                return new DecodedNumeric(this.information.getSize(), numeric - 1, DecodedNumeric.FNC1);\n            }\n            let numeric = this.extractNumericValueFromBitArray(pos, 7);\n            let digit1 = (numeric - 8) / 11;\n            let digit2 = (numeric - 8) % 11;\n            return new DecodedNumeric(pos + 7, digit1, digit2);\n        }\n        extractNumericValueFromBitArray(pos, bits) {\n            return GeneralAppIdDecoder.extractNumericValueFromBitArray(this.information, pos, bits);\n        }\n        static extractNumericValueFromBitArray(information, pos, bits) {\n            let value = 0;\n            for (let i = 0; i < bits; ++i) {\n                if (information.get(pos + i)) {\n                    value |= 1 << (bits - i - 1);\n                }\n            }\n            return value;\n        }\n        decodeGeneralPurposeField(pos, remaining) {\n            // this.buffer.setLength(0);\n            this.buffer.setLengthToZero();\n            if (remaining != null) {\n                this.buffer.append(remaining);\n            }\n            this.current.setPosition(pos);\n            let lastDecoded = this.parseBlocks();\n            if (lastDecoded != null && lastDecoded.isRemaining()) {\n                return new DecodedInformation(this.current.getPosition(), this.buffer.toString(), lastDecoded.getRemainingValue());\n            }\n            return new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n        }\n        parseBlocks() {\n            let isFinished;\n            let result;\n            do {\n                let initialPosition = this.current.getPosition();\n                if (this.current.isAlpha()) {\n                    result = this.parseAlphaBlock();\n                    isFinished = result.isFinished();\n                }\n                else if (this.current.isIsoIec646()) {\n                    result = this.parseIsoIec646Block();\n                    isFinished = result.isFinished();\n                }\n                else { // it must be numeric\n                    result = this.parseNumericBlock();\n                    isFinished = result.isFinished();\n                }\n                let positionChanged = initialPosition !== this.current.getPosition();\n                if (!positionChanged && !isFinished) {\n                    break;\n                }\n            } while (!isFinished);\n            return result.getDecodedInformation();\n        }\n        parseNumericBlock() {\n            while (this.isStillNumeric(this.current.getPosition())) {\n                let numeric = this.decodeNumeric(this.current.getPosition());\n                this.current.setPosition(numeric.getNewPosition());\n                if (numeric.isFirstDigitFNC1()) {\n                    let information;\n                    if (numeric.isSecondDigitFNC1()) {\n                        information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    }\n                    else {\n                        information = new DecodedInformation(this.current.getPosition(), this.buffer.toString(), numeric.getSecondDigit());\n                    }\n                    return new BlockParsedResult(true, information);\n                }\n                this.buffer.append(numeric.getFirstDigit());\n                if (numeric.isSecondDigitFNC1()) {\n                    let information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    return new BlockParsedResult(true, information);\n                }\n                this.buffer.append(numeric.getSecondDigit());\n            }\n            if (this.isNumericToAlphaNumericLatch(this.current.getPosition())) {\n                this.current.setAlpha();\n                this.current.incrementPosition(4);\n            }\n            return new BlockParsedResult(false);\n        }\n        parseIsoIec646Block() {\n            while (this.isStillIsoIec646(this.current.getPosition())) {\n                let iso = this.decodeIsoIec646(this.current.getPosition());\n                this.current.setPosition(iso.getNewPosition());\n                if (iso.isFNC1()) {\n                    let information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    return new BlockParsedResult(true, information);\n                }\n                this.buffer.append(iso.getValue());\n            }\n            if (this.isAlphaOr646ToNumericLatch(this.current.getPosition())) {\n                this.current.incrementPosition(3);\n                this.current.setNumeric();\n            }\n            else if (this.isAlphaTo646ToAlphaLatch(this.current.getPosition())) {\n                if (this.current.getPosition() + 5 < this.information.getSize()) {\n                    this.current.incrementPosition(5);\n                }\n                else {\n                    this.current.setPosition(this.information.getSize());\n                }\n                this.current.setAlpha();\n            }\n            return new BlockParsedResult(false);\n        }\n        parseAlphaBlock() {\n            while (this.isStillAlpha(this.current.getPosition())) {\n                let alpha = this.decodeAlphanumeric(this.current.getPosition());\n                this.current.setPosition(alpha.getNewPosition());\n                if (alpha.isFNC1()) {\n                    let information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    return new BlockParsedResult(true, information); // end of the char block\n                }\n                this.buffer.append(alpha.getValue());\n            }\n            if (this.isAlphaOr646ToNumericLatch(this.current.getPosition())) {\n                this.current.incrementPosition(3);\n                this.current.setNumeric();\n            }\n            else if (this.isAlphaTo646ToAlphaLatch(this.current.getPosition())) {\n                if (this.current.getPosition() + 5 < this.information.getSize()) {\n                    this.current.incrementPosition(5);\n                }\n                else {\n                    this.current.setPosition(this.information.getSize());\n                }\n                this.current.setIsoIec646();\n            }\n            return new BlockParsedResult(false);\n        }\n        isStillIsoIec646(pos) {\n            if (pos + 5 > this.information.getSize()) {\n                return false;\n            }\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue >= 5 && fiveBitValue < 16) {\n                return true;\n            }\n            if (pos + 7 > this.information.getSize()) {\n                return false;\n            }\n            let sevenBitValue = this.extractNumericValueFromBitArray(pos, 7);\n            if (sevenBitValue >= 64 && sevenBitValue < 116) {\n                return true;\n            }\n            if (pos + 8 > this.information.getSize()) {\n                return false;\n            }\n            let eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n            return eightBitValue >= 232 && eightBitValue < 253;\n        }\n        decodeIsoIec646(pos) {\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue === 15) {\n                return new DecodedChar(pos + 5, DecodedChar.FNC1);\n            }\n            if (fiveBitValue >= 5 && fiveBitValue < 15) {\n                return new DecodedChar(pos + 5, ('0' + (fiveBitValue - 5)));\n            }\n            let sevenBitValue = this.extractNumericValueFromBitArray(pos, 7);\n            if (sevenBitValue >= 64 && sevenBitValue < 90) {\n                return new DecodedChar(pos + 7, ('' + (sevenBitValue + 1)));\n            }\n            if (sevenBitValue >= 90 && sevenBitValue < 116) {\n                return new DecodedChar(pos + 7, ('' + (sevenBitValue + 7)));\n            }\n            let eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n            let c;\n            switch (eightBitValue) {\n                case 232:\n                    c = '!';\n                    break;\n                case 233:\n                    c = '\"';\n                    break;\n                case 234:\n                    c = '%';\n                    break;\n                case 235:\n                    c = '&';\n                    break;\n                case 236:\n                    c = '\\'';\n                    break;\n                case 237:\n                    c = '(';\n                    break;\n                case 238:\n                    c = ')';\n                    break;\n                case 239:\n                    c = '*';\n                    break;\n                case 240:\n                    c = '+';\n                    break;\n                case 241:\n                    c = ',';\n                    break;\n                case 242:\n                    c = '-';\n                    break;\n                case 243:\n                    c = '.';\n                    break;\n                case 244:\n                    c = '/';\n                    break;\n                case 245:\n                    c = ':';\n                    break;\n                case 246:\n                    c = ';';\n                    break;\n                case 247:\n                    c = '<';\n                    break;\n                case 248:\n                    c = '=';\n                    break;\n                case 249:\n                    c = '>';\n                    break;\n                case 250:\n                    c = '?';\n                    break;\n                case 251:\n                    c = '_';\n                    break;\n                case 252:\n                    c = ' ';\n                    break;\n                default:\n                    throw new FormatException();\n            }\n            return new DecodedChar(pos + 8, c);\n        }\n        isStillAlpha(pos) {\n            if (pos + 5 > this.information.getSize()) {\n                return false;\n            }\n            // We now check if it's a valid 5-bit value (0..9 and FNC1)\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue >= 5 && fiveBitValue < 16) {\n                return true;\n            }\n            if (pos + 6 > this.information.getSize()) {\n                return false;\n            }\n            let sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n            return sixBitValue >= 16 && sixBitValue < 63; // 63 not included\n        }\n        decodeAlphanumeric(pos) {\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue === 15) {\n                return new DecodedChar(pos + 5, DecodedChar.FNC1);\n            }\n            if (fiveBitValue >= 5 && fiveBitValue < 15) {\n                return new DecodedChar(pos + 5, ('0' + (fiveBitValue - 5)));\n            }\n            let sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n            if (sixBitValue >= 32 && sixBitValue < 58) {\n                return new DecodedChar(pos + 6, ('' + (sixBitValue + 33)));\n            }\n            let c;\n            switch (sixBitValue) {\n                case 58:\n                    c = '*';\n                    break;\n                case 59:\n                    c = ',';\n                    break;\n                case 60:\n                    c = '-';\n                    break;\n                case 61:\n                    c = '.';\n                    break;\n                case 62:\n                    c = '/';\n                    break;\n                default:\n                    throw new IllegalStateException('Decoding invalid alphanumeric value: ' + sixBitValue);\n            }\n            return new DecodedChar(pos + 6, c);\n        }\n        isAlphaTo646ToAlphaLatch(pos) {\n            if (pos + 1 > this.information.getSize()) {\n                return false;\n            }\n            for (let i = 0; i < 5 && i + pos < this.information.getSize(); ++i) {\n                if (i === 2) {\n                    if (!this.information.get(pos + 2)) {\n                        return false;\n                    }\n                }\n                else if (this.information.get(pos + i)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        isAlphaOr646ToNumericLatch(pos) {\n            // Next is alphanumeric if there are 3 positions and they are all zeros\n            if (pos + 3 > this.information.getSize()) {\n                return false;\n            }\n            for (let i = pos; i < pos + 3; ++i) {\n                if (this.information.get(i)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        isNumericToAlphaNumericLatch(pos) {\n            // Next is alphanumeric if there are 4 positions and they are all zeros, or\n            // if there is a subset of this just before the end of the symbol\n            if (pos + 1 > this.information.getSize()) {\n                return false;\n            }\n            for (let i = 0; i < 4 && i + pos < this.information.getSize(); ++i) {\n                if (this.information.get(pos + i)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    class AbstractExpandedDecoder {\n        constructor(information) {\n            this.information = information;\n            this.generalDecoder = new GeneralAppIdDecoder(information);\n        }\n        getInformation() {\n            return this.information;\n        }\n        getGeneralDecoder() {\n            return this.generalDecoder;\n        }\n    }\n\n    class AI01decoder extends AbstractExpandedDecoder {\n        constructor(information) {\n            super(information);\n        }\n        encodeCompressedGtin(buf, currentPos) {\n            buf.append('(01)');\n            let initialPosition = buf.length();\n            buf.append('9');\n            this.encodeCompressedGtinWithoutAI(buf, currentPos, initialPosition);\n        }\n        encodeCompressedGtinWithoutAI(buf, currentPos, initialBufferPosition) {\n            for (let i = 0; i < 4; ++i) {\n                let currentBlock = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos + 10 * i, 10);\n                if (currentBlock / 100 === 0) {\n                    buf.append('0');\n                }\n                if (currentBlock / 10 === 0) {\n                    buf.append('0');\n                }\n                buf.append(currentBlock);\n            }\n            AI01decoder.appendCheckDigit(buf, initialBufferPosition);\n        }\n        static appendCheckDigit(buf, currentPos) {\n            let checkDigit = 0;\n            for (let i = 0; i < 13; i++) {\n                // let digit = buf.charAt(i + currentPos) - '0';\n                // To be checked\n                let digit = buf.charAt(i + currentPos).charCodeAt(0) - '0'.charCodeAt(0);\n                checkDigit += (i & 0x01) === 0 ? 3 * digit : digit;\n            }\n            checkDigit = 10 - (checkDigit % 10);\n            if (checkDigit === 10) {\n                checkDigit = 0;\n            }\n            buf.append(checkDigit);\n        }\n    }\n    AI01decoder.GTIN_SIZE = 40;\n\n    class AI01AndOtherAIs extends AI01decoder {\n        // the second one is the encodation method, and the other two are for the variable length\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            let buff = new StringBuilder();\n            buff.append('(01)');\n            let initialGtinPosition = buff.length();\n            let firstGtinDigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01AndOtherAIs.HEADER_SIZE, 4);\n            buff.append(firstGtinDigit);\n            this.encodeCompressedGtinWithoutAI(buff, AI01AndOtherAIs.HEADER_SIZE + 4, initialGtinPosition);\n            return this.getGeneralDecoder().decodeAllCodes(buff, AI01AndOtherAIs.HEADER_SIZE + 44);\n        }\n    }\n    AI01AndOtherAIs.HEADER_SIZE = 1 + 1 + 2; // first bit encodes the linkage flag,\n\n    class AnyAIDecoder extends AbstractExpandedDecoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            let buf = new StringBuilder();\n            return this.getGeneralDecoder().decodeAllCodes(buf, AnyAIDecoder.HEADER_SIZE);\n        }\n    }\n    AnyAIDecoder.HEADER_SIZE = 2 + 1 + 2;\n\n    class AI01weightDecoder extends AI01decoder {\n        constructor(information) {\n            super(information);\n        }\n        encodeCompressedWeight(buf, currentPos, weightSize) {\n            let originalWeightNumeric = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, weightSize);\n            this.addWeightCode(buf, originalWeightNumeric);\n            let weightNumeric = this.checkWeight(originalWeightNumeric);\n            let currentDivisor = 100000;\n            for (let i = 0; i < 5; ++i) {\n                if (weightNumeric / currentDivisor === 0) {\n                    buf.append('0');\n                }\n                currentDivisor /= 10;\n            }\n            buf.append(weightNumeric);\n        }\n    }\n\n    class AI013x0xDecoder extends AI01weightDecoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() != AI013x0xDecoder.HEADER_SIZE + AI01weightDecoder.GTIN_SIZE + AI013x0xDecoder.WEIGHT_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI013x0xDecoder.HEADER_SIZE);\n            this.encodeCompressedWeight(buf, AI013x0xDecoder.HEADER_SIZE + AI01weightDecoder.GTIN_SIZE, AI013x0xDecoder.WEIGHT_SIZE);\n            return buf.toString();\n        }\n    }\n    AI013x0xDecoder.HEADER_SIZE = 4 + 1;\n    AI013x0xDecoder.WEIGHT_SIZE = 15;\n\n    class AI013103decoder extends AI013x0xDecoder {\n        constructor(information) {\n            super(information);\n        }\n        addWeightCode(buf, weight) {\n            buf.append('(3103)');\n        }\n        checkWeight(weight) {\n            return weight;\n        }\n    }\n\n    class AI01320xDecoder extends AI013x0xDecoder {\n        constructor(information) {\n            super(information);\n        }\n        addWeightCode(buf, weight) {\n            if (weight < 10000) {\n                buf.append('(3202)');\n            }\n            else {\n                buf.append('(3203)');\n            }\n        }\n        checkWeight(weight) {\n            if (weight < 10000) {\n                return weight;\n            }\n            return weight - 10000;\n        }\n    }\n\n    class AI01392xDecoder extends AI01decoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() < AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI01392xDecoder.HEADER_SIZE);\n            let lastAIdigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE, AI01392xDecoder.LAST_DIGIT_SIZE);\n            buf.append('(392');\n            buf.append(lastAIdigit);\n            buf.append(')');\n            let decodedInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01392xDecoder.LAST_DIGIT_SIZE, null);\n            buf.append(decodedInformation.getNewString());\n            return buf.toString();\n        }\n    }\n    AI01392xDecoder.HEADER_SIZE = 5 + 1 + 2;\n    AI01392xDecoder.LAST_DIGIT_SIZE = 2;\n\n    class AI01393xDecoder extends AI01decoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() < AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI01393xDecoder.HEADER_SIZE);\n            let lastAIdigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE, AI01393xDecoder.LAST_DIGIT_SIZE);\n            buf.append('(393');\n            buf.append(lastAIdigit);\n            buf.append(')');\n            let firstThreeDigits = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01393xDecoder.LAST_DIGIT_SIZE, AI01393xDecoder.FIRST_THREE_DIGITS_SIZE);\n            if (firstThreeDigits / 100 == 0) {\n                buf.append('0');\n            }\n            if (firstThreeDigits / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(firstThreeDigits);\n            let generalInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01393xDecoder.LAST_DIGIT_SIZE + AI01393xDecoder.FIRST_THREE_DIGITS_SIZE, null);\n            buf.append(generalInformation.getNewString());\n            return buf.toString();\n        }\n    }\n    AI01393xDecoder.HEADER_SIZE = 5 + 1 + 2;\n    AI01393xDecoder.LAST_DIGIT_SIZE = 2;\n    AI01393xDecoder.FIRST_THREE_DIGITS_SIZE = 10;\n\n    class AI013x0x1xDecoder extends AI01weightDecoder {\n        constructor(information, firstAIdigits, dateCode) {\n            super(information);\n            this.dateCode = dateCode;\n            this.firstAIdigits = firstAIdigits;\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() != AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE + AI013x0x1xDecoder.WEIGHT_SIZE + AI013x0x1xDecoder.DATE_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI013x0x1xDecoder.HEADER_SIZE);\n            this.encodeCompressedWeight(buf, AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE, AI013x0x1xDecoder.WEIGHT_SIZE);\n            this.encodeCompressedDate(buf, AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE + AI013x0x1xDecoder.WEIGHT_SIZE);\n            return buf.toString();\n        }\n        encodeCompressedDate(buf, currentPos) {\n            let numericDate = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, AI013x0x1xDecoder.DATE_SIZE);\n            if (numericDate == 38400) {\n                return;\n            }\n            buf.append('(');\n            buf.append(this.dateCode);\n            buf.append(')');\n            let day = numericDate % 32;\n            numericDate /= 32;\n            let month = numericDate % 12 + 1;\n            numericDate /= 12;\n            let year = numericDate;\n            if (year / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(year);\n            if (month / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(month);\n            if (day / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(day);\n        }\n        addWeightCode(buf, weight) {\n            buf.append('(');\n            buf.append(this.firstAIdigits);\n            buf.append(weight / 100000);\n            buf.append(')');\n        }\n        checkWeight(weight) {\n            return weight % 100000;\n        }\n    }\n    AI013x0x1xDecoder.HEADER_SIZE = 7 + 1;\n    AI013x0x1xDecoder.WEIGHT_SIZE = 20;\n    AI013x0x1xDecoder.DATE_SIZE = 16;\n\n    function createDecoder(information) {\n        try {\n            if (information.get(1)) {\n                return new AI01AndOtherAIs(information);\n            }\n            if (!information.get(2)) {\n                return new AnyAIDecoder(information);\n            }\n            let fourBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 4);\n            switch (fourBitEncodationMethod) {\n                case 4: return new AI013103decoder(information);\n                case 5: return new AI01320xDecoder(information);\n            }\n            let fiveBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 5);\n            switch (fiveBitEncodationMethod) {\n                case 12: return new AI01392xDecoder(information);\n                case 13: return new AI01393xDecoder(information);\n            }\n            let sevenBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 7);\n            switch (sevenBitEncodationMethod) {\n                case 56: return new AI013x0x1xDecoder(information, '310', '11');\n                case 57: return new AI013x0x1xDecoder(information, '320', '11');\n                case 58: return new AI013x0x1xDecoder(information, '310', '13');\n                case 59: return new AI013x0x1xDecoder(information, '320', '13');\n                case 60: return new AI013x0x1xDecoder(information, '310', '15');\n                case 61: return new AI013x0x1xDecoder(information, '320', '15');\n                case 62: return new AI013x0x1xDecoder(information, '310', '17');\n                case 63: return new AI013x0x1xDecoder(information, '320', '17');\n            }\n        }\n        catch (e) {\n            console.log(e);\n            throw new IllegalStateException('unknown decoder: ' + information);\n        }\n    }\n\n    class ExpandedPair {\n        constructor(leftChar, rightChar, finderPatter, mayBeLast) {\n            this.leftchar = leftChar;\n            this.rightchar = rightChar;\n            this.finderpattern = finderPatter;\n            this.maybeLast = mayBeLast;\n        }\n        mayBeLast() {\n            return this.maybeLast;\n        }\n        getLeftChar() {\n            return this.leftchar;\n        }\n        getRightChar() {\n            return this.rightchar;\n        }\n        getFinderPattern() {\n            return this.finderpattern;\n        }\n        mustBeLast() {\n            return this.rightchar == null;\n        }\n        toString() {\n            return '[ ' + this.leftchar + ', ' + this.rightchar + ' : ' + (this.finderpattern == null ? 'null' : this.finderpattern.getValue()) + ' ]';\n        }\n        static equals(o1, o2) {\n            if (!(o1 instanceof ExpandedPair)) {\n                return false;\n            }\n            return ExpandedPair.equalsOrNull(o1.leftchar, o2.leftchar) &&\n                ExpandedPair.equalsOrNull(o1.rightchar, o2.rightchar) &&\n                ExpandedPair.equalsOrNull(o1.finderpattern, o2.finderpattern);\n        }\n        static equalsOrNull(o1, o2) {\n            return o1 === null ? o2 === null : ExpandedPair.equals(o1, o2);\n        }\n        hashCode() {\n            // return ExpandedPair.hashNotNull(leftChar) ^ hashNotNull(rightChar) ^ hashNotNull(finderPattern);\n            let value = this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue();\n            return value;\n        }\n    }\n\n    class ExpandedRow {\n        constructor(pairs, rowNumber, wasReversed) {\n            this.pairs = pairs;\n            this.rowNumber = rowNumber;\n            this.wasReversed = wasReversed;\n        }\n        getPairs() {\n            return this.pairs;\n        }\n        getRowNumber() {\n            return this.rowNumber;\n        }\n        isReversed() {\n            return this.wasReversed;\n        }\n        // check implementation\n        isEquivalent(otherPairs) {\n            return this.checkEqualitity(this, otherPairs);\n        }\n        // @Override\n        toString() {\n            return '{ ' + this.pairs + ' }';\n        }\n        /**\n         * Two rows are equal if they contain the same pairs in the same order.\n         */\n        // @Override\n        // check implementation\n        equals(o1, o2) {\n            if (!(o1 instanceof ExpandedRow)) {\n                return false;\n            }\n            return this.checkEqualitity(o1, o2) && o1.wasReversed === o2.wasReversed;\n        }\n        checkEqualitity(pair1, pair2) {\n            if (!pair1 || !pair2)\n                return;\n            let result;\n            pair1.forEach((e1, i) => {\n                pair2.forEach(e2 => {\n                    if (e1.getLeftChar().getValue() === e2.getLeftChar().getValue() && e1.getRightChar().getValue() === e2.getRightChar().getValue() && e1.getFinderPatter().getValue() === e2.getFinderPatter().getValue()) {\n                        result = true;\n                    }\n                });\n            });\n            return result;\n        }\n    }\n\n    // import java.util.ArrayList;\n    // import java.util.Iterator;\n    // import java.util.List;\n    // import java.util.Map;\n    // import java.util.Collections;\n    class RSSExpandedReader extends AbstractRSSReader {\n        constructor(verbose) {\n            super(...arguments);\n            this.pairs = new Array(RSSExpandedReader.MAX_PAIRS);\n            this.rows = new Array();\n            this.startEnd = [2];\n            this.verbose = (verbose === true);\n        }\n        decodeRow(rowNumber, row, hints) {\n            // Rows can start with even pattern in case in prev rows there where odd number of patters.\n            // So lets try twice\n            // this.pairs.clear();\n            this.pairs.length = 0;\n            this.startFromEven = false;\n            try {\n                return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n            }\n            catch (e) {\n                // OK\n                if (this.verbose) {\n                    console.log(e);\n                }\n            }\n            this.pairs.length = 0;\n            this.startFromEven = true;\n            return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n        }\n        reset() {\n            this.pairs.length = 0;\n            this.rows.length = 0;\n        }\n        // Not private for testing\n        decodeRow2pairs(rowNumber, row) {\n            let done = false;\n            while (!done) {\n                try {\n                    this.pairs.push(this.retrieveNextPair(row, this.pairs, rowNumber));\n                }\n                catch (error) {\n                    if (error instanceof NotFoundException) {\n                        if (!this.pairs.length) {\n                            throw new NotFoundException();\n                        }\n                        // exit this loop when retrieveNextPair() fails and throws\n                        done = true;\n                    }\n                }\n            }\n            // TODO: verify sequence of finder patterns as in checkPairSequence()\n            if (this.checkChecksum()) {\n                return this.pairs;\n            }\n            let tryStackedDecode;\n            if (this.rows.length) {\n                tryStackedDecode = true;\n            }\n            else {\n                tryStackedDecode = false;\n            }\n            // let tryStackedDecode = !this.rows.isEmpty();\n            this.storeRow(rowNumber, false); // TODO: deal with reversed rows\n            if (tryStackedDecode) {\n                // When the image is 180-rotated, then rows are sorted in wrong direction.\n                // Try twice with both the directions.\n                let ps = this.checkRowsBoolean(false);\n                if (ps != null) {\n                    return ps;\n                }\n                ps = this.checkRowsBoolean(true);\n                if (ps != null) {\n                    return ps;\n                }\n            }\n            throw new NotFoundException();\n        }\n        // Need to Verify\n        checkRowsBoolean(reverse) {\n            // Limit number of rows we are checking\n            // We use recursive algorithm with pure complexity and don't want it to take forever\n            // Stacked barcode can have up to 11 rows, so 25 seems reasonable enough\n            if (this.rows.length > 25) {\n                this.rows.length = 0; // We will never have a chance to get result, so clear it\n                return null;\n            }\n            this.pairs.length = 0;\n            if (reverse) {\n                this.rows = this.rows.reverse();\n                // Collections.reverse(this.rows);\n            }\n            let ps = null;\n            try {\n                ps = this.checkRows(new Array(), 0);\n            }\n            catch (e) {\n                // OK\n                if (this.verbose) {\n                    console.log(e);\n                }\n            }\n            if (reverse) {\n                this.rows = this.rows.reverse();\n                // Collections.reverse(this.rows);\n            }\n            return ps;\n        }\n        // Try to construct a valid rows sequence\n        // Recursion is used to implement backtracking\n        checkRows(collectedRows, currentRow) {\n            for (let i = currentRow; i < this.rows.length; i++) {\n                let row = this.rows[i];\n                this.pairs.length = 0;\n                for (let collectedRow of collectedRows) {\n                    this.pairs.push(collectedRow.getPairs());\n                }\n                this.pairs.push(row.getPairs());\n                if (!RSSExpandedReader.isValidSequence(this.pairs)) {\n                    continue;\n                }\n                if (this.checkChecksum()) {\n                    return this.pairs;\n                }\n                let rs = new Array(collectedRows);\n                rs.push(row);\n                try {\n                    // Recursion: try to add more rows\n                    return this.checkRows(rs, i + 1);\n                }\n                catch (e) {\n                    // We failed, try the next candidate\n                    if (this.verbose) {\n                        console.log(e);\n                    }\n                }\n            }\n            throw new NotFoundException();\n        }\n        // Whether the pairs form a valid find pattern sequence,\n        // either complete or a prefix\n        static isValidSequence(pairs) {\n            for (let sequence of RSSExpandedReader.FINDER_PATTERN_SEQUENCES) {\n                if (pairs.length > sequence.length) {\n                    continue;\n                }\n                let stop = true;\n                for (let j = 0; j < pairs.length; j++) {\n                    if (pairs[j].getFinderPattern().getValue() != sequence[j]) {\n                        stop = false;\n                        break;\n                    }\n                }\n                if (stop) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        storeRow(rowNumber, wasReversed) {\n            // Discard if duplicate above or below; otherwise insert in order by row number.\n            let insertPos = 0;\n            let prevIsSame = false;\n            let nextIsSame = false;\n            while (insertPos < this.rows.length) {\n                let erow = this.rows[insertPos];\n                if (erow.getRowNumber() > rowNumber) {\n                    nextIsSame = erow.isEquivalent(this.pairs);\n                    break;\n                }\n                prevIsSame = erow.isEquivalent(this.pairs);\n                insertPos++;\n            }\n            if (nextIsSame || prevIsSame) {\n                return;\n            }\n            // When the row was partially decoded (e.g. 2 pairs found instead of 3),\n            // it will prevent us from detecting the barcode.\n            // Try to merge partial rows\n            // Check whether the row is part of an allready detected row\n            if (RSSExpandedReader.isPartialRow(this.pairs, this.rows)) {\n                return;\n            }\n            this.rows.push(insertPos, new ExpandedRow(this.pairs, rowNumber, wasReversed));\n            this.removePartialRows(this.pairs, this.rows);\n        }\n        // Remove all the rows that contains only specified pairs\n        removePartialRows(pairs, rows) {\n            // for (Iterator<ExpandedRow> iterator = rows.iterator(); iterator.hasNext();) {\n            //   ExpandedRow r = iterator.next();\n            //   if (r.getPairs().size() == pairs.size()) {\n            //     continue;\n            //   }\n            //   boolean allFound = true;\n            //   for (ExpandedPair p : r.getPairs()) {\n            //     boolean found = false;\n            //     for (ExpandedPair pp : pairs) {\n            //       if (p.equals(pp)) {\n            //         found = true;\n            //         break;\n            //       }\n            //     }\n            //     if (!found) {\n            //       allFound = false;\n            //       break;\n            //     }\n            //   }\n            //   if (allFound) {\n            //     // 'pairs' contains all the pairs from the row 'r'\n            //     iterator.remove();\n            //   }\n            // }\n            for (let row of rows) {\n                if (row.getPairs().length === pairs.length) {\n                    continue;\n                }\n                for (let p of row.getPairs()) {\n                    for (let pp of pairs) {\n                        if (ExpandedPair.equals(p, pp)) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n        // Returns true when one of the rows already contains all the pairs\n        static isPartialRow(pairs, rows) {\n            for (let r of rows) {\n                let allFound = true;\n                for (let p of pairs) {\n                    let found = false;\n                    for (let pp of r.getPairs()) {\n                        if (p.equals(pp)) {\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        allFound = false;\n                        break;\n                    }\n                }\n                if (allFound) {\n                    // the row 'r' contain all the pairs from 'pairs'\n                    return true;\n                }\n            }\n            return false;\n        }\n        // Only used for unit testing\n        getRows() {\n            return this.rows;\n        }\n        // Not private for unit testing\n        static constructResult(pairs) {\n            let binary = BitArrayBuilder.buildBitArray(pairs);\n            let decoder = createDecoder(binary);\n            let resultingString = decoder.parseInformation();\n            let firstPoints = pairs[0].getFinderPattern().getResultPoints();\n            let lastPoints = pairs[pairs.length - 1].getFinderPattern().getResultPoints();\n            let points = [firstPoints[0], firstPoints[1], lastPoints[0], lastPoints[1]];\n            return new Result(resultingString, null, null, points, BarcodeFormat$1.RSS_EXPANDED, null);\n        }\n        checkChecksum() {\n            let firstPair = this.pairs.get(0);\n            let checkCharacter = firstPair.getLeftChar();\n            let firstCharacter = firstPair.getRightChar();\n            if (firstCharacter == null) {\n                return false;\n            }\n            let checksum = firstCharacter.getChecksumPortion();\n            let s = 2;\n            for (let i = 1; i < this.pairs.size(); ++i) {\n                let currentPair = this.pairs.get(i);\n                checksum += currentPair.getLeftChar().getChecksumPortion();\n                s++;\n                let currentRightChar = currentPair.getRightChar();\n                if (currentRightChar != null) {\n                    checksum += currentRightChar.getChecksumPortion();\n                    s++;\n                }\n            }\n            checksum %= 211;\n            let checkCharacterValue = 211 * (s - 4) + checksum;\n            return checkCharacterValue == checkCharacter.getValue();\n        }\n        static getNextSecondBar(row, initialPos) {\n            let currentPos;\n            if (row.get(initialPos)) {\n                currentPos = row.getNextUnset(initialPos);\n                currentPos = row.getNextSet(currentPos);\n            }\n            else {\n                currentPos = row.getNextSet(initialPos);\n                currentPos = row.getNextUnset(currentPos);\n            }\n            return currentPos;\n        }\n        // not private for testing\n        retrieveNextPair(row, previousPairs, rowNumber) {\n            let isOddPattern = previousPairs.length % 2 == 0;\n            if (this.startFromEven) {\n                isOddPattern = !isOddPattern;\n            }\n            let pattern;\n            let keepFinding = true;\n            let forcedOffset = -1;\n            do {\n                this.findNextPair(row, previousPairs, forcedOffset);\n                pattern = this.parseFoundFinderPattern(row, rowNumber, isOddPattern);\n                if (pattern == null) {\n                    forcedOffset = RSSExpandedReader.getNextSecondBar(row, this.startEnd[0]);\n                }\n                else {\n                    keepFinding = false;\n                }\n            } while (keepFinding);\n            // When stacked symbol is split over multiple rows, there's no way to guess if this pair can be last or not.\n            // boolean mayBeLast = checkPairSequence(previousPairs, pattern);\n            let leftChar = this.decodeDataCharacter(row, pattern, isOddPattern, true);\n            if (!this.isEmptyPair(previousPairs) && previousPairs[previousPairs.length - 1].mustBeLast()) {\n                throw new NotFoundException();\n            }\n            let rightChar;\n            try {\n                rightChar = this.decodeDataCharacter(row, pattern, isOddPattern, false);\n            }\n            catch (e) {\n                rightChar = null;\n                if (this.verbose) {\n                    console.log(e);\n                }\n            }\n            return new ExpandedPair(leftChar, rightChar, pattern, true);\n        }\n        isEmptyPair(pairs) {\n            if (pairs.length === 0) {\n                return true;\n            }\n            return false;\n        }\n        findNextPair(row, previousPairs, forcedOffset) {\n            let counters = this.getDecodeFinderCounters();\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let width = row.getSize();\n            let rowOffset;\n            if (forcedOffset >= 0) {\n                rowOffset = forcedOffset;\n            }\n            else if (this.isEmptyPair(previousPairs)) {\n                rowOffset = 0;\n            }\n            else {\n                let lastPair = previousPairs[previousPairs.length - 1];\n                rowOffset = lastPair.getFinderPattern().getStartEnd()[1];\n            }\n            let searchingEvenPair = previousPairs.length % 2 != 0;\n            if (this.startFromEven) {\n                searchingEvenPair = !searchingEvenPair;\n            }\n            let isWhite = false;\n            while (rowOffset < width) {\n                isWhite = !row.get(rowOffset);\n                if (!isWhite) {\n                    break;\n                }\n                rowOffset++;\n            }\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) != isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition == 3) {\n                        if (searchingEvenPair) {\n                            RSSExpandedReader.reverseCounters(counters);\n                        }\n                        if (RSSExpandedReader.isFinderPattern(counters)) {\n                            this.startEnd[0] = patternStart;\n                            this.startEnd[1] = x;\n                            return;\n                        }\n                        if (searchingEvenPair) {\n                            RSSExpandedReader.reverseCounters(counters);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters[0] = counters[2];\n                        counters[1] = counters[3];\n                        counters[2] = 0;\n                        counters[3] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static reverseCounters(counters) {\n            let length = counters.length;\n            for (let i = 0; i < length / 2; ++i) {\n                let tmp = counters[i];\n                counters[i] = counters[length - i - 1];\n                counters[length - i - 1] = tmp;\n            }\n        }\n        parseFoundFinderPattern(row, rowNumber, oddPattern) {\n            // Actually we found elements 2-5.\n            let firstCounter;\n            let start;\n            let end;\n            if (oddPattern) {\n                // If pattern number is odd, we need to locate element 1 *before* the current block.\n                let firstElementStart = this.startEnd[0] - 1;\n                // Locate element 1\n                while (firstElementStart >= 0 && !row.get(firstElementStart)) {\n                    firstElementStart--;\n                }\n                firstElementStart++;\n                firstCounter = this.startEnd[0] - firstElementStart;\n                start = firstElementStart;\n                end = this.startEnd[1];\n            }\n            else {\n                // If pattern number is even, the pattern is reversed, so we need to locate element 1 *after* the current block.\n                start = this.startEnd[0];\n                end = row.getNextUnset(this.startEnd[1] + 1);\n                firstCounter = end - this.startEnd[1];\n            }\n            // Make 'counters' hold 1-4\n            let counters = this.getDecodeFinderCounters();\n            System.arraycopy(counters, 0, counters, 1, counters.length - 1);\n            counters[0] = firstCounter;\n            let value;\n            try {\n                value = this.parseFinderValue(counters, RSSExpandedReader.FINDER_PATTERNS);\n            }\n            catch (e) {\n                return null;\n            }\n            // return new FinderPattern(value, new int[] { start, end }, start, end, rowNumber});\n            return new FinderPattern(value, [start, end], start, end, rowNumber);\n        }\n        decodeDataCharacter(row, pattern, isOddPattern, leftChar) {\n            let counters = this.getDataCharacterCounters();\n            for (let x = 0; x < counters.length; x++) {\n                counters[x] = 0;\n            }\n            if (leftChar) {\n                RSSExpandedReader.recordPatternInReverse(row, pattern.getStartEnd()[0], counters);\n            }\n            else {\n                RSSExpandedReader.recordPattern(row, pattern.getStartEnd()[1], counters);\n                // reverse it\n                for (let i = 0, j = counters.length - 1; i < j; i++, j--) {\n                    let temp = counters[i];\n                    counters[i] = counters[j];\n                    counters[j] = temp;\n                }\n            } // counters[] has the pixels of the module\n            let numModules = 17; // left and right data characters have all the same length\n            let elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n            // Sanity check: element width for pattern and the character should match\n            let expectedElementWidth = (pattern.getStartEnd()[1] - pattern.getStartEnd()[0]) / 15.0;\n            if (Math.abs(elementWidth - expectedElementWidth) / expectedElementWidth > 0.3) {\n                throw new NotFoundException();\n            }\n            let oddCounts = this.getOddCounts();\n            let evenCounts = this.getEvenCounts();\n            let oddRoundingErrors = this.getOddRoundingErrors();\n            let evenRoundingErrors = this.getEvenRoundingErrors();\n            for (let i = 0; i < counters.length; i++) {\n                let value = 1.0 * counters[i] / elementWidth;\n                let count = value + 0.5; // Round\n                if (count < 1) {\n                    if (value < 0.3) {\n                        throw new NotFoundException();\n                    }\n                    count = 1;\n                }\n                else if (count > 8) {\n                    if (value > 8.7) {\n                        throw new NotFoundException();\n                    }\n                    count = 8;\n                }\n                let offset = i / 2;\n                if ((i & 0x01) == 0) {\n                    oddCounts[offset] = count;\n                    oddRoundingErrors[offset] = value - count;\n                }\n                else {\n                    evenCounts[offset] = count;\n                    evenRoundingErrors[offset] = value - count;\n                }\n            }\n            this.adjustOddEvenCounts(numModules);\n            let weightRowNumber = 4 * pattern.getValue() + (isOddPattern ? 0 : 2) + (leftChar ? 0 : 1) - 1;\n            let oddSum = 0;\n            let oddChecksumPortion = 0;\n            for (let i = oddCounts.length - 1; i >= 0; i--) {\n                if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n                    let weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i];\n                    oddChecksumPortion += oddCounts[i] * weight;\n                }\n                oddSum += oddCounts[i];\n            }\n            let evenChecksumPortion = 0;\n            // int evenSum = 0;\n            for (let i = evenCounts.length - 1; i >= 0; i--) {\n                if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n                    let weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i + 1];\n                    evenChecksumPortion += evenCounts[i] * weight;\n                }\n                // evenSum += evenCounts[i];\n            }\n            let checksumPortion = oddChecksumPortion + evenChecksumPortion;\n            if ((oddSum & 0x01) != 0 || oddSum > 13 || oddSum < 4) {\n                throw new NotFoundException();\n            }\n            let group = (13 - oddSum) / 2;\n            let oddWidest = RSSExpandedReader.SYMBOL_WIDEST[group];\n            let evenWidest = 9 - oddWidest;\n            let vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n            let vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n            let tEven = RSSExpandedReader.EVEN_TOTAL_SUBSET[group];\n            let gSum = RSSExpandedReader.GSUM[group];\n            let value = vOdd * tEven + vEven + gSum;\n            return new DataCharacter(value, checksumPortion);\n        }\n        static isNotA1left(pattern, isOddPattern, leftChar) {\n            // A1: pattern.getValue is 0 (A), and it's an oddPattern, and it is a left char\n            return !(pattern.getValue() == 0 && isOddPattern && leftChar);\n        }\n        adjustOddEvenCounts(numModules) {\n            let oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n            let evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n            let incrementOdd = false;\n            let decrementOdd = false;\n            if (oddSum > 13) {\n                decrementOdd = true;\n            }\n            else if (oddSum < 4) {\n                incrementOdd = true;\n            }\n            let incrementEven = false;\n            let decrementEven = false;\n            if (evenSum > 13) {\n                decrementEven = true;\n            }\n            else if (evenSum < 4) {\n                incrementEven = true;\n            }\n            let mismatch = oddSum + evenSum - numModules;\n            let oddParityBad = (oddSum & 0x01) == 1;\n            let evenParityBad = (evenSum & 0x01) == 0;\n            if (mismatch == 1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementEven = true;\n                }\n            }\n            else if (mismatch == -1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementEven = true;\n                }\n            }\n            else if (mismatch == 0) {\n                if (oddParityBad) {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Both bad\n                    if (oddSum < evenSum) {\n                        incrementOdd = true;\n                        decrementEven = true;\n                    }\n                    else {\n                        decrementOdd = true;\n                        incrementEven = true;\n                    }\n                }\n                else {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Nothing to do!\n                }\n            }\n            else {\n                throw new NotFoundException();\n            }\n            if (incrementOdd) {\n                if (decrementOdd) {\n                    throw new NotFoundException();\n                }\n                RSSExpandedReader.increment(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementOdd) {\n                RSSExpandedReader.decrement(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (incrementEven) {\n                if (decrementEven) {\n                    throw new NotFoundException();\n                }\n                RSSExpandedReader.increment(this.getEvenCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementEven) {\n                RSSExpandedReader.decrement(this.getEvenCounts(), this.getEvenRoundingErrors());\n            }\n        }\n    }\n    RSSExpandedReader.SYMBOL_WIDEST = [7, 5, 4, 3, 1];\n    RSSExpandedReader.EVEN_TOTAL_SUBSET = [4, 20, 52, 104, 204];\n    RSSExpandedReader.GSUM = [0, 348, 1388, 2948, 3988];\n    RSSExpandedReader.FINDER_PATTERNS = [\n        Int32Array.from([1, 8, 4, 1]),\n        Int32Array.from([3, 6, 4, 1]),\n        Int32Array.from([3, 4, 6, 1]),\n        Int32Array.from([3, 2, 8, 1]),\n        Int32Array.from([2, 6, 5, 1]),\n        Int32Array.from([2, 2, 9, 1]) // F\n    ];\n    RSSExpandedReader.WEIGHTS = [\n        [1, 3, 9, 27, 81, 32, 96, 77],\n        [20, 60, 180, 118, 143, 7, 21, 63],\n        [189, 145, 13, 39, 117, 140, 209, 205],\n        [193, 157, 49, 147, 19, 57, 171, 91],\n        [62, 186, 136, 197, 169, 85, 44, 132],\n        [185, 133, 188, 142, 4, 12, 36, 108],\n        [113, 128, 173, 97, 80, 29, 87, 50],\n        [150, 28, 84, 41, 123, 158, 52, 156],\n        [46, 138, 203, 187, 139, 206, 196, 166],\n        [76, 17, 51, 153, 37, 111, 122, 155],\n        [43, 129, 176, 106, 107, 110, 119, 146],\n        [16, 48, 144, 10, 30, 90, 59, 177],\n        [109, 116, 137, 200, 178, 112, 125, 164],\n        [70, 210, 208, 202, 184, 130, 179, 115],\n        [134, 191, 151, 31, 93, 68, 204, 190],\n        [148, 22, 66, 198, 172, 94, 71, 2],\n        [6, 18, 54, 162, 64, 192, 154, 40],\n        [120, 149, 25, 75, 14, 42, 126, 167],\n        [79, 26, 78, 23, 69, 207, 199, 175],\n        [103, 98, 83, 38, 114, 131, 182, 124],\n        [161, 61, 183, 127, 170, 88, 53, 159],\n        [55, 165, 73, 8, 24, 72, 5, 15],\n        [45, 135, 194, 160, 58, 174, 100, 89]\n    ];\n    RSSExpandedReader.FINDER_PAT_A = 0;\n    RSSExpandedReader.FINDER_PAT_B = 1;\n    RSSExpandedReader.FINDER_PAT_C = 2;\n    RSSExpandedReader.FINDER_PAT_D = 3;\n    RSSExpandedReader.FINDER_PAT_E = 4;\n    RSSExpandedReader.FINDER_PAT_F = 5;\n    RSSExpandedReader.FINDER_PATTERN_SEQUENCES = [\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_C],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_F],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_F, RSSExpandedReader.FINDER_PAT_F],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_D],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_E],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_F, RSSExpandedReader.FINDER_PAT_F],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_F, RSSExpandedReader.FINDER_PAT_F],\n    ];\n    RSSExpandedReader.MAX_PAIRS = 11;\n\n    class Pair extends DataCharacter {\n        constructor(value, checksumPortion, finderPattern) {\n            super(value, checksumPortion);\n            this.count = 0;\n            this.finderPattern = finderPattern;\n        }\n        getFinderPattern() {\n            return this.finderPattern;\n        }\n        getCount() {\n            return this.count;\n        }\n        incrementCount() {\n            this.count++;\n        }\n    }\n\n    class RSS14Reader extends AbstractRSSReader {\n        constructor() {\n            super(...arguments);\n            this.possibleLeftPairs = [];\n            this.possibleRightPairs = [];\n        }\n        decodeRow(rowNumber, row, hints) {\n            const leftPair = this.decodePair(row, false, rowNumber, hints);\n            RSS14Reader.addOrTally(this.possibleLeftPairs, leftPair);\n            row.reverse();\n            let rightPair = this.decodePair(row, true, rowNumber, hints);\n            RSS14Reader.addOrTally(this.possibleRightPairs, rightPair);\n            row.reverse();\n            for (let left of this.possibleLeftPairs) {\n                if (left.getCount() > 1) {\n                    for (let right of this.possibleRightPairs) {\n                        if (right.getCount() > 1 && RSS14Reader.checkChecksum(left, right)) {\n                            return RSS14Reader.constructResult(left, right);\n                        }\n                    }\n                }\n            }\n            throw new NotFoundException();\n        }\n        static addOrTally(possiblePairs, pair) {\n            if (pair == null) {\n                return;\n            }\n            let found = false;\n            for (let other of possiblePairs) {\n                if (other.getValue() === pair.getValue()) {\n                    other.incrementCount();\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                possiblePairs.push(pair);\n            }\n        }\n        reset() {\n            this.possibleLeftPairs.length = 0;\n            this.possibleRightPairs.length = 0;\n        }\n        static constructResult(leftPair, rightPair) {\n            let symbolValue = 4537077 * leftPair.getValue() + rightPair.getValue();\n            let text = new String(symbolValue).toString();\n            let buffer = new StringBuilder();\n            for (let i = 13 - text.length; i > 0; i--) {\n                buffer.append('0');\n            }\n            buffer.append(text);\n            let checkDigit = 0;\n            for (let i = 0; i < 13; i++) {\n                let digit = buffer.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                checkDigit += ((i & 0x01) === 0) ? 3 * digit : digit;\n            }\n            checkDigit = 10 - (checkDigit % 10);\n            if (checkDigit === 10) {\n                checkDigit = 0;\n            }\n            buffer.append(checkDigit.toString());\n            let leftPoints = leftPair.getFinderPattern().getResultPoints();\n            let rightPoints = rightPair.getFinderPattern().getResultPoints();\n            return new Result(buffer.toString(), null, 0, [leftPoints[0], leftPoints[1], rightPoints[0], rightPoints[1]], BarcodeFormat$1.RSS_14, new Date().getTime());\n        }\n        static checkChecksum(leftPair, rightPair) {\n            let checkValue = (leftPair.getChecksumPortion() + 16 * rightPair.getChecksumPortion()) % 79;\n            let targetCheckValue = 9 * leftPair.getFinderPattern().getValue() + rightPair.getFinderPattern().getValue();\n            if (targetCheckValue > 72) {\n                targetCheckValue--;\n            }\n            if (targetCheckValue > 8) {\n                targetCheckValue--;\n            }\n            return checkValue === targetCheckValue;\n        }\n        decodePair(row, right, rowNumber, hints) {\n            try {\n                let startEnd = this.findFinderPattern(row, right);\n                let pattern = this.parseFoundFinderPattern(row, rowNumber, right, startEnd);\n                let resultPointCallback = hints == null ? null : hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n                if (resultPointCallback != null) {\n                    let center = (startEnd[0] + startEnd[1]) / 2.0;\n                    if (right) {\n                        // row is actually reversed\n                        center = row.getSize() - 1 - center;\n                    }\n                    resultPointCallback.foundPossibleResultPoint(new ResultPoint(center, rowNumber));\n                }\n                let outside = this.decodeDataCharacter(row, pattern, true);\n                let inside = this.decodeDataCharacter(row, pattern, false);\n                return new Pair(1597 * outside.getValue() + inside.getValue(), outside.getChecksumPortion() + 4 * inside.getChecksumPortion(), pattern);\n            }\n            catch (err) {\n                return null;\n            }\n        }\n        decodeDataCharacter(row, pattern, outsideChar) {\n            let counters = this.getDataCharacterCounters();\n            for (let x = 0; x < counters.length; x++) {\n                counters[x] = 0;\n            }\n            if (outsideChar) {\n                OneDReader.recordPatternInReverse(row, pattern.getStartEnd()[0], counters);\n            }\n            else {\n                OneDReader.recordPattern(row, pattern.getStartEnd()[1] + 1, counters);\n                // reverse it\n                for (let i = 0, j = counters.length - 1; i < j; i++, j--) {\n                    let temp = counters[i];\n                    counters[i] = counters[j];\n                    counters[j] = temp;\n                }\n            }\n            let numModules = outsideChar ? 16 : 15;\n            let elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n            let oddCounts = this.getOddCounts();\n            let evenCounts = this.getEvenCounts();\n            let oddRoundingErrors = this.getOddRoundingErrors();\n            let evenRoundingErrors = this.getEvenRoundingErrors();\n            for (let i = 0; i < counters.length; i++) {\n                let value = counters[i] / elementWidth;\n                let count = Math.floor(value + 0.5);\n                if (count < 1) {\n                    count = 1;\n                }\n                else if (count > 8) {\n                    count = 8;\n                }\n                let offset = Math.floor(i / 2);\n                if ((i & 0x01) === 0) {\n                    oddCounts[offset] = count;\n                    oddRoundingErrors[offset] = value - count;\n                }\n                else {\n                    evenCounts[offset] = count;\n                    evenRoundingErrors[offset] = value - count;\n                }\n            }\n            this.adjustOddEvenCounts(outsideChar, numModules);\n            let oddSum = 0;\n            let oddChecksumPortion = 0;\n            for (let i = oddCounts.length - 1; i >= 0; i--) {\n                oddChecksumPortion *= 9;\n                oddChecksumPortion += oddCounts[i];\n                oddSum += oddCounts[i];\n            }\n            let evenChecksumPortion = 0;\n            let evenSum = 0;\n            for (let i = evenCounts.length - 1; i >= 0; i--) {\n                evenChecksumPortion *= 9;\n                evenChecksumPortion += evenCounts[i];\n                evenSum += evenCounts[i];\n            }\n            let checksumPortion = oddChecksumPortion + 3 * evenChecksumPortion;\n            if (outsideChar) {\n                if ((oddSum & 0x01) !== 0 || oddSum > 12 || oddSum < 4) {\n                    throw new NotFoundException();\n                }\n                let group = (12 - oddSum) / 2;\n                let oddWidest = RSS14Reader.OUTSIDE_ODD_WIDEST[group];\n                let evenWidest = 9 - oddWidest;\n                let vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, false);\n                let vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, true);\n                let tEven = RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET[group];\n                let gSum = RSS14Reader.OUTSIDE_GSUM[group];\n                return new DataCharacter(vOdd * tEven + vEven + gSum, checksumPortion);\n            }\n            else {\n                if ((evenSum & 0x01) !== 0 || evenSum > 10 || evenSum < 4) {\n                    throw new NotFoundException();\n                }\n                let group = (10 - evenSum) / 2;\n                let oddWidest = RSS14Reader.INSIDE_ODD_WIDEST[group];\n                let evenWidest = 9 - oddWidest;\n                let vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n                let vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n                let tOdd = RSS14Reader.INSIDE_ODD_TOTAL_SUBSET[group];\n                let gSum = RSS14Reader.INSIDE_GSUM[group];\n                return new DataCharacter(vEven * tOdd + vOdd + gSum, checksumPortion);\n            }\n        }\n        findFinderPattern(row, rightFinderPattern) {\n            let counters = this.getDecodeFinderCounters();\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let width = row.getSize();\n            let isWhite = false;\n            let rowOffset = 0;\n            while (rowOffset < width) {\n                isWhite = !row.get(rowOffset);\n                if (rightFinderPattern === isWhite) {\n                    // Will encounter white first when searching for right finder pattern\n                    break;\n                }\n                rowOffset++;\n            }\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === 3) {\n                        if (AbstractRSSReader.isFinderPattern(counters)) {\n                            return [patternStart, x];\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters[0] = counters[2];\n                        counters[1] = counters[3];\n                        counters[2] = 0;\n                        counters[3] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        parseFoundFinderPattern(row, rowNumber, right, startEnd) {\n            // Actually we found elements 2-5\n            let firstIsBlack = row.get(startEnd[0]);\n            let firstElementStart = startEnd[0] - 1;\n            // Locate element 1\n            while (firstElementStart >= 0 && firstIsBlack !== row.get(firstElementStart)) {\n                firstElementStart--;\n            }\n            firstElementStart++;\n            const firstCounter = startEnd[0] - firstElementStart;\n            // Make 'counters' hold 1-4\n            const counters = this.getDecodeFinderCounters();\n            const copy = new Int32Array(counters.length);\n            System.arraycopy(counters, 0, copy, 1, counters.length - 1);\n            copy[0] = firstCounter;\n            const value = this.parseFinderValue(copy, RSS14Reader.FINDER_PATTERNS);\n            let start = firstElementStart;\n            let end = startEnd[1];\n            if (right) {\n                // row is actually reversed\n                start = row.getSize() - 1 - start;\n                end = row.getSize() - 1 - end;\n            }\n            return new FinderPattern(value, [firstElementStart, startEnd[1]], start, end, rowNumber);\n        }\n        adjustOddEvenCounts(outsideChar, numModules) {\n            let oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n            let evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n            let incrementOdd = false;\n            let decrementOdd = false;\n            let incrementEven = false;\n            let decrementEven = false;\n            if (outsideChar) {\n                if (oddSum > 12) {\n                    decrementOdd = true;\n                }\n                else if (oddSum < 4) {\n                    incrementOdd = true;\n                }\n                if (evenSum > 12) {\n                    decrementEven = true;\n                }\n                else if (evenSum < 4) {\n                    incrementEven = true;\n                }\n            }\n            else {\n                if (oddSum > 11) {\n                    decrementOdd = true;\n                }\n                else if (oddSum < 5) {\n                    incrementOdd = true;\n                }\n                if (evenSum > 10) {\n                    decrementEven = true;\n                }\n                else if (evenSum < 4) {\n                    incrementEven = true;\n                }\n            }\n            let mismatch = oddSum + evenSum - numModules;\n            let oddParityBad = (oddSum & 0x01) === (outsideChar ? 1 : 0);\n            let evenParityBad = (evenSum & 0x01) === 1;\n            if (mismatch === 1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementEven = true;\n                }\n            }\n            else if (mismatch === -1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementEven = true;\n                }\n            }\n            else if (mismatch === 0) {\n                if (oddParityBad) {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Both bad\n                    if (oddSum < evenSum) {\n                        incrementOdd = true;\n                        decrementEven = true;\n                    }\n                    else {\n                        decrementOdd = true;\n                        incrementEven = true;\n                    }\n                }\n                else {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Nothing to do!\n                }\n            }\n            else {\n                throw new NotFoundException();\n            }\n            if (incrementOdd) {\n                if (decrementOdd) {\n                    throw new NotFoundException();\n                }\n                AbstractRSSReader.increment(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementOdd) {\n                AbstractRSSReader.decrement(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (incrementEven) {\n                if (decrementEven) {\n                    throw new NotFoundException();\n                }\n                AbstractRSSReader.increment(this.getEvenCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementEven) {\n                AbstractRSSReader.decrement(this.getEvenCounts(), this.getEvenRoundingErrors());\n            }\n        }\n    }\n    RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET = [1, 10, 34, 70, 126];\n    RSS14Reader.INSIDE_ODD_TOTAL_SUBSET = [4, 20, 48, 81];\n    RSS14Reader.OUTSIDE_GSUM = [0, 161, 961, 2015, 2715];\n    RSS14Reader.INSIDE_GSUM = [0, 336, 1036, 1516];\n    RSS14Reader.OUTSIDE_ODD_WIDEST = [8, 6, 4, 3, 1];\n    RSS14Reader.INSIDE_ODD_WIDEST = [2, 4, 6, 8];\n    RSS14Reader.FINDER_PATTERNS = [\n        Int32Array.from([3, 8, 2, 1]),\n        Int32Array.from([3, 5, 5, 1]),\n        Int32Array.from([3, 3, 7, 1]),\n        Int32Array.from([3, 1, 9, 1]),\n        Int32Array.from([2, 7, 4, 1]),\n        Int32Array.from([2, 5, 6, 1]),\n        Int32Array.from([2, 3, 8, 1]),\n        Int32Array.from([1, 5, 7, 1]),\n        Int32Array.from([1, 3, 9, 1]),\n    ];\n\n    /**\n     * @author Daniel Switkin <dswitkin@google.com>\n     * @author Sean Owen\n     */\n    class MultiFormatOneDReader extends OneDReader {\n        constructor(hints, verbose) {\n            super();\n            this.readers = [];\n            this.verbose = (verbose === true);\n            const possibleFormats = !hints ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n            const useCode39CheckDigit = hints && hints.get(DecodeHintType$1.ASSUME_CODE_39_CHECK_DIGIT) !== undefined;\n            if (possibleFormats) {\n                if (possibleFormats.includes(BarcodeFormat$1.EAN_13) ||\n                    possibleFormats.includes(BarcodeFormat$1.UPC_A) ||\n                    possibleFormats.includes(BarcodeFormat$1.EAN_8) ||\n                    possibleFormats.includes(BarcodeFormat$1.UPC_E)) {\n                    this.readers.push(new MultiFormatUPCEANReader(hints));\n                }\n                if (possibleFormats.includes(BarcodeFormat$1.CODE_39)) {\n                    this.readers.push(new Code39Reader(useCode39CheckDigit));\n                }\n                // if (possibleFormats.includes(BarcodeFormat.CODE_93)) {\n                //    this.readers.push(new Code93Reader());\n                // }\n                if (possibleFormats.includes(BarcodeFormat$1.CODE_128)) {\n                    this.readers.push(new Code128Reader());\n                }\n                if (possibleFormats.includes(BarcodeFormat$1.ITF)) {\n                    this.readers.push(new ITFReader());\n                }\n                // if (possibleFormats.includes(BarcodeFormat.CODABAR)) {\n                //    this.readers.push(new CodaBarReader());\n                // }\n                if (possibleFormats.includes(BarcodeFormat$1.RSS_14)) {\n                    this.readers.push(new RSS14Reader());\n                }\n                if (possibleFormats.includes(BarcodeFormat$1.RSS_EXPANDED)) {\n                    this.readers.push(new RSSExpandedReader(this.verbose));\n                }\n            } else {\n                // Case when no hints were provided -> add all.\n                this.readers.push(new MultiFormatUPCEANReader(hints));\n                this.readers.push(new Code39Reader());\n                // this.readers.push(new CodaBarReader());\n                // this.readers.push(new Code93Reader());\n                this.readers.push(new MultiFormatUPCEANReader(hints));\n                this.readers.push(new Code128Reader());\n                this.readers.push(new ITFReader());\n                this.readers.push(new RSS14Reader());\n                this.readers.push(new RSSExpandedReader(this.verbose));\n            }\n        }\n        // @Override\n        decodeRow(rowNumber, row, hints) {\n            for (let i = 0; i < this.readers.length; i++) {\n                try {\n                    return this.readers[i].decodeRow(rowNumber, row, hints);\n                }\n                catch (re) {\n                    // continue\n                }\n            }\n            throw new NotFoundException();\n        }\n        // @Override\n        reset() {\n            this.readers.forEach(reader => reader.reset());\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * Barcode reader reader to use from browser.\n     */\n    class BrowserBarcodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserBarcodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         * @param {Map<DecodeHintType, any>} hints\n         */\n        constructor(timeBetweenScansMillis = 500, hints) {\n            super(new MultiFormatOneDReader(hints), timeBetweenScansMillis, hints);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a set of error-correction blocks in one symbol version. Most versions will\n     * use blocks of differing sizes within one version, so, this encapsulates the parameters for\n     * each set of blocks. It also holds the number of error-correction codewords per block since it\n     * will be the same across all blocks within one version.</p>\n     */\n    class ECBlocks {\n        constructor(ecCodewords, ecBlocks1, ecBlocks2) {\n            this.ecCodewords = ecCodewords;\n            this.ecBlocks = [ecBlocks1];\n            ecBlocks2 && this.ecBlocks.push(ecBlocks2);\n        }\n        getECCodewords() {\n            return this.ecCodewords;\n        }\n        getECBlocks() {\n            return this.ecBlocks;\n        }\n    }\n    /**\n     * <p>Encapsulates the parameters for one error-correction block in one symbol version.\n     * This includes the number of data codewords, and the number of times a block with these\n     * parameters is used consecutively in the Data Matrix code version's format.</p>\n     */\n    class ECB {\n        constructor(count, dataCodewords) {\n            this.count = count;\n            this.dataCodewords = dataCodewords;\n        }\n        getCount() {\n            return this.count;\n        }\n        getDataCodewords() {\n            return this.dataCodewords;\n        }\n    }\n    /**\n     * The Version object encapsulates attributes about a particular\n     * size Data Matrix Code.\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class Version {\n        constructor(versionNumber, symbolSizeRows, symbolSizeColumns, dataRegionSizeRows, dataRegionSizeColumns, ecBlocks) {\n            this.versionNumber = versionNumber;\n            this.symbolSizeRows = symbolSizeRows;\n            this.symbolSizeColumns = symbolSizeColumns;\n            this.dataRegionSizeRows = dataRegionSizeRows;\n            this.dataRegionSizeColumns = dataRegionSizeColumns;\n            this.ecBlocks = ecBlocks;\n            // Calculate the total number of codewords\n            let total = 0;\n            const ecCodewords = ecBlocks.getECCodewords();\n            const ecbArray = ecBlocks.getECBlocks();\n            for (let ecBlock of ecbArray) {\n                total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n            }\n            this.totalCodewords = total;\n        }\n        getVersionNumber() {\n            return this.versionNumber;\n        }\n        getSymbolSizeRows() {\n            return this.symbolSizeRows;\n        }\n        getSymbolSizeColumns() {\n            return this.symbolSizeColumns;\n        }\n        getDataRegionSizeRows() {\n            return this.dataRegionSizeRows;\n        }\n        getDataRegionSizeColumns() {\n            return this.dataRegionSizeColumns;\n        }\n        getTotalCodewords() {\n            return this.totalCodewords;\n        }\n        getECBlocks() {\n            return this.ecBlocks;\n        }\n        /**\n         * <p>Deduces version information from Data Matrix dimensions.</p>\n         *\n         * @param numRows Number of rows in modules\n         * @param numColumns Number of columns in modules\n         * @return Version for a Data Matrix Code of those dimensions\n         * @throws FormatException if dimensions do correspond to a valid Data Matrix size\n         */\n        static getVersionForDimensions(numRows, numColumns) {\n            if ((numRows & 0x01) !== 0 || (numColumns & 0x01) !== 0) {\n                throw new FormatException();\n            }\n            for (let version of Version.VERSIONS) {\n                if (version.symbolSizeRows === numRows && version.symbolSizeColumns === numColumns) {\n                    return version;\n                }\n            }\n            throw new FormatException();\n        }\n        //  @Override\n        toString() {\n            return '' + this.versionNumber;\n        }\n        /**\n         * See ISO 16022:2006 5.5.1 Table 7\n         */\n        static buildVersions() {\n            return [\n                new Version(1, 10, 10, 8, 8, new ECBlocks(5, new ECB(1, 3))),\n                new Version(2, 12, 12, 10, 10, new ECBlocks(7, new ECB(1, 5))),\n                new Version(3, 14, 14, 12, 12, new ECBlocks(10, new ECB(1, 8))),\n                new Version(4, 16, 16, 14, 14, new ECBlocks(12, new ECB(1, 12))),\n                new Version(5, 18, 18, 16, 16, new ECBlocks(14, new ECB(1, 18))),\n                new Version(6, 20, 20, 18, 18, new ECBlocks(18, new ECB(1, 22))),\n                new Version(7, 22, 22, 20, 20, new ECBlocks(20, new ECB(1, 30))),\n                new Version(8, 24, 24, 22, 22, new ECBlocks(24, new ECB(1, 36))),\n                new Version(9, 26, 26, 24, 24, new ECBlocks(28, new ECB(1, 44))),\n                new Version(10, 32, 32, 14, 14, new ECBlocks(36, new ECB(1, 62))),\n                new Version(11, 36, 36, 16, 16, new ECBlocks(42, new ECB(1, 86))),\n                new Version(12, 40, 40, 18, 18, new ECBlocks(48, new ECB(1, 114))),\n                new Version(13, 44, 44, 20, 20, new ECBlocks(56, new ECB(1, 144))),\n                new Version(14, 48, 48, 22, 22, new ECBlocks(68, new ECB(1, 174))),\n                new Version(15, 52, 52, 24, 24, new ECBlocks(42, new ECB(2, 102))),\n                new Version(16, 64, 64, 14, 14, new ECBlocks(56, new ECB(2, 140))),\n                new Version(17, 72, 72, 16, 16, new ECBlocks(36, new ECB(4, 92))),\n                new Version(18, 80, 80, 18, 18, new ECBlocks(48, new ECB(4, 114))),\n                new Version(19, 88, 88, 20, 20, new ECBlocks(56, new ECB(4, 144))),\n                new Version(20, 96, 96, 22, 22, new ECBlocks(68, new ECB(4, 174))),\n                new Version(21, 104, 104, 24, 24, new ECBlocks(56, new ECB(6, 136))),\n                new Version(22, 120, 120, 18, 18, new ECBlocks(68, new ECB(6, 175))),\n                new Version(23, 132, 132, 20, 20, new ECBlocks(62, new ECB(8, 163))),\n                new Version(24, 144, 144, 22, 22, new ECBlocks(62, new ECB(8, 156), new ECB(2, 155))),\n                new Version(25, 8, 18, 6, 16, new ECBlocks(7, new ECB(1, 5))),\n                new Version(26, 8, 32, 6, 14, new ECBlocks(11, new ECB(1, 10))),\n                new Version(27, 12, 26, 10, 24, new ECBlocks(14, new ECB(1, 16))),\n                new Version(28, 12, 36, 10, 16, new ECBlocks(18, new ECB(1, 22))),\n                new Version(29, 16, 36, 14, 16, new ECBlocks(24, new ECB(1, 32))),\n                new Version(30, 16, 48, 14, 22, new ECBlocks(28, new ECB(1, 49)))\n            ];\n        }\n    }\n    Version.VERSIONS = Version.buildVersions();\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class BitMatrixParser {\n        /**\n         * @param bitMatrix {@link BitMatrix} to parse\n         * @throws FormatException if dimension is < 8 or > 144 or not 0 mod 2\n         */\n        constructor(bitMatrix) {\n            const dimension = bitMatrix.getHeight();\n            if (dimension < 8 || dimension > 144 || (dimension & 0x01) !== 0) {\n                throw new FormatException();\n            }\n            this.version = BitMatrixParser.readVersion(bitMatrix);\n            this.mappingBitMatrix = this.extractDataRegion(bitMatrix);\n            this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight());\n        }\n        getVersion() {\n            return this.version;\n        }\n        /**\n         * <p>Creates the version object based on the dimension of the original bit matrix from\n         * the datamatrix code.</p>\n         *\n         * <p>See ISO 16022:2006 Table 7 - ECC 200 symbol attributes</p>\n         *\n         * @param bitMatrix Original {@link BitMatrix} including alignment patterns\n         * @return {@link Version} encapsulating the Data Matrix Code's \"version\"\n         * @throws FormatException if the dimensions of the mapping matrix are not valid\n         * Data Matrix dimensions.\n         */\n        static readVersion(bitMatrix) {\n            const numRows = bitMatrix.getHeight();\n            const numColumns = bitMatrix.getWidth();\n            return Version.getVersionForDimensions(numRows, numColumns);\n        }\n        /**\n         * <p>Reads the bits in the {@link BitMatrix} representing the mapping matrix (No alignment patterns)\n         * in the correct order in order to reconstitute the codewords bytes contained within the\n         * Data Matrix Code.</p>\n         *\n         * @return bytes encoded within the Data Matrix Code\n         * @throws FormatException if the exact number of bytes expected is not read\n         */\n        readCodewords() {\n            const result = new Int8Array(this.version.getTotalCodewords());\n            let resultOffset = 0;\n            let row = 4;\n            let column = 0;\n            const numRows = this.mappingBitMatrix.getHeight();\n            const numColumns = this.mappingBitMatrix.getWidth();\n            let corner1Read = false;\n            let corner2Read = false;\n            let corner3Read = false;\n            let corner4Read = false;\n            // Read all of the codewords\n            do {\n                // Check the four corner cases\n                if ((row === numRows) && (column === 0) && !corner1Read) {\n                    result[resultOffset++] = this.readCorner1(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner1Read = true;\n                }\n                else if ((row === numRows - 2) && (column === 0) && ((numColumns & 0x03) !== 0) && !corner2Read) {\n                    result[resultOffset++] = this.readCorner2(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner2Read = true;\n                }\n                else if ((row === numRows + 4) && (column === 2) && ((numColumns & 0x07) === 0) && !corner3Read) {\n                    result[resultOffset++] = this.readCorner3(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner3Read = true;\n                }\n                else if ((row === numRows - 2) && (column === 0) && ((numColumns & 0x07) === 4) && !corner4Read) {\n                    result[resultOffset++] = this.readCorner4(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner4Read = true;\n                }\n                else {\n                    // Sweep upward diagonally to the right\n                    do {\n                        if ((row < numRows) && (column >= 0) && !this.readMappingMatrix.get(column, row)) {\n                            result[resultOffset++] = this.readUtah(row, column, numRows, numColumns) & 0xff;\n                        }\n                        row -= 2;\n                        column += 2;\n                    } while ((row >= 0) && (column < numColumns));\n                    row += 1;\n                    column += 3;\n                    // Sweep downward diagonally to the left\n                    do {\n                        if ((row >= 0) && (column < numColumns) && !this.readMappingMatrix.get(column, row)) {\n                            result[resultOffset++] = this.readUtah(row, column, numRows, numColumns) & 0xff;\n                        }\n                        row += 2;\n                        column -= 2;\n                    } while ((row < numRows) && (column >= 0));\n                    row += 3;\n                    column += 1;\n                }\n            } while ((row < numRows) || (column < numColumns));\n            if (resultOffset !== this.version.getTotalCodewords()) {\n                throw new FormatException();\n            }\n            return result;\n        }\n        /**\n         * <p>Reads a bit of the mapping matrix accounting for boundary wrapping.</p>\n         *\n         * @param row Row to read in the mapping matrix\n         * @param column Column to read in the mapping matrix\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return value of the given bit in the mapping matrix\n         */\n        readModule(row, column, numRows, numColumns) {\n            // Adjust the row and column indices based on boundary wrapping\n            if (row < 0) {\n                row += numRows;\n                column += 4 - ((numRows + 4) & 0x07);\n            }\n            if (column < 0) {\n                column += numColumns;\n                row += 4 - ((numColumns + 4) & 0x07);\n            }\n            this.readMappingMatrix.set(column, row);\n            return this.mappingBitMatrix.get(column, row);\n        }\n        /**\n         * <p>Reads the 8 bits of the standard Utah-shaped pattern.</p>\n         *\n         * <p>See ISO 16022:2006, 5.8.1 Figure 6</p>\n         *\n         * @param row Current row in the mapping matrix, anchored at the 8th bit (LSB) of the pattern\n         * @param column Current column in the mapping matrix, anchored at the 8th bit (LSB) of the pattern\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the utah shape\n         */\n        readUtah(row, column, numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(row - 2, column - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 2, column - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 1, column - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 1, column - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 1, column, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row, column - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row, column - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row, column, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 1.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.3</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 1\n         */\n        readCorner1(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(2, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(3, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 2.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.4</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 2\n         */\n        readCorner2(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 3, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 2, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 4, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 3, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 3.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.5</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 3\n         */\n        readCorner3(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 3, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 3, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 4.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.6</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 4\n         */\n        readCorner4(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 3, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 2, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(2, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(3, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Extracts the data region from a {@link BitMatrix} that contains\n         * alignment patterns.</p>\n         *\n         * @param bitMatrix Original {@link BitMatrix} with alignment patterns\n         * @return BitMatrix that has the alignment patterns removed\n         */\n        extractDataRegion(bitMatrix) {\n            const symbolSizeRows = this.version.getSymbolSizeRows();\n            const symbolSizeColumns = this.version.getSymbolSizeColumns();\n            if (bitMatrix.getHeight() !== symbolSizeRows) {\n                throw new IllegalArgumentException('Dimension of bitMatrix must match the version size');\n            }\n            const dataRegionSizeRows = this.version.getDataRegionSizeRows();\n            const dataRegionSizeColumns = this.version.getDataRegionSizeColumns();\n            const numDataRegionsRow = symbolSizeRows / dataRegionSizeRows | 0;\n            const numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns | 0;\n            const sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;\n            const sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;\n            const bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow);\n            for (let dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {\n                const dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;\n                for (let dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {\n                    const dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;\n                    for (let i = 0; i < dataRegionSizeRows; ++i) {\n                        const readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;\n                        const writeRowOffset = dataRegionRowOffset + i;\n                        for (let j = 0; j < dataRegionSizeColumns; ++j) {\n                            const readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;\n                            if (bitMatrix.get(readColumnOffset, readRowOffset)) {\n                                const writeColumnOffset = dataRegionColumnOffset + j;\n                                bitMatrixWithoutAlignment.set(writeColumnOffset, writeRowOffset);\n                            }\n                        }\n                    }\n                }\n            }\n            return bitMatrixWithoutAlignment;\n        }\n    }\n\n    /**\n     * <p>Encapsulates a block of data within a Data Matrix Code. Data Matrix Codes may split their data into\n     * multiple blocks, each of which is a unit of data and error-correction codewords. Each\n     * is represented by an instance of this class.</p>\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class DataBlock {\n        constructor(numDataCodewords, codewords) {\n            this.numDataCodewords = numDataCodewords;\n            this.codewords = codewords;\n        }\n        /**\n         * <p>When Data Matrix Codes use multiple data blocks, they actually interleave the bytes of each of them.\n         * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This\n         * method will separate the data into original blocks.</p>\n         *\n         * @param rawCodewords bytes as read directly from the Data Matrix Code\n         * @param version version of the Data Matrix Code\n         * @return DataBlocks containing original bytes, \"de-interleaved\" from representation in the\n         *         Data Matrix Code\n         */\n        static getDataBlocks(rawCodewords, version) {\n            // Figure out the number and size of data blocks used by this version\n            const ecBlocks = version.getECBlocks();\n            // First count the total number of data blocks\n            let totalBlocks = 0;\n            const ecBlockArray = ecBlocks.getECBlocks();\n            for (let ecBlock of ecBlockArray) {\n                totalBlocks += ecBlock.getCount();\n            }\n            // Now establish DataBlocks of the appropriate size and number of data codewords\n            const result = new Array(totalBlocks);\n            let numResultBlocks = 0;\n            for (let ecBlock of ecBlockArray) {\n                for (let i = 0; i < ecBlock.getCount(); i++) {\n                    const numDataCodewords = ecBlock.getDataCodewords();\n                    const numBlockCodewords = ecBlocks.getECCodewords() + numDataCodewords;\n                    result[numResultBlocks++] = new DataBlock(numDataCodewords, new Uint8Array(numBlockCodewords));\n                }\n            }\n            // All blocks have the same amount of data, except that the last n\n            // (where n may be 0) have 1 less byte. Figure out where these start.\n            // TODO(bbrown): There is only one case where there is a difference for Data Matrix for size 144\n            const longerBlocksTotalCodewords = result[0].codewords.length;\n            // int shorterBlocksTotalCodewords = longerBlocksTotalCodewords - 1;\n            const longerBlocksNumDataCodewords = longerBlocksTotalCodewords - ecBlocks.getECCodewords();\n            const shorterBlocksNumDataCodewords = longerBlocksNumDataCodewords - 1;\n            // The last elements of result may be 1 element shorter for 144 matrix\n            // first fill out as many elements as all of them have minus 1\n            let rawCodewordsOffset = 0;\n            for (let i = 0; i < shorterBlocksNumDataCodewords; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            // Fill out the last data block in the longer ones\n            const specialVersion = version.getVersionNumber() === 24;\n            const numLongerBlocks = specialVersion ? 8 : numResultBlocks;\n            for (let j = 0; j < numLongerBlocks; j++) {\n                result[j].codewords[longerBlocksNumDataCodewords - 1] = rawCodewords[rawCodewordsOffset++];\n            }\n            // Now add in error correction blocks\n            const max = result[0].codewords.length;\n            for (let i = longerBlocksNumDataCodewords; i < max; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    const jOffset = specialVersion ? (j + 8) % numResultBlocks : j;\n                    const iOffset = specialVersion && jOffset > 7 ? i - 1 : i;\n                    result[jOffset].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            if (rawCodewordsOffset !== rawCodewords.length) {\n                throw new IllegalArgumentException();\n            }\n            return result;\n        }\n        getNumDataCodewords() {\n            return this.numDataCodewords;\n        }\n        getCodewords() {\n            return this.codewords;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>This provides an easy abstraction to read bits at a time from a sequence of bytes, where the\n     * number of bits read is not often a multiple of 8.</p>\n     *\n     * <p>This class is thread-safe but not reentrant -- unless the caller modifies the bytes array\n     * it passed in, in which case all bets are off.</p>\n     *\n     * @author Sean Owen\n     */\n    class BitSource {\n        /**\n         * @param bytes bytes from which this will read bits. Bits will be read from the first byte first.\n         * Bits are read within a byte from most-significant to least-significant bit.\n         */\n        constructor(bytes) {\n            this.bytes = bytes;\n            this.byteOffset = 0;\n            this.bitOffset = 0;\n        }\n        /**\n         * @return index of next bit in current byte which would be read by the next call to {@link #readBits(int)}.\n         */\n        getBitOffset() {\n            return this.bitOffset;\n        }\n        /**\n         * @return index of next byte in input byte array which would be read by the next call to {@link #readBits(int)}.\n         */\n        getByteOffset() {\n            return this.byteOffset;\n        }\n        /**\n         * @param numBits number of bits to read\n         * @return int representing the bits read. The bits will appear as the least-significant\n         *         bits of the int\n         * @throws IllegalArgumentException if numBits isn't in [1,32] or more than is available\n         */\n        readBits(numBits /*int*/) {\n            if (numBits < 1 || numBits > 32 || numBits > this.available()) {\n                throw new IllegalArgumentException('' + numBits);\n            }\n            let result = 0;\n            let bitOffset = this.bitOffset;\n            let byteOffset = this.byteOffset;\n            const bytes = this.bytes;\n            // First, read remainder from current byte\n            if (bitOffset > 0) {\n                const bitsLeft = 8 - bitOffset;\n                const toRead = numBits < bitsLeft ? numBits : bitsLeft;\n                const bitsToNotRead = bitsLeft - toRead;\n                const mask = (0xFF >> (8 - toRead)) << bitsToNotRead;\n                result = (bytes[byteOffset] & mask) >> bitsToNotRead;\n                numBits -= toRead;\n                bitOffset += toRead;\n                if (bitOffset === 8) {\n                    bitOffset = 0;\n                    byteOffset++;\n                }\n            }\n            // Next read whole bytes\n            if (numBits > 0) {\n                while (numBits >= 8) {\n                    result = (result << 8) | (bytes[byteOffset] & 0xFF);\n                    byteOffset++;\n                    numBits -= 8;\n                }\n                // Finally read a partial byte\n                if (numBits > 0) {\n                    const bitsToNotRead = 8 - numBits;\n                    const mask = (0xFF >> bitsToNotRead) << bitsToNotRead;\n                    result = (result << numBits) | ((bytes[byteOffset] & mask) >> bitsToNotRead);\n                    bitOffset += numBits;\n                }\n            }\n            this.bitOffset = bitOffset;\n            this.byteOffset = byteOffset;\n            return result;\n        }\n        /**\n         * @return number of bits that can be read successfully\n         */\n        available() {\n            return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;\n        }\n    }\n\n    var Mode;\n    (function (Mode) {\n        Mode[Mode[\"PAD_ENCODE\"] = 0] = \"PAD_ENCODE\";\n        Mode[Mode[\"ASCII_ENCODE\"] = 1] = \"ASCII_ENCODE\";\n        Mode[Mode[\"C40_ENCODE\"] = 2] = \"C40_ENCODE\";\n        Mode[Mode[\"TEXT_ENCODE\"] = 3] = \"TEXT_ENCODE\";\n        Mode[Mode[\"ANSIX12_ENCODE\"] = 4] = \"ANSIX12_ENCODE\";\n        Mode[Mode[\"EDIFACT_ENCODE\"] = 5] = \"EDIFACT_ENCODE\";\n        Mode[Mode[\"BASE256_ENCODE\"] = 6] = \"BASE256_ENCODE\";\n    })(Mode || (Mode = {}));\n    /**\n     * <p>Data Matrix Codes can encode text as bits in one of several modes, and can use multiple modes\n     * in one Data Matrix Code. This class decodes the bits back into text.</p>\n     *\n     * <p>See ISO 16022:2006, 5.2.1 - 5.2.9.2</p>\n     *\n     * @author bbrown@google.com (Brian Brown)\n     * @author Sean Owen\n     */\n    class DecodedBitStreamParser {\n        static decode(bytes) {\n            const bits = new BitSource(bytes);\n            const result = new StringBuilder();\n            const resultTrailer = new StringBuilder();\n            const byteSegments = new Array();\n            let mode = Mode.ASCII_ENCODE;\n            do {\n                if (mode === Mode.ASCII_ENCODE) {\n                    mode = this.decodeAsciiSegment(bits, result, resultTrailer);\n                }\n                else {\n                    switch (mode) {\n                        case Mode.C40_ENCODE:\n                            this.decodeC40Segment(bits, result);\n                            break;\n                        case Mode.TEXT_ENCODE:\n                            this.decodeTextSegment(bits, result);\n                            break;\n                        case Mode.ANSIX12_ENCODE:\n                            this.decodeAnsiX12Segment(bits, result);\n                            break;\n                        case Mode.EDIFACT_ENCODE:\n                            this.decodeEdifactSegment(bits, result);\n                            break;\n                        case Mode.BASE256_ENCODE:\n                            this.decodeBase256Segment(bits, result, byteSegments);\n                            break;\n                        default:\n                            throw new FormatException();\n                    }\n                    mode = Mode.ASCII_ENCODE;\n                }\n            } while (mode !== Mode.PAD_ENCODE && bits.available() > 0);\n            if (resultTrailer.length() > 0) {\n                result.append(resultTrailer.toString());\n            }\n            return new DecoderResult(bytes, result.toString(), byteSegments.length === 0 ? null : byteSegments, null);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2\n         */\n        static decodeAsciiSegment(bits, result, resultTrailer) {\n            let upperShift = false;\n            do {\n                let oneByte = bits.readBits(8);\n                if (oneByte === 0) {\n                    throw new FormatException();\n                }\n                else if (oneByte <= 128) { // ASCII data (ASCII value + 1)\n                    if (upperShift) {\n                        oneByte += 128;\n                        // upperShift = false;\n                    }\n                    result.append(String.fromCharCode(oneByte - 1));\n                    return Mode.ASCII_ENCODE;\n                }\n                else if (oneByte === 129) { // Pad\n                    return Mode.PAD_ENCODE;\n                }\n                else if (oneByte <= 229) { // 2-digit data 00-99 (Numeric Value + 130)\n                    const value = oneByte - 130;\n                    if (value < 10) { // pad with '0' for single digit values\n                        result.append('0');\n                    }\n                    result.append('' + value);\n                }\n                else {\n                    switch (oneByte) {\n                        case 230: // Latch to C40 encodation\n                            return Mode.C40_ENCODE;\n                        case 231: // Latch to Base 256 encodation\n                            return Mode.BASE256_ENCODE;\n                        case 232: // FNC1\n                            result.append(String.fromCharCode(29)); // translate as ASCII 29\n                            break;\n                        case 233: // Structured Append\n                        case 234: // Reader Programming\n                            // Ignore these symbols for now\n                            // throw ReaderException.getInstance();\n                            break;\n                        case 235: // Upper Shift (shift to Extended ASCII)\n                            upperShift = true;\n                            break;\n                        case 236: // 05 Macro\n                            result.append('[)>\\u001E05\\u001D');\n                            resultTrailer.insert(0, '\\u001E\\u0004');\n                            break;\n                        case 237: // 06 Macro\n                            result.append('[)>\\u001E06\\u001D');\n                            resultTrailer.insert(0, '\\u001E\\u0004');\n                            break;\n                        case 238: // Latch to ANSI X12 encodation\n                            return Mode.ANSIX12_ENCODE;\n                        case 239: // Latch to Text encodation\n                            return Mode.TEXT_ENCODE;\n                        case 240: // Latch to EDIFACT encodation\n                            return Mode.EDIFACT_ENCODE;\n                        case 241: // ECI Character\n                            // TODO(bbrown): I think we need to support ECI\n                            // throw ReaderException.getInstance();\n                            // Ignore this symbol for now\n                            break;\n                        default:\n                            // Not to be used in ASCII encodation\n                            // but work around encoders that end with 254, latch back to ASCII\n                            if (oneByte !== 254 || bits.available() !== 0) {\n                                throw new FormatException();\n                            }\n                            break;\n                    }\n                }\n            } while (bits.available() > 0);\n            return Mode.ASCII_ENCODE;\n        }\n        /**\n         * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1\n         */\n        static decodeC40Segment(bits, result) {\n            // Three C40 values are encoded in a 16-bit value as\n            // (1600 * C1) + (40 * C2) + C3 + 1\n            // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time\n            let upperShift = false;\n            const cValues = [];\n            let shift = 0;\n            do {\n                // If there is only one byte left then it will be encoded as ASCII\n                if (bits.available() === 8) {\n                    return;\n                }\n                const firstByte = bits.readBits(8);\n                if (firstByte === 254) { // Unlatch codeword\n                    return;\n                }\n                this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n                for (let i = 0; i < 3; i++) {\n                    const cValue = cValues[i];\n                    switch (shift) {\n                        case 0:\n                            if (cValue < 3) {\n                                shift = cValue + 1;\n                            }\n                            else if (cValue < this.C40_BASIC_SET_CHARS.length) {\n                                const c40char = this.C40_BASIC_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(c40char.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(c40char);\n                                }\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case 1:\n                            if (upperShift) {\n                                result.append(String.fromCharCode(cValue + 128));\n                                upperShift = false;\n                            }\n                            else {\n                                result.append(String.fromCharCode(cValue));\n                            }\n                            shift = 0;\n                            break;\n                        case 2:\n                            if (cValue < this.C40_SHIFT2_SET_CHARS.length) {\n                                const c40char = this.C40_SHIFT2_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(c40char.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(c40char);\n                                }\n                            }\n                            else {\n                                switch (cValue) {\n                                    case 27: // FNC1\n                                        result.append(String.fromCharCode(29)); // translate as ASCII 29\n                                        break;\n                                    case 30: // Upper Shift\n                                        upperShift = true;\n                                        break;\n                                    default:\n                                        throw new FormatException();\n                                }\n                            }\n                            shift = 0;\n                            break;\n                        case 3:\n                            if (upperShift) {\n                                result.append(String.fromCharCode(cValue + 224));\n                                upperShift = false;\n                            }\n                            else {\n                                result.append(String.fromCharCode(cValue + 96));\n                            }\n                            shift = 0;\n                            break;\n                        default:\n                            throw new FormatException();\n                    }\n                }\n            } while (bits.available() > 0);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2\n         */\n        static decodeTextSegment(bits, result) {\n            // Three Text values are encoded in a 16-bit value as\n            // (1600 * C1) + (40 * C2) + C3 + 1\n            // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time\n            let upperShift = false;\n            let cValues = [];\n            let shift = 0;\n            do {\n                // If there is only one byte left then it will be encoded as ASCII\n                if (bits.available() === 8) {\n                    return;\n                }\n                const firstByte = bits.readBits(8);\n                if (firstByte === 254) { // Unlatch codeword\n                    return;\n                }\n                this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n                for (let i = 0; i < 3; i++) {\n                    const cValue = cValues[i];\n                    switch (shift) {\n                        case 0:\n                            if (cValue < 3) {\n                                shift = cValue + 1;\n                            }\n                            else if (cValue < this.TEXT_BASIC_SET_CHARS.length) {\n                                const textChar = this.TEXT_BASIC_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(textChar);\n                                }\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case 1:\n                            if (upperShift) {\n                                result.append(String.fromCharCode(cValue + 128));\n                                upperShift = false;\n                            }\n                            else {\n                                result.append(String.fromCharCode(cValue));\n                            }\n                            shift = 0;\n                            break;\n                        case 2:\n                            // Shift 2 for Text is the same encoding as C40\n                            if (cValue < this.TEXT_SHIFT2_SET_CHARS.length) {\n                                const textChar = this.TEXT_SHIFT2_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(textChar);\n                                }\n                            }\n                            else {\n                                switch (cValue) {\n                                    case 27: // FNC1\n                                        result.append(String.fromCharCode(29)); // translate as ASCII 29\n                                        break;\n                                    case 30: // Upper Shift\n                                        upperShift = true;\n                                        break;\n                                    default:\n                                        throw new FormatException();\n                                }\n                            }\n                            shift = 0;\n                            break;\n                        case 3:\n                            if (cValue < this.TEXT_SHIFT3_SET_CHARS.length) {\n                                const textChar = this.TEXT_SHIFT3_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(textChar);\n                                }\n                                shift = 0;\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        default:\n                            throw new FormatException();\n                    }\n                }\n            } while (bits.available() > 0);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.7\n         */\n        static decodeAnsiX12Segment(bits, result) {\n            // Three ANSI X12 values are encoded in a 16-bit value as\n            // (1600 * C1) + (40 * C2) + C3 + 1\n            const cValues = [];\n            do {\n                // If there is only one byte left then it will be encoded as ASCII\n                if (bits.available() === 8) {\n                    return;\n                }\n                const firstByte = bits.readBits(8);\n                if (firstByte === 254) { // Unlatch codeword\n                    return;\n                }\n                this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n                for (let i = 0; i < 3; i++) {\n                    const cValue = cValues[i];\n                    switch (cValue) {\n                        case 0: // X12 segment terminator <CR>\n                            result.append('\\r');\n                            break;\n                        case 1: // X12 segment separator *\n                            result.append('*');\n                            break;\n                        case 2: // X12 sub-element separator >\n                            result.append('>');\n                            break;\n                        case 3: // space\n                            result.append(' ');\n                            break;\n                        default:\n                            if (cValue < 14) { // 0 - 9\n                                result.append(String.fromCharCode(cValue + 44));\n                            }\n                            else if (cValue < 40) { // A - Z\n                                result.append(String.fromCharCode(cValue + 51));\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                    }\n                }\n            } while (bits.available() > 0);\n        }\n        static parseTwoBytes(firstByte, secondByte, result) {\n            let fullBitValue = (firstByte << 8) + secondByte - 1;\n            let temp = Math.floor(fullBitValue / 1600);\n            result[0] = temp;\n            fullBitValue -= temp * 1600;\n            temp = Math.floor(fullBitValue / 40);\n            result[1] = temp;\n            result[2] = fullBitValue - temp * 40;\n        }\n        /**\n         * See ISO 16022:2006, 5.2.8 and Annex C Table C.3\n         */\n        static decodeEdifactSegment(bits, result) {\n            do {\n                // If there is only two or less bytes left then it will be encoded as ASCII\n                if (bits.available() <= 16) {\n                    return;\n                }\n                for (let i = 0; i < 4; i++) {\n                    let edifactValue = bits.readBits(6);\n                    // Check for the unlatch character\n                    if (edifactValue === 0x1F) { // 011111\n                        // Read rest of byte, which should be 0, and stop\n                        const bitsLeft = 8 - bits.getBitOffset();\n                        if (bitsLeft !== 8) {\n                            bits.readBits(bitsLeft);\n                        }\n                        return;\n                    }\n                    if ((edifactValue & 0x20) === 0) { // no 1 in the leading (6th) bit\n                        edifactValue |= 0x40; // Add a leading 01 to the 6 bit binary value\n                    }\n                    result.append(String.fromCharCode(edifactValue));\n                }\n            } while (bits.available() > 0);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.9 and Annex B, B.2\n         */\n        static decodeBase256Segment(bits, result, byteSegments) {\n            // Figure out how long the Base 256 Segment is.\n            let codewordPosition = 1 + bits.getByteOffset(); // position is 1-indexed\n            const d1 = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n            let count;\n            if (d1 === 0) { // Read the remainder of the symbol\n                count = bits.available() / 8 | 0;\n            }\n            else if (d1 < 250) {\n                count = d1;\n            }\n            else {\n                count = 250 * (d1 - 249) + this.unrandomize255State(bits.readBits(8), codewordPosition++);\n            }\n            // We're seeing NegativeArraySizeException errors from users.\n            if (count < 0) {\n                throw new FormatException();\n            }\n            const bytes = new Uint8Array(count);\n            for (let i = 0; i < count; i++) {\n                // Have seen this particular error in the wild, such as at\n                // http://www.bcgen.com/demo/IDAutomationStreamingDataMatrix.aspx?MODE=3&D=Fred&PFMT=3&PT=F&X=0.3&O=0&LM=0.2\n                if (bits.available() < 8) {\n                    throw new FormatException();\n                }\n                bytes[i] = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n            }\n            byteSegments.push(bytes);\n            try {\n                result.append(StringEncoding.decode(bytes, StringUtils.ISO88591));\n            }\n            catch (uee) {\n                throw new IllegalStateException('Platform does not support required encoding: ' + uee.message);\n            }\n        }\n        /**\n         * See ISO 16022:2006, Annex B, B.2\n         */\n        static unrandomize255State(randomizedBase256Codeword, base256CodewordPosition) {\n            const pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1;\n            const tempVariable = randomizedBase256Codeword - pseudoRandomNumber;\n            return tempVariable >= 0 ? tempVariable : tempVariable + 256;\n        }\n    }\n    /**\n     * See ISO 16022:2006, Annex C Table C.1\n     * The C40 Basic Character Set (*'s used for placeholders for the shift values)\n     */\n    DecodedBitStreamParser.C40_BASIC_SET_CHARS = [\n        '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\n        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n    ];\n    DecodedBitStreamParser.C40_SHIFT2_SET_CHARS = [\n        '!', '\"', '#', '$', '%', '&', '\\'', '(', ')', '*', '+', ',', '-', '.',\n        '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\\\', ']', '^', '_'\n    ];\n    /**\n     * See ISO 16022:2006, Annex C Table C.2\n     * The Text Basic Character Set (*'s used for placeholders for the shift values)\n     */\n    DecodedBitStreamParser.TEXT_BASIC_SET_CHARS = [\n        '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',\n        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n    ];\n    // Shift 2 for Text is the same encoding as C40\n    DecodedBitStreamParser.TEXT_SHIFT2_SET_CHARS = DecodedBitStreamParser.C40_SHIFT2_SET_CHARS;\n    DecodedBitStreamParser.TEXT_SHIFT3_SET_CHARS = [\n        '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\n        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', String.fromCharCode(127)\n    ];\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>The main class which implements Data Matrix Code decoding -- as opposed to locating and extracting\n     * the Data Matrix Code from an image.</p>\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class Decoder$1 {\n        constructor() {\n            this.rsDecoder = new ReedSolomonDecoder(GenericGF.DATA_MATRIX_FIELD_256);\n        }\n        /**\n         * <p>Decodes a Data Matrix Code represented as a {@link BitMatrix}. A 1 or \"true\" is taken\n         * to mean a black module.</p>\n         *\n         * @param bits booleans representing white/black Data Matrix Code modules\n         * @return text and bytes encoded within the Data Matrix Code\n         * @throws FormatException if the Data Matrix Code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        decode(bits) {\n            // Construct a parser and read version, error-correction level\n            const parser = new BitMatrixParser(bits);\n            const version = parser.getVersion();\n            // Read codewords\n            const codewords = parser.readCodewords();\n            // Separate into data blocks\n            const dataBlocks = DataBlock.getDataBlocks(codewords, version);\n            // Count total number of data bytes\n            let totalBytes = 0;\n            for (let db of dataBlocks) {\n                totalBytes += db.getNumDataCodewords();\n            }\n            const resultBytes = new Uint8Array(totalBytes);\n            const dataBlocksCount = dataBlocks.length;\n            // Error-correct and copy data blocks together into a stream of bytes\n            for (let j = 0; j < dataBlocksCount; j++) {\n                const dataBlock = dataBlocks[j];\n                const codewordBytes = dataBlock.getCodewords();\n                const numDataCodewords = dataBlock.getNumDataCodewords();\n                this.correctErrors(codewordBytes, numDataCodewords);\n                for (let i = 0; i < numDataCodewords; i++) {\n                    // De-interlace data blocks.\n                    resultBytes[i * dataBlocksCount + j] = codewordBytes[i];\n                }\n            }\n            // Decode the contents of that stream of bytes\n            return DecodedBitStreamParser.decode(resultBytes);\n        }\n        /**\n         * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n         * correct the errors in-place using Reed-Solomon error correction.</p>\n         *\n         * @param codewordBytes data and error correction codewords\n         * @param numDataCodewords number of codewords that are data bytes\n         * @throws ChecksumException if error correction fails\n         */\n        correctErrors(codewordBytes, numDataCodewords) {\n            // const numCodewords = codewordBytes.length;\n            // First read into an array of ints\n            const codewordsInts = new Int32Array(codewordBytes);\n            // for (let i = 0; i < numCodewords; i++) {\n            //   codewordsInts[i] = codewordBytes[i] & 0xFF;\n            // }\n            try {\n                this.rsDecoder.decode(codewordsInts, codewordBytes.length - numDataCodewords);\n            }\n            catch (ignored /* ReedSolomonException */) {\n                throw new ChecksumException();\n            }\n            // Copy back into array of bytes -- only need to worry about the bytes that were data\n            // We don't care about errors in the error-correction codewords\n            for (let i = 0; i < numDataCodewords; i++) {\n                codewordBytes[i] = codewordsInts[i];\n            }\n        }\n    }\n\n    /**\n     * <p>Encapsulates logic that can detect a Data Matrix Code in an image, even if the Data Matrix Code\n     * is rotated or skewed, or partially obscured.</p>\n     *\n     * @author Sean Owen\n     */\n    class Detector$1 {\n        constructor(image) {\n            this.image = image;\n            this.rectangleDetector = new WhiteRectangleDetector(this.image);\n        }\n        /**\n         * <p>Detects a Data Matrix Code in an image.</p>\n         *\n         * @return {@link DetectorResult} encapsulating results of detecting a Data Matrix Code\n         * @throws NotFoundException if no Data Matrix Code can be found\n         */\n        detect() {\n            const cornerPoints = this.rectangleDetector.detect();\n            let points = this.detectSolid1(cornerPoints);\n            points = this.detectSolid2(points);\n            points[3] = this.correctTopRight(points);\n            if (!points[3]) {\n                throw new NotFoundException();\n            }\n            points = this.shiftToModuleCenter(points);\n            const topLeft = points[0];\n            const bottomLeft = points[1];\n            const bottomRight = points[2];\n            const topRight = points[3];\n            let dimensionTop = this.transitionsBetween(topLeft, topRight) + 1;\n            let dimensionRight = this.transitionsBetween(bottomRight, topRight) + 1;\n            if ((dimensionTop & 0x01) === 1) {\n                dimensionTop += 1;\n            }\n            if ((dimensionRight & 0x01) === 1) {\n                dimensionRight += 1;\n            }\n            if (4 * dimensionTop < 7 * dimensionRight && 4 * dimensionRight < 7 * dimensionTop) {\n                // The matrix is square\n                dimensionTop = dimensionRight = Math.max(dimensionTop, dimensionRight);\n            }\n            let bits = Detector$1.sampleGrid(this.image, topLeft, bottomLeft, bottomRight, topRight, dimensionTop, dimensionRight);\n            return new DetectorResult(bits, [topLeft, bottomLeft, bottomRight, topRight]);\n        }\n        static shiftPoint(point, to, div) {\n            let x = (to.getX() - point.getX()) / (div + 1);\n            let y = (to.getY() - point.getY()) / (div + 1);\n            return new ResultPoint(point.getX() + x, point.getY() + y);\n        }\n        static moveAway(point, fromX, fromY) {\n            let x = point.getX();\n            let y = point.getY();\n            if (x < fromX) {\n                x -= 1;\n            }\n            else {\n                x += 1;\n            }\n            if (y < fromY) {\n                y -= 1;\n            }\n            else {\n                y += 1;\n            }\n            return new ResultPoint(x, y);\n        }\n        /**\n         * Detect a solid side which has minimum transition.\n         */\n        detectSolid1(cornerPoints) {\n            // 0  2\n            // 1  3\n            let pointA = cornerPoints[0];\n            let pointB = cornerPoints[1];\n            let pointC = cornerPoints[3];\n            let pointD = cornerPoints[2];\n            let trAB = this.transitionsBetween(pointA, pointB);\n            let trBC = this.transitionsBetween(pointB, pointC);\n            let trCD = this.transitionsBetween(pointC, pointD);\n            let trDA = this.transitionsBetween(pointD, pointA);\n            // 0..3\n            // :  :\n            // 1--2\n            let min = trAB;\n            let points = [pointD, pointA, pointB, pointC];\n            if (min > trBC) {\n                min = trBC;\n                points[0] = pointA;\n                points[1] = pointB;\n                points[2] = pointC;\n                points[3] = pointD;\n            }\n            if (min > trCD) {\n                min = trCD;\n                points[0] = pointB;\n                points[1] = pointC;\n                points[2] = pointD;\n                points[3] = pointA;\n            }\n            if (min > trDA) {\n                points[0] = pointC;\n                points[1] = pointD;\n                points[2] = pointA;\n                points[3] = pointB;\n            }\n            return points;\n        }\n        /**\n         * Detect a second solid side next to first solid side.\n         */\n        detectSolid2(points) {\n            // A..D\n            // :  :\n            // B--C\n            let pointA = points[0];\n            let pointB = points[1];\n            let pointC = points[2];\n            let pointD = points[3];\n            // Transition detection on the edge is not stable.\n            // To safely detect, shift the points to the module center.\n            let tr = this.transitionsBetween(pointA, pointD);\n            let pointBs = Detector$1.shiftPoint(pointB, pointC, (tr + 1) * 4);\n            let pointCs = Detector$1.shiftPoint(pointC, pointB, (tr + 1) * 4);\n            let trBA = this.transitionsBetween(pointBs, pointA);\n            let trCD = this.transitionsBetween(pointCs, pointD);\n            // 0..3\n            // |  :\n            // 1--2\n            if (trBA < trCD) {\n                // solid sides: A-B-C\n                points[0] = pointA;\n                points[1] = pointB;\n                points[2] = pointC;\n                points[3] = pointD;\n            }\n            else {\n                // solid sides: B-C-D\n                points[0] = pointB;\n                points[1] = pointC;\n                points[2] = pointD;\n                points[3] = pointA;\n            }\n            return points;\n        }\n        /**\n         * Calculates the corner position of the white top right module.\n         */\n        correctTopRight(points) {\n            // A..D\n            // |  :\n            // B--C\n            let pointA = points[0];\n            let pointB = points[1];\n            let pointC = points[2];\n            let pointD = points[3];\n            // shift points for safe transition detection.\n            let trTop = this.transitionsBetween(pointA, pointD);\n            let trRight = this.transitionsBetween(pointB, pointD);\n            let pointAs = Detector$1.shiftPoint(pointA, pointB, (trRight + 1) * 4);\n            let pointCs = Detector$1.shiftPoint(pointC, pointB, (trTop + 1) * 4);\n            trTop = this.transitionsBetween(pointAs, pointD);\n            trRight = this.transitionsBetween(pointCs, pointD);\n            let candidate1 = new ResultPoint(pointD.getX() + (pointC.getX() - pointB.getX()) / (trTop + 1), pointD.getY() + (pointC.getY() - pointB.getY()) / (trTop + 1));\n            let candidate2 = new ResultPoint(pointD.getX() + (pointA.getX() - pointB.getX()) / (trRight + 1), pointD.getY() + (pointA.getY() - pointB.getY()) / (trRight + 1));\n            if (!this.isValid(candidate1)) {\n                if (this.isValid(candidate2)) {\n                    return candidate2;\n                }\n                return null;\n            }\n            if (!this.isValid(candidate2)) {\n                return candidate1;\n            }\n            let sumc1 = this.transitionsBetween(pointAs, candidate1) + this.transitionsBetween(pointCs, candidate1);\n            let sumc2 = this.transitionsBetween(pointAs, candidate2) + this.transitionsBetween(pointCs, candidate2);\n            if (sumc1 > sumc2) {\n                return candidate1;\n            }\n            else {\n                return candidate2;\n            }\n        }\n        /**\n         * Shift the edge points to the module center.\n         */\n        shiftToModuleCenter(points) {\n            // A..D\n            // |  :\n            // B--C\n            let pointA = points[0];\n            let pointB = points[1];\n            let pointC = points[2];\n            let pointD = points[3];\n            // calculate pseudo dimensions\n            let dimH = this.transitionsBetween(pointA, pointD) + 1;\n            let dimV = this.transitionsBetween(pointC, pointD) + 1;\n            // shift points for safe dimension detection\n            let pointAs = Detector$1.shiftPoint(pointA, pointB, dimV * 4);\n            let pointCs = Detector$1.shiftPoint(pointC, pointB, dimH * 4);\n            //  calculate more precise dimensions\n            dimH = this.transitionsBetween(pointAs, pointD) + 1;\n            dimV = this.transitionsBetween(pointCs, pointD) + 1;\n            if ((dimH & 0x01) === 1) {\n                dimH += 1;\n            }\n            if ((dimV & 0x01) === 1) {\n                dimV += 1;\n            }\n            // WhiteRectangleDetector returns points inside of the rectangle.\n            // I want points on the edges.\n            let centerX = (pointA.getX() + pointB.getX() + pointC.getX() + pointD.getX()) / 4;\n            let centerY = (pointA.getY() + pointB.getY() + pointC.getY() + pointD.getY()) / 4;\n            pointA = Detector$1.moveAway(pointA, centerX, centerY);\n            pointB = Detector$1.moveAway(pointB, centerX, centerY);\n            pointC = Detector$1.moveAway(pointC, centerX, centerY);\n            pointD = Detector$1.moveAway(pointD, centerX, centerY);\n            let pointBs;\n            let pointDs;\n            // shift points to the center of each modules\n            pointAs = Detector$1.shiftPoint(pointA, pointB, dimV * 4);\n            pointAs = Detector$1.shiftPoint(pointAs, pointD, dimH * 4);\n            pointBs = Detector$1.shiftPoint(pointB, pointA, dimV * 4);\n            pointBs = Detector$1.shiftPoint(pointBs, pointC, dimH * 4);\n            pointCs = Detector$1.shiftPoint(pointC, pointD, dimV * 4);\n            pointCs = Detector$1.shiftPoint(pointCs, pointB, dimH * 4);\n            pointDs = Detector$1.shiftPoint(pointD, pointC, dimV * 4);\n            pointDs = Detector$1.shiftPoint(pointDs, pointA, dimH * 4);\n            return [pointAs, pointBs, pointCs, pointDs];\n        }\n        isValid(p) {\n            return p.getX() >= 0 && p.getX() < this.image.getWidth() && p.getY() > 0 && p.getY() < this.image.getHeight();\n        }\n        static sampleGrid(image, topLeft, bottomLeft, bottomRight, topRight, dimensionX, dimensionY) {\n            const sampler = GridSamplerInstance.getInstance();\n            return sampler.sampleGrid(image, dimensionX, dimensionY, 0.5, 0.5, dimensionX - 0.5, 0.5, dimensionX - 0.5, dimensionY - 0.5, 0.5, dimensionY - 0.5, topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRight.getX(), bottomRight.getY(), bottomLeft.getX(), bottomLeft.getY());\n        }\n        /**\n         * Counts the number of black/white transitions between two points, using something like Bresenham's algorithm.\n         */\n        transitionsBetween(from, to) {\n            // See QR Code Detector, sizeOfBlackWhiteBlackRun()\n            let fromX = Math.trunc(from.getX());\n            let fromY = Math.trunc(from.getY());\n            let toX = Math.trunc(to.getX());\n            let toY = Math.trunc(to.getY());\n            let steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n            if (steep) {\n                let temp = fromX;\n                fromX = fromY;\n                fromY = temp;\n                temp = toX;\n                toX = toY;\n                toY = temp;\n            }\n            let dx = Math.abs(toX - fromX);\n            let dy = Math.abs(toY - fromY);\n            let error = -dx / 2;\n            let ystep = fromY < toY ? 1 : -1;\n            let xstep = fromX < toX ? 1 : -1;\n            let transitions = 0;\n            let inBlack = this.image.get(steep ? fromY : fromX, steep ? fromX : fromY);\n            for (let x = fromX, y = fromY; x !== toX; x += xstep) {\n                let isBlack = this.image.get(steep ? y : x, steep ? x : y);\n                if (isBlack !== inBlack) {\n                    transitions++;\n                    inBlack = isBlack;\n                }\n                error += dy;\n                if (error > 0) {\n                    if (y === toY) {\n                        break;\n                    }\n                    y += ystep;\n                    error -= dx;\n                }\n            }\n            return transitions;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This implementation can detect and decode Data Matrix codes in an image.\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class DataMatrixReader {\n        constructor() {\n            this.decoder = new Decoder$1();\n        }\n        /**\n         * Locates and decodes a Data Matrix code in an image.\n         *\n         * @return a String representing the content encoded by the Data Matrix code\n         * @throws NotFoundException if a Data Matrix code cannot be found\n         * @throws FormatException if a Data Matrix code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        // @Override\n        // public Result decode(BinaryBitmap image) throws NotFoundException, ChecksumException, FormatException {\n        //   return decode(image, null);\n        // }\n        // @Override\n        decode(image, hints = null) {\n            let decoderResult;\n            let points;\n            if (hints != null && hints.has(DecodeHintType$1.PURE_BARCODE)) {\n                const bits = DataMatrixReader.extractPureBits(image.getBlackMatrix());\n                decoderResult = this.decoder.decode(bits);\n                points = DataMatrixReader.NO_POINTS;\n            }\n            else {\n                const detectorResult = new Detector$1(image.getBlackMatrix()).detect();\n                decoderResult = this.decoder.decode(detectorResult.getBits());\n                points = detectorResult.getPoints();\n            }\n            const rawBytes = decoderResult.getRawBytes();\n            const result = new Result(decoderResult.getText(), rawBytes, 8 * rawBytes.length, points, BarcodeFormat$1.DATA_MATRIX, System.currentTimeMillis());\n            const byteSegments = decoderResult.getByteSegments();\n            if (byteSegments != null) {\n                result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);\n            }\n            const ecLevel = decoderResult.getECLevel();\n            if (ecLevel != null) {\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);\n            }\n            return result;\n        }\n        // @Override\n        reset() {\n            // do nothing\n        }\n        /**\n         * This method detects a code in a \"pure\" image -- that is, pure monochrome image\n         * which contains only an unrotated, unskewed, image of a code, with some white border\n         * around it. This is a specialized method that works exceptionally fast in this special\n         * case.\n         *\n         * @see com.google.zxing.qrcode.QRCodeReader#extractPureBits(BitMatrix)\n         */\n        static extractPureBits(image) {\n            const leftTopBlack = image.getTopLeftOnBit();\n            const rightBottomBlack = image.getBottomRightOnBit();\n            if (leftTopBlack == null || rightBottomBlack == null) {\n                throw new NotFoundException();\n            }\n            const moduleSize = this.moduleSize(leftTopBlack, image);\n            let top = leftTopBlack[1];\n            const bottom = rightBottomBlack[1];\n            let left = leftTopBlack[0];\n            const right = rightBottomBlack[0];\n            const matrixWidth = (right - left + 1) / moduleSize;\n            const matrixHeight = (bottom - top + 1) / moduleSize;\n            if (matrixWidth <= 0 || matrixHeight <= 0) {\n                throw new NotFoundException();\n            }\n            // Push in the \"border\" by half the module width so that we start\n            // sampling in the middle of the module. Just in case the image is a\n            // little off, this will help recover.\n            const nudge = moduleSize / 2;\n            top += nudge;\n            left += nudge;\n            // Now just read off the bits\n            const bits = new BitMatrix(matrixWidth, matrixHeight);\n            for (let y = 0; y < matrixHeight; y++) {\n                const iOffset = top + y * moduleSize;\n                for (let x = 0; x < matrixWidth; x++) {\n                    if (image.get(left + x * moduleSize, iOffset)) {\n                        bits.set(x, y);\n                    }\n                }\n            }\n            return bits;\n        }\n        static moduleSize(leftTopBlack, image) {\n            const width = image.getWidth();\n            let x = leftTopBlack[0];\n            const y = leftTopBlack[1];\n            while (x < width && image.get(x, y)) {\n                x++;\n            }\n            if (x === width) {\n                throw new NotFoundException();\n            }\n            const moduleSize = x - leftTopBlack[0];\n            if (moduleSize === 0) {\n                throw new NotFoundException();\n            }\n            return moduleSize;\n        }\n    }\n    DataMatrixReader.NO_POINTS = [];\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * QR Code reader to use from browser.\n     */\n    class BrowserDatamatrixCodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserQRCodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new DataMatrixReader(), timeBetweenScansMillis);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    var ErrorCorrectionLevelValues;\n    (function (ErrorCorrectionLevelValues) {\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"L\"] = 0] = \"L\";\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"M\"] = 1] = \"M\";\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"Q\"] = 2] = \"Q\";\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"H\"] = 3] = \"H\";\n    })(ErrorCorrectionLevelValues || (ErrorCorrectionLevelValues = {}));\n    /**\n     * <p>See ISO 18004:2006, 6.5.1. This enum encapsulates the four error correction levels\n     * defined by the QR code standard.</p>\n     *\n     * @author Sean Owen\n     */\n    class ErrorCorrectionLevel {\n        constructor(value, stringValue, bits /*int*/) {\n            this.value = value;\n            this.stringValue = stringValue;\n            this.bits = bits;\n            ErrorCorrectionLevel.FOR_BITS.set(bits, this);\n            ErrorCorrectionLevel.FOR_VALUE.set(value, this);\n        }\n        getValue() {\n            return this.value;\n        }\n        getBits() {\n            return this.bits;\n        }\n        static fromString(s) {\n            switch (s) {\n                case 'L': return ErrorCorrectionLevel.L;\n                case 'M': return ErrorCorrectionLevel.M;\n                case 'Q': return ErrorCorrectionLevel.Q;\n                case 'H': return ErrorCorrectionLevel.H;\n                default: throw new ArgumentException(s + 'not available');\n            }\n        }\n        toString() {\n            return this.stringValue;\n        }\n        equals(o) {\n            if (!(o instanceof ErrorCorrectionLevel)) {\n                return false;\n            }\n            const other = o;\n            return this.value === other.value;\n        }\n        /**\n         * @param bits int containing the two bits encoding a QR Code's error correction level\n         * @return ErrorCorrectionLevel representing the encoded error correction level\n         */\n        static forBits(bits /*int*/) {\n            if (bits < 0 || bits >= ErrorCorrectionLevel.FOR_BITS.size) {\n                throw new IllegalArgumentException();\n            }\n            return ErrorCorrectionLevel.FOR_BITS.get(bits);\n        }\n    }\n    ErrorCorrectionLevel.FOR_BITS = new Map();\n    ErrorCorrectionLevel.FOR_VALUE = new Map();\n    /** L = ~7% correction */\n    ErrorCorrectionLevel.L = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.L, 'L', 0x01);\n    /** M = ~15% correction */\n    ErrorCorrectionLevel.M = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.M, 'M', 0x00);\n    /** Q = ~25% correction */\n    ErrorCorrectionLevel.Q = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.Q, 'Q', 0x03);\n    /** H = ~30% correction */\n    ErrorCorrectionLevel.H = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.H, 'H', 0x02);\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a QR Code's format information, including the data mask used and\n     * error correction level.</p>\n     *\n     * @author Sean Owen\n     * @see DataMask\n     * @see ErrorCorrectionLevel\n     */\n    class FormatInformation {\n        constructor(formatInfo /*int*/) {\n            // Bits 3,4\n            this.errorCorrectionLevel = ErrorCorrectionLevel.forBits((formatInfo >> 3) & 0x03);\n            // Bottom 3 bits\n            this.dataMask = /*(byte) */ (formatInfo & 0x07);\n        }\n        static numBitsDiffering(a /*int*/, b /*int*/) {\n            return Integer.bitCount(a ^ b);\n        }\n        /**\n         * @param maskedFormatInfo1 format info indicator, with mask still applied\n         * @param maskedFormatInfo2 second copy of same info; both are checked at the same time\n         *  to establish best match\n         * @return information about the format it specifies, or {@code null}\n         *  if doesn't seem to match any known pattern\n         */\n        static decodeFormatInformation(maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n            const formatInfo = FormatInformation.doDecodeFormatInformation(maskedFormatInfo1, maskedFormatInfo2);\n            if (formatInfo !== null) {\n                return formatInfo;\n            }\n            // Should return null, but, some QR codes apparently\n            // do not mask this info. Try again by actually masking the pattern\n            // first\n            return FormatInformation.doDecodeFormatInformation(maskedFormatInfo1 ^ FormatInformation.FORMAT_INFO_MASK_QR, maskedFormatInfo2 ^ FormatInformation.FORMAT_INFO_MASK_QR);\n        }\n        static doDecodeFormatInformation(maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n            // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing\n            let bestDifference = Number.MAX_SAFE_INTEGER;\n            let bestFormatInfo = 0;\n            for (const decodeInfo of FormatInformation.FORMAT_INFO_DECODE_LOOKUP) {\n                const targetInfo = decodeInfo[0];\n                if (targetInfo === maskedFormatInfo1 || targetInfo === maskedFormatInfo2) {\n                    // Found an exact match\n                    return new FormatInformation(decodeInfo[1]);\n                }\n                let bitsDifference = FormatInformation.numBitsDiffering(maskedFormatInfo1, targetInfo);\n                if (bitsDifference < bestDifference) {\n                    bestFormatInfo = decodeInfo[1];\n                    bestDifference = bitsDifference;\n                }\n                if (maskedFormatInfo1 !== maskedFormatInfo2) {\n                    // also try the other option\n                    bitsDifference = FormatInformation.numBitsDiffering(maskedFormatInfo2, targetInfo);\n                    if (bitsDifference < bestDifference) {\n                        bestFormatInfo = decodeInfo[1];\n                        bestDifference = bitsDifference;\n                    }\n                }\n            }\n            // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits\n            // differing means we found a match\n            if (bestDifference <= 3) {\n                return new FormatInformation(bestFormatInfo);\n            }\n            return null;\n        }\n        getErrorCorrectionLevel() {\n            return this.errorCorrectionLevel;\n        }\n        getDataMask() {\n            return this.dataMask;\n        }\n        /*@Override*/\n        hashCode() {\n            return (this.errorCorrectionLevel.getBits() << 3) | this.dataMask;\n        }\n        /*@Override*/\n        equals(o) {\n            if (!(o instanceof FormatInformation)) {\n                return false;\n            }\n            const other = o;\n            return this.errorCorrectionLevel === other.errorCorrectionLevel &&\n                this.dataMask === other.dataMask;\n        }\n    }\n    FormatInformation.FORMAT_INFO_MASK_QR = 0x5412;\n    /**\n     * See ISO 18004:2006, Annex C, Table C.1\n     */\n    FormatInformation.FORMAT_INFO_DECODE_LOOKUP = [\n        Int32Array.from([0x5412, 0x00]),\n        Int32Array.from([0x5125, 0x01]),\n        Int32Array.from([0x5E7C, 0x02]),\n        Int32Array.from([0x5B4B, 0x03]),\n        Int32Array.from([0x45F9, 0x04]),\n        Int32Array.from([0x40CE, 0x05]),\n        Int32Array.from([0x4F97, 0x06]),\n        Int32Array.from([0x4AA0, 0x07]),\n        Int32Array.from([0x77C4, 0x08]),\n        Int32Array.from([0x72F3, 0x09]),\n        Int32Array.from([0x7DAA, 0x0A]),\n        Int32Array.from([0x789D, 0x0B]),\n        Int32Array.from([0x662F, 0x0C]),\n        Int32Array.from([0x6318, 0x0D]),\n        Int32Array.from([0x6C41, 0x0E]),\n        Int32Array.from([0x6976, 0x0F]),\n        Int32Array.from([0x1689, 0x10]),\n        Int32Array.from([0x13BE, 0x11]),\n        Int32Array.from([0x1CE7, 0x12]),\n        Int32Array.from([0x19D0, 0x13]),\n        Int32Array.from([0x0762, 0x14]),\n        Int32Array.from([0x0255, 0x15]),\n        Int32Array.from([0x0D0C, 0x16]),\n        Int32Array.from([0x083B, 0x17]),\n        Int32Array.from([0x355F, 0x18]),\n        Int32Array.from([0x3068, 0x19]),\n        Int32Array.from([0x3F31, 0x1A]),\n        Int32Array.from([0x3A06, 0x1B]),\n        Int32Array.from([0x24B4, 0x1C]),\n        Int32Array.from([0x2183, 0x1D]),\n        Int32Array.from([0x2EDA, 0x1E]),\n        Int32Array.from([0x2BED, 0x1F]),\n    ];\n\n    /**\n     * <p>Encapsulates a set of error-correction blocks in one symbol version. Most versions will\n     * use blocks of differing sizes within one version, so, this encapsulates the parameters for\n     * each set of blocks. It also holds the number of error-correction codewords per block since it\n     * will be the same across all blocks within one version.</p>\n     */\n    class ECBlocks$1 {\n        constructor(ecCodewordsPerBlock /*int*/, ...ecBlocks) {\n            this.ecCodewordsPerBlock = ecCodewordsPerBlock;\n            this.ecBlocks = ecBlocks;\n        }\n        getECCodewordsPerBlock() {\n            return this.ecCodewordsPerBlock;\n        }\n        getNumBlocks() {\n            let total = 0;\n            const ecBlocks = this.ecBlocks;\n            for (const ecBlock of ecBlocks) {\n                total += ecBlock.getCount();\n            }\n            return total;\n        }\n        getTotalECCodewords() {\n            return this.ecCodewordsPerBlock * this.getNumBlocks();\n        }\n        getECBlocks() {\n            return this.ecBlocks;\n        }\n    }\n\n    /**\n     * <p>Encapsulates the parameters for one error-correction block in one symbol version.\n     * This includes the number of data codewords, and the number of times a block with these\n     * parameters is used consecutively in the QR code version's format.</p>\n     */\n    class ECB$1 {\n        constructor(count /*int*/, dataCodewords /*int*/) {\n            this.count = count;\n            this.dataCodewords = dataCodewords;\n        }\n        getCount() {\n            return this.count;\n        }\n        getDataCodewords() {\n            return this.dataCodewords;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * See ISO 18004:2006 Annex D\n     *\n     * @author Sean Owen\n     */\n    class Version$1 {\n        constructor(versionNumber /*int*/, alignmentPatternCenters, ...ecBlocks) {\n            this.versionNumber = versionNumber;\n            this.alignmentPatternCenters = alignmentPatternCenters;\n            this.ecBlocks = ecBlocks;\n            let total = 0;\n            const ecCodewords = ecBlocks[0].getECCodewordsPerBlock();\n            const ecbArray = ecBlocks[0].getECBlocks();\n            for (const ecBlock of ecbArray) {\n                total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n            }\n            this.totalCodewords = total;\n        }\n        getVersionNumber() {\n            return this.versionNumber;\n        }\n        getAlignmentPatternCenters() {\n            return this.alignmentPatternCenters;\n        }\n        getTotalCodewords() {\n            return this.totalCodewords;\n        }\n        getDimensionForVersion() {\n            return 17 + 4 * this.versionNumber;\n        }\n        getECBlocksForLevel(ecLevel) {\n            return this.ecBlocks[ecLevel.getValue()];\n            // TYPESCRIPTPORT: original was using ordinal, and using the order of levels as defined in ErrorCorrectionLevel enum (LMQH)\n            // I will use the direct value from ErrorCorrectionLevelValues enum which in typescript goes to a number\n        }\n        /**\n         * <p>Deduces version information purely from QR Code dimensions.</p>\n         *\n         * @param dimension dimension in modules\n         * @return Version for a QR Code of that dimension\n         * @throws FormatException if dimension is not 1 mod 4\n         */\n        static getProvisionalVersionForDimension(dimension /*int*/) {\n            if (dimension % 4 !== 1) {\n                throw new FormatException();\n            }\n            try {\n                return this.getVersionForNumber((dimension - 17) / 4);\n            }\n            catch (ignored /*: IllegalArgumentException*/) {\n                throw new FormatException();\n            }\n        }\n        static getVersionForNumber(versionNumber /*int*/) {\n            if (versionNumber < 1 || versionNumber > 40) {\n                throw new IllegalArgumentException();\n            }\n            return Version$1.VERSIONS[versionNumber - 1];\n        }\n        static decodeVersionInformation(versionBits /*int*/) {\n            let bestDifference = Number.MAX_SAFE_INTEGER;\n            let bestVersion = 0;\n            for (let i = 0; i < Version$1.VERSION_DECODE_INFO.length; i++) {\n                const targetVersion = Version$1.VERSION_DECODE_INFO[i];\n                // Do the version info bits match exactly? done.\n                if (targetVersion === versionBits) {\n                    return Version$1.getVersionForNumber(i + 7);\n                }\n                // Otherwise see if this is the closest to a real version info bit string\n                // we have seen so far\n                const bitsDifference = FormatInformation.numBitsDiffering(versionBits, targetVersion);\n                if (bitsDifference < bestDifference) {\n                    bestVersion = i + 7;\n                    bestDifference = bitsDifference;\n                }\n            }\n            // We can tolerate up to 3 bits of error since no two version info codewords will\n            // differ in less than 8 bits.\n            if (bestDifference <= 3) {\n                return Version$1.getVersionForNumber(bestVersion);\n            }\n            // If we didn't find a close enough match, fail\n            return null;\n        }\n        /**\n         * See ISO 18004:2006 Annex E\n         */\n        buildFunctionPattern() {\n            const dimension = this.getDimensionForVersion();\n            const bitMatrix = new BitMatrix(dimension);\n            // Top left finder pattern + separator + format\n            bitMatrix.setRegion(0, 0, 9, 9);\n            // Top right finder pattern + separator + format\n            bitMatrix.setRegion(dimension - 8, 0, 8, 9);\n            // Bottom left finder pattern + separator + format\n            bitMatrix.setRegion(0, dimension - 8, 9, 8);\n            // Alignment patterns\n            const max = this.alignmentPatternCenters.length;\n            for (let x = 0; x < max; x++) {\n                const i = this.alignmentPatternCenters[x] - 2;\n                for (let y = 0; y < max; y++) {\n                    if ((x === 0 && (y === 0 || y === max - 1)) || (x === max - 1 && y === 0)) {\n                        // No alignment patterns near the three finder patterns\n                        continue;\n                    }\n                    bitMatrix.setRegion(this.alignmentPatternCenters[y] - 2, i, 5, 5);\n                }\n            }\n            // Vertical timing pattern\n            bitMatrix.setRegion(6, 9, 1, dimension - 17);\n            // Horizontal timing pattern\n            bitMatrix.setRegion(9, 6, dimension - 17, 1);\n            if (this.versionNumber > 6) {\n                // Version info, top right\n                bitMatrix.setRegion(dimension - 11, 0, 3, 6);\n                // Version info, bottom left\n                bitMatrix.setRegion(0, dimension - 11, 6, 3);\n            }\n            return bitMatrix;\n        }\n        /*@Override*/\n        toString() {\n            return '' + this.versionNumber;\n        }\n    }\n    /**\n       * See ISO 18004:2006 Annex D.\n       * Element i represents the raw version bits that specify version i + 7\n       */\n    Version$1.VERSION_DECODE_INFO = Int32Array.from([\n        0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6,\n        0x0C762, 0x0D847, 0x0E60D, 0x0F928, 0x10B78,\n        0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683,\n        0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB,\n        0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250,\n        0x209D5, 0x216F0, 0x228BA, 0x2379F, 0x24B0B,\n        0x2542E, 0x26A64, 0x27541, 0x28C69\n    ]);\n    /**\n       * See ISO 18004:2006 6.5.1 Table 9\n       */\n    Version$1.VERSIONS = [\n        new Version$1(1, new Int32Array(0), new ECBlocks$1(7, new ECB$1(1, 19)), new ECBlocks$1(10, new ECB$1(1, 16)), new ECBlocks$1(13, new ECB$1(1, 13)), new ECBlocks$1(17, new ECB$1(1, 9))),\n        new Version$1(2, Int32Array.from([6, 18]), new ECBlocks$1(10, new ECB$1(1, 34)), new ECBlocks$1(16, new ECB$1(1, 28)), new ECBlocks$1(22, new ECB$1(1, 22)), new ECBlocks$1(28, new ECB$1(1, 16))),\n        new Version$1(3, Int32Array.from([6, 22]), new ECBlocks$1(15, new ECB$1(1, 55)), new ECBlocks$1(26, new ECB$1(1, 44)), new ECBlocks$1(18, new ECB$1(2, 17)), new ECBlocks$1(22, new ECB$1(2, 13))),\n        new Version$1(4, Int32Array.from([6, 26]), new ECBlocks$1(20, new ECB$1(1, 80)), new ECBlocks$1(18, new ECB$1(2, 32)), new ECBlocks$1(26, new ECB$1(2, 24)), new ECBlocks$1(16, new ECB$1(4, 9))),\n        new Version$1(5, Int32Array.from([6, 30]), new ECBlocks$1(26, new ECB$1(1, 108)), new ECBlocks$1(24, new ECB$1(2, 43)), new ECBlocks$1(18, new ECB$1(2, 15), new ECB$1(2, 16)), new ECBlocks$1(22, new ECB$1(2, 11), new ECB$1(2, 12))),\n        new Version$1(6, Int32Array.from([6, 34]), new ECBlocks$1(18, new ECB$1(2, 68)), new ECBlocks$1(16, new ECB$1(4, 27)), new ECBlocks$1(24, new ECB$1(4, 19)), new ECBlocks$1(28, new ECB$1(4, 15))),\n        new Version$1(7, Int32Array.from([6, 22, 38]), new ECBlocks$1(20, new ECB$1(2, 78)), new ECBlocks$1(18, new ECB$1(4, 31)), new ECBlocks$1(18, new ECB$1(2, 14), new ECB$1(4, 15)), new ECBlocks$1(26, new ECB$1(4, 13), new ECB$1(1, 14))),\n        new Version$1(8, Int32Array.from([6, 24, 42]), new ECBlocks$1(24, new ECB$1(2, 97)), new ECBlocks$1(22, new ECB$1(2, 38), new ECB$1(2, 39)), new ECBlocks$1(22, new ECB$1(4, 18), new ECB$1(2, 19)), new ECBlocks$1(26, new ECB$1(4, 14), new ECB$1(2, 15))),\n        new Version$1(9, Int32Array.from([6, 26, 46]), new ECBlocks$1(30, new ECB$1(2, 116)), new ECBlocks$1(22, new ECB$1(3, 36), new ECB$1(2, 37)), new ECBlocks$1(20, new ECB$1(4, 16), new ECB$1(4, 17)), new ECBlocks$1(24, new ECB$1(4, 12), new ECB$1(4, 13))),\n        new Version$1(10, Int32Array.from([6, 28, 50]), new ECBlocks$1(18, new ECB$1(2, 68), new ECB$1(2, 69)), new ECBlocks$1(26, new ECB$1(4, 43), new ECB$1(1, 44)), new ECBlocks$1(24, new ECB$1(6, 19), new ECB$1(2, 20)), new ECBlocks$1(28, new ECB$1(6, 15), new ECB$1(2, 16))),\n        new Version$1(11, Int32Array.from([6, 30, 54]), new ECBlocks$1(20, new ECB$1(4, 81)), new ECBlocks$1(30, new ECB$1(1, 50), new ECB$1(4, 51)), new ECBlocks$1(28, new ECB$1(4, 22), new ECB$1(4, 23)), new ECBlocks$1(24, new ECB$1(3, 12), new ECB$1(8, 13))),\n        new Version$1(12, Int32Array.from([6, 32, 58]), new ECBlocks$1(24, new ECB$1(2, 92), new ECB$1(2, 93)), new ECBlocks$1(22, new ECB$1(6, 36), new ECB$1(2, 37)), new ECBlocks$1(26, new ECB$1(4, 20), new ECB$1(6, 21)), new ECBlocks$1(28, new ECB$1(7, 14), new ECB$1(4, 15))),\n        new Version$1(13, Int32Array.from([6, 34, 62]), new ECBlocks$1(26, new ECB$1(4, 107)), new ECBlocks$1(22, new ECB$1(8, 37), new ECB$1(1, 38)), new ECBlocks$1(24, new ECB$1(8, 20), new ECB$1(4, 21)), new ECBlocks$1(22, new ECB$1(12, 11), new ECB$1(4, 12))),\n        new Version$1(14, Int32Array.from([6, 26, 46, 66]), new ECBlocks$1(30, new ECB$1(3, 115), new ECB$1(1, 116)), new ECBlocks$1(24, new ECB$1(4, 40), new ECB$1(5, 41)), new ECBlocks$1(20, new ECB$1(11, 16), new ECB$1(5, 17)), new ECBlocks$1(24, new ECB$1(11, 12), new ECB$1(5, 13))),\n        new Version$1(15, Int32Array.from([6, 26, 48, 70]), new ECBlocks$1(22, new ECB$1(5, 87), new ECB$1(1, 88)), new ECBlocks$1(24, new ECB$1(5, 41), new ECB$1(5, 42)), new ECBlocks$1(30, new ECB$1(5, 24), new ECB$1(7, 25)), new ECBlocks$1(24, new ECB$1(11, 12), new ECB$1(7, 13))),\n        new Version$1(16, Int32Array.from([6, 26, 50, 74]), new ECBlocks$1(24, new ECB$1(5, 98), new ECB$1(1, 99)), new ECBlocks$1(28, new ECB$1(7, 45), new ECB$1(3, 46)), new ECBlocks$1(24, new ECB$1(15, 19), new ECB$1(2, 20)), new ECBlocks$1(30, new ECB$1(3, 15), new ECB$1(13, 16))),\n        new Version$1(17, Int32Array.from([6, 30, 54, 78]), new ECBlocks$1(28, new ECB$1(1, 107), new ECB$1(5, 108)), new ECBlocks$1(28, new ECB$1(10, 46), new ECB$1(1, 47)), new ECBlocks$1(28, new ECB$1(1, 22), new ECB$1(15, 23)), new ECBlocks$1(28, new ECB$1(2, 14), new ECB$1(17, 15))),\n        new Version$1(18, Int32Array.from([6, 30, 56, 82]), new ECBlocks$1(30, new ECB$1(5, 120), new ECB$1(1, 121)), new ECBlocks$1(26, new ECB$1(9, 43), new ECB$1(4, 44)), new ECBlocks$1(28, new ECB$1(17, 22), new ECB$1(1, 23)), new ECBlocks$1(28, new ECB$1(2, 14), new ECB$1(19, 15))),\n        new Version$1(19, Int32Array.from([6, 30, 58, 86]), new ECBlocks$1(28, new ECB$1(3, 113), new ECB$1(4, 114)), new ECBlocks$1(26, new ECB$1(3, 44), new ECB$1(11, 45)), new ECBlocks$1(26, new ECB$1(17, 21), new ECB$1(4, 22)), new ECBlocks$1(26, new ECB$1(9, 13), new ECB$1(16, 14))),\n        new Version$1(20, Int32Array.from([6, 34, 62, 90]), new ECBlocks$1(28, new ECB$1(3, 107), new ECB$1(5, 108)), new ECBlocks$1(26, new ECB$1(3, 41), new ECB$1(13, 42)), new ECBlocks$1(30, new ECB$1(15, 24), new ECB$1(5, 25)), new ECBlocks$1(28, new ECB$1(15, 15), new ECB$1(10, 16))),\n        new Version$1(21, Int32Array.from([6, 28, 50, 72, 94]), new ECBlocks$1(28, new ECB$1(4, 116), new ECB$1(4, 117)), new ECBlocks$1(26, new ECB$1(17, 42)), new ECBlocks$1(28, new ECB$1(17, 22), new ECB$1(6, 23)), new ECBlocks$1(30, new ECB$1(19, 16), new ECB$1(6, 17))),\n        new Version$1(22, Int32Array.from([6, 26, 50, 74, 98]), new ECBlocks$1(28, new ECB$1(2, 111), new ECB$1(7, 112)), new ECBlocks$1(28, new ECB$1(17, 46)), new ECBlocks$1(30, new ECB$1(7, 24), new ECB$1(16, 25)), new ECBlocks$1(24, new ECB$1(34, 13))),\n        new Version$1(23, Int32Array.from([6, 30, 54, 78, 102]), new ECBlocks$1(30, new ECB$1(4, 121), new ECB$1(5, 122)), new ECBlocks$1(28, new ECB$1(4, 47), new ECB$1(14, 48)), new ECBlocks$1(30, new ECB$1(11, 24), new ECB$1(14, 25)), new ECBlocks$1(30, new ECB$1(16, 15), new ECB$1(14, 16))),\n        new Version$1(24, Int32Array.from([6, 28, 54, 80, 106]), new ECBlocks$1(30, new ECB$1(6, 117), new ECB$1(4, 118)), new ECBlocks$1(28, new ECB$1(6, 45), new ECB$1(14, 46)), new ECBlocks$1(30, new ECB$1(11, 24), new ECB$1(16, 25)), new ECBlocks$1(30, new ECB$1(30, 16), new ECB$1(2, 17))),\n        new Version$1(25, Int32Array.from([6, 32, 58, 84, 110]), new ECBlocks$1(26, new ECB$1(8, 106), new ECB$1(4, 107)), new ECBlocks$1(28, new ECB$1(8, 47), new ECB$1(13, 48)), new ECBlocks$1(30, new ECB$1(7, 24), new ECB$1(22, 25)), new ECBlocks$1(30, new ECB$1(22, 15), new ECB$1(13, 16))),\n        new Version$1(26, Int32Array.from([6, 30, 58, 86, 114]), new ECBlocks$1(28, new ECB$1(10, 114), new ECB$1(2, 115)), new ECBlocks$1(28, new ECB$1(19, 46), new ECB$1(4, 47)), new ECBlocks$1(28, new ECB$1(28, 22), new ECB$1(6, 23)), new ECBlocks$1(30, new ECB$1(33, 16), new ECB$1(4, 17))),\n        new Version$1(27, Int32Array.from([6, 34, 62, 90, 118]), new ECBlocks$1(30, new ECB$1(8, 122), new ECB$1(4, 123)), new ECBlocks$1(28, new ECB$1(22, 45), new ECB$1(3, 46)), new ECBlocks$1(30, new ECB$1(8, 23), new ECB$1(26, 24)), new ECBlocks$1(30, new ECB$1(12, 15), new ECB$1(28, 16))),\n        new Version$1(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new ECBlocks$1(30, new ECB$1(3, 117), new ECB$1(10, 118)), new ECBlocks$1(28, new ECB$1(3, 45), new ECB$1(23, 46)), new ECBlocks$1(30, new ECB$1(4, 24), new ECB$1(31, 25)), new ECBlocks$1(30, new ECB$1(11, 15), new ECB$1(31, 16))),\n        new Version$1(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new ECBlocks$1(30, new ECB$1(7, 116), new ECB$1(7, 117)), new ECBlocks$1(28, new ECB$1(21, 45), new ECB$1(7, 46)), new ECBlocks$1(30, new ECB$1(1, 23), new ECB$1(37, 24)), new ECBlocks$1(30, new ECB$1(19, 15), new ECB$1(26, 16))),\n        new Version$1(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new ECBlocks$1(30, new ECB$1(5, 115), new ECB$1(10, 116)), new ECBlocks$1(28, new ECB$1(19, 47), new ECB$1(10, 48)), new ECBlocks$1(30, new ECB$1(15, 24), new ECB$1(25, 25)), new ECBlocks$1(30, new ECB$1(23, 15), new ECB$1(25, 16))),\n        new Version$1(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new ECBlocks$1(30, new ECB$1(13, 115), new ECB$1(3, 116)), new ECBlocks$1(28, new ECB$1(2, 46), new ECB$1(29, 47)), new ECBlocks$1(30, new ECB$1(42, 24), new ECB$1(1, 25)), new ECBlocks$1(30, new ECB$1(23, 15), new ECB$1(28, 16))),\n        new Version$1(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new ECBlocks$1(30, new ECB$1(17, 115)), new ECBlocks$1(28, new ECB$1(10, 46), new ECB$1(23, 47)), new ECBlocks$1(30, new ECB$1(10, 24), new ECB$1(35, 25)), new ECBlocks$1(30, new ECB$1(19, 15), new ECB$1(35, 16))),\n        new Version$1(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new ECBlocks$1(30, new ECB$1(17, 115), new ECB$1(1, 116)), new ECBlocks$1(28, new ECB$1(14, 46), new ECB$1(21, 47)), new ECBlocks$1(30, new ECB$1(29, 24), new ECB$1(19, 25)), new ECBlocks$1(30, new ECB$1(11, 15), new ECB$1(46, 16))),\n        new Version$1(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new ECBlocks$1(30, new ECB$1(13, 115), new ECB$1(6, 116)), new ECBlocks$1(28, new ECB$1(14, 46), new ECB$1(23, 47)), new ECBlocks$1(30, new ECB$1(44, 24), new ECB$1(7, 25)), new ECBlocks$1(30, new ECB$1(59, 16), new ECB$1(1, 17))),\n        new Version$1(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new ECBlocks$1(30, new ECB$1(12, 121), new ECB$1(7, 122)), new ECBlocks$1(28, new ECB$1(12, 47), new ECB$1(26, 48)), new ECBlocks$1(30, new ECB$1(39, 24), new ECB$1(14, 25)), new ECBlocks$1(30, new ECB$1(22, 15), new ECB$1(41, 16))),\n        new Version$1(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new ECBlocks$1(30, new ECB$1(6, 121), new ECB$1(14, 122)), new ECBlocks$1(28, new ECB$1(6, 47), new ECB$1(34, 48)), new ECBlocks$1(30, new ECB$1(46, 24), new ECB$1(10, 25)), new ECBlocks$1(30, new ECB$1(2, 15), new ECB$1(64, 16))),\n        new Version$1(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new ECBlocks$1(30, new ECB$1(17, 122), new ECB$1(4, 123)), new ECBlocks$1(28, new ECB$1(29, 46), new ECB$1(14, 47)), new ECBlocks$1(30, new ECB$1(49, 24), new ECB$1(10, 25)), new ECBlocks$1(30, new ECB$1(24, 15), new ECB$1(46, 16))),\n        new Version$1(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new ECBlocks$1(30, new ECB$1(4, 122), new ECB$1(18, 123)), new ECBlocks$1(28, new ECB$1(13, 46), new ECB$1(32, 47)), new ECBlocks$1(30, new ECB$1(48, 24), new ECB$1(14, 25)), new ECBlocks$1(30, new ECB$1(42, 15), new ECB$1(32, 16))),\n        new Version$1(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new ECBlocks$1(30, new ECB$1(20, 117), new ECB$1(4, 118)), new ECBlocks$1(28, new ECB$1(40, 47), new ECB$1(7, 48)), new ECBlocks$1(30, new ECB$1(43, 24), new ECB$1(22, 25)), new ECBlocks$1(30, new ECB$1(10, 15), new ECB$1(67, 16))),\n        new Version$1(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new ECBlocks$1(30, new ECB$1(19, 118), new ECB$1(6, 119)), new ECBlocks$1(28, new ECB$1(18, 47), new ECB$1(31, 48)), new ECBlocks$1(30, new ECB$1(34, 24), new ECB$1(34, 25)), new ECBlocks$1(30, new ECB$1(20, 15), new ECB$1(61, 16)))\n    ];\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    var DataMaskValues;\n    (function (DataMaskValues) {\n        DataMaskValues[DataMaskValues[\"DATA_MASK_000\"] = 0] = \"DATA_MASK_000\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_001\"] = 1] = \"DATA_MASK_001\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_010\"] = 2] = \"DATA_MASK_010\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_011\"] = 3] = \"DATA_MASK_011\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_100\"] = 4] = \"DATA_MASK_100\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_101\"] = 5] = \"DATA_MASK_101\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_110\"] = 6] = \"DATA_MASK_110\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_111\"] = 7] = \"DATA_MASK_111\";\n    })(DataMaskValues || (DataMaskValues = {}));\n    /**\n     * <p>Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations\n     * of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix,\n     * including areas used for finder patterns, timing patterns, etc. These areas should be unused\n     * after the point they are unmasked anyway.</p>\n     *\n     * <p>Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position\n     * and j is row position. In fact, as the text says, i is row position and j is column position.</p>\n     *\n     * @author Sean Owen\n     */\n    class DataMask {\n        // See ISO 18004:2006 6.8.1\n        constructor(value, isMasked) {\n            this.value = value;\n            this.isMasked = isMasked;\n        }\n        // End of enum constants.\n        /**\n         * <p>Implementations of this method reverse the data masking process applied to a QR Code and\n         * make its bits ready to read.</p>\n         *\n         * @param bits representation of QR Code bits\n         * @param dimension dimension of QR Code, represented by bits, being unmasked\n         */\n        unmaskBitMatrix(bits, dimension /*int*/) {\n            for (let i = 0; i < dimension; i++) {\n                for (let j = 0; j < dimension; j++) {\n                    if (this.isMasked(i, j)) {\n                        bits.flip(j, i);\n                    }\n                }\n            }\n        }\n    }\n    DataMask.values = new Map([\n        /**\n         * 000: mask bits for which (x + y) mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_000, new DataMask(DataMaskValues.DATA_MASK_000, (i /*int*/, j /*int*/) => { return ((i + j) & 0x01) === 0; })],\n        /**\n         * 001: mask bits for which x mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_001, new DataMask(DataMaskValues.DATA_MASK_001, (i /*int*/, j /*int*/) => { return (i & 0x01) === 0; })],\n        /**\n         * 010: mask bits for which y mod 3 == 0\n         */\n        [DataMaskValues.DATA_MASK_010, new DataMask(DataMaskValues.DATA_MASK_010, (i /*int*/, j /*int*/) => { return j % 3 === 0; })],\n        /**\n         * 011: mask bits for which (x + y) mod 3 == 0\n         */\n        [DataMaskValues.DATA_MASK_011, new DataMask(DataMaskValues.DATA_MASK_011, (i /*int*/, j /*int*/) => { return (i + j) % 3 === 0; })],\n        /**\n         * 100: mask bits for which (x/2 + y/3) mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_100, new DataMask(DataMaskValues.DATA_MASK_100, (i /*int*/, j /*int*/) => { return ((Math.floor(i / 2) + Math.floor(j / 3)) & 0x01) === 0; })],\n        /**\n         * 101: mask bits for which xy mod 2 + xy mod 3 == 0\n         * equivalently, such that xy mod 6 == 0\n         */\n        [DataMaskValues.DATA_MASK_101, new DataMask(DataMaskValues.DATA_MASK_101, (i /*int*/, j /*int*/) => { return (i * j) % 6 === 0; })],\n        /**\n         * 110: mask bits for which (xy mod 2 + xy mod 3) mod 2 == 0\n         * equivalently, such that xy mod 6 < 3\n         */\n        [DataMaskValues.DATA_MASK_110, new DataMask(DataMaskValues.DATA_MASK_110, (i /*int*/, j /*int*/) => { return ((i * j) % 6) < 3; })],\n        /**\n         * 111: mask bits for which ((x+y)mod 2 + xy mod 3) mod 2 == 0\n         * equivalently, such that (x + y + xy mod 3) mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_111, new DataMask(DataMaskValues.DATA_MASK_111, (i /*int*/, j /*int*/) => { return ((i + j + ((i * j) % 3)) & 0x01) === 0; })],\n    ]);\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Sean Owen\n     */\n    class BitMatrixParser$1 {\n        /**\n         * @param bitMatrix {@link BitMatrix} to parse\n         * @throws FormatException if dimension is not >= 21 and 1 mod 4\n         */\n        constructor(bitMatrix) {\n            const dimension = bitMatrix.getHeight();\n            if (dimension < 21 || (dimension & 0x03) !== 1) {\n                throw new FormatException();\n            }\n            this.bitMatrix = bitMatrix;\n        }\n        /**\n         * <p>Reads format information from one of its two locations within the QR Code.</p>\n         *\n         * @return {@link FormatInformation} encapsulating the QR Code's format info\n         * @throws FormatException if both format information locations cannot be parsed as\n         * the valid encoding of format information\n         */\n        readFormatInformation() {\n            if (this.parsedFormatInfo !== null && this.parsedFormatInfo !== undefined) {\n                return this.parsedFormatInfo;\n            }\n            // Read top-left format info bits\n            let formatInfoBits1 = 0;\n            for (let i = 0; i < 6; i++) {\n                formatInfoBits1 = this.copyBit(i, 8, formatInfoBits1);\n            }\n            // .. and skip a bit in the timing pattern ...\n            formatInfoBits1 = this.copyBit(7, 8, formatInfoBits1);\n            formatInfoBits1 = this.copyBit(8, 8, formatInfoBits1);\n            formatInfoBits1 = this.copyBit(8, 7, formatInfoBits1);\n            // .. and skip a bit in the timing pattern ...\n            for (let j = 5; j >= 0; j--) {\n                formatInfoBits1 = this.copyBit(8, j, formatInfoBits1);\n            }\n            // Read the top-right/bottom-left pattern too\n            const dimension = this.bitMatrix.getHeight();\n            let formatInfoBits2 = 0;\n            const jMin = dimension - 7;\n            for (let j = dimension - 1; j >= jMin; j--) {\n                formatInfoBits2 = this.copyBit(8, j, formatInfoBits2);\n            }\n            for (let i = dimension - 8; i < dimension; i++) {\n                formatInfoBits2 = this.copyBit(i, 8, formatInfoBits2);\n            }\n            this.parsedFormatInfo = FormatInformation.decodeFormatInformation(formatInfoBits1, formatInfoBits2);\n            if (this.parsedFormatInfo !== null) {\n                return this.parsedFormatInfo;\n            }\n            throw new FormatException();\n        }\n        /**\n         * <p>Reads version information from one of its two locations within the QR Code.</p>\n         *\n         * @return {@link Version} encapsulating the QR Code's version\n         * @throws FormatException if both version information locations cannot be parsed as\n         * the valid encoding of version information\n         */\n        readVersion() {\n            if (this.parsedVersion !== null && this.parsedVersion !== undefined) {\n                return this.parsedVersion;\n            }\n            const dimension = this.bitMatrix.getHeight();\n            const provisionalVersion = Math.floor((dimension - 17) / 4);\n            if (provisionalVersion <= 6) {\n                return Version$1.getVersionForNumber(provisionalVersion);\n            }\n            // Read top-right version info: 3 wide by 6 tall\n            let versionBits = 0;\n            const ijMin = dimension - 11;\n            for (let j = 5; j >= 0; j--) {\n                for (let i = dimension - 9; i >= ijMin; i--) {\n                    versionBits = this.copyBit(i, j, versionBits);\n                }\n            }\n            let theParsedVersion = Version$1.decodeVersionInformation(versionBits);\n            if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n                this.parsedVersion = theParsedVersion;\n                return theParsedVersion;\n            }\n            // Hmm, failed. Try bottom left: 6 wide by 3 tall\n            versionBits = 0;\n            for (let i = 5; i >= 0; i--) {\n                for (let j = dimension - 9; j >= ijMin; j--) {\n                    versionBits = this.copyBit(i, j, versionBits);\n                }\n            }\n            theParsedVersion = Version$1.decodeVersionInformation(versionBits);\n            if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n                this.parsedVersion = theParsedVersion;\n                return theParsedVersion;\n            }\n            throw new FormatException();\n        }\n        copyBit(i /*int*/, j /*int*/, versionBits /*int*/) {\n            const bit = this.isMirror ? this.bitMatrix.get(j, i) : this.bitMatrix.get(i, j);\n            return bit ? (versionBits << 1) | 0x1 : versionBits << 1;\n        }\n        /**\n         * <p>Reads the bits in the {@link BitMatrix} representing the finder pattern in the\n         * correct order in order to reconstruct the codewords bytes contained within the\n         * QR Code.</p>\n         *\n         * @return bytes encoded within the QR Code\n         * @throws FormatException if the exact number of bytes expected is not read\n         */\n        readCodewords() {\n            const formatInfo = this.readFormatInformation();\n            const version = this.readVersion();\n            // Get the data mask for the format used in this QR Code. This will exclude\n            // some bits from reading as we wind through the bit matrix.\n            const dataMask = DataMask.values.get(formatInfo.getDataMask());\n            const dimension = this.bitMatrix.getHeight();\n            dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n            const functionPattern = version.buildFunctionPattern();\n            let readingUp = true;\n            const result = new Uint8Array(version.getTotalCodewords());\n            let resultOffset = 0;\n            let currentByte = 0;\n            let bitsRead = 0;\n            // Read columns in pairs, from right to left\n            for (let j = dimension - 1; j > 0; j -= 2) {\n                if (j === 6) {\n                    // Skip whole column with vertical alignment pattern\n                    // saves time and makes the other code proceed more cleanly\n                    j--;\n                }\n                // Read alternatingly from bottom to top then top to bottom\n                for (let count = 0; count < dimension; count++) {\n                    const i = readingUp ? dimension - 1 - count : count;\n                    for (let col = 0; col < 2; col++) {\n                        // Ignore bits covered by the function pattern\n                        if (!functionPattern.get(j - col, i)) {\n                            // Read a bit\n                            bitsRead++;\n                            currentByte <<= 1;\n                            if (this.bitMatrix.get(j - col, i)) {\n                                currentByte |= 1;\n                            }\n                            // If we've made a whole byte, save it off\n                            if (bitsRead === 8) {\n                                result[resultOffset++] = /*(byte) */ currentByte;\n                                bitsRead = 0;\n                                currentByte = 0;\n                            }\n                        }\n                    }\n                }\n                readingUp = !readingUp; // readingUp ^= true; // readingUp = !readingUp; // switch directions\n            }\n            if (resultOffset !== version.getTotalCodewords()) {\n                throw new FormatException();\n            }\n            return result;\n        }\n        /**\n         * Revert the mask removal done while reading the code words. The bit matrix should revert to its original state.\n         */\n        remask() {\n            if (this.parsedFormatInfo === null) {\n                return; // We have no format information, and have no data mask\n            }\n            const dataMask = DataMask.values[this.parsedFormatInfo.getDataMask()];\n            const dimension = this.bitMatrix.getHeight();\n            dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n        }\n        /**\n         * Prepare the parser for a mirrored operation.\n         * This flag has effect only on the {@link #readFormatInformation()} and the\n         * {@link #readVersion()}. Before proceeding with {@link #readCodewords()} the\n         * {@link #mirror()} method should be called.\n         *\n         * @param mirror Whether to read version and format information mirrored.\n         */\n        setMirror(isMirror) {\n            this.parsedVersion = null;\n            this.parsedFormatInfo = null;\n            this.isMirror = isMirror;\n        }\n        /** Mirror the bit matrix in order to attempt a second reading. */\n        mirror() {\n            const bitMatrix = this.bitMatrix;\n            for (let x = 0, width = bitMatrix.getWidth(); x < width; x++) {\n                for (let y = x + 1, height = bitMatrix.getHeight(); y < height; y++) {\n                    if (bitMatrix.get(x, y) !== bitMatrix.get(y, x)) {\n                        bitMatrix.flip(y, x);\n                        bitMatrix.flip(x, y);\n                    }\n                }\n            }\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a block of data within a QR Code. QR Codes may split their data into\n     * multiple blocks, each of which is a unit of data and error-correction codewords. Each\n     * is represented by an instance of this class.</p>\n     *\n     * @author Sean Owen\n     */\n    class DataBlock$1 {\n        constructor(numDataCodewords /*int*/, codewords) {\n            this.numDataCodewords = numDataCodewords;\n            this.codewords = codewords;\n        }\n        /**\n         * <p>When QR Codes use multiple data blocks, they are actually interleaved.\n         * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This\n         * method will separate the data into original blocks.</p>\n         *\n         * @param rawCodewords bytes as read directly from the QR Code\n         * @param version version of the QR Code\n         * @param ecLevel error-correction level of the QR Code\n         * @return DataBlocks containing original bytes, \"de-interleaved\" from representation in the\n         *         QR Code\n         */\n        static getDataBlocks(rawCodewords, version, ecLevel) {\n            if (rawCodewords.length !== version.getTotalCodewords()) {\n                throw new IllegalArgumentException();\n            }\n            // Figure out the number and size of data blocks used by this version and\n            // error correction level\n            const ecBlocks = version.getECBlocksForLevel(ecLevel);\n            // First count the total number of data blocks\n            let totalBlocks = 0;\n            const ecBlockArray = ecBlocks.getECBlocks();\n            for (const ecBlock of ecBlockArray) {\n                totalBlocks += ecBlock.getCount();\n            }\n            // Now establish DataBlocks of the appropriate size and number of data codewords\n            const result = new Array(totalBlocks);\n            let numResultBlocks = 0;\n            for (const ecBlock of ecBlockArray) {\n                for (let i = 0; i < ecBlock.getCount(); i++) {\n                    const numDataCodewords = ecBlock.getDataCodewords();\n                    const numBlockCodewords = ecBlocks.getECCodewordsPerBlock() + numDataCodewords;\n                    result[numResultBlocks++] = new DataBlock$1(numDataCodewords, new Uint8Array(numBlockCodewords));\n                }\n            }\n            // All blocks have the same amount of data, except that the last n\n            // (where n may be 0) have 1 more byte. Figure out where these start.\n            const shorterBlocksTotalCodewords = result[0].codewords.length;\n            let longerBlocksStartAt = result.length - 1;\n            // TYPESCRIPTPORT: check length is correct here\n            while (longerBlocksStartAt >= 0) {\n                const numCodewords = result[longerBlocksStartAt].codewords.length;\n                if (numCodewords === shorterBlocksTotalCodewords) {\n                    break;\n                }\n                longerBlocksStartAt--;\n            }\n            longerBlocksStartAt++;\n            const shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks.getECCodewordsPerBlock();\n            // The last elements of result may be 1 element longer\n            // first fill out as many elements as all of them have\n            let rawCodewordsOffset = 0;\n            for (let i = 0; i < shorterBlocksNumDataCodewords; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            // Fill out the last data block in the longer ones\n            for (let j = longerBlocksStartAt; j < numResultBlocks; j++) {\n                result[j].codewords[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++];\n            }\n            // Now add in error correction blocks\n            const max = result[0].codewords.length;\n            for (let i = shorterBlocksNumDataCodewords; i < max; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    const iOffset = j < longerBlocksStartAt ? i : i + 1;\n                    result[j].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            return result;\n        }\n        getNumDataCodewords() {\n            return this.numDataCodewords;\n        }\n        getCodewords() {\n            return this.codewords;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    var ModeValues;\n    (function (ModeValues) {\n        ModeValues[ModeValues[\"TERMINATOR\"] = 0] = \"TERMINATOR\";\n        ModeValues[ModeValues[\"NUMERIC\"] = 1] = \"NUMERIC\";\n        ModeValues[ModeValues[\"ALPHANUMERIC\"] = 2] = \"ALPHANUMERIC\";\n        ModeValues[ModeValues[\"STRUCTURED_APPEND\"] = 3] = \"STRUCTURED_APPEND\";\n        ModeValues[ModeValues[\"BYTE\"] = 4] = \"BYTE\";\n        ModeValues[ModeValues[\"ECI\"] = 5] = \"ECI\";\n        ModeValues[ModeValues[\"KANJI\"] = 6] = \"KANJI\";\n        ModeValues[ModeValues[\"FNC1_FIRST_POSITION\"] = 7] = \"FNC1_FIRST_POSITION\";\n        ModeValues[ModeValues[\"FNC1_SECOND_POSITION\"] = 8] = \"FNC1_SECOND_POSITION\";\n        /** See GBT 18284-2000; \"Hanzi\" is a transliteration of this mode name. */\n        ModeValues[ModeValues[\"HANZI\"] = 9] = \"HANZI\";\n    })(ModeValues || (ModeValues = {}));\n    /**\n     * <p>See ISO 18004:2006, 6.4.1, Tables 2 and 3. This enum encapsulates the various modes in which\n     * data can be encoded to bits in the QR code standard.</p>\n     *\n     * @author Sean Owen\n     */\n    class Mode$1 {\n        constructor(value, stringValue, characterCountBitsForVersions, bits /*int*/) {\n            this.value = value;\n            this.stringValue = stringValue;\n            this.characterCountBitsForVersions = characterCountBitsForVersions;\n            this.bits = bits;\n            Mode$1.FOR_BITS.set(bits, this);\n            Mode$1.FOR_VALUE.set(value, this);\n        }\n        /**\n         * @param bits four bits encoding a QR Code data mode\n         * @return Mode encoded by these bits\n         * @throws IllegalArgumentException if bits do not correspond to a known mode\n         */\n        static forBits(bits /*int*/) {\n            const mode = Mode$1.FOR_BITS.get(bits);\n            if (undefined === mode) {\n                throw new IllegalArgumentException();\n            }\n            return mode;\n        }\n        /**\n         * @param version version in question\n         * @return number of bits used, in this QR Code symbol {@link Version}, to encode the\n         *         count of characters that will follow encoded in this Mode\n         */\n        getCharacterCountBits(version) {\n            const versionNumber = version.getVersionNumber();\n            let offset;\n            if (versionNumber <= 9) {\n                offset = 0;\n            }\n            else if (versionNumber <= 26) {\n                offset = 1;\n            }\n            else {\n                offset = 2;\n            }\n            return this.characterCountBitsForVersions[offset];\n        }\n        getValue() {\n            return this.value;\n        }\n        getBits() {\n            return this.bits;\n        }\n        equals(o) {\n            if (!(o instanceof Mode$1)) {\n                return false;\n            }\n            const other = o;\n            return this.value === other.value;\n        }\n        toString() {\n            return this.stringValue;\n        }\n    }\n    Mode$1.FOR_BITS = new Map();\n    Mode$1.FOR_VALUE = new Map();\n    Mode$1.TERMINATOR = new Mode$1(ModeValues.TERMINATOR, 'TERMINATOR', Int32Array.from([0, 0, 0]), 0x00); // Not really a mode...\n    Mode$1.NUMERIC = new Mode$1(ModeValues.NUMERIC, 'NUMERIC', Int32Array.from([10, 12, 14]), 0x01);\n    Mode$1.ALPHANUMERIC = new Mode$1(ModeValues.ALPHANUMERIC, 'ALPHANUMERIC', Int32Array.from([9, 11, 13]), 0x02);\n    Mode$1.STRUCTURED_APPEND = new Mode$1(ModeValues.STRUCTURED_APPEND, 'STRUCTURED_APPEND', Int32Array.from([0, 0, 0]), 0x03); // Not supported\n    Mode$1.BYTE = new Mode$1(ModeValues.BYTE, 'BYTE', Int32Array.from([8, 16, 16]), 0x04);\n    Mode$1.ECI = new Mode$1(ModeValues.ECI, 'ECI', Int32Array.from([0, 0, 0]), 0x07); // character counts don't apply\n    Mode$1.KANJI = new Mode$1(ModeValues.KANJI, 'KANJI', Int32Array.from([8, 10, 12]), 0x08);\n    Mode$1.FNC1_FIRST_POSITION = new Mode$1(ModeValues.FNC1_FIRST_POSITION, 'FNC1_FIRST_POSITION', Int32Array.from([0, 0, 0]), 0x05);\n    Mode$1.FNC1_SECOND_POSITION = new Mode$1(ModeValues.FNC1_SECOND_POSITION, 'FNC1_SECOND_POSITION', Int32Array.from([0, 0, 0]), 0x09);\n    /** See GBT 18284-2000; \"Hanzi\" is a transliteration of this mode name. */\n    Mode$1.HANZI = new Mode$1(ModeValues.HANZI, 'HANZI', Int32Array.from([8, 10, 12]), 0x0D);\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.io.UnsupportedEncodingException;*/\n    /*import java.util.ArrayList;*/\n    /*import java.util.Collection;*/\n    /*import java.util.List;*/\n    /*import java.util.Map;*/\n    /**\n     * <p>QR Codes can encode text as bits in one of several modes, and can use multiple modes\n     * in one QR Code. This class decodes the bits back into text.</p>\n     *\n     * <p>See ISO 18004:2006, 6.4.3 - 6.4.7</p>\n     *\n     * @author Sean Owen\n     */\n    class DecodedBitStreamParser$1 {\n        static decode(bytes, version, ecLevel, hints) {\n            const bits = new BitSource(bytes);\n            let result = new StringBuilder();\n            const byteSegments = new Array(); // 1\n            // TYPESCRIPTPORT: I do not use constructor with size 1 as in original Java means capacity and the array length is checked below\n            let symbolSequence = -1;\n            let parityData = -1;\n            try {\n                let currentCharacterSetECI = null;\n                let fc1InEffect = false;\n                let mode;\n                do {\n                    // While still another segment to read...\n                    if (bits.available() < 4) {\n                        // OK, assume we're done. Really, a TERMINATOR mode should have been recorded here\n                        mode = Mode$1.TERMINATOR;\n                    }\n                    else {\n                        const modeBits = bits.readBits(4);\n                        mode = Mode$1.forBits(modeBits); // mode is encoded by 4 bits\n                    }\n                    switch (mode) {\n                        case Mode$1.TERMINATOR:\n                            break;\n                        case Mode$1.FNC1_FIRST_POSITION:\n                        case Mode$1.FNC1_SECOND_POSITION:\n                            // We do little with FNC1 except alter the parsed result a bit according to the spec\n                            fc1InEffect = true;\n                            break;\n                        case Mode$1.STRUCTURED_APPEND:\n                            if (bits.available() < 16) {\n                                throw new FormatException();\n                            }\n                            // sequence number and parity is added later to the result metadata\n                            // Read next 8 bits (symbol sequence #) and 8 bits (data: parity), then continue\n                            symbolSequence = bits.readBits(8);\n                            parityData = bits.readBits(8);\n                            break;\n                        case Mode$1.ECI:\n                            // Count doesn't apply to ECI\n                            const value = DecodedBitStreamParser$1.parseECIValue(bits);\n                            currentCharacterSetECI = CharacterSetECI.getCharacterSetECIByValue(value);\n                            if (currentCharacterSetECI === null) {\n                                throw new FormatException();\n                            }\n                            break;\n                        case Mode$1.HANZI:\n                            // First handle Hanzi mode which does not start with character count\n                            // Chinese mode contains a sub set indicator right after mode indicator\n                            const subset = bits.readBits(4);\n                            const countHanzi = bits.readBits(mode.getCharacterCountBits(version));\n                            if (subset === DecodedBitStreamParser$1.GB2312_SUBSET) {\n                                DecodedBitStreamParser$1.decodeHanziSegment(bits, result, countHanzi);\n                            }\n                            break;\n                        default:\n                            // \"Normal\" QR code modes:\n                            // How many characters will follow, encoded in this mode?\n                            const count = bits.readBits(mode.getCharacterCountBits(version));\n                            switch (mode) {\n                                case Mode$1.NUMERIC:\n                                    DecodedBitStreamParser$1.decodeNumericSegment(bits, result, count);\n                                    break;\n                                case Mode$1.ALPHANUMERIC:\n                                    DecodedBitStreamParser$1.decodeAlphanumericSegment(bits, result, count, fc1InEffect);\n                                    break;\n                                case Mode$1.BYTE:\n                                    DecodedBitStreamParser$1.decodeByteSegment(bits, result, count, currentCharacterSetECI, byteSegments, hints);\n                                    break;\n                                case Mode$1.KANJI:\n                                    DecodedBitStreamParser$1.decodeKanjiSegment(bits, result, count);\n                                    break;\n                                default:\n                                    throw new FormatException();\n                            }\n                            break;\n                    }\n                } while (mode !== Mode$1.TERMINATOR);\n            }\n            catch (iae /*: IllegalArgumentException*/) {\n                // from readBits() calls\n                throw new FormatException();\n            }\n            return new DecoderResult(bytes, result.toString(), byteSegments.length === 0 ? null : byteSegments, ecLevel === null ? null : ecLevel.toString(), symbolSequence, parityData);\n        }\n        /**\n         * See specification GBT 18284-2000\n         */\n        static decodeHanziSegment(bits, result, count /*int*/) {\n            // Don't crash trying to read more bits than we have available.\n            if (count * 13 > bits.available()) {\n                throw new FormatException();\n            }\n            // Each character will require 2 bytes. Read the characters as 2-byte pairs\n            // and decode as GB2312 afterwards\n            const buffer = new Uint8Array(2 * count);\n            let offset = 0;\n            while (count > 0) {\n                // Each 13 bits encodes a 2-byte character\n                const twoBytes = bits.readBits(13);\n                let assembledTwoBytes = (((twoBytes / 0x060) << 8) & 0xFFFFFFFF) | (twoBytes % 0x060);\n                if (assembledTwoBytes < 0x003BF) {\n                    // In the 0xA1A1 to 0xAAFE range\n                    assembledTwoBytes += 0x0A1A1;\n                }\n                else {\n                    // In the 0xB0A1 to 0xFAFE range\n                    assembledTwoBytes += 0x0A6A1;\n                }\n                buffer[offset] = /*(byte) */ ((assembledTwoBytes >> 8) & 0xFF);\n                buffer[offset + 1] = /*(byte) */ (assembledTwoBytes & 0xFF);\n                offset += 2;\n                count--;\n            }\n            try {\n                result.append(StringEncoding.decode(buffer, StringUtils.GB2312));\n                // TYPESCRIPTPORT: TODO: implement GB2312 decode. StringView from MDN could be a starting point\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                throw new FormatException(ignored);\n            }\n        }\n        static decodeKanjiSegment(bits, result, count /*int*/) {\n            // Don't crash trying to read more bits than we have available.\n            if (count * 13 > bits.available()) {\n                throw new FormatException();\n            }\n            // Each character will require 2 bytes. Read the characters as 2-byte pairs\n            // and decode as Shift_JIS afterwards\n            const buffer = new Uint8Array(2 * count);\n            let offset = 0;\n            while (count > 0) {\n                // Each 13 bits encodes a 2-byte character\n                const twoBytes = bits.readBits(13);\n                let assembledTwoBytes = (((twoBytes / 0x0C0) << 8) & 0xFFFFFFFF) | (twoBytes % 0x0C0);\n                if (assembledTwoBytes < 0x01F00) {\n                    // In the 0x8140 to 0x9FFC range\n                    assembledTwoBytes += 0x08140;\n                }\n                else {\n                    // In the 0xE040 to 0xEBBF range\n                    assembledTwoBytes += 0x0C140;\n                }\n                buffer[offset] = /*(byte) */ (assembledTwoBytes >> 8);\n                buffer[offset + 1] = /*(byte) */ assembledTwoBytes;\n                offset += 2;\n                count--;\n            }\n            // Shift_JIS may not be supported in some environments:\n            try {\n                result.append(StringEncoding.decode(buffer, StringUtils.SHIFT_JIS));\n                // TYPESCRIPTPORT: TODO: implement SHIFT_JIS decode. StringView from MDN could be a starting point\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                throw new FormatException(ignored);\n            }\n        }\n        static decodeByteSegment(bits, result, count /*int*/, currentCharacterSetECI, byteSegments, hints) {\n            // Don't crash trying to read more bits than we have available.\n            if (8 * count > bits.available()) {\n                throw new FormatException();\n            }\n            const readBytes = new Uint8Array(count);\n            for (let i = 0; i < count; i++) {\n                readBytes[i] = /*(byte) */ bits.readBits(8);\n            }\n            let encoding;\n            if (currentCharacterSetECI === null) {\n                // The spec isn't clear on this mode; see\n                // section 6.4.5: t does not say which encoding to assuming\n                // upon decoding. I have seen ISO-8859-1 used as well as\n                // Shift_JIS -- without anything like an ECI designator to\n                // give a hint.\n                encoding = StringUtils.guessEncoding(readBytes, hints);\n            }\n            else {\n                encoding = currentCharacterSetECI.getName();\n            }\n            try {\n                result.append(StringEncoding.decode(readBytes, encoding));\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                throw new FormatException(ignored);\n            }\n            byteSegments.push(readBytes);\n        }\n        static toAlphaNumericChar(value /*int*/) {\n            if (value >= DecodedBitStreamParser$1.ALPHANUMERIC_CHARS.length) {\n                throw new FormatException();\n            }\n            return DecodedBitStreamParser$1.ALPHANUMERIC_CHARS[value];\n        }\n        static decodeAlphanumericSegment(bits, result, count /*int*/, fc1InEffect) {\n            // Read two characters at a time\n            const start = result.length();\n            while (count > 1) {\n                if (bits.available() < 11) {\n                    throw new FormatException();\n                }\n                const nextTwoCharsBits = bits.readBits(11);\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(nextTwoCharsBits / 45)));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(nextTwoCharsBits % 45));\n                count -= 2;\n            }\n            if (count === 1) {\n                // special case: one character left\n                if (bits.available() < 6) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(bits.readBits(6)));\n            }\n            // See section 6.4.8.1, 6.4.8.2\n            if (fc1InEffect) {\n                // We need to massage the result a bit if in an FNC1 mode:\n                for (let i = start; i < result.length(); i++) {\n                    if (result.charAt(i) === '%') {\n                        if (i < result.length() - 1 && result.charAt(i + 1) === '%') {\n                            // %% is rendered as %\n                            result.deleteCharAt(i + 1);\n                        }\n                        else {\n                            // In alpha mode, % should be converted to FNC1 separator 0x1D\n                            result.setCharAt(i, String.fromCharCode(0x1D));\n                        }\n                    }\n                }\n            }\n        }\n        static decodeNumericSegment(bits, result, count /*int*/) {\n            // Read three digits at a time\n            while (count >= 3) {\n                // Each 10 bits encodes three digits\n                if (bits.available() < 10) {\n                    throw new FormatException();\n                }\n                const threeDigitsBits = bits.readBits(10);\n                if (threeDigitsBits >= 1000) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(threeDigitsBits / 100)));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(threeDigitsBits / 10) % 10));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(threeDigitsBits % 10));\n                count -= 3;\n            }\n            if (count === 2) {\n                // Two digits left over to read, encoded in 7 bits\n                if (bits.available() < 7) {\n                    throw new FormatException();\n                }\n                const twoDigitsBits = bits.readBits(7);\n                if (twoDigitsBits >= 100) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(twoDigitsBits / 10)));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(twoDigitsBits % 10));\n            }\n            else if (count === 1) {\n                // One digit left over to read\n                if (bits.available() < 4) {\n                    throw new FormatException();\n                }\n                const digitBits = bits.readBits(4);\n                if (digitBits >= 10) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(digitBits));\n            }\n        }\n        static parseECIValue(bits) {\n            const firstByte = bits.readBits(8);\n            if ((firstByte & 0x80) === 0) {\n                // just one byte\n                return firstByte & 0x7F;\n            }\n            if ((firstByte & 0xC0) === 0x80) {\n                // two bytes\n                const secondByte = bits.readBits(8);\n                return (((firstByte & 0x3F) << 8) & 0xFFFFFFFF) | secondByte;\n            }\n            if ((firstByte & 0xE0) === 0xC0) {\n                // three bytes\n                const secondThirdBytes = bits.readBits(16);\n                return (((firstByte & 0x1F) << 16) & 0xFFFFFFFF) | secondThirdBytes;\n            }\n            throw new FormatException();\n        }\n    }\n    /**\n     * See ISO 18004:2006, 6.4.4 Table 5\n     */\n    DecodedBitStreamParser$1.ALPHANUMERIC_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n    DecodedBitStreamParser$1.GB2312_SUBSET = 1;\n    // function Uint8ArrayToString(a: Uint8Array): string {\n    //     const CHUNK_SZ = 0x8000;\n    //     const c = new StringBuilder();\n    //     for (let i = 0, length = a.length; i < length; i += CHUNK_SZ) {\n    //         c.append(String.fromCharCode.apply(null, a.subarray(i, i + CHUNK_SZ)));\n    //     }\n    //     return c.toString();\n    // }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * Meta-data container for QR Code decoding. Instances of this class may be used to convey information back to the\n     * decoding caller. Callers are expected to process this.\n     *\n     * @see com.google.zxing.common.DecoderResult#getOther()\n     */\n    class QRCodeDecoderMetaData {\n        constructor(mirrored) {\n            this.mirrored = mirrored;\n        }\n        /**\n         * @return true if the QR Code was mirrored.\n         */\n        isMirrored() {\n            return this.mirrored;\n        }\n        /**\n         * Apply the result points' order correction due to mirroring.\n         *\n         * @param points Array of points to apply mirror correction to.\n         */\n        applyMirroredCorrection(points) {\n            if (!this.mirrored || points === null || points.length < 3) {\n                return;\n            }\n            const bottomLeft = points[0];\n            points[0] = points[2];\n            points[2] = bottomLeft;\n            // No need to 'fix' top-left and alignment pattern.\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.Map;*/\n    /**\n     * <p>The main class which implements QR Code decoding -- as opposed to locating and extracting\n     * the QR Code from an image.</p>\n     *\n     * @author Sean Owen\n     */\n    class Decoder$2 {\n        constructor() {\n            this.rsDecoder = new ReedSolomonDecoder(GenericGF.QR_CODE_FIELD_256);\n        }\n        // public decode(image: boolean[][]): DecoderResult /*throws ChecksumException, FormatException*/ {\n        //   return decode(image, null)\n        // }\n        /**\n         * <p>Convenience method that can decode a QR Code represented as a 2D array of booleans.\n         * \"true\" is taken to mean a black module.</p>\n         *\n         * @param image booleans representing white/black QR Code modules\n         * @param hints decoding hints that should be used to influence decoding\n         * @return text and bytes encoded within the QR Code\n         * @throws FormatException if the QR Code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        decodeBooleanArray(image, hints) {\n            return this.decodeBitMatrix(BitMatrix.parseFromBooleanArray(image), hints);\n        }\n        // public decodeBitMatrix(bits: BitMatrix): DecoderResult /*throws ChecksumException, FormatException*/ {\n        //   return decode(bits, null)\n        // }\n        /**\n         * <p>Decodes a QR Code represented as a {@link BitMatrix}. A 1 or \"true\" is taken to mean a black module.</p>\n         *\n         * @param bits booleans representing white/black QR Code modules\n         * @param hints decoding hints that should be used to influence decoding\n         * @return text and bytes encoded within the QR Code\n         * @throws FormatException if the QR Code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        decodeBitMatrix(bits, hints) {\n            // Construct a parser and read version, error-correction level\n            const parser = new BitMatrixParser$1(bits);\n            let ex = null;\n            try {\n                return this.decodeBitMatrixParser(parser, hints);\n            }\n            catch (e /*: FormatException, ChecksumException*/) {\n                ex = e;\n            }\n            try {\n                // Revert the bit matrix\n                parser.remask();\n                // Will be attempting a mirrored reading of the version and format info.\n                parser.setMirror(true);\n                // Preemptively read the version.\n                parser.readVersion();\n                // Preemptively read the format information.\n                parser.readFormatInformation();\n                /*\n                 * Since we're here, this means we have successfully detected some kind\n                 * of version and format information when mirrored. This is a good sign,\n                 * that the QR code may be mirrored, and we should try once more with a\n                 * mirrored content.\n                 */\n                // Prepare for a mirrored reading.\n                parser.mirror();\n                const result = this.decodeBitMatrixParser(parser, hints);\n                // Success! Notify the caller that the code was mirrored.\n                result.setOther(new QRCodeDecoderMetaData(true));\n                return result;\n            }\n            catch (e /*FormatException | ChecksumException*/) {\n                // Throw the exception from the original reading\n                if (ex !== null) {\n                    throw ex;\n                }\n                throw e;\n            }\n        }\n        decodeBitMatrixParser(parser, hints) {\n            const version = parser.readVersion();\n            const ecLevel = parser.readFormatInformation().getErrorCorrectionLevel();\n            // Read codewords\n            const codewords = parser.readCodewords();\n            // Separate into data blocks\n            const dataBlocks = DataBlock$1.getDataBlocks(codewords, version, ecLevel);\n            // Count total number of data bytes\n            let totalBytes = 0;\n            for (const dataBlock of dataBlocks) {\n                totalBytes += dataBlock.getNumDataCodewords();\n            }\n            const resultBytes = new Uint8Array(totalBytes);\n            let resultOffset = 0;\n            // Error-correct and copy data blocks together into a stream of bytes\n            for (const dataBlock of dataBlocks) {\n                const codewordBytes = dataBlock.getCodewords();\n                const numDataCodewords = dataBlock.getNumDataCodewords();\n                this.correctErrors(codewordBytes, numDataCodewords);\n                for (let i = 0; i < numDataCodewords; i++) {\n                    resultBytes[resultOffset++] = codewordBytes[i];\n                }\n            }\n            // Decode the contents of that stream of bytes\n            return DecodedBitStreamParser$1.decode(resultBytes, version, ecLevel, hints);\n        }\n        /**\n         * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n         * correct the errors in-place using Reed-Solomon error correction.</p>\n         *\n         * @param codewordBytes data and error correction codewords\n         * @param numDataCodewords number of codewords that are data bytes\n         * @throws ChecksumException if error correction fails\n         */\n        correctErrors(codewordBytes, numDataCodewords /*int*/) {\n            // const numCodewords = codewordBytes.length;\n            // First read into an array of ints\n            const codewordsInts = new Int32Array(codewordBytes);\n            // TYPESCRIPTPORT: not realy necessary to transform to ints? could redesign everything to work with unsigned bytes?\n            // const codewordsInts = new Int32Array(numCodewords)\n            // for (let i = 0; i < numCodewords; i++) {\n            //   codewordsInts[i] = codewordBytes[i] & 0xFF\n            // }\n            try {\n                this.rsDecoder.decode(codewordsInts, codewordBytes.length - numDataCodewords);\n            }\n            catch (ignored /*: ReedSolomonException*/) {\n                throw new ChecksumException();\n            }\n            // Copy back into array of bytes -- only need to worry about the bytes that were data\n            // We don't care about errors in the error-correction codewords\n            for (let i = 0; i < numDataCodewords; i++) {\n                codewordBytes[i] = /*(byte) */ codewordsInts[i];\n            }\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates an alignment pattern, which are the smaller square patterns found in\n     * all but the simplest QR Codes.</p>\n     *\n     * @author Sean Owen\n     */\n    class AlignmentPattern extends ResultPoint {\n        constructor(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/) {\n            super(posX, posY);\n            this.estimatedModuleSize = estimatedModuleSize;\n        }\n        /**\n         * <p>Determines if this alignment pattern \"about equals\" an alignment pattern at the stated\n         * position and size -- meaning, it is at nearly the same center with nearly the same size.</p>\n         */\n        aboutEquals(moduleSize /*float*/, i /*float*/, j /*float*/) {\n            if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n                const moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize);\n                return moduleSizeDiff <= 1.0 || moduleSizeDiff <= this.estimatedModuleSize;\n            }\n            return false;\n        }\n        /**\n         * Combines this object's current estimate of a finder pattern position and module size\n         * with a new estimate. It returns a new {@code FinderPattern} containing an average of the two.\n         */\n        combineEstimate(i /*float*/, j /*float*/, newModuleSize /*float*/) {\n            const combinedX = (this.getX() + j) / 2.0;\n            const combinedY = (this.getY() + i) / 2.0;\n            const combinedModuleSize = (this.estimatedModuleSize + newModuleSize) / 2.0;\n            return new AlignmentPattern(combinedX, combinedY, combinedModuleSize);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.ArrayList;*/\n    /*import java.util.List;*/\n    /**\n     * <p>This class attempts to find alignment patterns in a QR Code. Alignment patterns look like finder\n     * patterns but are smaller and appear at regular intervals throughout the image.</p>\n     *\n     * <p>At the moment this only looks for the bottom-right alignment pattern.</p>\n     *\n     * <p>This is mostly a simplified copy of {@link FinderPatternFinder}. It is copied,\n     * pasted and stripped down here for maximum performance but does unfortunately duplicate\n     * some code.</p>\n     *\n     * <p>This class is thread-safe but not reentrant. Each thread must allocate its own object.</p>\n     *\n     * @author Sean Owen\n     */\n    class AlignmentPatternFinder {\n        /**\n         * <p>Creates a finder that will look in a portion of the whole image.</p>\n         *\n         * @param image image to search\n         * @param startX left column from which to start searching\n         * @param startY top row from which to start searching\n         * @param width width of region to search\n         * @param height height of region to search\n         * @param moduleSize estimated module size so far\n         */\n        constructor(image, startX /*int*/, startY /*int*/, width /*int*/, height /*int*/, moduleSize /*float*/, resultPointCallback) {\n            this.image = image;\n            this.startX = startX;\n            this.startY = startY;\n            this.width = width;\n            this.height = height;\n            this.moduleSize = moduleSize;\n            this.resultPointCallback = resultPointCallback;\n            this.possibleCenters = []; // new Array<any>(5))\n            // TYPESCRIPTPORT: array initialization without size as the length is checked below\n            this.crossCheckStateCount = new Int32Array(3);\n        }\n        /**\n         * <p>This method attempts to find the bottom-right alignment pattern in the image. It is a bit messy since\n         * it's pretty performance-critical and so is written to be fast foremost.</p>\n         *\n         * @return {@link AlignmentPattern} if found\n         * @throws NotFoundException if not found\n         */\n        find() {\n            const startX = this.startX;\n            const height = this.height;\n            const width = this.width;\n            const maxJ = startX + width;\n            const middleI = this.startY + (height / 2);\n            // We are looking for black/white/black modules in 1:1:1 ratio\n            // this tracks the number of black/white/black modules seen so far\n            const stateCount = new Int32Array(3);\n            const image = this.image;\n            for (let iGen = 0; iGen < height; iGen++) {\n                // Search from middle outwards\n                const i = middleI + ((iGen & 0x01) === 0 ? Math.floor((iGen + 1) / 2) : -Math.floor((iGen + 1) / 2));\n                stateCount[0] = 0;\n                stateCount[1] = 0;\n                stateCount[2] = 0;\n                let j = startX;\n                // Burn off leading white pixels before anything else; if we start in the middle of\n                // a white run, it doesn't make sense to count its length, since we don't know if the\n                // white run continued to the left of the start point\n                while (j < maxJ && !image.get(j, i)) {\n                    j++;\n                }\n                let currentState = 0;\n                while (j < maxJ) {\n                    if (image.get(j, i)) {\n                        // Black pixel\n                        if (currentState === 1) { // Counting black pixels\n                            stateCount[1]++;\n                        }\n                        else { // Counting white pixels\n                            if (currentState === 2) { // A winner?\n                                if (this.foundPatternCross(stateCount)) { // Yes\n                                    const confirmed = this.handlePossibleCenter(stateCount, i, j);\n                                    if (confirmed !== null) {\n                                        return confirmed;\n                                    }\n                                }\n                                stateCount[0] = stateCount[2];\n                                stateCount[1] = 1;\n                                stateCount[2] = 0;\n                                currentState = 1;\n                            }\n                            else {\n                                stateCount[++currentState]++;\n                            }\n                        }\n                    }\n                    else { // White pixel\n                        if (currentState === 1) { // Counting black pixels\n                            currentState++;\n                        }\n                        stateCount[currentState]++;\n                    }\n                    j++;\n                }\n                if (this.foundPatternCross(stateCount)) {\n                    const confirmed = this.handlePossibleCenter(stateCount, i, maxJ);\n                    if (confirmed !== null) {\n                        return confirmed;\n                    }\n                }\n            }\n            // Hmm, nothing we saw was observed and confirmed twice. If we had\n            // any guess at all, return it.\n            if (this.possibleCenters.length !== 0) {\n                return this.possibleCenters[0];\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * Given a count of black/white/black pixels just seen and an end position,\n         * figures the location of the center of this black/white/black run.\n         */\n        static centerFromEnd(stateCount, end /*int*/) {\n            return (end - stateCount[2]) - stateCount[1] / 2.0;\n        }\n        /**\n         * @param stateCount count of black/white/black pixels just read\n         * @return true iff the proportions of the counts is close enough to the 1/1/1 ratios\n         *         used by alignment patterns to be considered a match\n         */\n        foundPatternCross(stateCount) {\n            const moduleSize = this.moduleSize;\n            const maxVariance = moduleSize / 2.0;\n            for (let i = 0; i < 3; i++) {\n                if (Math.abs(moduleSize - stateCount[i]) >= maxVariance) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        /**\n         * <p>After a horizontal scan finds a potential alignment pattern, this method\n         * \"cross-checks\" by scanning down vertically through the center of the possible\n         * alignment pattern to see if the same proportion is detected.</p>\n         *\n         * @param startI row where an alignment pattern was detected\n         * @param centerJ center of the section that appears to cross an alignment pattern\n         * @param maxCount maximum reasonable number of modules that should be\n         * observed in any reading state, based on the results of the horizontal scan\n         * @return vertical center of alignment pattern, or {@link Float#NaN} if not found\n         */\n        crossCheckVertical(startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const image = this.image;\n            const maxI = image.getHeight();\n            const stateCount = this.crossCheckStateCount;\n            stateCount[0] = 0;\n            stateCount[1] = 0;\n            stateCount[2] = 0;\n            // Start counting up from center\n            let i = startI;\n            while (i >= 0 && image.get(centerJ, i) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i--;\n            }\n            // If already too many modules in this state or ran off the edge:\n            if (i < 0 || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (i >= 0 && !image.get(centerJ, i) && stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                i--;\n            }\n            if (stateCount[0] > maxCount) {\n                return NaN;\n            }\n            // Now also count down from center\n            i = startI + 1;\n            while (i < maxI && image.get(centerJ, i) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i++;\n            }\n            if (i === maxI || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (i < maxI && !image.get(centerJ, i) && stateCount[2] <= maxCount) {\n                stateCount[2]++;\n                i++;\n            }\n            if (stateCount[2] > maxCount) {\n                return NaN;\n            }\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n            if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n                return NaN;\n            }\n            return this.foundPatternCross(stateCount) ? AlignmentPatternFinder.centerFromEnd(stateCount, i) : NaN;\n        }\n        /**\n         * <p>This is called when a horizontal scan finds a possible alignment pattern. It will\n         * cross check with a vertical scan, and if successful, will see if this pattern had been\n         * found on a previous horizontal scan. If so, we consider it confirmed and conclude we have\n         * found the alignment pattern.</p>\n         *\n         * @param stateCount reading state module counts from horizontal scan\n         * @param i row where alignment pattern may be found\n         * @param j end of possible alignment pattern in row\n         * @return {@link AlignmentPattern} if we have found the same pattern twice, or null if not\n         */\n        handlePossibleCenter(stateCount, i /*int*/, j /*int*/) {\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n            const centerJ = AlignmentPatternFinder.centerFromEnd(stateCount, j);\n            const centerI = this.crossCheckVertical(i, /*(int) */ centerJ, 2 * stateCount[1], stateCountTotal);\n            if (!isNaN(centerI)) {\n                const estimatedModuleSize = (stateCount[0] + stateCount[1] + stateCount[2]) / 3.0;\n                for (const center of this.possibleCenters) {\n                    // Look for about the same center and module size:\n                    if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n                        return center.combineEstimate(centerI, centerJ, estimatedModuleSize);\n                    }\n                }\n                // Hadn't found this before; save it\n                const point = new AlignmentPattern(centerJ, centerI, estimatedModuleSize);\n                this.possibleCenters.push(point);\n                if (this.resultPointCallback !== null && this.resultPointCallback !== undefined) {\n                    this.resultPointCallback.foundPossibleResultPoint(point);\n                }\n            }\n            return null;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a finder pattern, which are the three square patterns found in\n     * the corners of QR Codes. It also encapsulates a count of similar finder patterns,\n     * as a convenience to the finder's bookkeeping.</p>\n     *\n     * @author Sean Owen\n     */\n    class FinderPattern$1 extends ResultPoint {\n        // FinderPattern(posX: number/*float*/, posY: number/*float*/, estimatedModuleSize: number/*float*/) {\n        //   this(posX, posY, estimatedModuleSize, 1)\n        // }\n        constructor(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/, count /*int*/) {\n            super(posX, posY);\n            this.estimatedModuleSize = estimatedModuleSize;\n            this.count = count;\n            if (undefined === count) {\n                this.count = 1;\n            }\n        }\n        getEstimatedModuleSize() {\n            return this.estimatedModuleSize;\n        }\n        getCount() {\n            return this.count;\n        }\n        /*\n        void incrementCount() {\n          this.count++\n        }\n         */\n        /**\n         * <p>Determines if this finder pattern \"about equals\" a finder pattern at the stated\n         * position and size -- meaning, it is at nearly the same center with nearly the same size.</p>\n         */\n        aboutEquals(moduleSize /*float*/, i /*float*/, j /*float*/) {\n            if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n                const moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize);\n                return moduleSizeDiff <= 1.0 || moduleSizeDiff <= this.estimatedModuleSize;\n            }\n            return false;\n        }\n        /**\n         * Combines this object's current estimate of a finder pattern position and module size\n         * with a new estimate. It returns a new {@code FinderPattern} containing a weighted average\n         * based on count.\n         */\n        combineEstimate(i /*float*/, j /*float*/, newModuleSize /*float*/) {\n            const combinedCount = this.count + 1;\n            const combinedX = (this.count * this.getX() + j) / combinedCount;\n            const combinedY = (this.count * this.getY() + i) / combinedCount;\n            const combinedModuleSize = (this.count * this.estimatedModuleSize + newModuleSize) / combinedCount;\n            return new FinderPattern$1(combinedX, combinedY, combinedModuleSize, combinedCount);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates information about finder patterns in an image, including the location of\n     * the three finder patterns, and their estimated module size.</p>\n     *\n     * @author Sean Owen\n     */\n    class FinderPatternInfo {\n        constructor(patternCenters) {\n            this.bottomLeft = patternCenters[0];\n            this.topLeft = patternCenters[1];\n            this.topRight = patternCenters[2];\n        }\n        getBottomLeft() {\n            return this.bottomLeft;\n        }\n        getTopLeft() {\n            return this.topLeft;\n        }\n        getTopRight() {\n            return this.topRight;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.io.Serializable;*/\n    /*import java.util.ArrayList;*/\n    /*import java.util.Collections;*/\n    /*import java.util.Comparator;*/\n    /*import java.util.List;*/\n    /*import java.util.Map;*/\n    /**\n     * <p>This class attempts to find finder patterns in a QR Code. Finder patterns are the square\n     * markers at three corners of a QR Code.</p>\n     *\n     * <p>This class is thread-safe but not reentrant. Each thread must allocate its own object.\n     *\n     * @author Sean Owen\n     */\n    class FinderPatternFinder {\n        /**\n         * <p>Creates a finder that will search the image for three finder patterns.</p>\n         *\n         * @param image image to search\n         */\n        // public constructor(image: BitMatrix) {\n        //   this(image, null)\n        // }\n        constructor(image, resultPointCallback) {\n            this.image = image;\n            this.resultPointCallback = resultPointCallback;\n            this.possibleCenters = [];\n            this.crossCheckStateCount = new Int32Array(5);\n            this.resultPointCallback = resultPointCallback;\n        }\n        getImage() {\n            return this.image;\n        }\n        getPossibleCenters() {\n            return this.possibleCenters;\n        }\n        find(hints) {\n            const tryHarder = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType$1.TRY_HARDER);\n            const pureBarcode = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType$1.PURE_BARCODE);\n            const image = this.image;\n            const maxI = image.getHeight();\n            const maxJ = image.getWidth();\n            // We are looking for black/white/black/white/black modules in\n            // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far\n            // Let's assume that the maximum version QR Code we support takes up 1/4 the height of the\n            // image, and then account for the center being 3 modules in size. This gives the smallest\n            // number of pixels the center could be, so skip this often. When trying harder, look for all\n            // QR versions regardless of how dense they are.\n            let iSkip = Math.floor((3 * maxI) / (4 * FinderPatternFinder.MAX_MODULES));\n            if (iSkip < FinderPatternFinder.MIN_SKIP || tryHarder) {\n                iSkip = FinderPatternFinder.MIN_SKIP;\n            }\n            let done = false;\n            const stateCount = new Int32Array(5);\n            for (let i = iSkip - 1; i < maxI && !done; i += iSkip) {\n                // Get a row of black/white values\n                stateCount[0] = 0;\n                stateCount[1] = 0;\n                stateCount[2] = 0;\n                stateCount[3] = 0;\n                stateCount[4] = 0;\n                let currentState = 0;\n                for (let j = 0; j < maxJ; j++) {\n                    if (image.get(j, i)) {\n                        // Black pixel\n                        if ((currentState & 1) === 1) { // Counting white pixels\n                            currentState++;\n                        }\n                        stateCount[currentState]++;\n                    }\n                    else { // White pixel\n                        if ((currentState & 1) === 0) { // Counting black pixels\n                            if (currentState === 4) { // A winner?\n                                if (FinderPatternFinder.foundPatternCross(stateCount)) { // Yes\n                                    const confirmed = this.handlePossibleCenter(stateCount, i, j, pureBarcode);\n                                    if (confirmed === true) {\n                                        // Start examining every other line. Checking each line turned out to be too\n                                        // expensive and didn't improve performance.\n                                        iSkip = 2;\n                                        if (this.hasSkipped === true) {\n                                            done = this.haveMultiplyConfirmedCenters();\n                                        }\n                                        else {\n                                            const rowSkip = this.findRowSkip();\n                                            if (rowSkip > stateCount[2]) {\n                                                // Skip rows between row of lower confirmed center\n                                                // and top of presumed third confirmed center\n                                                // but back up a bit to get a full chance of detecting\n                                                // it, entire width of center of finder pattern\n                                                // Skip by rowSkip, but back off by stateCount[2] (size of last center\n                                                // of pattern we saw) to be conservative, and also back off by iSkip which\n                                                // is about to be re-added\n                                                i += rowSkip - stateCount[2] - iSkip;\n                                                j = maxJ - 1;\n                                            }\n                                        }\n                                    }\n                                    else {\n                                        stateCount[0] = stateCount[2];\n                                        stateCount[1] = stateCount[3];\n                                        stateCount[2] = stateCount[4];\n                                        stateCount[3] = 1;\n                                        stateCount[4] = 0;\n                                        currentState = 3;\n                                        continue;\n                                    }\n                                    // Clear state to start looking again\n                                    currentState = 0;\n                                    stateCount[0] = 0;\n                                    stateCount[1] = 0;\n                                    stateCount[2] = 0;\n                                    stateCount[3] = 0;\n                                    stateCount[4] = 0;\n                                }\n                                else { // No, shift counts back by two\n                                    stateCount[0] = stateCount[2];\n                                    stateCount[1] = stateCount[3];\n                                    stateCount[2] = stateCount[4];\n                                    stateCount[3] = 1;\n                                    stateCount[4] = 0;\n                                    currentState = 3;\n                                }\n                            }\n                            else {\n                                stateCount[++currentState]++;\n                            }\n                        }\n                        else { // Counting white pixels\n                            stateCount[currentState]++;\n                        }\n                    }\n                }\n                if (FinderPatternFinder.foundPatternCross(stateCount)) {\n                    const confirmed = this.handlePossibleCenter(stateCount, i, maxJ, pureBarcode);\n                    if (confirmed === true) {\n                        iSkip = stateCount[0];\n                        if (this.hasSkipped) {\n                            // Found a third one\n                            done = this.haveMultiplyConfirmedCenters();\n                        }\n                    }\n                }\n            }\n            const patternInfo = this.selectBestPatterns();\n            ResultPoint.orderBestPatterns(patternInfo);\n            return new FinderPatternInfo(patternInfo);\n        }\n        /**\n         * Given a count of black/white/black/white/black pixels just seen and an end position,\n         * figures the location of the center of this run.\n         */\n        static centerFromEnd(stateCount, end /*int*/) {\n            return (end - stateCount[4] - stateCount[3]) - stateCount[2] / 2.0;\n        }\n        /**\n         * @param stateCount count of black/white/black/white/black pixels just read\n         * @return true iff the proportions of the counts is close enough to the 1/1/3/1/1 ratios\n         *         used by finder patterns to be considered a match\n         */\n        static foundPatternCross(stateCount) {\n            let totalModuleSize = 0;\n            for (let i = 0; i < 5; i++) {\n                const count = stateCount[i];\n                if (count === 0) {\n                    return false;\n                }\n                totalModuleSize += count;\n            }\n            if (totalModuleSize < 7) {\n                return false;\n            }\n            const moduleSize = totalModuleSize / 7.0;\n            const maxVariance = moduleSize / 2.0;\n            // Allow less than 50% variance from 1-1-3-1-1 proportions\n            return Math.abs(moduleSize - stateCount[0]) < maxVariance &&\n                Math.abs(moduleSize - stateCount[1]) < maxVariance &&\n                Math.abs(3.0 * moduleSize - stateCount[2]) < 3 * maxVariance &&\n                Math.abs(moduleSize - stateCount[3]) < maxVariance &&\n                Math.abs(moduleSize - stateCount[4]) < maxVariance;\n        }\n        getCrossCheckStateCount() {\n            const crossCheckStateCount = this.crossCheckStateCount;\n            crossCheckStateCount[0] = 0;\n            crossCheckStateCount[1] = 0;\n            crossCheckStateCount[2] = 0;\n            crossCheckStateCount[3] = 0;\n            crossCheckStateCount[4] = 0;\n            return crossCheckStateCount;\n        }\n        /**\n         * After a vertical and horizontal scan finds a potential finder pattern, this method\n         * \"cross-cross-cross-checks\" by scanning down diagonally through the center of the possible\n         * finder pattern to see if the same proportion is detected.\n         *\n         * @param startI row where a finder pattern was detected\n         * @param centerJ center of the section that appears to cross a finder pattern\n         * @param maxCount maximum reasonable number of modules that should be\n         *  observed in any reading state, based on the results of the horizontal scan\n         * @param originalStateCountTotal The original state count total.\n         * @return true if proportions are withing expected limits\n         */\n        crossCheckDiagonal(startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const stateCount = this.getCrossCheckStateCount();\n            // Start counting up, left from center finding black center mass\n            let i = 0;\n            const image = this.image;\n            while (startI >= i && centerJ >= i && image.get(centerJ - i, startI - i)) {\n                stateCount[2]++;\n                i++;\n            }\n            if (startI < i || centerJ < i) {\n                return false;\n            }\n            // Continue up, left finding white space\n            while (startI >= i && centerJ >= i && !image.get(centerJ - i, startI - i) &&\n                stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i++;\n            }\n            // If already too many modules in this state or ran off the edge:\n            if (startI < i || centerJ < i || stateCount[1] > maxCount) {\n                return false;\n            }\n            // Continue up, left finding black border\n            while (startI >= i && centerJ >= i && image.get(centerJ - i, startI - i) &&\n                stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                i++;\n            }\n            if (stateCount[0] > maxCount) {\n                return false;\n            }\n            const maxI = image.getHeight();\n            const maxJ = image.getWidth();\n            // Now also count down, right from center\n            i = 1;\n            while (startI + i < maxI && centerJ + i < maxJ && image.get(centerJ + i, startI + i)) {\n                stateCount[2]++;\n                i++;\n            }\n            // Ran off the edge?\n            if (startI + i >= maxI || centerJ + i >= maxJ) {\n                return false;\n            }\n            while (startI + i < maxI && centerJ + i < maxJ && !image.get(centerJ + i, startI + i) &&\n                stateCount[3] < maxCount) {\n                stateCount[3]++;\n                i++;\n            }\n            if (startI + i >= maxI || centerJ + i >= maxJ || stateCount[3] >= maxCount) {\n                return false;\n            }\n            while (startI + i < maxI && centerJ + i < maxJ && image.get(centerJ + i, startI + i) &&\n                stateCount[4] < maxCount) {\n                stateCount[4]++;\n                i++;\n            }\n            if (stateCount[4] >= maxCount) {\n                return false;\n            }\n            // If we found a finder-pattern-like section, but its size is more than 100% different than\n            // the original, assume it's a false positive\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4];\n            return Math.abs(stateCountTotal - originalStateCountTotal) < 2 * originalStateCountTotal &&\n                FinderPatternFinder.foundPatternCross(stateCount);\n        }\n        /**\n         * <p>After a horizontal scan finds a potential finder pattern, this method\n         * \"cross-checks\" by scanning down vertically through the center of the possible\n         * finder pattern to see if the same proportion is detected.</p>\n         *\n         * @param startI row where a finder pattern was detected\n         * @param centerJ center of the section that appears to cross a finder pattern\n         * @param maxCount maximum reasonable number of modules that should be\n         * observed in any reading state, based on the results of the horizontal scan\n         * @return vertical center of finder pattern, or {@link Float#NaN} if not found\n         */\n        crossCheckVertical(startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const image = this.image;\n            const maxI = image.getHeight();\n            const stateCount = this.getCrossCheckStateCount();\n            // Start counting up from center\n            let i = startI;\n            while (i >= 0 && image.get(centerJ, i)) {\n                stateCount[2]++;\n                i--;\n            }\n            if (i < 0) {\n                return NaN;\n            }\n            while (i >= 0 && !image.get(centerJ, i) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i--;\n            }\n            // If already too many modules in this state or ran off the edge:\n            if (i < 0 || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (i >= 0 && image.get(centerJ, i) && stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                i--;\n            }\n            if (stateCount[0] > maxCount) {\n                return NaN;\n            }\n            // Now also count down from center\n            i = startI + 1;\n            while (i < maxI && image.get(centerJ, i)) {\n                stateCount[2]++;\n                i++;\n            }\n            if (i === maxI) {\n                return NaN;\n            }\n            while (i < maxI && !image.get(centerJ, i) && stateCount[3] < maxCount) {\n                stateCount[3]++;\n                i++;\n            }\n            if (i === maxI || stateCount[3] >= maxCount) {\n                return NaN;\n            }\n            while (i < maxI && image.get(centerJ, i) && stateCount[4] < maxCount) {\n                stateCount[4]++;\n                i++;\n            }\n            if (stateCount[4] >= maxCount) {\n                return NaN;\n            }\n            // If we found a finder-pattern-like section, but its size is more than 40% different than\n            // the original, assume it's a false positive\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n                stateCount[4];\n            if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n                return NaN;\n            }\n            return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, i) : NaN;\n        }\n        /**\n         * <p>Like {@link #crossCheckVertical(int, int, int, int)}, and in fact is basically identical,\n         * except it reads horizontally instead of vertically. This is used to cross-cross\n         * check a vertical cross check and locate the real center of the alignment pattern.</p>\n         */\n        crossCheckHorizontal(startJ /*int*/, centerI /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const image = this.image;\n            const maxJ = image.getWidth();\n            const stateCount = this.getCrossCheckStateCount();\n            let j = startJ;\n            while (j >= 0 && image.get(j, centerI)) {\n                stateCount[2]++;\n                j--;\n            }\n            if (j < 0) {\n                return NaN;\n            }\n            while (j >= 0 && !image.get(j, centerI) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                j--;\n            }\n            if (j < 0 || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (j >= 0 && image.get(j, centerI) && stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                j--;\n            }\n            if (stateCount[0] > maxCount) {\n                return NaN;\n            }\n            j = startJ + 1;\n            while (j < maxJ && image.get(j, centerI)) {\n                stateCount[2]++;\n                j++;\n            }\n            if (j === maxJ) {\n                return NaN;\n            }\n            while (j < maxJ && !image.get(j, centerI) && stateCount[3] < maxCount) {\n                stateCount[3]++;\n                j++;\n            }\n            if (j === maxJ || stateCount[3] >= maxCount) {\n                return NaN;\n            }\n            while (j < maxJ && image.get(j, centerI) && stateCount[4] < maxCount) {\n                stateCount[4]++;\n                j++;\n            }\n            if (stateCount[4] >= maxCount) {\n                return NaN;\n            }\n            // If we found a finder-pattern-like section, but its size is significantly different than\n            // the original, assume it's a false positive\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n                stateCount[4];\n            if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= originalStateCountTotal) {\n                return NaN;\n            }\n            return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, j) : NaN;\n        }\n        /**\n         * <p>This is called when a horizontal scan finds a possible alignment pattern. It will\n         * cross check with a vertical scan, and if successful, will, ah, cross-cross-check\n         * with another horizontal scan. This is needed primarily to locate the real horizontal\n         * center of the pattern in cases of extreme skew.\n         * And then we cross-cross-cross check with another diagonal scan.</p>\n         *\n         * <p>If that succeeds the finder pattern location is added to a list that tracks\n         * the number of times each location has been nearly-matched as a finder pattern.\n         * Each additional find is more evidence that the location is in fact a finder\n         * pattern center\n         *\n         * @param stateCount reading state module counts from horizontal scan\n         * @param i row where finder pattern may be found\n         * @param j end of possible finder pattern in row\n         * @param pureBarcode true if in \"pure barcode\" mode\n         * @return true if a finder pattern candidate was found this time\n         */\n        handlePossibleCenter(stateCount, i /*int*/, j /*int*/, pureBarcode) {\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n                stateCount[4];\n            let centerJ = FinderPatternFinder.centerFromEnd(stateCount, j);\n            let centerI = this.crossCheckVertical(i, /*(int) */ Math.floor(centerJ), stateCount[2], stateCountTotal);\n            if (!isNaN(centerI)) {\n                // Re-cross check\n                centerJ = this.crossCheckHorizontal(/*(int) */ Math.floor(centerJ), /*(int) */ Math.floor(centerI), stateCount[2], stateCountTotal);\n                if (!isNaN(centerJ) &&\n                    (!pureBarcode || this.crossCheckDiagonal(/*(int) */ Math.floor(centerI), /*(int) */ Math.floor(centerJ), stateCount[2], stateCountTotal))) {\n                    const estimatedModuleSize = stateCountTotal / 7.0;\n                    let found = false;\n                    const possibleCenters = this.possibleCenters;\n                    for (let index = 0, length = possibleCenters.length; index < length; index++) {\n                        const center = possibleCenters[index];\n                        // Look for about the same center and module size:\n                        if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n                            possibleCenters[index] = center.combineEstimate(centerI, centerJ, estimatedModuleSize);\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        const point = new FinderPattern$1(centerJ, centerI, estimatedModuleSize);\n                        possibleCenters.push(point);\n                        if (this.resultPointCallback !== null && this.resultPointCallback !== undefined) {\n                            this.resultPointCallback.foundPossibleResultPoint(point);\n                        }\n                    }\n                    return true;\n                }\n            }\n            return false;\n        }\n        /**\n         * @return number of rows we could safely skip during scanning, based on the first\n         *         two finder patterns that have been located. In some cases their position will\n         *         allow us to infer that the third pattern must lie below a certain point farther\n         *         down in the image.\n         */\n        findRowSkip() {\n            const max = this.possibleCenters.length;\n            if (max <= 1) {\n                return 0;\n            }\n            let firstConfirmedCenter = null;\n            for (const center of this.possibleCenters) {\n                if (center.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n                    if (firstConfirmedCenter == null) {\n                        firstConfirmedCenter = center;\n                    }\n                    else {\n                        // We have two confirmed centers\n                        // How far down can we skip before resuming looking for the next\n                        // pattern? In the worst case, only the difference between the\n                        // difference in the x / y coordinates of the two centers.\n                        // This is the case where you find top left last.\n                        this.hasSkipped = true;\n                        return /*(int) */ Math.floor((Math.abs(firstConfirmedCenter.getX() - center.getX()) -\n                            Math.abs(firstConfirmedCenter.getY() - center.getY())) / 2);\n                    }\n                }\n            }\n            return 0;\n        }\n        /**\n         * @return true iff we have found at least 3 finder patterns that have been detected\n         *         at least {@link #CENTER_QUORUM} times each, and, the estimated module size of the\n         *         candidates is \"pretty similar\"\n         */\n        haveMultiplyConfirmedCenters() {\n            let confirmedCount = 0;\n            let totalModuleSize = 0.0;\n            const max = this.possibleCenters.length;\n            for (const pattern of this.possibleCenters) {\n                if (pattern.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n                    confirmedCount++;\n                    totalModuleSize += pattern.getEstimatedModuleSize();\n                }\n            }\n            if (confirmedCount < 3) {\n                return false;\n            }\n            // OK, we have at least 3 confirmed centers, but, it's possible that one is a \"false positive\"\n            // and that we need to keep looking. We detect this by asking if the estimated module sizes\n            // vary too much. We arbitrarily say that when the total deviation from average exceeds\n            // 5% of the total module size estimates, it's too much.\n            const average = totalModuleSize / max;\n            let totalDeviation = 0.0;\n            for (const pattern of this.possibleCenters) {\n                totalDeviation += Math.abs(pattern.getEstimatedModuleSize() - average);\n            }\n            return totalDeviation <= 0.05 * totalModuleSize;\n        }\n        /**\n         * @return the 3 best {@link FinderPattern}s from our list of candidates. The \"best\" are\n         *         those that have been detected at least {@link #CENTER_QUORUM} times, and whose module\n         *         size differs from the average among those patterns the least\n         * @throws NotFoundException if 3 such finder patterns do not exist\n         */\n        selectBestPatterns() {\n            const startSize = this.possibleCenters.length;\n            if (startSize < 3) {\n                // Couldn't find enough finder patterns\n                throw new NotFoundException();\n            }\n            const possibleCenters = this.possibleCenters;\n            let average;\n            // Filter outlier possibilities whose module size is too different\n            if (startSize > 3) {\n                // But we can only afford to do so if we have at least 4 possibilities to choose from\n                let totalModuleSize = 0.0;\n                let square = 0.0;\n                for (const center of this.possibleCenters) {\n                    const size = center.getEstimatedModuleSize();\n                    totalModuleSize += size;\n                    square += size * size;\n                }\n                average = totalModuleSize / startSize;\n                let stdDev = Math.sqrt(square / startSize - average * average);\n                possibleCenters.sort(\n                /**\n                 * <p>Orders by furthest from average</p>\n                 */\n                // FurthestFromAverageComparator implements Comparator<FinderPattern>\n                (center1, center2) => {\n                    const dA = Math.abs(center2.getEstimatedModuleSize() - average);\n                    const dB = Math.abs(center1.getEstimatedModuleSize() - average);\n                    return dA < dB ? -1 : dA > dB ? 1 : 0;\n                });\n                const limit = Math.max(0.2 * average, stdDev);\n                for (let i = 0; i < possibleCenters.length && possibleCenters.length > 3; i++) {\n                    const pattern = possibleCenters[i];\n                    if (Math.abs(pattern.getEstimatedModuleSize() - average) > limit) {\n                        possibleCenters.splice(i, 1);\n                        i--;\n                    }\n                }\n            }\n            if (possibleCenters.length > 3) {\n                // Throw away all but those first size candidate points we found.\n                let totalModuleSize = 0.0;\n                for (const possibleCenter of possibleCenters) {\n                    totalModuleSize += possibleCenter.getEstimatedModuleSize();\n                }\n                average = totalModuleSize / possibleCenters.length;\n                possibleCenters.sort(\n                /**\n                 * <p>Orders by {@link FinderPattern#getCount()}, descending.</p>\n                 */\n                // CenterComparator implements Comparator<FinderPattern>\n                (center1, center2) => {\n                    if (center2.getCount() === center1.getCount()) {\n                        const dA = Math.abs(center2.getEstimatedModuleSize() - average);\n                        const dB = Math.abs(center1.getEstimatedModuleSize() - average);\n                        return dA < dB ? 1 : dA > dB ? -1 : 0;\n                    }\n                    else {\n                        return center2.getCount() - center1.getCount();\n                    }\n                });\n                possibleCenters.splice(3); // this is not realy necessary as we only return first 3 anyway\n            }\n            return [\n                possibleCenters[0],\n                possibleCenters[1],\n                possibleCenters[2]\n            ];\n        }\n    }\n    FinderPatternFinder.CENTER_QUORUM = 2;\n    FinderPatternFinder.MIN_SKIP = 3; // 1 pixel/module times 3 modules/center\n    FinderPatternFinder.MAX_MODULES = 57; // support up to version 10 for mobile clients\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.Map;*/\n    /**\n     * <p>Encapsulates logic that can detect a QR Code in an image, even if the QR Code\n     * is rotated or skewed, or partially obscured.</p>\n     *\n     * @author Sean Owen\n     */\n    class Detector$2 {\n        constructor(image) {\n            this.image = image;\n        }\n        getImage() {\n            return this.image;\n        }\n        getResultPointCallback() {\n            return this.resultPointCallback;\n        }\n        /**\n         * <p>Detects a QR Code in an image.</p>\n         *\n         * @return {@link DetectorResult} encapsulating results of detecting a QR Code\n         * @throws NotFoundException if QR Code cannot be found\n         * @throws FormatException if a QR Code cannot be decoded\n         */\n        // public detect(): DetectorResult /*throws NotFoundException, FormatException*/ {\n        //   return detect(null)\n        // }\n        /**\n         * <p>Detects a QR Code in an image.</p>\n         *\n         * @param hints optional hints to detector\n         * @return {@link DetectorResult} encapsulating results of detecting a QR Code\n         * @throws NotFoundException if QR Code cannot be found\n         * @throws FormatException if a QR Code cannot be decoded\n         */\n        detect(hints) {\n            this.resultPointCallback = (hints === null || hints === undefined) ? null :\n                /*(ResultPointCallback) */ hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n            const finder = new FinderPatternFinder(this.image, this.resultPointCallback);\n            const info = finder.find(hints);\n            return this.processFinderPatternInfo(info);\n        }\n        processFinderPatternInfo(info) {\n            const topLeft = info.getTopLeft();\n            const topRight = info.getTopRight();\n            const bottomLeft = info.getBottomLeft();\n            const moduleSize = this.calculateModuleSize(topLeft, topRight, bottomLeft);\n            if (moduleSize < 1.0) {\n                throw new NotFoundException('No pattern found in proccess finder.');\n            }\n            const dimension = Detector$2.computeDimension(topLeft, topRight, bottomLeft, moduleSize);\n            const provisionalVersion = Version$1.getProvisionalVersionForDimension(dimension);\n            const modulesBetweenFPCenters = provisionalVersion.getDimensionForVersion() - 7;\n            let alignmentPattern = null;\n            // Anything above version 1 has an alignment pattern\n            if (provisionalVersion.getAlignmentPatternCenters().length > 0) {\n                // Guess where a \"bottom right\" finder pattern would have been\n                const bottomRightX = topRight.getX() - topLeft.getX() + bottomLeft.getX();\n                const bottomRightY = topRight.getY() - topLeft.getY() + bottomLeft.getY();\n                // Estimate that alignment pattern is closer by 3 modules\n                // from \"bottom right\" to known top left location\n                const correctionToTopLeft = 1.0 - 3.0 / modulesBetweenFPCenters;\n                const estAlignmentX = /*(int) */ Math.floor(topLeft.getX() + correctionToTopLeft * (bottomRightX - topLeft.getX()));\n                const estAlignmentY = /*(int) */ Math.floor(topLeft.getY() + correctionToTopLeft * (bottomRightY - topLeft.getY()));\n                // Kind of arbitrary -- expand search radius before giving up\n                for (let i = 4; i <= 16; i <<= 1) {\n                    try {\n                        alignmentPattern = this.findAlignmentInRegion(moduleSize, estAlignmentX, estAlignmentY, i);\n                        break;\n                    }\n                    catch (re /*NotFoundException*/) {\n                        if (!(re instanceof NotFoundException)) {\n                            throw re;\n                        }\n                        // try next round\n                    }\n                }\n                // If we didn't find alignment pattern... well try anyway without it\n            }\n            const transform = Detector$2.createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension);\n            const bits = Detector$2.sampleGrid(this.image, transform, dimension);\n            let points;\n            if (alignmentPattern === null) {\n                points = [bottomLeft, topLeft, topRight];\n            }\n            else {\n                points = [bottomLeft, topLeft, topRight, alignmentPattern];\n            }\n            return new DetectorResult(bits, points);\n        }\n        static createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension /*int*/) {\n            const dimMinusThree = dimension - 3.5;\n            let bottomRightX; /*float*/\n            let bottomRightY; /*float*/\n            let sourceBottomRightX; /*float*/\n            let sourceBottomRightY; /*float*/\n            if (alignmentPattern !== null) {\n                bottomRightX = alignmentPattern.getX();\n                bottomRightY = alignmentPattern.getY();\n                sourceBottomRightX = dimMinusThree - 3.0;\n                sourceBottomRightY = sourceBottomRightX;\n            }\n            else {\n                // Don't have an alignment pattern, just make up the bottom-right point\n                bottomRightX = (topRight.getX() - topLeft.getX()) + bottomLeft.getX();\n                bottomRightY = (topRight.getY() - topLeft.getY()) + bottomLeft.getY();\n                sourceBottomRightX = dimMinusThree;\n                sourceBottomRightY = dimMinusThree;\n            }\n            return PerspectiveTransform.quadrilateralToQuadrilateral(3.5, 3.5, dimMinusThree, 3.5, sourceBottomRightX, sourceBottomRightY, 3.5, dimMinusThree, topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRightX, bottomRightY, bottomLeft.getX(), bottomLeft.getY());\n        }\n        static sampleGrid(image, transform, dimension /*int*/) {\n            const sampler = GridSamplerInstance.getInstance();\n            return sampler.sampleGridWithTransform(image, dimension, dimension, transform);\n        }\n        /**\n         * <p>Computes the dimension (number of modules on a size) of the QR Code based on the position\n         * of the finder patterns and estimated module size.</p>\n         */\n        static computeDimension(topLeft, topRight, bottomLeft, moduleSize /*float*/) {\n            const tltrCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, topRight) / moduleSize);\n            const tlblCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, bottomLeft) / moduleSize);\n            let dimension = Math.floor((tltrCentersDimension + tlblCentersDimension) / 2) + 7;\n            switch (dimension & 0x03) { // mod 4\n                case 0:\n                    dimension++;\n                    break;\n                // 1? do nothing\n                case 2:\n                    dimension--;\n                    break;\n                case 3:\n                    throw new NotFoundException('Dimensions could be not found.');\n            }\n            return dimension;\n        }\n        /**\n         * <p>Computes an average estimated module size based on estimated derived from the positions\n         * of the three finder patterns.</p>\n         *\n         * @param topLeft detected top-left finder pattern center\n         * @param topRight detected top-right finder pattern center\n         * @param bottomLeft detected bottom-left finder pattern center\n         * @return estimated module size\n         */\n        calculateModuleSize(topLeft, topRight, bottomLeft) {\n            // Take the average\n            return (this.calculateModuleSizeOneWay(topLeft, topRight) +\n                this.calculateModuleSizeOneWay(topLeft, bottomLeft)) / 2.0;\n        }\n        /**\n         * <p>Estimates module size based on two finder patterns -- it uses\n         * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the\n         * width of each, measuring along the axis between their centers.</p>\n         */\n        calculateModuleSizeOneWay(pattern, otherPattern) {\n            const moduleSizeEst1 = this.sizeOfBlackWhiteBlackRunBothWays(/*(int) */ Math.floor(pattern.getX()), \n            /*(int) */ Math.floor(pattern.getY()), \n            /*(int) */ Math.floor(otherPattern.getX()), \n            /*(int) */ Math.floor(otherPattern.getY()));\n            const moduleSizeEst2 = this.sizeOfBlackWhiteBlackRunBothWays(/*(int) */ Math.floor(otherPattern.getX()), \n            /*(int) */ Math.floor(otherPattern.getY()), \n            /*(int) */ Math.floor(pattern.getX()), \n            /*(int) */ Math.floor(pattern.getY()));\n            if (isNaN(moduleSizeEst1)) {\n                return moduleSizeEst2 / 7.0;\n            }\n            if (isNaN(moduleSizeEst2)) {\n                return moduleSizeEst1 / 7.0;\n            }\n            // Average them, and divide by 7 since we've counted the width of 3 black modules,\n            // and 1 white and 1 black module on either side. Ergo, divide sum by 14.\n            return (moduleSizeEst1 + moduleSizeEst2) / 14.0;\n        }\n        /**\n         * See {@link #sizeOfBlackWhiteBlackRun(int, int, int, int)}; computes the total width of\n         * a finder pattern by looking for a black-white-black run from the center in the direction\n         * of another point (another finder pattern center), and in the opposite direction too.\n         */\n        sizeOfBlackWhiteBlackRunBothWays(fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n            let result = this.sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY);\n            // Now count other way -- don't run off image though of course\n            let scale = 1.0;\n            let otherToX = fromX - (toX - fromX);\n            if (otherToX < 0) {\n                scale = fromX / /*(float) */ (fromX - otherToX);\n                otherToX = 0;\n            }\n            else if (otherToX >= this.image.getWidth()) {\n                scale = (this.image.getWidth() - 1 - fromX) / /*(float) */ (otherToX - fromX);\n                otherToX = this.image.getWidth() - 1;\n            }\n            let otherToY = /*(int) */ Math.floor(fromY - (toY - fromY) * scale);\n            scale = 1.0;\n            if (otherToY < 0) {\n                scale = fromY / /*(float) */ (fromY - otherToY);\n                otherToY = 0;\n            }\n            else if (otherToY >= this.image.getHeight()) {\n                scale = (this.image.getHeight() - 1 - fromY) / /*(float) */ (otherToY - fromY);\n                otherToY = this.image.getHeight() - 1;\n            }\n            otherToX = /*(int) */ Math.floor(fromX + (otherToX - fromX) * scale);\n            result += this.sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);\n            // Middle pixel is double-counted this way; subtract 1\n            return result - 1.0;\n        }\n        /**\n         * <p>This method traces a line from a point in the image, in the direction towards another point.\n         * It begins in a black region, and keeps going until it finds white, then black, then white again.\n         * It reports the distance from the start to this point.</p>\n         *\n         * <p>This is used when figuring out how wide a finder pattern is, when the finder pattern\n         * may be skewed or rotated.</p>\n         */\n        sizeOfBlackWhiteBlackRun(fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n            // Mild variant of Bresenham's algorithm\n            // see http://en.wikipedia.org/wiki/Bresenham's_line_algorithm\n            const steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n            if (steep) {\n                let temp = fromX;\n                fromX = fromY;\n                fromY = temp;\n                temp = toX;\n                toX = toY;\n                toY = temp;\n            }\n            const dx = Math.abs(toX - fromX);\n            const dy = Math.abs(toY - fromY);\n            let error = -dx / 2;\n            const xstep = fromX < toX ? 1 : -1;\n            const ystep = fromY < toY ? 1 : -1;\n            // In black pixels, looking for white, first or second time.\n            let state = 0;\n            // Loop up until x == toX, but not beyond\n            const xLimit = toX + xstep;\n            for (let x = fromX, y = fromY; x !== xLimit; x += xstep) {\n                const realX = steep ? y : x;\n                const realY = steep ? x : y;\n                // Does current pixel mean we have moved white to black or vice versa?\n                // Scanning black in state 0,2 and white in state 1, so if we find the wrong\n                // color, advance to next state or end if we are in state 2 already\n                if ((state === 1) === this.image.get(realX, realY)) {\n                    if (state === 2) {\n                        return MathUtils.distance(x, y, fromX, fromY);\n                    }\n                    state++;\n                }\n                error += dy;\n                if (error > 0) {\n                    if (y === toY) {\n                        break;\n                    }\n                    y += ystep;\n                    error -= dx;\n                }\n            }\n            // Found black-white-black; give the benefit of the doubt that the next pixel outside the image\n            // is \"white\" so this last point at (toX+xStep,toY) is the right ending. This is really a\n            // small approximation; (toX+xStep,toY+yStep) might be really correct. Ignore this.\n            if (state === 2) {\n                return MathUtils.distance(toX + xstep, toY, fromX, fromY);\n            }\n            // else we didn't find even black-white-black; no estimate is really possible\n            return NaN;\n        }\n        /**\n         * <p>Attempts to locate an alignment pattern in a limited region of the image, which is\n         * guessed to contain it. This method uses {@link AlignmentPattern}.</p>\n         *\n         * @param overallEstModuleSize estimated module size so far\n         * @param estAlignmentX x coordinate of center of area probably containing alignment pattern\n         * @param estAlignmentY y coordinate of above\n         * @param allowanceFactor number of pixels in all directions to search from the center\n         * @return {@link AlignmentPattern} if found, or null otherwise\n         * @throws NotFoundException if an unexpected error occurs during detection\n         */\n        findAlignmentInRegion(overallEstModuleSize /*float*/, estAlignmentX /*int*/, estAlignmentY /*int*/, allowanceFactor /*float*/) {\n            // Look for an alignment pattern (3 modules in size) around where it\n            // should be\n            const allowance = /*(int) */ Math.floor(allowanceFactor * overallEstModuleSize);\n            const alignmentAreaLeftX = Math.max(0, estAlignmentX - allowance);\n            const alignmentAreaRightX = Math.min(this.image.getWidth() - 1, estAlignmentX + allowance);\n            if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) {\n                throw new NotFoundException('Alignment top exceeds estimated module size.');\n            }\n            const alignmentAreaTopY = Math.max(0, estAlignmentY - allowance);\n            const alignmentAreaBottomY = Math.min(this.image.getHeight() - 1, estAlignmentY + allowance);\n            if (alignmentAreaBottomY - alignmentAreaTopY < overallEstModuleSize * 3) {\n                throw new NotFoundException('Alignment bottom exceeds estimated module size.');\n            }\n            const alignmentFinder = new AlignmentPatternFinder(this.image, alignmentAreaLeftX, alignmentAreaTopY, alignmentAreaRightX - alignmentAreaLeftX, alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize, this.resultPointCallback);\n            return alignmentFinder.find();\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.List;*/\n    /*import java.util.Map;*/\n    /**\n     * This implementation can detect and decode QR Codes in an image.\n     *\n     * @author Sean Owen\n     */\n    class QRCodeReader {\n        constructor() {\n            this.decoder = new Decoder$2();\n        }\n        getDecoder() {\n            return this.decoder;\n        }\n        /**\n         * Locates and decodes a QR code in an image.\n         *\n         * @return a representing: string the content encoded by the QR code\n         * @throws NotFoundException if a QR code cannot be found\n         * @throws FormatException if a QR code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        /*@Override*/\n        // public decode(image: BinaryBitmap): Result /*throws NotFoundException, ChecksumException, FormatException */ {\n        //   return this.decode(image, null)\n        // }\n        /*@Override*/\n        decode(image, hints) {\n            let decoderResult;\n            let points;\n            if (hints !== undefined && hints !== null && undefined !== hints.get(DecodeHintType$1.PURE_BARCODE)) {\n                const bits = QRCodeReader.extractPureBits(image.getBlackMatrix());\n                decoderResult = this.decoder.decodeBitMatrix(bits, hints);\n                points = QRCodeReader.NO_POINTS;\n            }\n            else {\n                const detectorResult = new Detector$2(image.getBlackMatrix()).detect(hints);\n                decoderResult = this.decoder.decodeBitMatrix(detectorResult.getBits(), hints);\n                points = detectorResult.getPoints();\n            }\n            // If the code was mirrored: swap the bottom-left and the top-right points.\n            if (decoderResult.getOther() instanceof QRCodeDecoderMetaData) {\n                decoderResult.getOther().applyMirroredCorrection(points);\n            }\n            const result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat$1.QR_CODE, undefined);\n            const byteSegments = decoderResult.getByteSegments();\n            if (byteSegments !== null) {\n                result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);\n            }\n            const ecLevel = decoderResult.getECLevel();\n            if (ecLevel !== null) {\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);\n            }\n            if (decoderResult.hasStructuredAppend()) {\n                result.putMetadata(ResultMetadataType$1.STRUCTURED_APPEND_SEQUENCE, decoderResult.getStructuredAppendSequenceNumber());\n                result.putMetadata(ResultMetadataType$1.STRUCTURED_APPEND_PARITY, decoderResult.getStructuredAppendParity());\n            }\n            return result;\n        }\n        /*@Override*/\n        reset() {\n            // do nothing\n        }\n        /**\n         * This method detects a code in a \"pure\" image -- that is, pure monochrome image\n         * which contains only an unrotated, unskewed, image of a code, with some white border\n         * around it. This is a specialized method that works exceptionally fast in this special\n         * case.\n         *\n         * @see com.google.zxing.datamatrix.DataMatrixReader#extractPureBits(BitMatrix)\n         */\n        static extractPureBits(image) {\n            const leftTopBlack = image.getTopLeftOnBit();\n            const rightBottomBlack = image.getBottomRightOnBit();\n            if (leftTopBlack === null || rightBottomBlack === null) {\n                throw new NotFoundException();\n            }\n            const moduleSize = this.moduleSize(leftTopBlack, image);\n            let top = leftTopBlack[1];\n            let bottom = rightBottomBlack[1];\n            let left = leftTopBlack[0];\n            let right = rightBottomBlack[0];\n            // Sanity check!\n            if (left >= right || top >= bottom) {\n                throw new NotFoundException();\n            }\n            if (bottom - top !== right - left) {\n                // Special case, where bottom-right module wasn't black so we found something else in the last row\n                // Assume it's a square, so use height as the width\n                right = left + (bottom - top);\n                if (right >= image.getWidth()) {\n                    // Abort if that would not make sense -- off image\n                    throw new NotFoundException();\n                }\n            }\n            const matrixWidth = Math.round((right - left + 1) / moduleSize);\n            const matrixHeight = Math.round((bottom - top + 1) / moduleSize);\n            if (matrixWidth <= 0 || matrixHeight <= 0) {\n                throw new NotFoundException();\n            }\n            if (matrixHeight !== matrixWidth) {\n                // Only possibly decode square regions\n                throw new NotFoundException();\n            }\n            // Push in the \"border\" by half the module width so that we start\n            // sampling in the middle of the module. Just in case the image is a\n            // little off, this will help recover.\n            const nudge = /*(int) */ Math.floor(moduleSize / 2.0);\n            top += nudge;\n            left += nudge;\n            // But careful that this does not sample off the edge\n            // \"right\" is the farthest-right valid pixel location -- right+1 is not necessarily\n            // This is positive by how much the inner x loop below would be too large\n            const nudgedTooFarRight = left + /*(int) */ Math.floor((matrixWidth - 1) * moduleSize) - right;\n            if (nudgedTooFarRight > 0) {\n                if (nudgedTooFarRight > nudge) {\n                    // Neither way fits; abort\n                    throw new NotFoundException();\n                }\n                left -= nudgedTooFarRight;\n            }\n            // See logic above\n            const nudgedTooFarDown = top + /*(int) */ Math.floor((matrixHeight - 1) * moduleSize) - bottom;\n            if (nudgedTooFarDown > 0) {\n                if (nudgedTooFarDown > nudge) {\n                    // Neither way fits; abort\n                    throw new NotFoundException();\n                }\n                top -= nudgedTooFarDown;\n            }\n            // Now just read off the bits\n            const bits = new BitMatrix(matrixWidth, matrixHeight);\n            for (let y = 0; y < matrixHeight; y++) {\n                const iOffset = top + /*(int) */ Math.floor(y * moduleSize);\n                for (let x = 0; x < matrixWidth; x++) {\n                    if (image.get(left + /*(int) */ Math.floor(x * moduleSize), iOffset)) {\n                        bits.set(x, y);\n                    }\n                }\n            }\n            return bits;\n        }\n        static moduleSize(leftTopBlack, image) {\n            const height = image.getHeight();\n            const width = image.getWidth();\n            let x = leftTopBlack[0];\n            let y = leftTopBlack[1];\n            let inBlack = true;\n            let transitions = 0;\n            while (x < width && y < height) {\n                if (inBlack !== image.get(x, y)) {\n                    if (++transitions === 5) {\n                        break;\n                    }\n                    inBlack = !inBlack;\n                }\n                x++;\n                y++;\n            }\n            if (x === width || y === height) {\n                throw new NotFoundException();\n            }\n            return (x - leftTopBlack[0]) / 7.0;\n        }\n    }\n    QRCodeReader.NO_POINTS = new Array();\n\n    /*\n    * Copyright 2009 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author SITA Lab (kevin.osullivan@sita.aero)\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417Common {\n        PDF417Common() {\n        }\n        /**\n         * @param moduleBitCount values to sum\n         * @return sum of values\n         * @deprecated call {@link MathUtils#sum(int[])}\n         */\n        // @Deprecated\n        static getBitCountSum(moduleBitCount) {\n            return MathUtils.sum(moduleBitCount);\n        }\n        static toIntArray(list) {\n            if (list == null || !list.length) {\n                return PDF417Common.EMPTY_INT_ARRAY;\n            }\n            const result = new Int32Array(list.length);\n            let i = 0;\n            for (const integer of list) {\n                result[i++] = integer;\n            }\n            return result;\n        }\n        /**\n         * @param symbol encoded symbol to translate to a codeword\n         * @return the codeword corresponding to the symbol.\n         */\n        static getCodeword(symbol /*int*/) {\n            const i = Arrays.binarySearch(PDF417Common.SYMBOL_TABLE, symbol & 0x3FFFF);\n            if (i < 0) {\n                return -1;\n            }\n            return (PDF417Common.CODEWORD_TABLE[i] - 1) % PDF417Common.NUMBER_OF_CODEWORDS;\n        }\n    }\n    PDF417Common.NUMBER_OF_CODEWORDS = 929;\n    // Maximum Codewords (Data + Error).\n    PDF417Common.MAX_CODEWORDS_IN_BARCODE = PDF417Common.NUMBER_OF_CODEWORDS - 1;\n    PDF417Common.MIN_ROWS_IN_BARCODE = 3;\n    PDF417Common.MAX_ROWS_IN_BARCODE = 90;\n    // One left row indication column + max 30 data columns + one right row indicator column\n    // public static /*final*/ MAX_CODEWORDS_IN_ROW: /*int*/ number = 32;\n    PDF417Common.MODULES_IN_CODEWORD = 17;\n    PDF417Common.MODULES_IN_STOP_PATTERN = 18;\n    PDF417Common.BARS_IN_MODULE = 8;\n    PDF417Common.EMPTY_INT_ARRAY = new Int32Array([]);\n    /**\n     * The sorted table of all possible symbols. Extracted from the PDF417\n     * specification. The index of a symbol in this table corresponds to the\n     * index into the codeword table.\n     */\n    PDF417Common.SYMBOL_TABLE = Int32Array.from([\n        0x1025e, 0x1027a, 0x1029e, 0x102bc, 0x102f2, 0x102f4, 0x1032e, 0x1034e, 0x1035c, 0x10396, 0x103a6, 0x103ac,\n        0x10422, 0x10428, 0x10436, 0x10442, 0x10444, 0x10448, 0x10450, 0x1045e, 0x10466, 0x1046c, 0x1047a, 0x10482,\n        0x1049e, 0x104a0, 0x104bc, 0x104c6, 0x104d8, 0x104ee, 0x104f2, 0x104f4, 0x10504, 0x10508, 0x10510, 0x1051e,\n        0x10520, 0x1053c, 0x10540, 0x10578, 0x10586, 0x1058c, 0x10598, 0x105b0, 0x105be, 0x105ce, 0x105dc, 0x105e2,\n        0x105e4, 0x105e8, 0x105f6, 0x1062e, 0x1064e, 0x1065c, 0x1068e, 0x1069c, 0x106b8, 0x106de, 0x106fa, 0x10716,\n        0x10726, 0x1072c, 0x10746, 0x1074c, 0x10758, 0x1076e, 0x10792, 0x10794, 0x107a2, 0x107a4, 0x107a8, 0x107b6,\n        0x10822, 0x10828, 0x10842, 0x10848, 0x10850, 0x1085e, 0x10866, 0x1086c, 0x1087a, 0x10882, 0x10884, 0x10890,\n        0x1089e, 0x108a0, 0x108bc, 0x108c6, 0x108cc, 0x108d8, 0x108ee, 0x108f2, 0x108f4, 0x10902, 0x10908, 0x1091e,\n        0x10920, 0x1093c, 0x10940, 0x10978, 0x10986, 0x10998, 0x109b0, 0x109be, 0x109ce, 0x109dc, 0x109e2, 0x109e4,\n        0x109e8, 0x109f6, 0x10a08, 0x10a10, 0x10a1e, 0x10a20, 0x10a3c, 0x10a40, 0x10a78, 0x10af0, 0x10b06, 0x10b0c,\n        0x10b18, 0x10b30, 0x10b3e, 0x10b60, 0x10b7c, 0x10b8e, 0x10b9c, 0x10bb8, 0x10bc2, 0x10bc4, 0x10bc8, 0x10bd0,\n        0x10bde, 0x10be6, 0x10bec, 0x10c2e, 0x10c4e, 0x10c5c, 0x10c62, 0x10c64, 0x10c68, 0x10c76, 0x10c8e, 0x10c9c,\n        0x10cb8, 0x10cc2, 0x10cc4, 0x10cc8, 0x10cd0, 0x10cde, 0x10ce6, 0x10cec, 0x10cfa, 0x10d0e, 0x10d1c, 0x10d38,\n        0x10d70, 0x10d7e, 0x10d82, 0x10d84, 0x10d88, 0x10d90, 0x10d9e, 0x10da0, 0x10dbc, 0x10dc6, 0x10dcc, 0x10dd8,\n        0x10dee, 0x10df2, 0x10df4, 0x10e16, 0x10e26, 0x10e2c, 0x10e46, 0x10e58, 0x10e6e, 0x10e86, 0x10e8c, 0x10e98,\n        0x10eb0, 0x10ebe, 0x10ece, 0x10edc, 0x10f0a, 0x10f12, 0x10f14, 0x10f22, 0x10f28, 0x10f36, 0x10f42, 0x10f44,\n        0x10f48, 0x10f50, 0x10f5e, 0x10f66, 0x10f6c, 0x10fb2, 0x10fb4, 0x11022, 0x11028, 0x11042, 0x11048, 0x11050,\n        0x1105e, 0x1107a, 0x11082, 0x11084, 0x11090, 0x1109e, 0x110a0, 0x110bc, 0x110c6, 0x110cc, 0x110d8, 0x110ee,\n        0x110f2, 0x110f4, 0x11102, 0x1111e, 0x11120, 0x1113c, 0x11140, 0x11178, 0x11186, 0x11198, 0x111b0, 0x111be,\n        0x111ce, 0x111dc, 0x111e2, 0x111e4, 0x111e8, 0x111f6, 0x11208, 0x1121e, 0x11220, 0x11278, 0x112f0, 0x1130c,\n        0x11330, 0x1133e, 0x11360, 0x1137c, 0x1138e, 0x1139c, 0x113b8, 0x113c2, 0x113c8, 0x113d0, 0x113de, 0x113e6,\n        0x113ec, 0x11408, 0x11410, 0x1141e, 0x11420, 0x1143c, 0x11440, 0x11478, 0x114f0, 0x115e0, 0x1160c, 0x11618,\n        0x11630, 0x1163e, 0x11660, 0x1167c, 0x116c0, 0x116f8, 0x1171c, 0x11738, 0x11770, 0x1177e, 0x11782, 0x11784,\n        0x11788, 0x11790, 0x1179e, 0x117a0, 0x117bc, 0x117c6, 0x117cc, 0x117d8, 0x117ee, 0x1182e, 0x11834, 0x1184e,\n        0x1185c, 0x11862, 0x11864, 0x11868, 0x11876, 0x1188e, 0x1189c, 0x118b8, 0x118c2, 0x118c8, 0x118d0, 0x118de,\n        0x118e6, 0x118ec, 0x118fa, 0x1190e, 0x1191c, 0x11938, 0x11970, 0x1197e, 0x11982, 0x11984, 0x11990, 0x1199e,\n        0x119a0, 0x119bc, 0x119c6, 0x119cc, 0x119d8, 0x119ee, 0x119f2, 0x119f4, 0x11a0e, 0x11a1c, 0x11a38, 0x11a70,\n        0x11a7e, 0x11ae0, 0x11afc, 0x11b08, 0x11b10, 0x11b1e, 0x11b20, 0x11b3c, 0x11b40, 0x11b78, 0x11b8c, 0x11b98,\n        0x11bb0, 0x11bbe, 0x11bce, 0x11bdc, 0x11be2, 0x11be4, 0x11be8, 0x11bf6, 0x11c16, 0x11c26, 0x11c2c, 0x11c46,\n        0x11c4c, 0x11c58, 0x11c6e, 0x11c86, 0x11c98, 0x11cb0, 0x11cbe, 0x11cce, 0x11cdc, 0x11ce2, 0x11ce4, 0x11ce8,\n        0x11cf6, 0x11d06, 0x11d0c, 0x11d18, 0x11d30, 0x11d3e, 0x11d60, 0x11d7c, 0x11d8e, 0x11d9c, 0x11db8, 0x11dc4,\n        0x11dc8, 0x11dd0, 0x11dde, 0x11de6, 0x11dec, 0x11dfa, 0x11e0a, 0x11e12, 0x11e14, 0x11e22, 0x11e24, 0x11e28,\n        0x11e36, 0x11e42, 0x11e44, 0x11e50, 0x11e5e, 0x11e66, 0x11e6c, 0x11e82, 0x11e84, 0x11e88, 0x11e90, 0x11e9e,\n        0x11ea0, 0x11ebc, 0x11ec6, 0x11ecc, 0x11ed8, 0x11eee, 0x11f1a, 0x11f2e, 0x11f32, 0x11f34, 0x11f4e, 0x11f5c,\n        0x11f62, 0x11f64, 0x11f68, 0x11f76, 0x12048, 0x1205e, 0x12082, 0x12084, 0x12090, 0x1209e, 0x120a0, 0x120bc,\n        0x120d8, 0x120f2, 0x120f4, 0x12108, 0x1211e, 0x12120, 0x1213c, 0x12140, 0x12178, 0x12186, 0x12198, 0x121b0,\n        0x121be, 0x121e2, 0x121e4, 0x121e8, 0x121f6, 0x12204, 0x12210, 0x1221e, 0x12220, 0x12278, 0x122f0, 0x12306,\n        0x1230c, 0x12330, 0x1233e, 0x12360, 0x1237c, 0x1238e, 0x1239c, 0x123b8, 0x123c2, 0x123c8, 0x123d0, 0x123e6,\n        0x123ec, 0x1241e, 0x12420, 0x1243c, 0x124f0, 0x125e0, 0x12618, 0x1263e, 0x12660, 0x1267c, 0x126c0, 0x126f8,\n        0x12738, 0x12770, 0x1277e, 0x12782, 0x12784, 0x12790, 0x1279e, 0x127a0, 0x127bc, 0x127c6, 0x127cc, 0x127d8,\n        0x127ee, 0x12820, 0x1283c, 0x12840, 0x12878, 0x128f0, 0x129e0, 0x12bc0, 0x12c18, 0x12c30, 0x12c3e, 0x12c60,\n        0x12c7c, 0x12cc0, 0x12cf8, 0x12df0, 0x12e1c, 0x12e38, 0x12e70, 0x12e7e, 0x12ee0, 0x12efc, 0x12f04, 0x12f08,\n        0x12f10, 0x12f20, 0x12f3c, 0x12f40, 0x12f78, 0x12f86, 0x12f8c, 0x12f98, 0x12fb0, 0x12fbe, 0x12fce, 0x12fdc,\n        0x1302e, 0x1304e, 0x1305c, 0x13062, 0x13068, 0x1308e, 0x1309c, 0x130b8, 0x130c2, 0x130c8, 0x130d0, 0x130de,\n        0x130ec, 0x130fa, 0x1310e, 0x13138, 0x13170, 0x1317e, 0x13182, 0x13184, 0x13190, 0x1319e, 0x131a0, 0x131bc,\n        0x131c6, 0x131cc, 0x131d8, 0x131f2, 0x131f4, 0x1320e, 0x1321c, 0x13270, 0x1327e, 0x132e0, 0x132fc, 0x13308,\n        0x1331e, 0x13320, 0x1333c, 0x13340, 0x13378, 0x13386, 0x13398, 0x133b0, 0x133be, 0x133ce, 0x133dc, 0x133e2,\n        0x133e4, 0x133e8, 0x133f6, 0x1340e, 0x1341c, 0x13438, 0x13470, 0x1347e, 0x134e0, 0x134fc, 0x135c0, 0x135f8,\n        0x13608, 0x13610, 0x1361e, 0x13620, 0x1363c, 0x13640, 0x13678, 0x136f0, 0x1370c, 0x13718, 0x13730, 0x1373e,\n        0x13760, 0x1377c, 0x1379c, 0x137b8, 0x137c2, 0x137c4, 0x137c8, 0x137d0, 0x137de, 0x137e6, 0x137ec, 0x13816,\n        0x13826, 0x1382c, 0x13846, 0x1384c, 0x13858, 0x1386e, 0x13874, 0x13886, 0x13898, 0x138b0, 0x138be, 0x138ce,\n        0x138dc, 0x138e2, 0x138e4, 0x138e8, 0x13906, 0x1390c, 0x13930, 0x1393e, 0x13960, 0x1397c, 0x1398e, 0x1399c,\n        0x139b8, 0x139c8, 0x139d0, 0x139de, 0x139e6, 0x139ec, 0x139fa, 0x13a06, 0x13a0c, 0x13a18, 0x13a30, 0x13a3e,\n        0x13a60, 0x13a7c, 0x13ac0, 0x13af8, 0x13b0e, 0x13b1c, 0x13b38, 0x13b70, 0x13b7e, 0x13b88, 0x13b90, 0x13b9e,\n        0x13ba0, 0x13bbc, 0x13bcc, 0x13bd8, 0x13bee, 0x13bf2, 0x13bf4, 0x13c12, 0x13c14, 0x13c22, 0x13c24, 0x13c28,\n        0x13c36, 0x13c42, 0x13c48, 0x13c50, 0x13c5e, 0x13c66, 0x13c6c, 0x13c82, 0x13c84, 0x13c90, 0x13c9e, 0x13ca0,\n        0x13cbc, 0x13cc6, 0x13ccc, 0x13cd8, 0x13cee, 0x13d02, 0x13d04, 0x13d08, 0x13d10, 0x13d1e, 0x13d20, 0x13d3c,\n        0x13d40, 0x13d78, 0x13d86, 0x13d8c, 0x13d98, 0x13db0, 0x13dbe, 0x13dce, 0x13ddc, 0x13de4, 0x13de8, 0x13df6,\n        0x13e1a, 0x13e2e, 0x13e32, 0x13e34, 0x13e4e, 0x13e5c, 0x13e62, 0x13e64, 0x13e68, 0x13e76, 0x13e8e, 0x13e9c,\n        0x13eb8, 0x13ec2, 0x13ec4, 0x13ec8, 0x13ed0, 0x13ede, 0x13ee6, 0x13eec, 0x13f26, 0x13f2c, 0x13f3a, 0x13f46,\n        0x13f4c, 0x13f58, 0x13f6e, 0x13f72, 0x13f74, 0x14082, 0x1409e, 0x140a0, 0x140bc, 0x14104, 0x14108, 0x14110,\n        0x1411e, 0x14120, 0x1413c, 0x14140, 0x14178, 0x1418c, 0x14198, 0x141b0, 0x141be, 0x141e2, 0x141e4, 0x141e8,\n        0x14208, 0x14210, 0x1421e, 0x14220, 0x1423c, 0x14240, 0x14278, 0x142f0, 0x14306, 0x1430c, 0x14318, 0x14330,\n        0x1433e, 0x14360, 0x1437c, 0x1438e, 0x143c2, 0x143c4, 0x143c8, 0x143d0, 0x143e6, 0x143ec, 0x14408, 0x14410,\n        0x1441e, 0x14420, 0x1443c, 0x14440, 0x14478, 0x144f0, 0x145e0, 0x1460c, 0x14618, 0x14630, 0x1463e, 0x14660,\n        0x1467c, 0x146c0, 0x146f8, 0x1471c, 0x14738, 0x14770, 0x1477e, 0x14782, 0x14784, 0x14788, 0x14790, 0x147a0,\n        0x147bc, 0x147c6, 0x147cc, 0x147d8, 0x147ee, 0x14810, 0x14820, 0x1483c, 0x14840, 0x14878, 0x148f0, 0x149e0,\n        0x14bc0, 0x14c30, 0x14c3e, 0x14c60, 0x14c7c, 0x14cc0, 0x14cf8, 0x14df0, 0x14e38, 0x14e70, 0x14e7e, 0x14ee0,\n        0x14efc, 0x14f04, 0x14f08, 0x14f10, 0x14f1e, 0x14f20, 0x14f3c, 0x14f40, 0x14f78, 0x14f86, 0x14f8c, 0x14f98,\n        0x14fb0, 0x14fce, 0x14fdc, 0x15020, 0x15040, 0x15078, 0x150f0, 0x151e0, 0x153c0, 0x15860, 0x1587c, 0x158c0,\n        0x158f8, 0x159f0, 0x15be0, 0x15c70, 0x15c7e, 0x15ce0, 0x15cfc, 0x15dc0, 0x15df8, 0x15e08, 0x15e10, 0x15e20,\n        0x15e40, 0x15e78, 0x15ef0, 0x15f0c, 0x15f18, 0x15f30, 0x15f60, 0x15f7c, 0x15f8e, 0x15f9c, 0x15fb8, 0x1604e,\n        0x1605c, 0x1608e, 0x1609c, 0x160b8, 0x160c2, 0x160c4, 0x160c8, 0x160de, 0x1610e, 0x1611c, 0x16138, 0x16170,\n        0x1617e, 0x16184, 0x16188, 0x16190, 0x1619e, 0x161a0, 0x161bc, 0x161c6, 0x161cc, 0x161d8, 0x161f2, 0x161f4,\n        0x1620e, 0x1621c, 0x16238, 0x16270, 0x1627e, 0x162e0, 0x162fc, 0x16304, 0x16308, 0x16310, 0x1631e, 0x16320,\n        0x1633c, 0x16340, 0x16378, 0x16386, 0x1638c, 0x16398, 0x163b0, 0x163be, 0x163ce, 0x163dc, 0x163e2, 0x163e4,\n        0x163e8, 0x163f6, 0x1640e, 0x1641c, 0x16438, 0x16470, 0x1647e, 0x164e0, 0x164fc, 0x165c0, 0x165f8, 0x16610,\n        0x1661e, 0x16620, 0x1663c, 0x16640, 0x16678, 0x166f0, 0x16718, 0x16730, 0x1673e, 0x16760, 0x1677c, 0x1678e,\n        0x1679c, 0x167b8, 0x167c2, 0x167c4, 0x167c8, 0x167d0, 0x167de, 0x167e6, 0x167ec, 0x1681c, 0x16838, 0x16870,\n        0x168e0, 0x168fc, 0x169c0, 0x169f8, 0x16bf0, 0x16c10, 0x16c1e, 0x16c20, 0x16c3c, 0x16c40, 0x16c78, 0x16cf0,\n        0x16de0, 0x16e18, 0x16e30, 0x16e3e, 0x16e60, 0x16e7c, 0x16ec0, 0x16ef8, 0x16f1c, 0x16f38, 0x16f70, 0x16f7e,\n        0x16f84, 0x16f88, 0x16f90, 0x16f9e, 0x16fa0, 0x16fbc, 0x16fc6, 0x16fcc, 0x16fd8, 0x17026, 0x1702c, 0x17046,\n        0x1704c, 0x17058, 0x1706e, 0x17086, 0x1708c, 0x17098, 0x170b0, 0x170be, 0x170ce, 0x170dc, 0x170e8, 0x17106,\n        0x1710c, 0x17118, 0x17130, 0x1713e, 0x17160, 0x1717c, 0x1718e, 0x1719c, 0x171b8, 0x171c2, 0x171c4, 0x171c8,\n        0x171d0, 0x171de, 0x171e6, 0x171ec, 0x171fa, 0x17206, 0x1720c, 0x17218, 0x17230, 0x1723e, 0x17260, 0x1727c,\n        0x172c0, 0x172f8, 0x1730e, 0x1731c, 0x17338, 0x17370, 0x1737e, 0x17388, 0x17390, 0x1739e, 0x173a0, 0x173bc,\n        0x173cc, 0x173d8, 0x173ee, 0x173f2, 0x173f4, 0x1740c, 0x17418, 0x17430, 0x1743e, 0x17460, 0x1747c, 0x174c0,\n        0x174f8, 0x175f0, 0x1760e, 0x1761c, 0x17638, 0x17670, 0x1767e, 0x176e0, 0x176fc, 0x17708, 0x17710, 0x1771e,\n        0x17720, 0x1773c, 0x17740, 0x17778, 0x17798, 0x177b0, 0x177be, 0x177dc, 0x177e2, 0x177e4, 0x177e8, 0x17822,\n        0x17824, 0x17828, 0x17836, 0x17842, 0x17844, 0x17848, 0x17850, 0x1785e, 0x17866, 0x1786c, 0x17882, 0x17884,\n        0x17888, 0x17890, 0x1789e, 0x178a0, 0x178bc, 0x178c6, 0x178cc, 0x178d8, 0x178ee, 0x178f2, 0x178f4, 0x17902,\n        0x17904, 0x17908, 0x17910, 0x1791e, 0x17920, 0x1793c, 0x17940, 0x17978, 0x17986, 0x1798c, 0x17998, 0x179b0,\n        0x179be, 0x179ce, 0x179dc, 0x179e2, 0x179e4, 0x179e8, 0x179f6, 0x17a04, 0x17a08, 0x17a10, 0x17a1e, 0x17a20,\n        0x17a3c, 0x17a40, 0x17a78, 0x17af0, 0x17b06, 0x17b0c, 0x17b18, 0x17b30, 0x17b3e, 0x17b60, 0x17b7c, 0x17b8e,\n        0x17b9c, 0x17bb8, 0x17bc4, 0x17bc8, 0x17bd0, 0x17bde, 0x17be6, 0x17bec, 0x17c2e, 0x17c32, 0x17c34, 0x17c4e,\n        0x17c5c, 0x17c62, 0x17c64, 0x17c68, 0x17c76, 0x17c8e, 0x17c9c, 0x17cb8, 0x17cc2, 0x17cc4, 0x17cc8, 0x17cd0,\n        0x17cde, 0x17ce6, 0x17cec, 0x17d0e, 0x17d1c, 0x17d38, 0x17d70, 0x17d82, 0x17d84, 0x17d88, 0x17d90, 0x17d9e,\n        0x17da0, 0x17dbc, 0x17dc6, 0x17dcc, 0x17dd8, 0x17dee, 0x17e26, 0x17e2c, 0x17e3a, 0x17e46, 0x17e4c, 0x17e58,\n        0x17e6e, 0x17e72, 0x17e74, 0x17e86, 0x17e8c, 0x17e98, 0x17eb0, 0x17ece, 0x17edc, 0x17ee2, 0x17ee4, 0x17ee8,\n        0x17ef6, 0x1813a, 0x18172, 0x18174, 0x18216, 0x18226, 0x1823a, 0x1824c, 0x18258, 0x1826e, 0x18272, 0x18274,\n        0x18298, 0x182be, 0x182e2, 0x182e4, 0x182e8, 0x182f6, 0x1835e, 0x1837a, 0x183ae, 0x183d6, 0x18416, 0x18426,\n        0x1842c, 0x1843a, 0x18446, 0x18458, 0x1846e, 0x18472, 0x18474, 0x18486, 0x184b0, 0x184be, 0x184ce, 0x184dc,\n        0x184e2, 0x184e4, 0x184e8, 0x184f6, 0x18506, 0x1850c, 0x18518, 0x18530, 0x1853e, 0x18560, 0x1857c, 0x1858e,\n        0x1859c, 0x185b8, 0x185c2, 0x185c4, 0x185c8, 0x185d0, 0x185de, 0x185e6, 0x185ec, 0x185fa, 0x18612, 0x18614,\n        0x18622, 0x18628, 0x18636, 0x18642, 0x18650, 0x1865e, 0x1867a, 0x18682, 0x18684, 0x18688, 0x18690, 0x1869e,\n        0x186a0, 0x186bc, 0x186c6, 0x186cc, 0x186d8, 0x186ee, 0x186f2, 0x186f4, 0x1872e, 0x1874e, 0x1875c, 0x18796,\n        0x187a6, 0x187ac, 0x187d2, 0x187d4, 0x18826, 0x1882c, 0x1883a, 0x18846, 0x1884c, 0x18858, 0x1886e, 0x18872,\n        0x18874, 0x18886, 0x18898, 0x188b0, 0x188be, 0x188ce, 0x188dc, 0x188e2, 0x188e4, 0x188e8, 0x188f6, 0x1890c,\n        0x18930, 0x1893e, 0x18960, 0x1897c, 0x1898e, 0x189b8, 0x189c2, 0x189c8, 0x189d0, 0x189de, 0x189e6, 0x189ec,\n        0x189fa, 0x18a18, 0x18a30, 0x18a3e, 0x18a60, 0x18a7c, 0x18ac0, 0x18af8, 0x18b1c, 0x18b38, 0x18b70, 0x18b7e,\n        0x18b82, 0x18b84, 0x18b88, 0x18b90, 0x18b9e, 0x18ba0, 0x18bbc, 0x18bc6, 0x18bcc, 0x18bd8, 0x18bee, 0x18bf2,\n        0x18bf4, 0x18c22, 0x18c24, 0x18c28, 0x18c36, 0x18c42, 0x18c48, 0x18c50, 0x18c5e, 0x18c66, 0x18c7a, 0x18c82,\n        0x18c84, 0x18c90, 0x18c9e, 0x18ca0, 0x18cbc, 0x18ccc, 0x18cf2, 0x18cf4, 0x18d04, 0x18d08, 0x18d10, 0x18d1e,\n        0x18d20, 0x18d3c, 0x18d40, 0x18d78, 0x18d86, 0x18d98, 0x18dce, 0x18de2, 0x18de4, 0x18de8, 0x18e2e, 0x18e32,\n        0x18e34, 0x18e4e, 0x18e5c, 0x18e62, 0x18e64, 0x18e68, 0x18e8e, 0x18e9c, 0x18eb8, 0x18ec2, 0x18ec4, 0x18ec8,\n        0x18ed0, 0x18efa, 0x18f16, 0x18f26, 0x18f2c, 0x18f46, 0x18f4c, 0x18f58, 0x18f6e, 0x18f8a, 0x18f92, 0x18f94,\n        0x18fa2, 0x18fa4, 0x18fa8, 0x18fb6, 0x1902c, 0x1903a, 0x19046, 0x1904c, 0x19058, 0x19072, 0x19074, 0x19086,\n        0x19098, 0x190b0, 0x190be, 0x190ce, 0x190dc, 0x190e2, 0x190e8, 0x190f6, 0x19106, 0x1910c, 0x19130, 0x1913e,\n        0x19160, 0x1917c, 0x1918e, 0x1919c, 0x191b8, 0x191c2, 0x191c8, 0x191d0, 0x191de, 0x191e6, 0x191ec, 0x191fa,\n        0x19218, 0x1923e, 0x19260, 0x1927c, 0x192c0, 0x192f8, 0x19338, 0x19370, 0x1937e, 0x19382, 0x19384, 0x19390,\n        0x1939e, 0x193a0, 0x193bc, 0x193c6, 0x193cc, 0x193d8, 0x193ee, 0x193f2, 0x193f4, 0x19430, 0x1943e, 0x19460,\n        0x1947c, 0x194c0, 0x194f8, 0x195f0, 0x19638, 0x19670, 0x1967e, 0x196e0, 0x196fc, 0x19702, 0x19704, 0x19708,\n        0x19710, 0x19720, 0x1973c, 0x19740, 0x19778, 0x19786, 0x1978c, 0x19798, 0x197b0, 0x197be, 0x197ce, 0x197dc,\n        0x197e2, 0x197e4, 0x197e8, 0x19822, 0x19824, 0x19842, 0x19848, 0x19850, 0x1985e, 0x19866, 0x1987a, 0x19882,\n        0x19884, 0x19890, 0x1989e, 0x198a0, 0x198bc, 0x198cc, 0x198f2, 0x198f4, 0x19902, 0x19908, 0x1991e, 0x19920,\n        0x1993c, 0x19940, 0x19978, 0x19986, 0x19998, 0x199ce, 0x199e2, 0x199e4, 0x199e8, 0x19a08, 0x19a10, 0x19a1e,\n        0x19a20, 0x19a3c, 0x19a40, 0x19a78, 0x19af0, 0x19b18, 0x19b3e, 0x19b60, 0x19b9c, 0x19bc2, 0x19bc4, 0x19bc8,\n        0x19bd0, 0x19be6, 0x19c2e, 0x19c34, 0x19c4e, 0x19c5c, 0x19c62, 0x19c64, 0x19c68, 0x19c8e, 0x19c9c, 0x19cb8,\n        0x19cc2, 0x19cc8, 0x19cd0, 0x19ce6, 0x19cfa, 0x19d0e, 0x19d1c, 0x19d38, 0x19d70, 0x19d7e, 0x19d82, 0x19d84,\n        0x19d88, 0x19d90, 0x19da0, 0x19dcc, 0x19df2, 0x19df4, 0x19e16, 0x19e26, 0x19e2c, 0x19e46, 0x19e4c, 0x19e58,\n        0x19e74, 0x19e86, 0x19e8c, 0x19e98, 0x19eb0, 0x19ebe, 0x19ece, 0x19ee2, 0x19ee4, 0x19ee8, 0x19f0a, 0x19f12,\n        0x19f14, 0x19f22, 0x19f24, 0x19f28, 0x19f42, 0x19f44, 0x19f48, 0x19f50, 0x19f5e, 0x19f6c, 0x19f9a, 0x19fae,\n        0x19fb2, 0x19fb4, 0x1a046, 0x1a04c, 0x1a072, 0x1a074, 0x1a086, 0x1a08c, 0x1a098, 0x1a0b0, 0x1a0be, 0x1a0e2,\n        0x1a0e4, 0x1a0e8, 0x1a0f6, 0x1a106, 0x1a10c, 0x1a118, 0x1a130, 0x1a13e, 0x1a160, 0x1a17c, 0x1a18e, 0x1a19c,\n        0x1a1b8, 0x1a1c2, 0x1a1c4, 0x1a1c8, 0x1a1d0, 0x1a1de, 0x1a1e6, 0x1a1ec, 0x1a218, 0x1a230, 0x1a23e, 0x1a260,\n        0x1a27c, 0x1a2c0, 0x1a2f8, 0x1a31c, 0x1a338, 0x1a370, 0x1a37e, 0x1a382, 0x1a384, 0x1a388, 0x1a390, 0x1a39e,\n        0x1a3a0, 0x1a3bc, 0x1a3c6, 0x1a3cc, 0x1a3d8, 0x1a3ee, 0x1a3f2, 0x1a3f4, 0x1a418, 0x1a430, 0x1a43e, 0x1a460,\n        0x1a47c, 0x1a4c0, 0x1a4f8, 0x1a5f0, 0x1a61c, 0x1a638, 0x1a670, 0x1a67e, 0x1a6e0, 0x1a6fc, 0x1a702, 0x1a704,\n        0x1a708, 0x1a710, 0x1a71e, 0x1a720, 0x1a73c, 0x1a740, 0x1a778, 0x1a786, 0x1a78c, 0x1a798, 0x1a7b0, 0x1a7be,\n        0x1a7ce, 0x1a7dc, 0x1a7e2, 0x1a7e4, 0x1a7e8, 0x1a830, 0x1a860, 0x1a87c, 0x1a8c0, 0x1a8f8, 0x1a9f0, 0x1abe0,\n        0x1ac70, 0x1ac7e, 0x1ace0, 0x1acfc, 0x1adc0, 0x1adf8, 0x1ae04, 0x1ae08, 0x1ae10, 0x1ae20, 0x1ae3c, 0x1ae40,\n        0x1ae78, 0x1aef0, 0x1af06, 0x1af0c, 0x1af18, 0x1af30, 0x1af3e, 0x1af60, 0x1af7c, 0x1af8e, 0x1af9c, 0x1afb8,\n        0x1afc4, 0x1afc8, 0x1afd0, 0x1afde, 0x1b042, 0x1b05e, 0x1b07a, 0x1b082, 0x1b084, 0x1b088, 0x1b090, 0x1b09e,\n        0x1b0a0, 0x1b0bc, 0x1b0cc, 0x1b0f2, 0x1b0f4, 0x1b102, 0x1b104, 0x1b108, 0x1b110, 0x1b11e, 0x1b120, 0x1b13c,\n        0x1b140, 0x1b178, 0x1b186, 0x1b198, 0x1b1ce, 0x1b1e2, 0x1b1e4, 0x1b1e8, 0x1b204, 0x1b208, 0x1b210, 0x1b21e,\n        0x1b220, 0x1b23c, 0x1b240, 0x1b278, 0x1b2f0, 0x1b30c, 0x1b33e, 0x1b360, 0x1b39c, 0x1b3c2, 0x1b3c4, 0x1b3c8,\n        0x1b3d0, 0x1b3e6, 0x1b410, 0x1b41e, 0x1b420, 0x1b43c, 0x1b440, 0x1b478, 0x1b4f0, 0x1b5e0, 0x1b618, 0x1b660,\n        0x1b67c, 0x1b6c0, 0x1b738, 0x1b782, 0x1b784, 0x1b788, 0x1b790, 0x1b79e, 0x1b7a0, 0x1b7cc, 0x1b82e, 0x1b84e,\n        0x1b85c, 0x1b88e, 0x1b89c, 0x1b8b8, 0x1b8c2, 0x1b8c4, 0x1b8c8, 0x1b8d0, 0x1b8e6, 0x1b8fa, 0x1b90e, 0x1b91c,\n        0x1b938, 0x1b970, 0x1b97e, 0x1b982, 0x1b984, 0x1b988, 0x1b990, 0x1b99e, 0x1b9a0, 0x1b9cc, 0x1b9f2, 0x1b9f4,\n        0x1ba0e, 0x1ba1c, 0x1ba38, 0x1ba70, 0x1ba7e, 0x1bae0, 0x1bafc, 0x1bb08, 0x1bb10, 0x1bb20, 0x1bb3c, 0x1bb40,\n        0x1bb98, 0x1bbce, 0x1bbe2, 0x1bbe4, 0x1bbe8, 0x1bc16, 0x1bc26, 0x1bc2c, 0x1bc46, 0x1bc4c, 0x1bc58, 0x1bc72,\n        0x1bc74, 0x1bc86, 0x1bc8c, 0x1bc98, 0x1bcb0, 0x1bcbe, 0x1bcce, 0x1bce2, 0x1bce4, 0x1bce8, 0x1bd06, 0x1bd0c,\n        0x1bd18, 0x1bd30, 0x1bd3e, 0x1bd60, 0x1bd7c, 0x1bd9c, 0x1bdc2, 0x1bdc4, 0x1bdc8, 0x1bdd0, 0x1bde6, 0x1bdfa,\n        0x1be12, 0x1be14, 0x1be22, 0x1be24, 0x1be28, 0x1be42, 0x1be44, 0x1be48, 0x1be50, 0x1be5e, 0x1be66, 0x1be82,\n        0x1be84, 0x1be88, 0x1be90, 0x1be9e, 0x1bea0, 0x1bebc, 0x1becc, 0x1bef4, 0x1bf1a, 0x1bf2e, 0x1bf32, 0x1bf34,\n        0x1bf4e, 0x1bf5c, 0x1bf62, 0x1bf64, 0x1bf68, 0x1c09a, 0x1c0b2, 0x1c0b4, 0x1c11a, 0x1c132, 0x1c134, 0x1c162,\n        0x1c164, 0x1c168, 0x1c176, 0x1c1ba, 0x1c21a, 0x1c232, 0x1c234, 0x1c24e, 0x1c25c, 0x1c262, 0x1c264, 0x1c268,\n        0x1c276, 0x1c28e, 0x1c2c2, 0x1c2c4, 0x1c2c8, 0x1c2d0, 0x1c2de, 0x1c2e6, 0x1c2ec, 0x1c2fa, 0x1c316, 0x1c326,\n        0x1c33a, 0x1c346, 0x1c34c, 0x1c372, 0x1c374, 0x1c41a, 0x1c42e, 0x1c432, 0x1c434, 0x1c44e, 0x1c45c, 0x1c462,\n        0x1c464, 0x1c468, 0x1c476, 0x1c48e, 0x1c49c, 0x1c4b8, 0x1c4c2, 0x1c4c8, 0x1c4d0, 0x1c4de, 0x1c4e6, 0x1c4ec,\n        0x1c4fa, 0x1c51c, 0x1c538, 0x1c570, 0x1c57e, 0x1c582, 0x1c584, 0x1c588, 0x1c590, 0x1c59e, 0x1c5a0, 0x1c5bc,\n        0x1c5c6, 0x1c5cc, 0x1c5d8, 0x1c5ee, 0x1c5f2, 0x1c5f4, 0x1c616, 0x1c626, 0x1c62c, 0x1c63a, 0x1c646, 0x1c64c,\n        0x1c658, 0x1c66e, 0x1c672, 0x1c674, 0x1c686, 0x1c68c, 0x1c698, 0x1c6b0, 0x1c6be, 0x1c6ce, 0x1c6dc, 0x1c6e2,\n        0x1c6e4, 0x1c6e8, 0x1c712, 0x1c714, 0x1c722, 0x1c728, 0x1c736, 0x1c742, 0x1c744, 0x1c748, 0x1c750, 0x1c75e,\n        0x1c766, 0x1c76c, 0x1c77a, 0x1c7ae, 0x1c7d6, 0x1c7ea, 0x1c81a, 0x1c82e, 0x1c832, 0x1c834, 0x1c84e, 0x1c85c,\n        0x1c862, 0x1c864, 0x1c868, 0x1c876, 0x1c88e, 0x1c89c, 0x1c8b8, 0x1c8c2, 0x1c8c8, 0x1c8d0, 0x1c8de, 0x1c8e6,\n        0x1c8ec, 0x1c8fa, 0x1c90e, 0x1c938, 0x1c970, 0x1c97e, 0x1c982, 0x1c984, 0x1c990, 0x1c99e, 0x1c9a0, 0x1c9bc,\n        0x1c9c6, 0x1c9cc, 0x1c9d8, 0x1c9ee, 0x1c9f2, 0x1c9f4, 0x1ca38, 0x1ca70, 0x1ca7e, 0x1cae0, 0x1cafc, 0x1cb02,\n        0x1cb04, 0x1cb08, 0x1cb10, 0x1cb20, 0x1cb3c, 0x1cb40, 0x1cb78, 0x1cb86, 0x1cb8c, 0x1cb98, 0x1cbb0, 0x1cbbe,\n        0x1cbce, 0x1cbdc, 0x1cbe2, 0x1cbe4, 0x1cbe8, 0x1cbf6, 0x1cc16, 0x1cc26, 0x1cc2c, 0x1cc3a, 0x1cc46, 0x1cc58,\n        0x1cc72, 0x1cc74, 0x1cc86, 0x1ccb0, 0x1ccbe, 0x1ccce, 0x1cce2, 0x1cce4, 0x1cce8, 0x1cd06, 0x1cd0c, 0x1cd18,\n        0x1cd30, 0x1cd3e, 0x1cd60, 0x1cd7c, 0x1cd9c, 0x1cdc2, 0x1cdc4, 0x1cdc8, 0x1cdd0, 0x1cdde, 0x1cde6, 0x1cdfa,\n        0x1ce22, 0x1ce28, 0x1ce42, 0x1ce50, 0x1ce5e, 0x1ce66, 0x1ce7a, 0x1ce82, 0x1ce84, 0x1ce88, 0x1ce90, 0x1ce9e,\n        0x1cea0, 0x1cebc, 0x1cecc, 0x1cef2, 0x1cef4, 0x1cf2e, 0x1cf32, 0x1cf34, 0x1cf4e, 0x1cf5c, 0x1cf62, 0x1cf64,\n        0x1cf68, 0x1cf96, 0x1cfa6, 0x1cfac, 0x1cfca, 0x1cfd2, 0x1cfd4, 0x1d02e, 0x1d032, 0x1d034, 0x1d04e, 0x1d05c,\n        0x1d062, 0x1d064, 0x1d068, 0x1d076, 0x1d08e, 0x1d09c, 0x1d0b8, 0x1d0c2, 0x1d0c4, 0x1d0c8, 0x1d0d0, 0x1d0de,\n        0x1d0e6, 0x1d0ec, 0x1d0fa, 0x1d11c, 0x1d138, 0x1d170, 0x1d17e, 0x1d182, 0x1d184, 0x1d188, 0x1d190, 0x1d19e,\n        0x1d1a0, 0x1d1bc, 0x1d1c6, 0x1d1cc, 0x1d1d8, 0x1d1ee, 0x1d1f2, 0x1d1f4, 0x1d21c, 0x1d238, 0x1d270, 0x1d27e,\n        0x1d2e0, 0x1d2fc, 0x1d302, 0x1d304, 0x1d308, 0x1d310, 0x1d31e, 0x1d320, 0x1d33c, 0x1d340, 0x1d378, 0x1d386,\n        0x1d38c, 0x1d398, 0x1d3b0, 0x1d3be, 0x1d3ce, 0x1d3dc, 0x1d3e2, 0x1d3e4, 0x1d3e8, 0x1d3f6, 0x1d470, 0x1d47e,\n        0x1d4e0, 0x1d4fc, 0x1d5c0, 0x1d5f8, 0x1d604, 0x1d608, 0x1d610, 0x1d620, 0x1d640, 0x1d678, 0x1d6f0, 0x1d706,\n        0x1d70c, 0x1d718, 0x1d730, 0x1d73e, 0x1d760, 0x1d77c, 0x1d78e, 0x1d79c, 0x1d7b8, 0x1d7c2, 0x1d7c4, 0x1d7c8,\n        0x1d7d0, 0x1d7de, 0x1d7e6, 0x1d7ec, 0x1d826, 0x1d82c, 0x1d83a, 0x1d846, 0x1d84c, 0x1d858, 0x1d872, 0x1d874,\n        0x1d886, 0x1d88c, 0x1d898, 0x1d8b0, 0x1d8be, 0x1d8ce, 0x1d8e2, 0x1d8e4, 0x1d8e8, 0x1d8f6, 0x1d90c, 0x1d918,\n        0x1d930, 0x1d93e, 0x1d960, 0x1d97c, 0x1d99c, 0x1d9c2, 0x1d9c4, 0x1d9c8, 0x1d9d0, 0x1d9e6, 0x1d9fa, 0x1da0c,\n        0x1da18, 0x1da30, 0x1da3e, 0x1da60, 0x1da7c, 0x1dac0, 0x1daf8, 0x1db38, 0x1db82, 0x1db84, 0x1db88, 0x1db90,\n        0x1db9e, 0x1dba0, 0x1dbcc, 0x1dbf2, 0x1dbf4, 0x1dc22, 0x1dc42, 0x1dc44, 0x1dc48, 0x1dc50, 0x1dc5e, 0x1dc66,\n        0x1dc7a, 0x1dc82, 0x1dc84, 0x1dc88, 0x1dc90, 0x1dc9e, 0x1dca0, 0x1dcbc, 0x1dccc, 0x1dcf2, 0x1dcf4, 0x1dd04,\n        0x1dd08, 0x1dd10, 0x1dd1e, 0x1dd20, 0x1dd3c, 0x1dd40, 0x1dd78, 0x1dd86, 0x1dd98, 0x1ddce, 0x1dde2, 0x1dde4,\n        0x1dde8, 0x1de2e, 0x1de32, 0x1de34, 0x1de4e, 0x1de5c, 0x1de62, 0x1de64, 0x1de68, 0x1de8e, 0x1de9c, 0x1deb8,\n        0x1dec2, 0x1dec4, 0x1dec8, 0x1ded0, 0x1dee6, 0x1defa, 0x1df16, 0x1df26, 0x1df2c, 0x1df46, 0x1df4c, 0x1df58,\n        0x1df72, 0x1df74, 0x1df8a, 0x1df92, 0x1df94, 0x1dfa2, 0x1dfa4, 0x1dfa8, 0x1e08a, 0x1e092, 0x1e094, 0x1e0a2,\n        0x1e0a4, 0x1e0a8, 0x1e0b6, 0x1e0da, 0x1e10a, 0x1e112, 0x1e114, 0x1e122, 0x1e124, 0x1e128, 0x1e136, 0x1e142,\n        0x1e144, 0x1e148, 0x1e150, 0x1e166, 0x1e16c, 0x1e17a, 0x1e19a, 0x1e1b2, 0x1e1b4, 0x1e20a, 0x1e212, 0x1e214,\n        0x1e222, 0x1e224, 0x1e228, 0x1e236, 0x1e242, 0x1e248, 0x1e250, 0x1e25e, 0x1e266, 0x1e26c, 0x1e27a, 0x1e282,\n        0x1e284, 0x1e288, 0x1e290, 0x1e2a0, 0x1e2bc, 0x1e2c6, 0x1e2cc, 0x1e2d8, 0x1e2ee, 0x1e2f2, 0x1e2f4, 0x1e31a,\n        0x1e332, 0x1e334, 0x1e35c, 0x1e362, 0x1e364, 0x1e368, 0x1e3ba, 0x1e40a, 0x1e412, 0x1e414, 0x1e422, 0x1e428,\n        0x1e436, 0x1e442, 0x1e448, 0x1e450, 0x1e45e, 0x1e466, 0x1e46c, 0x1e47a, 0x1e482, 0x1e484, 0x1e490, 0x1e49e,\n        0x1e4a0, 0x1e4bc, 0x1e4c6, 0x1e4cc, 0x1e4d8, 0x1e4ee, 0x1e4f2, 0x1e4f4, 0x1e502, 0x1e504, 0x1e508, 0x1e510,\n        0x1e51e, 0x1e520, 0x1e53c, 0x1e540, 0x1e578, 0x1e586, 0x1e58c, 0x1e598, 0x1e5b0, 0x1e5be, 0x1e5ce, 0x1e5dc,\n        0x1e5e2, 0x1e5e4, 0x1e5e8, 0x1e5f6, 0x1e61a, 0x1e62e, 0x1e632, 0x1e634, 0x1e64e, 0x1e65c, 0x1e662, 0x1e668,\n        0x1e68e, 0x1e69c, 0x1e6b8, 0x1e6c2, 0x1e6c4, 0x1e6c8, 0x1e6d0, 0x1e6e6, 0x1e6fa, 0x1e716, 0x1e726, 0x1e72c,\n        0x1e73a, 0x1e746, 0x1e74c, 0x1e758, 0x1e772, 0x1e774, 0x1e792, 0x1e794, 0x1e7a2, 0x1e7a4, 0x1e7a8, 0x1e7b6,\n        0x1e812, 0x1e814, 0x1e822, 0x1e824, 0x1e828, 0x1e836, 0x1e842, 0x1e844, 0x1e848, 0x1e850, 0x1e85e, 0x1e866,\n        0x1e86c, 0x1e87a, 0x1e882, 0x1e884, 0x1e888, 0x1e890, 0x1e89e, 0x1e8a0, 0x1e8bc, 0x1e8c6, 0x1e8cc, 0x1e8d8,\n        0x1e8ee, 0x1e8f2, 0x1e8f4, 0x1e902, 0x1e904, 0x1e908, 0x1e910, 0x1e920, 0x1e93c, 0x1e940, 0x1e978, 0x1e986,\n        0x1e98c, 0x1e998, 0x1e9b0, 0x1e9be, 0x1e9ce, 0x1e9dc, 0x1e9e2, 0x1e9e4, 0x1e9e8, 0x1e9f6, 0x1ea04, 0x1ea08,\n        0x1ea10, 0x1ea20, 0x1ea40, 0x1ea78, 0x1eaf0, 0x1eb06, 0x1eb0c, 0x1eb18, 0x1eb30, 0x1eb3e, 0x1eb60, 0x1eb7c,\n        0x1eb8e, 0x1eb9c, 0x1ebb8, 0x1ebc2, 0x1ebc4, 0x1ebc8, 0x1ebd0, 0x1ebde, 0x1ebe6, 0x1ebec, 0x1ec1a, 0x1ec2e,\n        0x1ec32, 0x1ec34, 0x1ec4e, 0x1ec5c, 0x1ec62, 0x1ec64, 0x1ec68, 0x1ec8e, 0x1ec9c, 0x1ecb8, 0x1ecc2, 0x1ecc4,\n        0x1ecc8, 0x1ecd0, 0x1ece6, 0x1ecfa, 0x1ed0e, 0x1ed1c, 0x1ed38, 0x1ed70, 0x1ed7e, 0x1ed82, 0x1ed84, 0x1ed88,\n        0x1ed90, 0x1ed9e, 0x1eda0, 0x1edcc, 0x1edf2, 0x1edf4, 0x1ee16, 0x1ee26, 0x1ee2c, 0x1ee3a, 0x1ee46, 0x1ee4c,\n        0x1ee58, 0x1ee6e, 0x1ee72, 0x1ee74, 0x1ee86, 0x1ee8c, 0x1ee98, 0x1eeb0, 0x1eebe, 0x1eece, 0x1eedc, 0x1eee2,\n        0x1eee4, 0x1eee8, 0x1ef12, 0x1ef22, 0x1ef24, 0x1ef28, 0x1ef36, 0x1ef42, 0x1ef44, 0x1ef48, 0x1ef50, 0x1ef5e,\n        0x1ef66, 0x1ef6c, 0x1ef7a, 0x1efae, 0x1efb2, 0x1efb4, 0x1efd6, 0x1f096, 0x1f0a6, 0x1f0ac, 0x1f0ba, 0x1f0ca,\n        0x1f0d2, 0x1f0d4, 0x1f116, 0x1f126, 0x1f12c, 0x1f13a, 0x1f146, 0x1f14c, 0x1f158, 0x1f16e, 0x1f172, 0x1f174,\n        0x1f18a, 0x1f192, 0x1f194, 0x1f1a2, 0x1f1a4, 0x1f1a8, 0x1f1da, 0x1f216, 0x1f226, 0x1f22c, 0x1f23a, 0x1f246,\n        0x1f258, 0x1f26e, 0x1f272, 0x1f274, 0x1f286, 0x1f28c, 0x1f298, 0x1f2b0, 0x1f2be, 0x1f2ce, 0x1f2dc, 0x1f2e2,\n        0x1f2e4, 0x1f2e8, 0x1f2f6, 0x1f30a, 0x1f312, 0x1f314, 0x1f322, 0x1f328, 0x1f342, 0x1f344, 0x1f348, 0x1f350,\n        0x1f35e, 0x1f366, 0x1f37a, 0x1f39a, 0x1f3ae, 0x1f3b2, 0x1f3b4, 0x1f416, 0x1f426, 0x1f42c, 0x1f43a, 0x1f446,\n        0x1f44c, 0x1f458, 0x1f46e, 0x1f472, 0x1f474, 0x1f486, 0x1f48c, 0x1f498, 0x1f4b0, 0x1f4be, 0x1f4ce, 0x1f4dc,\n        0x1f4e2, 0x1f4e4, 0x1f4e8, 0x1f4f6, 0x1f506, 0x1f50c, 0x1f518, 0x1f530, 0x1f53e, 0x1f560, 0x1f57c, 0x1f58e,\n        0x1f59c, 0x1f5b8, 0x1f5c2, 0x1f5c4, 0x1f5c8, 0x1f5d0, 0x1f5de, 0x1f5e6, 0x1f5ec, 0x1f5fa, 0x1f60a, 0x1f612,\n        0x1f614, 0x1f622, 0x1f624, 0x1f628, 0x1f636, 0x1f642, 0x1f644, 0x1f648, 0x1f650, 0x1f65e, 0x1f666, 0x1f67a,\n        0x1f682, 0x1f684, 0x1f688, 0x1f690, 0x1f69e, 0x1f6a0, 0x1f6bc, 0x1f6cc, 0x1f6f2, 0x1f6f4, 0x1f71a, 0x1f72e,\n        0x1f732, 0x1f734, 0x1f74e, 0x1f75c, 0x1f762, 0x1f764, 0x1f768, 0x1f776, 0x1f796, 0x1f7a6, 0x1f7ac, 0x1f7ba,\n        0x1f7d2, 0x1f7d4, 0x1f89a, 0x1f8ae, 0x1f8b2, 0x1f8b4, 0x1f8d6, 0x1f8ea, 0x1f91a, 0x1f92e, 0x1f932, 0x1f934,\n        0x1f94e, 0x1f95c, 0x1f962, 0x1f964, 0x1f968, 0x1f976, 0x1f996, 0x1f9a6, 0x1f9ac, 0x1f9ba, 0x1f9ca, 0x1f9d2,\n        0x1f9d4, 0x1fa1a, 0x1fa2e, 0x1fa32, 0x1fa34, 0x1fa4e, 0x1fa5c, 0x1fa62, 0x1fa64, 0x1fa68, 0x1fa76, 0x1fa8e,\n        0x1fa9c, 0x1fab8, 0x1fac2, 0x1fac4, 0x1fac8, 0x1fad0, 0x1fade, 0x1fae6, 0x1faec, 0x1fb16, 0x1fb26, 0x1fb2c,\n        0x1fb3a, 0x1fb46, 0x1fb4c, 0x1fb58, 0x1fb6e, 0x1fb72, 0x1fb74, 0x1fb8a, 0x1fb92, 0x1fb94, 0x1fba2, 0x1fba4,\n        0x1fba8, 0x1fbb6, 0x1fbda\n    ]);\n    /**\n     * This table contains to codewords for all symbols.\n     */\n    PDF417Common.CODEWORD_TABLE = Int32Array.from([\n        2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865, 861, 859, 2511,\n        873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815,\n        814, 813, 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752,\n        2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413, 754, 752,\n        1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651,\n        646, 643, 2345, 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, 608, 606,\n        2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909,\n        2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, 2485, 1748, 836, 834, 832, 830,\n        2494, 827, 2492, 843, 841, 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, 2629,\n        1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591,\n        588, 576, 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, 1572, 1570, 481, 2245, 466,\n        2242, 462, 2239, 492, 485, 482, 2249, 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, 419,\n        2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155,\n        2152, 378, 377, 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416, 1414, 385, 1411, 384,\n        1423, 1422, 1420, 1424, 2461, 802, 2441, 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756,\n        753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337,\n        2336, 2334, 2332, 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655, 653, 1653,\n        1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900,\n        910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513, 876, 874, 1782, 2720, 2713,\n        2711, 2697, 2694, 2691, 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822, 2654,\n        2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142,\n        332, 2140, 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132, 1354, 1352, 1349, 1356, 262,\n        257, 2101, 253, 2096, 2093, 274, 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318, 2052,\n        202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266,\n        1264, 1261, 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006, 159, 2003, 2000, 172, 171,\n        169, 2012, 166, 2010, 1186, 1184, 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313,\n        2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529,\n        2278, 525, 2275, 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247, 470, 2244, 465, 2241,\n        493, 488, 484, 2250, 498, 495, 1536, 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414,\n        412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434,\n        1477, 1475, 2478, 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789, 785,\n        2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353,\n        1661, 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701, 698, 705, 1691, 1689,\n        2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573,\n        2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539,\n        906, 903, 911, 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, 1824, 2673, 2671, 2669,\n        2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133,\n        131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, 112, 110, 1974, 107, 1973, 104, 1971,\n        1969, 122, 121, 119, 117, 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, 1953, 81, 1952, 78,\n        1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100,\n        1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64,\n        1931, 61, 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869, 1867,\n        1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989,\n        987, 984, 34, 995, 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, 1359,\n        343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308,\n        305, 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, 1351, 1357, 2092, 2091, 2089,\n        2087, 1276, 2084, 1274, 2081, 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, 279,\n        277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205,\n        2051, 201, 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, 1259, 1257, 1254, 232,\n        1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590,\n        2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, 571, 2298, 582, 581, 1592, 2263, 2262,\n        2260, 2258, 1545, 2255, 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, 546, 543, 549,\n        1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480,\n        477, 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, 2476, 2474, 2479, 2469, 2468, 2466,\n        2464, 1730, 2473, 2471, 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, 2427,\n        2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388,\n        2386, 2384, 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, 2410, 2407, 751,\n        748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592,\n        2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569,\n        2578, 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695,\n        2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818,\n        2726, 2776, 782, 740, 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648,\n        602, 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, 892,\n        886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632,\n        2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486,\n        483, 1524, 1521, 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, 2210, 366,\n        363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412,\n        1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, 674, 668, 2363, 665, 2360, 685, 1684,\n        1681, 626, 624, 622, 2335, 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925, 2530, 2527,\n        894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759,\n        2757, 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296, 2126, 315, 312, 1347, 1342,\n        1350, 261, 258, 250, 2097, 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195,\n        2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997,\n        150, 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170, 1164, 167, 1185, 1183,\n        1180, 1177, 174, 1190, 1188, 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268,\n        508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395,\n        2185, 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433, 2430, 779,\n        776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688,\n        1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718,\n        2709, 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138,\n        134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, 115, 1109, 1108,\n        1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98,\n        1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920,\n        1031, 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, 1046, 1044, 1944, 1943, 1941, 11, 9,\n        1868, 7, 1865, 1862, 1859, 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983, 981, 978, 975,\n        33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339,\n        1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090,\n        239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033,\n        2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, 2300, 2286, 2284,\n        2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569,\n        1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467,\n        2465, 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, 2382, 2379,\n        1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579,\n        1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688,\n        2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636,\n        1633, 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584, 524,\n        1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361,\n        358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672,\n        669, 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849,\n        848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, 1340, 1338, 1335, 1343,\n        255, 251, 247, 1296, 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210,\n        1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157,\n        1173, 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, 1562, 1559, 458,\n        447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460,\n        2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919,\n        2519, 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, 1125, 1124, 1122, 1127,\n        109, 106, 102, 1103, 1102, 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, 1060,\n        87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008,\n        51, 1029, 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4, 1863, 1, 1860, 956, 954, 952,\n        949, 946, 17, 14, 969, 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903, 350,\n        349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086,\n        233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231,\n        1229, 1226, 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257, 499,\n        2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, 1512, 2447, 798,\n        797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546,\n        2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670,\n        1668, 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, 1504,\n        1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394,\n        1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281,\n        1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150,\n        1148, 1146, 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582,\n        510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, 1709,\n        662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094,\n        1092, 103, 1101, 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007,\n        1006, 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940,\n        938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897,\n        1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185,\n        181, 178, 2028, 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, 500, 513,\n        1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706,\n        2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, 1749, 1747, 1499, 1438, 1435, 2204,\n        1390, 1388, 1385, 1395, 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, 1207,\n        1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487,\n        1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, 1055, 1052, 1062,\n        1962, 1960, 1005, 1003, 1000, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951,\n        948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275,\n        1272, 1269, 235, 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, 1551, 1548,\n        440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208,\n        2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954,\n        1001, 998, 1924, 1921, 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270,\n        2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, 1478, 1491, 1700\n    ]);\n\n    /*\n    * Copyright 2007 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    // import java.util.List;\n    /**\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417DetectorResult {\n        constructor(bits, points) {\n            this.bits = bits;\n            this.points = points;\n        }\n        getBits() {\n            return this.bits;\n        }\n        getPoints() {\n            return this.points;\n        }\n    }\n\n    /*\n    * Copyright 2009 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    // import java.util.ArrayList;\n    // import java.util.Arrays;\n    // import java.util.List;\n    // import java.util.Map;\n    /**\n     * <p>Encapsulates logic that can detect a PDF417 Code in an image, even if the\n     * PDF417 Code is rotated or skewed, or partially obscured.</p>\n     *\n     * @author SITA Lab (kevin.osullivan@sita.aero)\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Guenther Grau\n     */\n    /*public*/ /*final*/ class Detector$3 {\n        /**\n         * <p>Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.</p>\n         *\n         * @param image barcode image to decode\n         * @param hints optional hints to detector\n         * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will\n         * be found and returned\n         * @return {@link PDF417DetectorResult} encapsulating results of detecting a PDF417 code\n         * @throws NotFoundException if no PDF417 Code can be found\n         */\n        static detectMultiple(image, hints, multiple) {\n            // TODO detection improvement, tryHarder could try several different luminance thresholds/blackpoints or even\n            // different binarizers\n            // boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);\n            let bitMatrix = image.getBlackMatrix();\n            let barcodeCoordinates = Detector$3.detect(multiple, bitMatrix);\n            if (!barcodeCoordinates.length) {\n                bitMatrix = bitMatrix.clone();\n                bitMatrix.rotate180();\n                barcodeCoordinates = Detector$3.detect(multiple, bitMatrix);\n            }\n            return new PDF417DetectorResult(bitMatrix, barcodeCoordinates);\n        }\n        /**\n         * Detects PDF417 codes in an image. Only checks 0 degree rotation\n         * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will\n         * be found and returned\n         * @param bitMatrix bit matrix to detect barcodes in\n         * @return List of ResultPoint arrays containing the coordinates of found barcodes\n         */\n        static detect(multiple, bitMatrix) {\n            const barcodeCoordinates = new Array();\n            let row = 0;\n            let column = 0;\n            let foundBarcodeInRow = false;\n            while (row < bitMatrix.getHeight()) {\n                const vertices = Detector$3.findVertices(bitMatrix, row, column);\n                if (vertices[0] == null && vertices[3] == null) {\n                    if (!foundBarcodeInRow) {\n                        // we didn't find any barcode so that's the end of searching\n                        break;\n                    }\n                    // we didn't find a barcode starting at the given column and row. Try again from the first column and slightly\n                    // below the lowest barcode we found so far.\n                    foundBarcodeInRow = false;\n                    column = 0;\n                    for (const barcodeCoordinate of barcodeCoordinates) {\n                        if (barcodeCoordinate[1] != null) {\n                            row = Math.trunc(Math.max(row, barcodeCoordinate[1].getY()));\n                        }\n                        if (barcodeCoordinate[3] != null) {\n                            row = Math.max(row, Math.trunc(barcodeCoordinate[3].getY()));\n                        }\n                    }\n                    row += Detector$3.ROW_STEP;\n                    continue;\n                }\n                foundBarcodeInRow = true;\n                barcodeCoordinates.push(vertices);\n                if (!multiple) {\n                    break;\n                }\n                // if we didn't find a right row indicator column, then continue the search for the next barcode after the\n                // start pattern of the barcode just found.\n                if (vertices[2] != null) {\n                    column = Math.trunc(vertices[2].getX());\n                    row = Math.trunc(vertices[2].getY());\n                }\n                else {\n                    column = Math.trunc(vertices[4].getX());\n                    row = Math.trunc(vertices[4].getY());\n                }\n            }\n            return barcodeCoordinates;\n        }\n        /**\n         * Locate the vertices and the codewords area of a black blob using the Start\n         * and Stop patterns as locators.\n         *\n         * @param matrix the scanned barcode image.\n         * @return an array containing the vertices:\n         *           vertices[0] x, y top left barcode\n         *           vertices[1] x, y bottom left barcode\n         *           vertices[2] x, y top right barcode\n         *           vertices[3] x, y bottom right barcode\n         *           vertices[4] x, y top left codeword area\n         *           vertices[5] x, y bottom left codeword area\n         *           vertices[6] x, y top right codeword area\n         *           vertices[7] x, y bottom right codeword area\n         */\n        static findVertices(matrix, startRow, startColumn) {\n            const height = matrix.getHeight();\n            const width = matrix.getWidth();\n            // const result = new ResultPoint[8];\n            const result = new Array(8);\n            Detector$3.copyToResult(result, Detector$3.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector$3.START_PATTERN), Detector$3.INDEXES_START_PATTERN);\n            if (result[4] != null) {\n                startColumn = Math.trunc(result[4].getX());\n                startRow = Math.trunc(result[4].getY());\n            }\n            Detector$3.copyToResult(result, Detector$3.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector$3.STOP_PATTERN), Detector$3.INDEXES_STOP_PATTERN);\n            return result;\n        }\n        static copyToResult(result, tmpResult, destinationIndexes) {\n            for (let i = 0; i < destinationIndexes.length; i++) {\n                result[destinationIndexes[i]] = tmpResult[i];\n            }\n        }\n        static findRowsWithPattern(matrix, height, width, startRow, startColumn, pattern) {\n            // const result = new ResultPoint[4];\n            const result = new Array(4);\n            let found = false;\n            const counters = new Int32Array(pattern.length);\n            for (; startRow < height; startRow += Detector$3.ROW_STEP) {\n                let loc = Detector$3.findGuardPattern(matrix, startColumn, startRow, width, false, pattern, counters);\n                if (loc != null) {\n                    while (startRow > 0) {\n                        const previousRowLoc = Detector$3.findGuardPattern(matrix, startColumn, --startRow, width, false, pattern, counters);\n                        if (previousRowLoc != null) {\n                            loc = previousRowLoc;\n                        }\n                        else {\n                            startRow++;\n                            break;\n                        }\n                    }\n                    result[0] = new ResultPoint(loc[0], startRow);\n                    result[1] = new ResultPoint(loc[1], startRow);\n                    found = true;\n                    break;\n                }\n            }\n            let stopRow = startRow + 1;\n            // Last row of the current symbol that contains pattern\n            if (found) {\n                let skippedRowCount = 0;\n                let previousRowLoc = Int32Array.from([Math.trunc(result[0].getX()), Math.trunc(result[1].getX())]);\n                for (; stopRow < height; stopRow++) {\n                    const loc = Detector$3.findGuardPattern(matrix, previousRowLoc[0], stopRow, width, false, pattern, counters);\n                    // a found pattern is only considered to belong to the same barcode if the start and end positions\n                    // don't differ too much. Pattern drift should be not bigger than two for consecutive rows. With\n                    // a higher number of skipped rows drift could be larger. To keep it simple for now, we allow a slightly\n                    // larger drift and don't check for skipped rows.\n                    if (loc != null &&\n                        Math.abs(previousRowLoc[0] - loc[0]) < Detector$3.MAX_PATTERN_DRIFT &&\n                        Math.abs(previousRowLoc[1] - loc[1]) < Detector$3.MAX_PATTERN_DRIFT) {\n                        previousRowLoc = loc;\n                        skippedRowCount = 0;\n                    }\n                    else {\n                        if (skippedRowCount > Detector$3.SKIPPED_ROW_COUNT_MAX) {\n                            break;\n                        }\n                        else {\n                            skippedRowCount++;\n                        }\n                    }\n                }\n                stopRow -= skippedRowCount + 1;\n                result[2] = new ResultPoint(previousRowLoc[0], stopRow);\n                result[3] = new ResultPoint(previousRowLoc[1], stopRow);\n            }\n            if (stopRow - startRow < Detector$3.BARCODE_MIN_HEIGHT) {\n                Arrays.fill(result, null);\n            }\n            return result;\n        }\n        /**\n         * @param matrix row of black/white values to search\n         * @param column x position to start search\n         * @param row y position to start search\n         * @param width the number of pixels to search on this row\n         * @param pattern pattern of counts of number of black and white pixels that are\n         *                 being searched for as a pattern\n         * @param counters array of counters, as long as pattern, to re-use\n         * @return start/end horizontal offset of guard pattern, as an array of two ints.\n         */\n        static findGuardPattern(matrix, column, row, width, whiteFirst, pattern, counters) {\n            Arrays.fillWithin(counters, 0, counters.length, 0);\n            let patternStart = column;\n            let pixelDrift = 0;\n            // if there are black pixels left of the current pixel shift to the left, but only for MAX_PIXEL_DRIFT pixels\n            while (matrix.get(patternStart, row) && patternStart > 0 && pixelDrift++ < Detector$3.MAX_PIXEL_DRIFT) {\n                patternStart--;\n            }\n            let x = patternStart;\n            let counterPosition = 0;\n            let patternLength = pattern.length;\n            for (let isWhite = whiteFirst; x < width; x++) {\n                let pixel = matrix.get(x, row);\n                if (pixel !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        if (Detector$3.patternMatchVariance(counters, pattern, Detector$3.MAX_INDIVIDUAL_VARIANCE) < Detector$3.MAX_AVG_VARIANCE) {\n                            return new Int32Array([patternStart, x]);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        System.arraycopy(counters, 2, counters, 0, counterPosition - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            if (counterPosition === patternLength - 1 &&\n                Detector$3.patternMatchVariance(counters, pattern, Detector$3.MAX_INDIVIDUAL_VARIANCE) < Detector$3.MAX_AVG_VARIANCE) {\n                return new Int32Array([patternStart, x - 1]);\n            }\n            return null;\n        }\n        /**\n         * Determines how closely a set of observed counts of runs of black/white\n         * values matches a given target pattern. This is reported as the ratio of\n         * the total variance from the expected pattern proportions across all\n         * pattern elements, to the length of the pattern.\n         *\n         * @param counters observed counters\n         * @param pattern expected pattern\n         * @param maxIndividualVariance The most any counter can differ before we give up\n         * @return ratio of total variance between counters and pattern compared to total pattern size\n         */\n        static patternMatchVariance(counters, pattern, maxIndividualVariance) {\n            let numCounters = counters.length;\n            let total = 0;\n            let patternLength = 0;\n            for (let i = 0; i < numCounters; i++) {\n                total += counters[i];\n                patternLength += pattern[i];\n            }\n            if (total < patternLength) {\n                // If we don't even have one pixel per unit of bar width, assume this\n                // is too small to reliably match, so fail:\n                return /*Float.POSITIVE_INFINITY*/ Infinity;\n            }\n            // We're going to fake floating-point math in integers. We just need to use more bits.\n            // Scale up patternLength so that intermediate values below like scaledCounter will have\n            // more \"significant digits\".\n            let unitBarWidth = total / patternLength;\n            maxIndividualVariance *= unitBarWidth;\n            let totalVariance = 0.0;\n            for (let x = 0; x < numCounters; x++) {\n                let counter = counters[x];\n                let scaledPattern = pattern[x] * unitBarWidth;\n                let variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;\n                if (variance > maxIndividualVariance) {\n                    return /*Float.POSITIVE_INFINITY*/ Infinity;\n                }\n                totalVariance += variance;\n            }\n            return totalVariance / total;\n        }\n    }\n    Detector$3.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]);\n    Detector$3.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]);\n    Detector$3.MAX_AVG_VARIANCE = 0.42;\n    Detector$3.MAX_INDIVIDUAL_VARIANCE = 0.8;\n    // B S B S B S B S Bar/Space pattern\n    // 11111111 0 1 0 1 0 1 000\n    Detector$3.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]);\n    // 1111111 0 1 000 1 0 1 00 1\n    Detector$3.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]);\n    Detector$3.MAX_PIXEL_DRIFT = 3;\n    Detector$3.MAX_PATTERN_DRIFT = 5;\n    // if we set the value too low, then we don't detect the correct height of the bar if the start patterns are damaged.\n    // if we set the value too high, then we might detect the start pattern from a neighbor barcode.\n    Detector$3.SKIPPED_ROW_COUNT_MAX = 25;\n    // A PDF471 barcode should have at least 3 rows, with each row being >= 3 times the module width. Therefore it should be at least\n    // 9 pixels tall. To be conservative, we use about half the size to ensure we don't miss it.\n    Detector$3.ROW_STEP = 5;\n    Detector$3.BARCODE_MIN_HEIGHT = 10;\n\n    /*\n    * Copyright 2012 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author Sean Owen\n     * @see com.google.zxing.common.reedsolomon.GenericGFPoly\n     */\n    /*final*/ class ModulusPoly {\n        constructor(field, coefficients) {\n            if (coefficients.length === 0) {\n                throw new IllegalArgumentException();\n            }\n            this.field = field;\n            let coefficientsLength = /*int*/ coefficients.length;\n            if (coefficientsLength > 1 && coefficients[0] === 0) {\n                // Leading term must be non-zero for anything except the constant polynomial \"0\"\n                let firstNonZero = /*int*/ 1;\n                while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n                    firstNonZero++;\n                }\n                if (firstNonZero === coefficientsLength) {\n                    this.coefficients = new Int32Array([0]);\n                }\n                else {\n                    this.coefficients = new Int32Array(coefficientsLength - firstNonZero);\n                    System.arraycopy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.length);\n                }\n            }\n            else {\n                this.coefficients = coefficients;\n            }\n        }\n        getCoefficients() {\n            return this.coefficients;\n        }\n        /**\n         * @return degree of this polynomial\n         */\n        getDegree() {\n            return this.coefficients.length - 1;\n        }\n        /**\n         * @return true iff this polynomial is the monomial \"0\"\n         */\n        isZero() {\n            return this.coefficients[0] === 0;\n        }\n        /**\n         * @return coefficient of x^degree term in this polynomial\n         */\n        getCoefficient(degree) {\n            return this.coefficients[this.coefficients.length - 1 - degree];\n        }\n        /**\n         * @return evaluation of this polynomial at a given point\n         */\n        evaluateAt(a) {\n            if (a === 0) {\n                // Just return the x^0 coefficient\n                return this.getCoefficient(0);\n            }\n            if (a === 1) {\n                // Just the sum of the coefficients\n                let sum = /*int*/ 0;\n                for (let coefficient /*int*/ of this.coefficients) {\n                    sum = this.field.add(sum, coefficient);\n                }\n                return sum;\n            }\n            let result = /*int*/ this.coefficients[0];\n            let size = /*int*/ this.coefficients.length;\n            for (let i /*int*/ = 1; i < size; i++) {\n                result = this.field.add(this.field.multiply(a, result), this.coefficients[i]);\n            }\n            return result;\n        }\n        add(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n            }\n            if (this.isZero()) {\n                return other;\n            }\n            if (other.isZero()) {\n                return this;\n            }\n            let smallerCoefficients = this.coefficients;\n            let largerCoefficients = other.coefficients;\n            if (smallerCoefficients.length > largerCoefficients.length) {\n                let temp = smallerCoefficients;\n                smallerCoefficients = largerCoefficients;\n                largerCoefficients = temp;\n            }\n            let sumDiff = new Int32Array(largerCoefficients.length);\n            let lengthDiff = /*int*/ largerCoefficients.length - smallerCoefficients.length;\n            // Copy high-order terms only found in higher-degree polynomial's coefficients\n            System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);\n            for (let i /*int*/ = lengthDiff; i < largerCoefficients.length; i++) {\n                sumDiff[i] = this.field.add(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n            }\n            return new ModulusPoly(this.field, sumDiff);\n        }\n        subtract(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n            }\n            if (other.isZero()) {\n                return this;\n            }\n            return this.add(other.negative());\n        }\n        multiply(other) {\n            if (other instanceof ModulusPoly) {\n                return this.multiplyOther(other);\n            }\n            return this.multiplyScalar(other);\n        }\n        multiplyOther(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n            }\n            if (this.isZero() || other.isZero()) {\n                // return this.field.getZero();\n                return new ModulusPoly(this.field, new Int32Array([0]));\n            }\n            let aCoefficients = this.coefficients;\n            let aLength = /*int*/ aCoefficients.length;\n            let bCoefficients = other.coefficients;\n            let bLength = /*int*/ bCoefficients.length;\n            let product = new Int32Array(aLength + bLength - 1);\n            for (let i /*int*/ = 0; i < aLength; i++) {\n                let aCoeff = /*int*/ aCoefficients[i];\n                for (let j /*int*/ = 0; j < bLength; j++) {\n                    product[i + j] = this.field.add(product[i + j], this.field.multiply(aCoeff, bCoefficients[j]));\n                }\n            }\n            return new ModulusPoly(this.field, product);\n        }\n        negative() {\n            let size = /*int*/ this.coefficients.length;\n            let negativeCoefficients = new Int32Array(size);\n            for (let i /*int*/ = 0; i < size; i++) {\n                negativeCoefficients[i] = this.field.subtract(0, this.coefficients[i]);\n            }\n            return new ModulusPoly(this.field, negativeCoefficients);\n        }\n        multiplyScalar(scalar) {\n            if (scalar === 0) {\n                return new ModulusPoly(this.field, new Int32Array([0]));\n            }\n            if (scalar === 1) {\n                return this;\n            }\n            let size = /*int*/ this.coefficients.length;\n            let product = new Int32Array(size);\n            for (let i /*int*/ = 0; i < size; i++) {\n                product[i] = this.field.multiply(this.coefficients[i], scalar);\n            }\n            return new ModulusPoly(this.field, product);\n        }\n        multiplyByMonomial(degree, coefficient) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return new ModulusPoly(this.field, new Int32Array([0]));\n            }\n            let size = /*int*/ this.coefficients.length;\n            let product = new Int32Array(size + degree);\n            for (let i /*int*/ = 0; i < size; i++) {\n                product[i] = this.field.multiply(this.coefficients[i], coefficient);\n            }\n            return new ModulusPoly(this.field, product);\n        }\n        /*\n        ModulusPoly[] divide(other: ModulusPoly) {\n          if (!field.equals(other.field)) {\n            throw new IllegalArgumentException(\"ModulusPolys do not have same ModulusGF field\");\n          }\n          if (other.isZero()) {\n            throw new IllegalArgumentException(\"Divide by 0\");\n          }\n      \n          let quotient: ModulusPoly = field.getZero();\n          let remainder: ModulusPoly = this;\n      \n          let denominatorLeadingTerm: /*int/ number = other.getCoefficient(other.getDegree());\n          let inverseDenominatorLeadingTerm: /*int/ number = field.inverse(denominatorLeadingTerm);\n      \n          while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n            let degreeDifference: /*int/ number = remainder.getDegree() - other.getDegree();\n            let scale: /*int/ number = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n            let term: ModulusPoly = other.multiplyByMonomial(degreeDifference, scale);\n            let iterationQuotient: ModulusPoly = field.buildMonomial(degreeDifference, scale);\n            quotient = quotient.add(iterationQuotient);\n            remainder = remainder.subtract(term);\n          }\n      \n          return new ModulusPoly[] { quotient, remainder };\n        }\n        */\n        // @Override\n        toString() {\n            let result = new StringBuilder( /*8 * this.getDegree()*/); // dynamic string size in JS\n            for (let degree /*int*/ = this.getDegree(); degree >= 0; degree--) {\n                let coefficient = /*int*/ this.getCoefficient(degree);\n                if (coefficient !== 0) {\n                    if (coefficient < 0) {\n                        result.append(' - ');\n                        coefficient = -coefficient;\n                    }\n                    else {\n                        if (result.length() > 0) {\n                            result.append(' + ');\n                        }\n                    }\n                    if (degree === 0 || coefficient !== 1) {\n                        result.append(coefficient);\n                    }\n                    if (degree !== 0) {\n                        if (degree === 1) {\n                            result.append('x');\n                        }\n                        else {\n                            result.append('x^');\n                            result.append(degree);\n                        }\n                    }\n                }\n            }\n            return result.toString();\n        }\n    }\n\n    class ModulusBase {\n        add(a, b) {\n            return (a + b) % this.modulus;\n        }\n        subtract(a, b) {\n            return (this.modulus + a - b) % this.modulus;\n        }\n        exp(a) {\n            return this.expTable[a];\n        }\n        log(a) {\n            if (a === 0) {\n                throw new IllegalArgumentException();\n            }\n            return this.logTable[a];\n        }\n        inverse(a) {\n            if (a === 0) {\n                throw new ArithmeticException();\n            }\n            return this.expTable[this.modulus - this.logTable[a] - 1];\n        }\n        multiply(a, b) {\n            if (a === 0 || b === 0) {\n                return 0;\n            }\n            return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.modulus - 1)];\n        }\n        getSize() {\n            return this.modulus;\n        }\n        equals(o) {\n            return o === this;\n        }\n    }\n\n    /*\n     * Copyright 2012 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>A field based on powers of a generator integer, modulo some modulus.</p>\n     *\n     * @author Sean Owen\n     * @see com.google.zxing.common.reedsolomon.GenericGF\n     */\n    /*public final*/ class ModulusGF extends ModulusBase {\n        // private /*final*/ modulus: /*int*/ number;\n        constructor(modulus, generator) {\n            super();\n            this.modulus = modulus;\n            this.expTable = new Int32Array(modulus);\n            this.logTable = new Int32Array(modulus);\n            let x = /*int*/ 1;\n            for (let i /*int*/ = 0; i < modulus; i++) {\n                this.expTable[i] = x;\n                x = (x * generator) % modulus;\n            }\n            for (let i /*int*/ = 0; i < modulus - 1; i++) {\n                this.logTable[this.expTable[i]] = i;\n            }\n            // logTable[0] == 0 but this should never be used\n            this.zero = new ModulusPoly(this, new Int32Array([0]));\n            this.one = new ModulusPoly(this, new Int32Array([1]));\n        }\n        getZero() {\n            return this.zero;\n        }\n        getOne() {\n            return this.one;\n        }\n        buildMonomial(degree, coefficient) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return this.zero;\n            }\n            let coefficients = new Int32Array(degree + 1);\n            coefficients[0] = coefficient;\n            return new ModulusPoly(this, coefficients);\n        }\n    }\n    ModulusGF.PDF417_GF = new ModulusGF(PDF417Common.NUMBER_OF_CODEWORDS, 3);\n\n    /*\n    * Copyright 2012 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * <p>PDF417 error correction implementation.</p>\n     *\n     * <p>This <a href=\"http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction#Example\">example</a>\n     * is quite useful in understanding the algorithm.</p>\n     *\n     * @author Sean Owen\n     * @see com.google.zxing.common.reedsolomon.ReedSolomonDecoder\n     */\n    /*public final*/ class ErrorCorrection {\n        constructor() {\n            this.field = ModulusGF.PDF417_GF;\n        }\n        /**\n         * @param received received codewords\n         * @param numECCodewords number of those codewords used for EC\n         * @param erasures location of erasures\n         * @return number of errors\n         * @throws ChecksumException if errors cannot be corrected, maybe because of too many errors\n         */\n        decode(received, numECCodewords, erasures) {\n            let poly = new ModulusPoly(this.field, received);\n            let S = new Int32Array(numECCodewords);\n            let error = false;\n            for (let i /*int*/ = numECCodewords; i > 0; i--) {\n                let evaluation = poly.evaluateAt(this.field.exp(i));\n                S[numECCodewords - i] = evaluation;\n                if (evaluation !== 0) {\n                    error = true;\n                }\n            }\n            if (!error) {\n                return 0;\n            }\n            let knownErrors = this.field.getOne();\n            if (erasures != null) {\n                for (const erasure of erasures) {\n                    let b = this.field.exp(received.length - 1 - erasure);\n                    // Add (1 - bx) term:\n                    let term = new ModulusPoly(this.field, new Int32Array([this.field.subtract(0, b), 1]));\n                    knownErrors = knownErrors.multiply(term);\n                }\n            }\n            let syndrome = new ModulusPoly(this.field, S);\n            // syndrome = syndrome.multiply(knownErrors);\n            let sigmaOmega = this.runEuclideanAlgorithm(this.field.buildMonomial(numECCodewords, 1), syndrome, numECCodewords);\n            let sigma = sigmaOmega[0];\n            let omega = sigmaOmega[1];\n            // sigma = sigma.multiply(knownErrors);\n            let errorLocations = this.findErrorLocations(sigma);\n            let errorMagnitudes = this.findErrorMagnitudes(omega, sigma, errorLocations);\n            for (let i /*int*/ = 0; i < errorLocations.length; i++) {\n                let position = received.length - 1 - this.field.log(errorLocations[i]);\n                if (position < 0) {\n                    throw ChecksumException.getChecksumInstance();\n                }\n                received[position] = this.field.subtract(received[position], errorMagnitudes[i]);\n            }\n            return errorLocations.length;\n        }\n        /**\n         *\n         * @param ModulusPoly\n         * @param a\n         * @param ModulusPoly\n         * @param b\n         * @param int\n         * @param R\n         * @throws ChecksumException\n         */\n        runEuclideanAlgorithm(a, b, R) {\n            // Assume a's degree is >= b's\n            if (a.getDegree() < b.getDegree()) {\n                let temp = a;\n                a = b;\n                b = temp;\n            }\n            let rLast = a;\n            let r = b;\n            let tLast = this.field.getZero();\n            let t = this.field.getOne();\n            // Run Euclidean algorithm until r's degree is less than R/2\n            while (r.getDegree() >= Math.round(R / 2)) {\n                let rLastLast = rLast;\n                let tLastLast = tLast;\n                rLast = r;\n                tLast = t;\n                // Divide rLastLast by rLast, with quotient in q and remainder in r\n                if (rLast.isZero()) {\n                    // Oops, Euclidean algorithm already terminated?\n                    throw ChecksumException.getChecksumInstance();\n                }\n                r = rLastLast;\n                let q = this.field.getZero();\n                let denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n                let dltInverse = this.field.inverse(denominatorLeadingTerm);\n                while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n                    let degreeDiff = r.getDegree() - rLast.getDegree();\n                    let scale = this.field.multiply(r.getCoefficient(r.getDegree()), dltInverse);\n                    q = q.add(this.field.buildMonomial(degreeDiff, scale));\n                    r = r.subtract(rLast.multiplyByMonomial(degreeDiff, scale));\n                }\n                t = q.multiply(tLast).subtract(tLastLast).negative();\n            }\n            let sigmaTildeAtZero = t.getCoefficient(0);\n            if (sigmaTildeAtZero === 0) {\n                throw ChecksumException.getChecksumInstance();\n            }\n            let inverse = this.field.inverse(sigmaTildeAtZero);\n            let sigma = t.multiply(inverse);\n            let omega = r.multiply(inverse);\n            return [sigma, omega];\n        }\n        /**\n         *\n         * @param errorLocator\n         * @throws ChecksumException\n         */\n        findErrorLocations(errorLocator) {\n            // This is a direct application of Chien's search\n            let numErrors = errorLocator.getDegree();\n            let result = new Int32Array(numErrors);\n            let e = 0;\n            for (let i /*int*/ = 1; i < this.field.getSize() && e < numErrors; i++) {\n                if (errorLocator.evaluateAt(i) === 0) {\n                    result[e] = this.field.inverse(i);\n                    e++;\n                }\n            }\n            if (e !== numErrors) {\n                throw ChecksumException.getChecksumInstance();\n            }\n            return result;\n        }\n        findErrorMagnitudes(errorEvaluator, errorLocator, errorLocations) {\n            let errorLocatorDegree = errorLocator.getDegree();\n            let formalDerivativeCoefficients = new Int32Array(errorLocatorDegree);\n            for (let i /*int*/ = 1; i <= errorLocatorDegree; i++) {\n                formalDerivativeCoefficients[errorLocatorDegree - i] =\n                    this.field.multiply(i, errorLocator.getCoefficient(i));\n            }\n            let formalDerivative = new ModulusPoly(this.field, formalDerivativeCoefficients);\n            // This is directly applying Forney's Formula\n            let s = errorLocations.length;\n            let result = new Int32Array(s);\n            for (let i /*int*/ = 0; i < s; i++) {\n                let xiInverse = this.field.inverse(errorLocations[i]);\n                let numerator = this.field.subtract(0, errorEvaluator.evaluateAt(xiInverse));\n                let denominator = this.field.inverse(formalDerivative.evaluateAt(xiInverse));\n                result[i] = this.field.multiply(numerator, denominator);\n            }\n            return result;\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class BoundingBox {\n        constructor(image, topLeft, bottomLeft, topRight, bottomRight) {\n            if (image instanceof BoundingBox) {\n                this.constructor_2(image);\n            }\n            else {\n                this.constructor_1(image, topLeft, bottomLeft, topRight, bottomRight);\n            }\n        }\n        /**\n         *\n         * @param image\n         * @param topLeft\n         * @param bottomLeft\n         * @param topRight\n         * @param bottomRight\n         *\n         * @throws NotFoundException\n         */\n        constructor_1(image, topLeft, bottomLeft, topRight, bottomRight) {\n            const leftUnspecified = topLeft == null || bottomLeft == null;\n            const rightUnspecified = topRight == null || bottomRight == null;\n            if (leftUnspecified && rightUnspecified) {\n                throw new NotFoundException();\n            }\n            if (leftUnspecified) {\n                topLeft = new ResultPoint(0, topRight.getY());\n                bottomLeft = new ResultPoint(0, bottomRight.getY());\n            }\n            else if (rightUnspecified) {\n                topRight = new ResultPoint(image.getWidth() - 1, topLeft.getY());\n                bottomRight = new ResultPoint(image.getWidth() - 1, bottomLeft.getY());\n            }\n            this.image = image;\n            this.topLeft = topLeft;\n            this.bottomLeft = bottomLeft;\n            this.topRight = topRight;\n            this.bottomRight = bottomRight;\n            this.minX = Math.trunc(Math.min(topLeft.getX(), bottomLeft.getX()));\n            this.maxX = Math.trunc(Math.max(topRight.getX(), bottomRight.getX()));\n            this.minY = Math.trunc(Math.min(topLeft.getY(), topRight.getY()));\n            this.maxY = Math.trunc(Math.max(bottomLeft.getY(), bottomRight.getY()));\n        }\n        constructor_2(boundingBox) {\n            this.image = boundingBox.image;\n            this.topLeft = boundingBox.getTopLeft();\n            this.bottomLeft = boundingBox.getBottomLeft();\n            this.topRight = boundingBox.getTopRight();\n            this.bottomRight = boundingBox.getBottomRight();\n            this.minX = boundingBox.getMinX();\n            this.maxX = boundingBox.getMaxX();\n            this.minY = boundingBox.getMinY();\n            this.maxY = boundingBox.getMaxY();\n        }\n        /**\n         * @throws NotFoundException\n         */\n        static merge(leftBox, rightBox) {\n            if (leftBox == null) {\n                return rightBox;\n            }\n            if (rightBox == null) {\n                return leftBox;\n            }\n            return new BoundingBox(leftBox.image, leftBox.topLeft, leftBox.bottomLeft, rightBox.topRight, rightBox.bottomRight);\n        }\n        /**\n         * @throws NotFoundException\n         */\n        addMissingRows(missingStartRows, missingEndRows, isLeft) {\n            let newTopLeft = this.topLeft;\n            let newBottomLeft = this.bottomLeft;\n            let newTopRight = this.topRight;\n            let newBottomRight = this.bottomRight;\n            if (missingStartRows > 0) {\n                let top = isLeft ? this.topLeft : this.topRight;\n                let newMinY = Math.trunc(top.getY() - missingStartRows);\n                if (newMinY < 0) {\n                    newMinY = 0;\n                }\n                let newTop = new ResultPoint(top.getX(), newMinY);\n                if (isLeft) {\n                    newTopLeft = newTop;\n                }\n                else {\n                    newTopRight = newTop;\n                }\n            }\n            if (missingEndRows > 0) {\n                let bottom = isLeft ? this.bottomLeft : this.bottomRight;\n                let newMaxY = Math.trunc(bottom.getY() + missingEndRows);\n                if (newMaxY >= this.image.getHeight()) {\n                    newMaxY = this.image.getHeight() - 1;\n                }\n                let newBottom = new ResultPoint(bottom.getX(), newMaxY);\n                if (isLeft) {\n                    newBottomLeft = newBottom;\n                }\n                else {\n                    newBottomRight = newBottom;\n                }\n            }\n            return new BoundingBox(this.image, newTopLeft, newBottomLeft, newTopRight, newBottomRight);\n        }\n        getMinX() {\n            return this.minX;\n        }\n        getMaxX() {\n            return this.maxX;\n        }\n        getMinY() {\n            return this.minY;\n        }\n        getMaxY() {\n            return this.maxY;\n        }\n        getTopLeft() {\n            return this.topLeft;\n        }\n        getTopRight() {\n            return this.topRight;\n        }\n        getBottomLeft() {\n            return this.bottomLeft;\n        }\n        getBottomRight() {\n            return this.bottomRight;\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.pdf417.decoder;\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class BarcodeMetadata {\n        constructor(columnCount, rowCountUpperPart, rowCountLowerPart, errorCorrectionLevel) {\n            this.columnCount = columnCount;\n            this.errorCorrectionLevel = errorCorrectionLevel;\n            this.rowCountUpperPart = rowCountUpperPart;\n            this.rowCountLowerPart = rowCountLowerPart;\n            this.rowCount = rowCountUpperPart + rowCountLowerPart;\n        }\n        getColumnCount() {\n            return this.columnCount;\n        }\n        getErrorCorrectionLevel() {\n            return this.errorCorrectionLevel;\n        }\n        getRowCount() {\n            return this.rowCount;\n        }\n        getRowCountUpperPart() {\n            return this.rowCountUpperPart;\n        }\n        getRowCountLowerPart() {\n            return this.rowCountLowerPart;\n        }\n    }\n\n    /**\n     * Java Formatter class polyfill that works in the JS way.\n     */\n    class Formatter {\n        constructor() {\n            this.buffer = '';\n        }\n        /**\n         *\n         * @see https://stackoverflow.com/a/13439711/4367683\n         *\n         * @param str\n         * @param arr\n         */\n        static form(str, arr) {\n            let i = -1;\n            function callback(exp, p0, p1, p2, p3, p4) {\n                if (exp === '%%')\n                    return '%';\n                if (arr[++i] === undefined)\n                    return undefined;\n                exp = p2 ? parseInt(p2.substr(1)) : undefined;\n                let base = p3 ? parseInt(p3.substr(1)) : undefined;\n                let val;\n                switch (p4) {\n                    case 's':\n                        val = arr[i];\n                        break;\n                    case 'c':\n                        val = arr[i][0];\n                        break;\n                    case 'f':\n                        val = parseFloat(arr[i]).toFixed(exp);\n                        break;\n                    case 'p':\n                        val = parseFloat(arr[i]).toPrecision(exp);\n                        break;\n                    case 'e':\n                        val = parseFloat(arr[i]).toExponential(exp);\n                        break;\n                    case 'x':\n                        val = parseInt(arr[i]).toString(base ? base : 16);\n                        break;\n                    case 'd':\n                        val = parseFloat(parseInt(arr[i], base ? base : 10).toPrecision(exp)).toFixed(0);\n                        break;\n                }\n                val = typeof val === 'object' ? JSON.stringify(val) : (+val).toString(base);\n                let size = parseInt(p1); /* padding size */\n                let ch = p1 && (p1[0] + '') === '0' ? '0' : ' '; /* isnull? */\n                while (val.length < size)\n                    val = p0 !== undefined ? val + ch : ch + val; /* isminus? */\n                return val;\n            }\n            let regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n            return str.replace(regex, callback);\n        }\n        /**\n         *\n         * @param append The new string to append.\n         * @param args Argumets values to be formated.\n         */\n        format(append, ...args) {\n            this.buffer += Formatter.form(append, args);\n        }\n        /**\n         * Returns the Formatter string value.\n         */\n        toString() {\n            return this.buffer;\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Guenther Grau\n     */\n    class DetectionResultColumn {\n        constructor(boundingBox) {\n            this.boundingBox = new BoundingBox(boundingBox);\n            // this.codewords = new Codeword[boundingBox.getMaxY() - boundingBox.getMinY() + 1];\n            this.codewords = new Array(boundingBox.getMaxY() - boundingBox.getMinY() + 1);\n        }\n        /*final*/ getCodewordNearby(imageRow) {\n            let codeword = this.getCodeword(imageRow);\n            if (codeword != null) {\n                return codeword;\n            }\n            for (let i = 1; i < DetectionResultColumn.MAX_NEARBY_DISTANCE; i++) {\n                let nearImageRow = this.imageRowToCodewordIndex(imageRow) - i;\n                if (nearImageRow >= 0) {\n                    codeword = this.codewords[nearImageRow];\n                    if (codeword != null) {\n                        return codeword;\n                    }\n                }\n                nearImageRow = this.imageRowToCodewordIndex(imageRow) + i;\n                if (nearImageRow < this.codewords.length) {\n                    codeword = this.codewords[nearImageRow];\n                    if (codeword != null) {\n                        return codeword;\n                    }\n                }\n            }\n            return null;\n        }\n        /*final int*/ imageRowToCodewordIndex(imageRow) {\n            return imageRow - this.boundingBox.getMinY();\n        }\n        /*final void*/ setCodeword(imageRow, codeword) {\n            this.codewords[this.imageRowToCodewordIndex(imageRow)] = codeword;\n        }\n        /*final*/ getCodeword(imageRow) {\n            return this.codewords[this.imageRowToCodewordIndex(imageRow)];\n        }\n        /*final*/ getBoundingBox() {\n            return this.boundingBox;\n        }\n        /*final*/ getCodewords() {\n            return this.codewords;\n        }\n        // @Override\n        toString() {\n            const formatter = new Formatter();\n            let row = 0;\n            for (const codeword of this.codewords) {\n                if (codeword == null) {\n                    formatter.format('%3d:    |   %n', row++);\n                    continue;\n                }\n                formatter.format('%3d: %3d|%3d%n', row++, codeword.getRowNumber(), codeword.getValue());\n            }\n            return formatter.toString();\n        }\n    }\n    DetectionResultColumn.MAX_NEARBY_DISTANCE = 5;\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.ArrayList;\n    // import java.util.Collection;\n    // import java.util.HashMap;\n    // import java.util.Map;\n    // import java.util.Map.Entry;\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class BarcodeValue {\n        constructor() {\n            this.values = new Map();\n        }\n        /**\n         * Add an occurrence of a value\n         */\n        setValue(value) {\n            value = Math.trunc(value);\n            let confidence = this.values.get(value);\n            if (confidence == null) {\n                confidence = 0;\n            }\n            confidence++;\n            this.values.set(value, confidence);\n        }\n        /**\n         * Determines the maximum occurrence of a set value and returns all values which were set with this occurrence.\n         * @return an array of int, containing the values with the highest occurrence, or null, if no value was set\n         */\n        getValue() {\n            let maxConfidence = -1;\n            let result = new Array();\n            for (const [key, value] of this.values.entries()) {\n                const entry = {\n                    getKey: () => key,\n                    getValue: () => value,\n                };\n                if (entry.getValue() > maxConfidence) {\n                    maxConfidence = entry.getValue();\n                    result = [];\n                    result.push(entry.getKey());\n                }\n                else if (entry.getValue() === maxConfidence) {\n                    result.push(entry.getKey());\n                }\n            }\n            return PDF417Common.toIntArray(result);\n        }\n        getConfidence(value) {\n            return this.values.get(value);\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class DetectionResultRowIndicatorColumn extends DetectionResultColumn {\n        constructor(boundingBox, isLeft) {\n            super(boundingBox);\n            this._isLeft = isLeft;\n        }\n        setRowNumbers() {\n            for (let codeword /*Codeword*/ of this.getCodewords()) {\n                if (codeword != null) {\n                    codeword.setRowNumberAsRowIndicatorColumn();\n                }\n            }\n        }\n        // TODO implement properly\n        // TODO maybe we should add missing codewords to store the correct row number to make\n        // finding row numbers for other columns easier\n        // use row height count to make detection of invalid row numbers more reliable\n        adjustCompleteIndicatorColumnRowNumbers(barcodeMetadata) {\n            let codewords = this.getCodewords();\n            this.setRowNumbers();\n            this.removeIncorrectCodewords(codewords, barcodeMetadata);\n            let boundingBox = this.getBoundingBox();\n            let top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n            let bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n            let firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n            let lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n            // We need to be careful using the average row height. Barcode could be skewed so that we have smaller and\n            // taller rows\n            // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n            let barcodeRow = -1;\n            let maxRowHeight = 1;\n            let currentRowHeight = 0;\n            for (let codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let codeword = codewords[codewordsRow];\n                //      float expectedRowNumber = (codewordsRow - firstRow) / averageRowHeight;\n                //      if (Math.abs(codeword.getRowNumber() - expectedRowNumber) > 2) {\n                //        SimpleLog.log(LEVEL.WARNING,\n                //            \"Removing codeword, rowNumberSkew too high, codeword[\" + codewordsRow + \"]: Expected Row: \" +\n                //                expectedRowNumber + \", RealRow: \" + codeword.getRowNumber() + \", value: \" + codeword.getValue());\n                //        codewords[codewordsRow] = null;\n                //      }\n                let rowDifference = codeword.getRowNumber() - barcodeRow;\n                // TODO improve handling with case where first row indicator doesn't start with 0\n                if (rowDifference === 0) {\n                    currentRowHeight++;\n                }\n                else if (rowDifference === 1) {\n                    maxRowHeight = Math.max(maxRowHeight, currentRowHeight);\n                    currentRowHeight = 1;\n                    barcodeRow = codeword.getRowNumber();\n                }\n                else if (rowDifference < 0 ||\n                    codeword.getRowNumber() >= barcodeMetadata.getRowCount() ||\n                    rowDifference > codewordsRow) {\n                    codewords[codewordsRow] = null;\n                }\n                else {\n                    let checkedRows;\n                    if (maxRowHeight > 2) {\n                        checkedRows = (maxRowHeight - 2) * rowDifference;\n                    }\n                    else {\n                        checkedRows = rowDifference;\n                    }\n                    let closePreviousCodewordFound = checkedRows >= codewordsRow;\n                    for (let i /*int*/ = 1; i <= checkedRows && !closePreviousCodewordFound; i++) {\n                        // there must be (height * rowDifference) number of codewords missing. For now we assume height = 1.\n                        // This should hopefully get rid of most problems already.\n                        closePreviousCodewordFound = codewords[codewordsRow - i] != null;\n                    }\n                    if (closePreviousCodewordFound) {\n                        codewords[codewordsRow] = null;\n                    }\n                    else {\n                        barcodeRow = codeword.getRowNumber();\n                        currentRowHeight = 1;\n                    }\n                }\n            }\n            // return (int) (averageRowHeight + 0.5);\n        }\n        getRowHeights() {\n            let barcodeMetadata = this.getBarcodeMetadata();\n            if (barcodeMetadata == null) {\n                return null;\n            }\n            this.adjustIncompleteIndicatorColumnRowNumbers(barcodeMetadata);\n            let result = new Int32Array(barcodeMetadata.getRowCount());\n            for (let codeword /*Codeword*/ of this.getCodewords()) {\n                if (codeword != null) {\n                    let rowNumber = codeword.getRowNumber();\n                    if (rowNumber >= result.length) {\n                        // We have more rows than the barcode metadata allows for, ignore them.\n                        continue;\n                    }\n                    result[rowNumber]++;\n                } // else throw exception?\n            }\n            return result;\n        }\n        // TODO maybe we should add missing codewords to store the correct row number to make\n        // finding row numbers for other columns easier\n        // use row height count to make detection of invalid row numbers more reliable\n        adjustIncompleteIndicatorColumnRowNumbers(barcodeMetadata) {\n            let boundingBox = this.getBoundingBox();\n            let top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n            let bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n            let firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n            let lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n            // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n            let codewords = this.getCodewords();\n            let barcodeRow = -1;\n            for (let codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let codeword = codewords[codewordsRow];\n                codeword.setRowNumberAsRowIndicatorColumn();\n                let rowDifference = codeword.getRowNumber() - barcodeRow;\n                // TODO improve handling with case where first row indicator doesn't start with 0\n                if (rowDifference === 0) ;\n                else if (rowDifference === 1) {\n                    barcodeRow = codeword.getRowNumber();\n                }\n                else if (codeword.getRowNumber() >= barcodeMetadata.getRowCount()) {\n                    codewords[codewordsRow] = null;\n                }\n                else {\n                    barcodeRow = codeword.getRowNumber();\n                }\n            }\n            // return (int) (averageRowHeight + 0.5);\n        }\n        getBarcodeMetadata() {\n            let codewords = this.getCodewords();\n            let barcodeColumnCount = new BarcodeValue();\n            let barcodeRowCountUpperPart = new BarcodeValue();\n            let barcodeRowCountLowerPart = new BarcodeValue();\n            let barcodeECLevel = new BarcodeValue();\n            for (let codeword /*Codeword*/ of codewords) {\n                if (codeword == null) {\n                    continue;\n                }\n                codeword.setRowNumberAsRowIndicatorColumn();\n                let rowIndicatorValue = codeword.getValue() % 30;\n                let codewordRowNumber = codeword.getRowNumber();\n                if (!this._isLeft) {\n                    codewordRowNumber += 2;\n                }\n                switch (codewordRowNumber % 3) {\n                    case 0:\n                        barcodeRowCountUpperPart.setValue(rowIndicatorValue * 3 + 1);\n                        break;\n                    case 1:\n                        barcodeECLevel.setValue(rowIndicatorValue / 3);\n                        barcodeRowCountLowerPart.setValue(rowIndicatorValue % 3);\n                        break;\n                    case 2:\n                        barcodeColumnCount.setValue(rowIndicatorValue + 1);\n                        break;\n                }\n            }\n            // Maybe we should check if we have ambiguous values?\n            if ((barcodeColumnCount.getValue().length === 0) ||\n                (barcodeRowCountUpperPart.getValue().length === 0) ||\n                (barcodeRowCountLowerPart.getValue().length === 0) ||\n                (barcodeECLevel.getValue().length === 0) ||\n                barcodeColumnCount.getValue()[0] < 1 ||\n                barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] < PDF417Common.MIN_ROWS_IN_BARCODE ||\n                barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] > PDF417Common.MAX_ROWS_IN_BARCODE) {\n                return null;\n            }\n            let barcodeMetadata = new BarcodeMetadata(barcodeColumnCount.getValue()[0], barcodeRowCountUpperPart.getValue()[0], barcodeRowCountLowerPart.getValue()[0], barcodeECLevel.getValue()[0]);\n            this.removeIncorrectCodewords(codewords, barcodeMetadata);\n            return barcodeMetadata;\n        }\n        removeIncorrectCodewords(codewords, barcodeMetadata) {\n            // Remove codewords which do not match the metadata\n            // TODO Maybe we should keep the incorrect codewords for the start and end positions?\n            for (let codewordRow /*int*/ = 0; codewordRow < codewords.length; codewordRow++) {\n                let codeword = codewords[codewordRow];\n                if (codewords[codewordRow] == null) {\n                    continue;\n                }\n                let rowIndicatorValue = codeword.getValue() % 30;\n                let codewordRowNumber = codeword.getRowNumber();\n                if (codewordRowNumber > barcodeMetadata.getRowCount()) {\n                    codewords[codewordRow] = null;\n                    continue;\n                }\n                if (!this._isLeft) {\n                    codewordRowNumber += 2;\n                }\n                switch (codewordRowNumber % 3) {\n                    case 0:\n                        if (rowIndicatorValue * 3 + 1 !== barcodeMetadata.getRowCountUpperPart()) {\n                            codewords[codewordRow] = null;\n                        }\n                        break;\n                    case 1:\n                        if (Math.trunc(rowIndicatorValue / 3) !== barcodeMetadata.getErrorCorrectionLevel() ||\n                            rowIndicatorValue % 3 !== barcodeMetadata.getRowCountLowerPart()) {\n                            codewords[codewordRow] = null;\n                        }\n                        break;\n                    case 2:\n                        if (rowIndicatorValue + 1 !== barcodeMetadata.getColumnCount()) {\n                            codewords[codewordRow] = null;\n                        }\n                        break;\n                }\n            }\n        }\n        isLeft() {\n            return this._isLeft;\n        }\n        // @Override\n        toString() {\n            return 'IsLeft: ' + this._isLeft + '\\n' + super.toString();\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class DetectionResult {\n        constructor(barcodeMetadata, boundingBox) {\n            /*final*/ this.ADJUST_ROW_NUMBER_SKIP = 2;\n            this.barcodeMetadata = barcodeMetadata;\n            this.barcodeColumnCount = barcodeMetadata.getColumnCount();\n            this.boundingBox = boundingBox;\n            // this.detectionResultColumns = new DetectionResultColumn[this.barcodeColumnCount + 2];\n            this.detectionResultColumns = new Array(this.barcodeColumnCount + 2);\n        }\n        getDetectionResultColumns() {\n            this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]);\n            this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]);\n            let unadjustedCodewordCount = PDF417Common.MAX_CODEWORDS_IN_BARCODE;\n            let previousUnadjustedCount;\n            do {\n                previousUnadjustedCount = unadjustedCodewordCount;\n                unadjustedCodewordCount = this.adjustRowNumbersAndGetCount();\n            } while (unadjustedCodewordCount > 0 && unadjustedCodewordCount < previousUnadjustedCount);\n            return this.detectionResultColumns;\n        }\n        adjustIndicatorColumnRowNumbers(detectionResultColumn) {\n            if (detectionResultColumn != null) {\n                detectionResultColumn\n                    .adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata);\n            }\n        }\n        // TODO ensure that no detected codewords with unknown row number are left\n        // we should be able to estimate the row height and use it as a hint for the row number\n        // we should also fill the rows top to bottom and bottom to top\n        /**\n         * @return number of codewords which don't have a valid row number. Note that the count is not accurate as codewords\n         * will be counted several times. It just serves as an indicator to see when we can stop adjusting row numbers\n         */\n        adjustRowNumbersAndGetCount() {\n            let unadjustedCount = this.adjustRowNumbersByRow();\n            if (unadjustedCount === 0) {\n                return 0;\n            }\n            for (let barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1; barcodeColumn++) {\n                let codewords = this.detectionResultColumns[barcodeColumn].getCodewords();\n                for (let codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n                    if (codewords[codewordsRow] == null) {\n                        continue;\n                    }\n                    if (!codewords[codewordsRow].hasValidRowNumber()) {\n                        this.adjustRowNumbers(barcodeColumn, codewordsRow, codewords);\n                    }\n                }\n            }\n            return unadjustedCount;\n        }\n        adjustRowNumbersByRow() {\n            this.adjustRowNumbersFromBothRI();\n            // TODO we should only do full row adjustments if row numbers of left and right row indicator column match.\n            // Maybe it's even better to calculated the height (rows: d) and divide it by the number of barcode\n            // rows. This, together with the LRI and RRI row numbers should allow us to get a good estimate where a row\n            // number starts and ends.\n            let unadjustedCount = this.adjustRowNumbersFromLRI();\n            return unadjustedCount + this.adjustRowNumbersFromRRI();\n        }\n        adjustRowNumbersFromBothRI() {\n            if (this.detectionResultColumns[0] == null || this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n                return;\n            }\n            let LRIcodewords = this.detectionResultColumns[0].getCodewords();\n            let RRIcodewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n            for (let codewordsRow /*int*/ = 0; codewordsRow < LRIcodewords.length; codewordsRow++) {\n                if (LRIcodewords[codewordsRow] != null &&\n                    RRIcodewords[codewordsRow] != null &&\n                    LRIcodewords[codewordsRow].getRowNumber() === RRIcodewords[codewordsRow].getRowNumber()) {\n                    for (let barcodeColumn /*int*/ = 1; barcodeColumn <= this.barcodeColumnCount; barcodeColumn++) {\n                        let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                        if (codeword == null) {\n                            continue;\n                        }\n                        codeword.setRowNumber(LRIcodewords[codewordsRow].getRowNumber());\n                        if (!codeword.hasValidRowNumber()) {\n                            this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow] = null;\n                        }\n                    }\n                }\n            }\n        }\n        adjustRowNumbersFromRRI() {\n            if (this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n                return 0;\n            }\n            let unadjustedCount = 0;\n            let codewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n            for (let codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n                let invalidRowCounts = 0;\n                for (let barcodeColumn /*int*/ = this.barcodeColumnCount + 1; barcodeColumn > 0 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn--) {\n                    let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                    if (codeword != null) {\n                        invalidRowCounts = DetectionResult.adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);\n                        if (!codeword.hasValidRowNumber()) {\n                            unadjustedCount++;\n                        }\n                    }\n                }\n            }\n            return unadjustedCount;\n        }\n        adjustRowNumbersFromLRI() {\n            if (this.detectionResultColumns[0] == null) {\n                return 0;\n            }\n            let unadjustedCount = 0;\n            let codewords = this.detectionResultColumns[0].getCodewords();\n            for (let codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n                let invalidRowCounts = 0;\n                for (let barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn++) {\n                    let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                    if (codeword != null) {\n                        invalidRowCounts = DetectionResult.adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);\n                        if (!codeword.hasValidRowNumber()) {\n                            unadjustedCount++;\n                        }\n                    }\n                }\n            }\n            return unadjustedCount;\n        }\n        static adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword) {\n            if (codeword == null) {\n                return invalidRowCounts;\n            }\n            if (!codeword.hasValidRowNumber()) {\n                if (codeword.isValidRowNumber(rowIndicatorRowNumber)) {\n                    codeword.setRowNumber(rowIndicatorRowNumber);\n                    invalidRowCounts = 0;\n                }\n                else {\n                    ++invalidRowCounts;\n                }\n            }\n            return invalidRowCounts;\n        }\n        adjustRowNumbers(barcodeColumn, codewordsRow, codewords) {\n            if (!this.detectionResultColumns[barcodeColumn - 1]) {\n                return;\n            }\n            let codeword = codewords[codewordsRow];\n            let previousColumnCodewords = this.detectionResultColumns[barcodeColumn - 1].getCodewords();\n            let nextColumnCodewords = previousColumnCodewords;\n            if (this.detectionResultColumns[barcodeColumn + 1] != null) {\n                nextColumnCodewords = this.detectionResultColumns[barcodeColumn + 1].getCodewords();\n            }\n            // let otherCodewords: Codeword[] = new Codeword[14];\n            let otherCodewords = new Array(14);\n            otherCodewords[2] = previousColumnCodewords[codewordsRow];\n            otherCodewords[3] = nextColumnCodewords[codewordsRow];\n            if (codewordsRow > 0) {\n                otherCodewords[0] = codewords[codewordsRow - 1];\n                otherCodewords[4] = previousColumnCodewords[codewordsRow - 1];\n                otherCodewords[5] = nextColumnCodewords[codewordsRow - 1];\n            }\n            if (codewordsRow > 1) {\n                otherCodewords[8] = codewords[codewordsRow - 2];\n                otherCodewords[10] = previousColumnCodewords[codewordsRow - 2];\n                otherCodewords[11] = nextColumnCodewords[codewordsRow - 2];\n            }\n            if (codewordsRow < codewords.length - 1) {\n                otherCodewords[1] = codewords[codewordsRow + 1];\n                otherCodewords[6] = previousColumnCodewords[codewordsRow + 1];\n                otherCodewords[7] = nextColumnCodewords[codewordsRow + 1];\n            }\n            if (codewordsRow < codewords.length - 2) {\n                otherCodewords[9] = codewords[codewordsRow + 2];\n                otherCodewords[12] = previousColumnCodewords[codewordsRow + 2];\n                otherCodewords[13] = nextColumnCodewords[codewordsRow + 2];\n            }\n            for (let otherCodeword of otherCodewords) {\n                if (DetectionResult.adjustRowNumber(codeword, otherCodeword)) {\n                    return;\n                }\n            }\n        }\n        /**\n         * @return true, if row number was adjusted, false otherwise\n         */\n        static adjustRowNumber(codeword, otherCodeword) {\n            if (otherCodeword == null) {\n                return false;\n            }\n            if (otherCodeword.hasValidRowNumber() && otherCodeword.getBucket() === codeword.getBucket()) {\n                codeword.setRowNumber(otherCodeword.getRowNumber());\n                return true;\n            }\n            return false;\n        }\n        getBarcodeColumnCount() {\n            return this.barcodeColumnCount;\n        }\n        getBarcodeRowCount() {\n            return this.barcodeMetadata.getRowCount();\n        }\n        getBarcodeECLevel() {\n            return this.barcodeMetadata.getErrorCorrectionLevel();\n        }\n        setBoundingBox(boundingBox) {\n            this.boundingBox = boundingBox;\n        }\n        getBoundingBox() {\n            return this.boundingBox;\n        }\n        setDetectionResultColumn(barcodeColumn, detectionResultColumn) {\n            this.detectionResultColumns[barcodeColumn] = detectionResultColumn;\n        }\n        getDetectionResultColumn(barcodeColumn) {\n            return this.detectionResultColumns[barcodeColumn];\n        }\n        // @Override\n        toString() {\n            let rowIndicatorColumn = this.detectionResultColumns[0];\n            if (rowIndicatorColumn == null) {\n                rowIndicatorColumn = this.detectionResultColumns[this.barcodeColumnCount + 1];\n            }\n            // try (\n            let formatter = new Formatter();\n            // ) {\n            for (let codewordsRow /*int*/ = 0; codewordsRow < rowIndicatorColumn.getCodewords().length; codewordsRow++) {\n                formatter.format('CW %3d:', codewordsRow);\n                for (let barcodeColumn /*int*/ = 0; barcodeColumn < this.barcodeColumnCount + 2; barcodeColumn++) {\n                    if (this.detectionResultColumns[barcodeColumn] == null) {\n                        formatter.format('    |   ');\n                        continue;\n                    }\n                    let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                    if (codeword == null) {\n                        formatter.format('    |   ');\n                        continue;\n                    }\n                    formatter.format(' %3d|%3d', codeword.getRowNumber(), codeword.getValue());\n                }\n                formatter.format('%n');\n            }\n            return formatter.toString();\n            // }\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.pdf417.decoder;\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class Codeword {\n        constructor(startX, endX, bucket, value) {\n            this.rowNumber = Codeword.BARCODE_ROW_UNKNOWN;\n            this.startX = Math.trunc(startX);\n            this.endX = Math.trunc(endX);\n            this.bucket = Math.trunc(bucket);\n            this.value = Math.trunc(value);\n        }\n        hasValidRowNumber() {\n            return this.isValidRowNumber(this.rowNumber);\n        }\n        isValidRowNumber(rowNumber) {\n            return rowNumber !== Codeword.BARCODE_ROW_UNKNOWN && this.bucket === (rowNumber % 3) * 3;\n        }\n        setRowNumberAsRowIndicatorColumn() {\n            this.rowNumber = Math.trunc((Math.trunc(this.value / 30)) * 3 + Math.trunc(this.bucket / 3));\n        }\n        getWidth() {\n            return this.endX - this.startX;\n        }\n        getStartX() {\n            return this.startX;\n        }\n        getEndX() {\n            return this.endX;\n        }\n        getBucket() {\n            return this.bucket;\n        }\n        getValue() {\n            return this.value;\n        }\n        getRowNumber() {\n            return this.rowNumber;\n        }\n        setRowNumber(rowNumber) {\n            this.rowNumber = rowNumber;\n        }\n        //   @Override\n        toString() {\n            return this.rowNumber + '|' + this.value;\n        }\n    }\n    Codeword.BARCODE_ROW_UNKNOWN = -1;\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author Guenther Grau\n     * @author creatale GmbH (christoph.schulz@creatale.de)\n     */\n    /*final*/ class PDF417CodewordDecoder {\n        /* @note\n         * this action have to be performed before first use of class\n         * - static constructor\n         * working with 32bit float (based from Java logic)\n        */\n        static initialize() {\n            // Pre-computes the symbol ratio table.\n            for ( /*int*/let i = 0; i < PDF417Common.SYMBOL_TABLE.length; i++) {\n                let currentSymbol = PDF417Common.SYMBOL_TABLE[i];\n                let currentBit = currentSymbol & 0x1;\n                for ( /*int*/let j = 0; j < PDF417Common.BARS_IN_MODULE; j++) {\n                    let size = 0.0;\n                    while ((currentSymbol & 0x1) === currentBit) {\n                        size += 1.0;\n                        currentSymbol >>= 1;\n                    }\n                    currentBit = currentSymbol & 0x1;\n                    if (!PDF417CodewordDecoder.RATIOS_TABLE[i]) {\n                        PDF417CodewordDecoder.RATIOS_TABLE[i] = new Array(PDF417Common.BARS_IN_MODULE);\n                    }\n                    PDF417CodewordDecoder.RATIOS_TABLE[i][PDF417Common.BARS_IN_MODULE - j - 1] = Math.fround(size / PDF417Common.MODULES_IN_CODEWORD);\n                }\n            }\n            this.bSymbolTableReady = true;\n        }\n        static getDecodedValue(moduleBitCount) {\n            let decodedValue = PDF417CodewordDecoder.getDecodedCodewordValue(PDF417CodewordDecoder.sampleBitCounts(moduleBitCount));\n            if (decodedValue !== -1) {\n                return decodedValue;\n            }\n            return PDF417CodewordDecoder.getClosestDecodedValue(moduleBitCount);\n        }\n        static sampleBitCounts(moduleBitCount) {\n            let bitCountSum = MathUtils.sum(moduleBitCount);\n            let result = new Int32Array(PDF417Common.BARS_IN_MODULE);\n            let bitCountIndex = 0;\n            let sumPreviousBits = 0;\n            for ( /*int*/let i = 0; i < PDF417Common.MODULES_IN_CODEWORD; i++) {\n                let sampleIndex = bitCountSum / (2 * PDF417Common.MODULES_IN_CODEWORD) +\n                    (i * bitCountSum) / PDF417Common.MODULES_IN_CODEWORD;\n                if (sumPreviousBits + moduleBitCount[bitCountIndex] <= sampleIndex) {\n                    sumPreviousBits += moduleBitCount[bitCountIndex];\n                    bitCountIndex++;\n                }\n                result[bitCountIndex]++;\n            }\n            return result;\n        }\n        static getDecodedCodewordValue(moduleBitCount) {\n            let decodedValue = PDF417CodewordDecoder.getBitValue(moduleBitCount);\n            return PDF417Common.getCodeword(decodedValue) === -1 ? -1 : decodedValue;\n        }\n        static getBitValue(moduleBitCount) {\n            let result = /*long*/ 0;\n            for (let /*int*/ i = 0; i < moduleBitCount.length; i++) {\n                for ( /*int*/let bit = 0; bit < moduleBitCount[i]; bit++) {\n                    result = (result << 1) | (i % 2 === 0 ? 1 : 0);\n                }\n            }\n            return Math.trunc(result);\n        }\n        // working with 32bit float (as in Java)\n        static getClosestDecodedValue(moduleBitCount) {\n            let bitCountSum = MathUtils.sum(moduleBitCount);\n            let bitCountRatios = new Array(PDF417Common.BARS_IN_MODULE);\n            if (bitCountSum > 1) {\n                for (let /*int*/ i = 0; i < bitCountRatios.length; i++) {\n                    bitCountRatios[i] = Math.fround(moduleBitCount[i] / bitCountSum);\n                }\n            }\n            let bestMatchError = Float.MAX_VALUE;\n            let bestMatch = -1;\n            if (!this.bSymbolTableReady) {\n                PDF417CodewordDecoder.initialize();\n            }\n            for ( /*int*/let j = 0; j < PDF417CodewordDecoder.RATIOS_TABLE.length; j++) {\n                let error = 0.0;\n                let ratioTableRow = PDF417CodewordDecoder.RATIOS_TABLE[j];\n                for ( /*int*/let k = 0; k < PDF417Common.BARS_IN_MODULE; k++) {\n                    let diff = Math.fround(ratioTableRow[k] - bitCountRatios[k]);\n                    error += Math.fround(diff * diff);\n                    if (error >= bestMatchError) {\n                        break;\n                    }\n                }\n                if (error < bestMatchError) {\n                    bestMatchError = error;\n                    bestMatch = PDF417Common.SYMBOL_TABLE[j];\n                }\n            }\n            return bestMatch;\n        }\n    }\n    // flag that the table is ready for use\n    PDF417CodewordDecoder.bSymbolTableReady = false;\n    PDF417CodewordDecoder.RATIOS_TABLE = new Array(PDF417Common.SYMBOL_TABLE.length).map(x => x = new Array(PDF417Common.BARS_IN_MODULE));\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.pdf417;\n    /**\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417ResultMetadata {\n        constructor() {\n            this.segmentCount = -1;\n            this.fileSize = -1;\n            this.timestamp = -1;\n            this.checksum = -1;\n        }\n        /**\n         * The Segment ID represents the segment of the whole file distributed over different symbols.\n         *\n         * @return File segment index\n         */\n        getSegmentIndex() {\n            return this.segmentIndex;\n        }\n        setSegmentIndex(segmentIndex) {\n            this.segmentIndex = segmentIndex;\n        }\n        /**\n         * Is the same for each related PDF417 symbol\n         *\n         * @return File ID\n         */\n        getFileId() {\n            return this.fileId;\n        }\n        setFileId(fileId) {\n            this.fileId = fileId;\n        }\n        /**\n         * @return always null\n         * @deprecated use dedicated already parsed fields\n         */\n        //   @Deprecated\n        getOptionalData() {\n            return this.optionalData;\n        }\n        /**\n         * @param optionalData old optional data format as int array\n         * @deprecated parse and use new fields\n         */\n        //   @Deprecated\n        setOptionalData(optionalData) {\n            this.optionalData = optionalData;\n        }\n        /**\n         * @return true if it is the last segment\n         */\n        isLastSegment() {\n            return this.lastSegment;\n        }\n        setLastSegment(lastSegment) {\n            this.lastSegment = lastSegment;\n        }\n        /**\n         * @return count of segments, -1 if not set\n         */\n        getSegmentCount() {\n            return this.segmentCount;\n        }\n        setSegmentCount(segmentCount /*int*/) {\n            this.segmentCount = segmentCount;\n        }\n        getSender() {\n            return this.sender || null;\n        }\n        setSender(sender) {\n            this.sender = sender;\n        }\n        getAddressee() {\n            return this.addressee || null;\n        }\n        setAddressee(addressee) {\n            this.addressee = addressee;\n        }\n        /**\n         * Filename of the encoded file\n         *\n         * @return filename\n         */\n        getFileName() {\n            return this.fileName;\n        }\n        setFileName(fileName) {\n            this.fileName = fileName;\n        }\n        /**\n         * filesize in bytes of the encoded file\n         *\n         * @return filesize in bytes, -1 if not set\n         */\n        getFileSize() {\n            return this.fileSize;\n        }\n        setFileSize(fileSize /*long*/) {\n            this.fileSize = fileSize;\n        }\n        /**\n         * 16-bit CRC checksum using CCITT-16\n         *\n         * @return crc checksum, -1 if not set\n         */\n        getChecksum() {\n            return this.checksum;\n        }\n        setChecksum(checksum /*int*/) {\n            this.checksum = checksum;\n        }\n        /**\n         * unix epock timestamp, elapsed seconds since 1970-01-01\n         *\n         * @return elapsed seconds, -1 if not set\n         */\n        getTimestamp() {\n            return this.timestamp;\n        }\n        setTimestamp(timestamp /*long*/) {\n            this.timestamp = timestamp;\n        }\n    }\n\n    /**\n     * Ponyfill for Java's Long class.\n     */\n    class Long {\n        /**\n         * Parses a string to a number, since JS has no really Int64.\n         *\n         * @param num Numeric string.\n         * @param radix Destination radix.\n         */\n        static parseLong(num, radix = undefined) {\n            return parseInt(num, radix);\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class NullPointerException extends Exception {\n    }\n    NullPointerException.kind = 'NullPointerException';\n\n    /*\n     * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved.\n     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n     *\n     * This code is free software; you can redistribute it and/or modify it\n     * under the terms of the GNU General Public License version 2 only, as\n     * published by the Free Software Foundation.  Oracle designates this\n     * particular file as subject to the \"Classpath\" exception as provided\n     * by Oracle in the LICENSE file that accompanied this code.\n     *\n     * This code is distributed in the hope that it will be useful, but WITHOUT\n     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n     * version 2 for more details (a copy is included in the LICENSE file that\n     * accompanied this code).\n     *\n     * You should have received a copy of the GNU General Public License version\n     * 2 along with this work; if not, write to the Free Software Foundation,\n     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n     *\n     * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n     * or visit www.oracle.com if you need additional information or have any\n     * questions.\n     */\n    // package java.io;\n    /**\n     * This abstract class is the superclass of all classes representing\n     * an output stream of bytes. An output stream accepts output bytes\n     * and sends them to some sink.\n     * <p>\n     * Applications that need to define a subclass of\n     * <code>OutputStream</code> must always provide at least a method\n     * that writes one byte of output.\n     *\n     * @author  Arthur van Hoff\n     * @see     java.io.BufferedOutputStream\n     * @see     java.io.ByteArrayOutputStream\n     * @see     java.io.DataOutputStream\n     * @see     java.io.FilterOutputStream\n     * @see     java.io.InputStream\n     * @see     java.io.OutputStream#write(int)\n     * @since   JDK1.0\n     */\n    /*public*/ class OutputStream /*implements Closeable, Flushable*/ {\n        /**\n         * Writes <code>b.length</code> bytes from the specified byte array\n         * to this output stream. The general contract for <code>write(b)</code>\n         * is that it should have exactly the same effect as the call\n         * <code>write(b, 0, b.length)</code>.\n         *\n         * @param      b   the data.\n         * @exception  IOException  if an I/O error occurs.\n         * @see        java.io.OutputStream#write(byte[], int, int)\n         */\n        writeBytes(b) {\n            this.writeBytesOffset(b, 0, b.length);\n        }\n        /**\n         * Writes <code>len</code> bytes from the specified byte array\n         * starting at offset <code>off</code> to this output stream.\n         * The general contract for <code>write(b, off, len)</code> is that\n         * some of the bytes in the array <code>b</code> are written to the\n         * output stream in order; element <code>b[off]</code> is the first\n         * byte written and <code>b[off+len-1]</code> is the last byte written\n         * by this operation.\n         * <p>\n         * The <code>write</code> method of <code>OutputStream</code> calls\n         * the write method of one argument on each of the bytes to be\n         * written out. Subclasses are encouraged to override this method and\n         * provide a more efficient implementation.\n         * <p>\n         * If <code>b</code> is <code>null</code>, a\n         * <code>NullPointerException</code> is thrown.\n         * <p>\n         * If <code>off</code> is negative, or <code>len</code> is negative, or\n         * <code>off+len</code> is greater than the length of the array\n         * <code>b</code>, then an <tt>IndexOutOfBoundsException</tt> is thrown.\n         *\n         * @param      b     the data.\n         * @param      off   the start offset in the data.\n         * @param      len   the number of bytes to write.\n         * @exception  IOException  if an I/O error occurs. In particular,\n         *             an <code>IOException</code> is thrown if the output\n         *             stream is closed.\n         */\n        writeBytesOffset(b, off, len) {\n            if (b == null) {\n                throw new NullPointerException();\n            }\n            else if ((off < 0) || (off > b.length) || (len < 0) ||\n                ((off + len) > b.length) || ((off + len) < 0)) {\n                throw new IndexOutOfBoundsException();\n            }\n            else if (len === 0) {\n                return;\n            }\n            for (let i = 0; i < len; i++) {\n                this.write(b[off + i]);\n            }\n        }\n        /**\n         * Flushes this output stream and forces any buffered output bytes\n         * to be written out. The general contract of <code>flush</code> is\n         * that calling it is an indication that, if any bytes previously\n         * written have been buffered by the implementation of the output\n         * stream, such bytes should immediately be written to their\n         * intended destination.\n         * <p>\n         * If the intended destination of this stream is an abstraction provided by\n         * the underlying operating system, for example a file, then flushing the\n         * stream guarantees only that bytes previously written to the stream are\n         * passed to the operating system for writing; it does not guarantee that\n         * they are actually written to a physical device such as a disk drive.\n         * <p>\n         * The <code>flush</code> method of <code>OutputStream</code> does nothing.\n         *\n         * @exception  IOException  if an I/O error occurs.\n         */\n        flush() {\n        }\n        /**\n         * Closes this output stream and releases any system resources\n         * associated with this stream. The general contract of <code>close</code>\n         * is that it closes the output stream. A closed stream cannot perform\n         * output operations and cannot be reopened.\n         * <p>\n         * The <code>close</code> method of <code>OutputStream</code> does nothing.\n         *\n         * @exception  IOException  if an I/O error occurs.\n         */\n        close() {\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class OutOfMemoryError extends Exception {\n    }\n\n    /*\n     * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.\n     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n     *\n     * This code is free software; you can redistribute it and/or modify it\n     * under the terms of the GNU General Public License version 2 only, as\n     * published by the Free Software Foundation.  Oracle designates this\n     * particular file as subject to the \"Classpath\" exception as provided\n     * by Oracle in the LICENSE file that accompanied this code.\n     *\n     * This code is distributed in the hope that it will be useful, but WITHOUT\n     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n     * version 2 for more details (a copy is included in the LICENSE file that\n     * accompanied this code).\n     *\n     * You should have received a copy of the GNU General Public License version\n     * 2 along with this work; if not, write to the Free Software Foundation,\n     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n     *\n     * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n     * or visit www.oracle.com if you need additional information or have any\n     * questions.\n     */\n    /**\n     * This class implements an output stream in which the data is\n     * written into a byte array. The buffer automatically grows as data\n     * is written to it.\n     * The data can be retrieved using <code>toByteArray()</code> and\n     * <code>toString()</code>.\n     * <p>\n     * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in\n     * this class can be called after the stream has been closed without\n     * generating an <tt>IOException</tt>.\n     *\n     * @author  Arthur van Hoff\n     * @since   JDK1.0\n     */\n    /*public*/ class ByteArrayOutputStream extends OutputStream {\n        /**\n         * Creates a new byte array output stream. The buffer capacity is\n         * initially 32 bytes, though its size increases if necessary.\n         */\n        // public constructor() {\n        //     this(32);\n        // }\n        /**\n         * Creates a new byte array output stream, with a buffer capacity of\n         * the specified size, in bytes.\n         *\n         * @param   size   the initial size.\n         * @exception  IllegalArgumentException if size is negative.\n         */\n        constructor(size = 32) {\n            super();\n            /**\n             * The number of valid bytes in the buffer.\n             */\n            this.count = 0;\n            if (size < 0) {\n                throw new IllegalArgumentException('Negative initial size: '\n                    + size);\n            }\n            this.buf = new Uint8Array(size);\n        }\n        /**\n         * Increases the capacity if necessary to ensure that it can hold\n         * at least the number of elements specified by the minimum\n         * capacity argument.\n         *\n         * @param minCapacity the desired minimum capacity\n         * @throws OutOfMemoryError if {@code minCapacity < 0}.  This is\n         * interpreted as a request for the unsatisfiably large capacity\n         * {@code (long) Integer.MAX_VALUE + (minCapacity - Integer.MAX_VALUE)}.\n         */\n        ensureCapacity(minCapacity) {\n            // overflow-conscious code\n            if (minCapacity - this.buf.length > 0)\n                this.grow(minCapacity);\n        }\n        /**\n         * Increases the capacity to ensure that it can hold at least the\n         * number of elements specified by the minimum capacity argument.\n         *\n         * @param minCapacity the desired minimum capacity\n         */\n        grow(minCapacity) {\n            // overflow-conscious code\n            let oldCapacity = this.buf.length;\n            let newCapacity = oldCapacity << 1;\n            if (newCapacity - minCapacity < 0)\n                newCapacity = minCapacity;\n            if (newCapacity < 0) {\n                if (minCapacity < 0) // overflow\n                    throw new OutOfMemoryError();\n                newCapacity = Integer.MAX_VALUE;\n            }\n            this.buf = Arrays.copyOfUint8Array(this.buf, newCapacity);\n        }\n        /**\n         * Writes the specified byte to this byte array output stream.\n         *\n         * @param   b   the byte to be written.\n         */\n        write(b) {\n            this.ensureCapacity(this.count + 1);\n            this.buf[this.count] = /*(byte)*/ b;\n            this.count += 1;\n        }\n        /**\n         * Writes <code>len</code> bytes from the specified byte array\n         * starting at offset <code>off</code> to this byte array output stream.\n         *\n         * @param   b     the data.\n         * @param   off   the start offset in the data.\n         * @param   len   the number of bytes to write.\n         */\n        writeBytesOffset(b, off, len) {\n            if ((off < 0) || (off > b.length) || (len < 0) ||\n                ((off + len) - b.length > 0)) {\n                throw new IndexOutOfBoundsException();\n            }\n            this.ensureCapacity(this.count + len);\n            System.arraycopy(b, off, this.buf, this.count, len);\n            this.count += len;\n        }\n        /**\n         * Writes the complete contents of this byte array output stream to\n         * the specified output stream argument, as if by calling the output\n         * stream's write method using <code>out.write(buf, 0, count)</code>.\n         *\n         * @param      out   the output stream to which to write the data.\n         * @exception  IOException  if an I/O error occurs.\n         */\n        writeTo(out) {\n            out.writeBytesOffset(this.buf, 0, this.count);\n        }\n        /**\n         * Resets the <code>count</code> field of this byte array output\n         * stream to zero, so that all currently accumulated output in the\n         * output stream is discarded. The output stream can be used again,\n         * reusing the already allocated buffer space.\n         *\n         * @see     java.io.ByteArrayInputStream#count\n         */\n        reset() {\n            this.count = 0;\n        }\n        /**\n         * Creates a newly allocated byte array. Its size is the current\n         * size of this output stream and the valid contents of the buffer\n         * have been copied into it.\n         *\n         * @return  the current contents of this output stream, as a byte array.\n         * @see     java.io.ByteArrayOutputStream#size()\n         */\n        toByteArray() {\n            return Arrays.copyOfUint8Array(this.buf, this.count);\n        }\n        /**\n         * Returns the current size of the buffer.\n         *\n         * @return  the value of the <code>count</code> field, which is the number\n         *          of valid bytes in this output stream.\n         * @see     java.io.ByteArrayOutputStream#count\n         */\n        size() {\n            return this.count;\n        }\n        toString(param) {\n            if (!param) {\n                return this.toString_void();\n            }\n            if (typeof param === 'string') {\n                return this.toString_string(param);\n            }\n            return this.toString_number(param);\n        }\n        /**\n         * Converts the buffer's contents into a string decoding bytes using the\n         * platform's default character set. The length of the new <tt>String</tt>\n         * is a function of the character set, and hence may not be equal to the\n         * size of the buffer.\n         *\n         * <p> This method always replaces malformed-input and unmappable-character\n         * sequences with the default replacement string for the platform's\n         * default character set. The {@linkplain java.nio.charset.CharsetDecoder}\n         * class should be used when more control over the decoding process is\n         * required.\n         *\n         * @return String decoded from the buffer's contents.\n         * @since  JDK1.1\n         */\n        toString_void() {\n            return new String(this.buf /*, 0, this.count*/).toString();\n        }\n        /**\n         * Converts the buffer's contents into a string by decoding the bytes using\n         * the specified {@link java.nio.charset.Charset charsetName}. The length of\n         * the new <tt>String</tt> is a function of the charset, and hence may not be\n         * equal to the length of the byte array.\n         *\n         * <p> This method always replaces malformed-input and unmappable-character\n         * sequences with this charset's default replacement string. The {@link\n         * java.nio.charset.CharsetDecoder} class should be used when more control\n         * over the decoding process is required.\n         *\n         * @param  charsetName  the name of a supported\n         *              {@linkplain java.nio.charset.Charset </code>charset<code>}\n         * @return String decoded from the buffer's contents.\n         * @exception  UnsupportedEncodingException\n         *             If the named charset is not supported\n         * @since   JDK1.1\n         */\n        toString_string(charsetName) {\n            return new String(this.buf /*, 0, this.count, charsetName*/).toString();\n        }\n        /**\n         * Creates a newly allocated string. Its size is the current size of\n         * the output stream and the valid contents of the buffer have been\n         * copied into it. Each character <i>c</i> in the resulting string is\n         * constructed from the corresponding element <i>b</i> in the byte\n         * array such that:\n         * <blockquote><pre>\n         *     c == (char)(((hibyte &amp; 0xff) &lt;&lt; 8) | (b &amp; 0xff))\n         * </pre></blockquote>\n         *\n         * @deprecated This method does not properly convert bytes into characters.\n         * As of JDK&nbsp;1.1, the preferred way to do this is via the\n         * <code>toString(String enc)</code> method, which takes an encoding-name\n         * argument, or the <code>toString()</code> method, which uses the\n         * platform's default character encoding.\n         *\n         * @param      hibyte    the high byte of each resulting Unicode character.\n         * @return     the current contents of the output stream, as a string.\n         * @see        java.io.ByteArrayOutputStream#size()\n         * @see        java.io.ByteArrayOutputStream#toString(String)\n         * @see        java.io.ByteArrayOutputStream#toString()\n         */\n        // @Deprecated\n        toString_number(hibyte) {\n            return new String(this.buf /*, hibyte, 0, this.count*/).toString();\n        }\n        /**\n         * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in\n         * this class can be called after the stream has been closed without\n         * generating an <tt>IOException</tt>.\n         * <p>\n         *\n         * @throws IOException\n         */\n        close() {\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*private*/ var Mode$2;\n    (function (Mode) {\n        Mode[Mode[\"ALPHA\"] = 0] = \"ALPHA\";\n        Mode[Mode[\"LOWER\"] = 1] = \"LOWER\";\n        Mode[Mode[\"MIXED\"] = 2] = \"MIXED\";\n        Mode[Mode[\"PUNCT\"] = 3] = \"PUNCT\";\n        Mode[Mode[\"ALPHA_SHIFT\"] = 4] = \"ALPHA_SHIFT\";\n        Mode[Mode[\"PUNCT_SHIFT\"] = 5] = \"PUNCT_SHIFT\";\n    })(Mode$2 || (Mode$2 = {}));\n    /**\n     * Indirectly access the global BigInt constructor, it\n     * allows browsers that doesn't support BigInt to run\n     * the library without breaking due to \"undefined BigInt\"\n     * errors.\n     */\n    function getBigIntConstructor() {\n        if (typeof window !== 'undefined') {\n            return window['BigInt'] || null;\n        }\n        if (typeof global !== 'undefined') {\n            return global['BigInt'] || null;\n        }\n        if (typeof self !== 'undefined') {\n            return self['BigInt'] || null;\n        }\n        throw new Error('Can\\'t search globals for BigInt!');\n    }\n    /**\n     * Used to store the BigInt constructor.\n     */\n    let BigInteger;\n    /**\n     * This function creates a bigint value. It allows browsers\n     * that doesn't support BigInt to run the rest of the library\n     * by not directly accessing the BigInt constructor.\n     */\n    function createBigInt(num) {\n        if (typeof BigInteger === 'undefined') {\n            BigInteger = getBigIntConstructor();\n        }\n        if (BigInteger === null) {\n            throw new Error('BigInt is not supported!');\n        }\n        return BigInteger(num);\n    }\n    function getEXP900() {\n        // in Java - array with length = 16\n        let EXP900 = [];\n        EXP900[0] = createBigInt(1);\n        let nineHundred = createBigInt(900);\n        EXP900[1] = nineHundred;\n        // in Java - array with length = 16\n        for (let i /*int*/ = 2; i < 16; i++) {\n            EXP900[i] = EXP900[i - 1] * nineHundred;\n        }\n        return EXP900;\n    }\n    /**\n     * <p>This class contains the methods for decoding the PDF417 codewords.</p>\n     *\n     * @author SITA Lab (kevin.osullivan@sita.aero)\n     * @author Guenther Grau\n     */\n    /*final*/ class DecodedBitStreamParser$2 {\n        //   private DecodedBitStreamParser() {\n        // }\n        /**\n         *\n         * @param codewords\n         * @param ecLevel\n         *\n         * @throws FormatException\n         */\n        static decode(codewords, ecLevel) {\n            // pass encoding to result (will be used for decode symbols in byte mode)\n            let result = new StringBuilder('');\n            // let encoding: Charset = StandardCharsets.ISO_8859_1;\n            let encoding = CharacterSetECI.ISO8859_1;\n            /**\n             * @note the next command is specific from this TypeScript library\n             * because TS can't properly cast some values to char and\n             * convert it to string later correctly due to encoding\n             * differences from Java version. As reported here:\n             * https://github.com/zxing-js/library/pull/264/files#r382831593\n             */\n            result.enableDecoding(encoding);\n            // Get compaction mode\n            let codeIndex = 1;\n            let code = codewords[codeIndex++];\n            let resultMetadata = new PDF417ResultMetadata();\n            while (codeIndex < codewords[0]) {\n                switch (code) {\n                    case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                        codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex, result);\n                        break;\n                    case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                    case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                        codeIndex = DecodedBitStreamParser$2.byteCompaction(code, codewords, encoding, codeIndex, result);\n                        break;\n                    case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                        result.append(/*(char)*/ codewords[codeIndex++]);\n                        break;\n                    case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                        codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex, result);\n                        break;\n                    case DecodedBitStreamParser$2.ECI_CHARSET:\n                        let charsetECI = CharacterSetECI.getCharacterSetECIByValue(codewords[codeIndex++]);\n                        // encoding = Charset.forName(charsetECI.getName());\n                        break;\n                    case DecodedBitStreamParser$2.ECI_GENERAL_PURPOSE:\n                        // Can't do anything with generic ECI; skip its 2 characters\n                        codeIndex += 2;\n                        break;\n                    case DecodedBitStreamParser$2.ECI_USER_DEFINED:\n                        // Can't do anything with user ECI; skip its 1 character\n                        codeIndex++;\n                        break;\n                    case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        codeIndex = DecodedBitStreamParser$2.decodeMacroBlock(codewords, codeIndex, resultMetadata);\n                        break;\n                    case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                    case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                        // Should not see these outside a macro block\n                        throw new FormatException();\n                    default:\n                        // Default to text compaction. During testing numerous barcodes\n                        // appeared to be missing the starting mode. In these cases defaulting\n                        // to text compaction seems to work.\n                        codeIndex--;\n                        codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex, result);\n                        break;\n                }\n                if (codeIndex < codewords.length) {\n                    code = codewords[codeIndex++];\n                }\n                else {\n                    throw FormatException.getFormatInstance();\n                }\n            }\n            if (result.length() === 0) {\n                throw FormatException.getFormatInstance();\n            }\n            let decoderResult = new DecoderResult(null, result.toString(), null, ecLevel);\n            decoderResult.setOther(resultMetadata);\n            return decoderResult;\n        }\n        /**\n         *\n         * @param int\n         * @param param1\n         * @param codewords\n         * @param int\n         * @param codeIndex\n         * @param PDF417ResultMetadata\n         * @param resultMetadata\n         *\n         * @throws FormatException\n         */\n        // @SuppressWarnings(\"deprecation\")\n        static decodeMacroBlock(codewords, codeIndex, resultMetadata) {\n            if (codeIndex + DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS > codewords[0]) {\n                // we must have at least two bytes left for the segment index\n                throw FormatException.getFormatInstance();\n            }\n            let segmentIndexArray = new Int32Array(DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS);\n            for (let i /*int*/ = 0; i < DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) {\n                segmentIndexArray[i] = codewords[codeIndex];\n            }\n            resultMetadata.setSegmentIndex(Integer.parseInt(DecodedBitStreamParser$2.decodeBase900toBase10(segmentIndexArray, DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS)));\n            let fileId = new StringBuilder();\n            codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex, fileId);\n            resultMetadata.setFileId(fileId.toString());\n            let optionalFieldsStart = -1;\n            if (codewords[codeIndex] === DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {\n                optionalFieldsStart = codeIndex + 1;\n            }\n            while (codeIndex < codewords[0]) {\n                switch (codewords[codeIndex]) {\n                    case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        codeIndex++;\n                        switch (codewords[codeIndex]) {\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:\n                                let fileName = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex + 1, fileName);\n                                resultMetadata.setFileName(fileName.toString());\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SENDER:\n                                let sender = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex + 1, sender);\n                                resultMetadata.setSender(sender.toString());\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:\n                                let addressee = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex + 1, addressee);\n                                resultMetadata.setAddressee(addressee.toString());\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:\n                                let segmentCount = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, segmentCount);\n                                resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString()));\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:\n                                let timestamp = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, timestamp);\n                                resultMetadata.setTimestamp(Long.parseLong(timestamp.toString()));\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:\n                                let checksum = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, checksum);\n                                resultMetadata.setChecksum(Integer.parseInt(checksum.toString()));\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:\n                                let fileSize = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, fileSize);\n                                resultMetadata.setFileSize(Long.parseLong(fileSize.toString()));\n                                break;\n                            default:\n                                throw FormatException.getFormatInstance();\n                        }\n                        break;\n                    case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                        codeIndex++;\n                        resultMetadata.setLastSegment(true);\n                        break;\n                    default:\n                        throw FormatException.getFormatInstance();\n                }\n            }\n            // copy optional fields to additional options\n            if (optionalFieldsStart !== -1) {\n                let optionalFieldsLength = codeIndex - optionalFieldsStart;\n                if (resultMetadata.isLastSegment()) {\n                    // do not include terminator\n                    optionalFieldsLength--;\n                }\n                resultMetadata.setOptionalData(Arrays.copyOfRange(codewords, optionalFieldsStart, optionalFieldsStart + optionalFieldsLength));\n            }\n            return codeIndex;\n        }\n        /**\n         * Text Compaction mode (see 5.4.1.5) permits all printable ASCII characters to be\n         * encoded, i.e. values 32 - 126 inclusive in accordance with ISO/IEC 646 (IRV), as\n         * well as selected control characters.\n         *\n         * @param codewords The array of codewords (data + error)\n         * @param codeIndex The current index into the codeword array.\n         * @param result    The decoded data is appended to the result.\n         * @return The next index into the codeword array.\n         */\n        static textCompaction(codewords, codeIndex, result) {\n            // 2 character per codeword\n            let textCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n            // Used to hold the byte compaction value if there is a mode shift\n            let byteCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n            let index = 0;\n            let end = false;\n            while ((codeIndex < codewords[0]) && !end) {\n                let code = codewords[codeIndex++];\n                if (code < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                    textCompactionData[index] = code / 30;\n                    textCompactionData[index + 1] = code % 30;\n                    index += 2;\n                }\n                else {\n                    switch (code) {\n                        case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                            // reinitialize text compaction mode to alpha sub mode\n                            textCompactionData[index++] = DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH;\n                            break;\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                        case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                            codeIndex--;\n                            end = true;\n                            break;\n                        case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                            // The Mode Shift codeword 913 shall cause a temporary\n                            // switch from Text Compaction mode to Byte Compaction mode.\n                            // This switch shall be in effect for only the next codeword,\n                            // after which the mode shall revert to the prevailing sub-mode\n                            // of the Text Compaction mode. Codeword 913 is only available\n                            // in Text Compaction mode; its use is described in 5.4.2.4.\n                            textCompactionData[index] = DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE;\n                            code = codewords[codeIndex++];\n                            byteCompactionData[index] = code;\n                            index++;\n                            break;\n                    }\n                }\n            }\n            DecodedBitStreamParser$2.decodeTextCompaction(textCompactionData, byteCompactionData, index, result);\n            return codeIndex;\n        }\n        /**\n         * The Text Compaction mode includes all the printable ASCII characters\n         * (i.e. values from 32 to 126) and three ASCII control characters: HT or tab\n         * (9: e), LF or line feed (10: e), and CR or carriage\n         * return (13: e). The Text Compaction mode also includes various latch\n         * and shift characters which are used exclusively within the mode. The Text\n         * Compaction mode encodes up to 2 characters per codeword. The compaction rules\n         * for converting data into PDF417 codewords are defined in 5.4.2.2. The sub-mode\n         * switches are defined in 5.4.2.3.\n         *\n         * @param textCompactionData The text compaction data.\n         * @param byteCompactionData The byte compaction data if there\n         *                           was a mode shift.\n         * @param length             The size of the text compaction and byte compaction data.\n         * @param result             The decoded data is appended to the result.\n         */\n        static decodeTextCompaction(textCompactionData, byteCompactionData, length, result) {\n            // Beginning from an initial state of the Alpha sub-mode\n            // The default compaction mode for PDF417 in effect at the start of each symbol shall always be Text\n            // Compaction mode Alpha sub-mode (alphabetic: uppercase). A latch codeword from another mode to the Text\n            // Compaction mode shall always switch to the Text Compaction Alpha sub-mode.\n            let subMode = Mode$2.ALPHA;\n            let priorToShiftMode = Mode$2.ALPHA;\n            let i = 0;\n            while (i < length) {\n                let subModeCh = textCompactionData[i];\n                let ch = /*char*/ '';\n                switch (subMode) {\n                    case Mode$2.ALPHA:\n                        // Alpha (alphabetic: uppercase)\n                        if (subModeCh < 26) {\n                            // Upper case Alpha Character\n                            // Note: 65 = 'A' ASCII -> there is byte code of symbol\n                            ch = /*(char)('A' + subModeCh) */ String.fromCharCode(65 + subModeCh);\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.LL:\n                                    subMode = Mode$2.LOWER;\n                                    break;\n                                case DecodedBitStreamParser$2.ML:\n                                    subMode = Mode$2.MIXED;\n                                    break;\n                                case DecodedBitStreamParser$2.PS:\n                                    // Shift to punctuation\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.PUNCT_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.LOWER:\n                        // Lower (alphabetic: lowercase)\n                        if (subModeCh < 26) {\n                            ch = /*(char)('a' + subModeCh)*/ String.fromCharCode(97 + subModeCh);\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.AS:\n                                    // Shift to alpha\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.ALPHA_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.ML:\n                                    subMode = Mode$2.MIXED;\n                                    break;\n                                case DecodedBitStreamParser$2.PS:\n                                    // Shift to punctuation\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.PUNCT_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    // TODO Does this need to use the current character encoding? See other occurrences below\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.MIXED:\n                        // Mixed (punctuation: e)\n                        if (subModeCh < DecodedBitStreamParser$2.PL) {\n                            ch = DecodedBitStreamParser$2.MIXED_CHARS[subModeCh];\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case DecodedBitStreamParser$2.PL:\n                                    subMode = Mode$2.PUNCT;\n                                    break;\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.LL:\n                                    subMode = Mode$2.LOWER;\n                                    break;\n                                case DecodedBitStreamParser$2.AL:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                                case DecodedBitStreamParser$2.PS:\n                                    // Shift to punctuation\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.PUNCT_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.PUNCT:\n                        // Punctuation\n                        if (subModeCh < DecodedBitStreamParser$2.PAL) {\n                            ch = DecodedBitStreamParser$2.PUNCT_CHARS[subModeCh];\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case DecodedBitStreamParser$2.PAL:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.ALPHA_SHIFT:\n                        // Restore sub-mode\n                        subMode = priorToShiftMode;\n                        if (subModeCh < 26) {\n                            ch = /*(char)('A' + subModeCh)*/ String.fromCharCode(65 + subModeCh);\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.PUNCT_SHIFT:\n                        // Restore sub-mode\n                        subMode = priorToShiftMode;\n                        if (subModeCh < DecodedBitStreamParser$2.PAL) {\n                            ch = DecodedBitStreamParser$2.PUNCT_CHARS[subModeCh];\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case DecodedBitStreamParser$2.PAL:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    // PS before Shift-to-Byte is used as a padding character,\n                                    // see 5.4.2.4 of the specification\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                }\n                // if (ch !== 0) {\n                if (ch !== '') {\n                    // Append decoded character to result\n                    result.append(ch);\n                }\n                i++;\n            }\n        }\n        /**\n         * Byte Compaction mode (see 5.4.3) permits all 256 possible 8-bit byte values to be encoded.\n         * This includes all ASCII characters value 0 to 127 inclusive and provides for international\n         * character set support.\n         *\n         * @param mode      The byte compaction mode i.e. 901 or 924\n         * @param codewords The array of codewords (data + error)\n         * @param encoding  Currently active character encoding\n         * @param codeIndex The current index into the codeword array.\n         * @param result    The decoded data is appended to the result.\n         * @return The next index into the codeword array.\n         */\n        static /*int*/ byteCompaction(mode, codewords, encoding, codeIndex, result) {\n            let decodedBytes = new ByteArrayOutputStream();\n            let count = 0;\n            let value = /*long*/ 0;\n            let end = false;\n            switch (mode) {\n                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                    // Total number of Byte Compaction characters to be encoded\n                    // is not a multiple of 6\n                    let byteCompactedCodewords = new Int32Array(6);\n                    let nextCode = codewords[codeIndex++];\n                    while ((codeIndex < codewords[0]) && !end) {\n                        byteCompactedCodewords[count++] = nextCode;\n                        // Base 900\n                        value = 900 * value + nextCode;\n                        nextCode = codewords[codeIndex++];\n                        // perhaps it should be ok to check only nextCode >= TEXT_COMPACTION_MODE_LATCH\n                        switch (nextCode) {\n                            case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                            case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                            case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                            case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                                codeIndex--;\n                                end = true;\n                                break;\n                            default:\n                                if ((count % 5 === 0) && (count > 0)) {\n                                    // Decode every 5 codewords\n                                    // Convert to Base 256\n                                    for (let j /*int*/ = 0; j < 6; ++j) {\n                                        /* @note\n                                         * JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.\n                                         * So the next bitwise operation could not be done with simple numbers\n                                         */\n                                        decodedBytes.write(/*(byte)*/ Number(createBigInt(value) >> createBigInt(8 * (5 - j))));\n                                    }\n                                    value = 0;\n                                    count = 0;\n                                }\n                                break;\n                        }\n                    }\n                    // if the end of all codewords is reached the last codeword needs to be added\n                    if (codeIndex === codewords[0] && nextCode < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                        byteCompactedCodewords[count++] = nextCode;\n                    }\n                    // If Byte Compaction mode is invoked with codeword 901,\n                    // the last group of codewords is interpreted directly\n                    // as one byte per codeword, without compaction.\n                    for (let i /*int*/ = 0; i < count; i++) {\n                        decodedBytes.write(/*(byte)*/ byteCompactedCodewords[i]);\n                    }\n                    break;\n                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                    // Total number of Byte Compaction characters to be encoded\n                    // is an integer multiple of 6\n                    while (codeIndex < codewords[0] && !end) {\n                        let code = codewords[codeIndex++];\n                        if (code < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                            count++;\n                            // Base 900\n                            value = 900 * value + code;\n                        }\n                        else {\n                            switch (code) {\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                                case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                                case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                                case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                                case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                                    codeIndex--;\n                                    end = true;\n                                    break;\n                            }\n                        }\n                        if ((count % 5 === 0) && (count > 0)) {\n                            // Decode every 5 codewords\n                            // Convert to Base 256\n                            /* @note\n                             * JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.\n                             * So the next bitwise operation could not be done with simple numbers\n                            */\n                            for (let j /*int*/ = 0; j < 6; ++j) {\n                                decodedBytes.write(/*(byte)*/ Number(createBigInt(value) >> createBigInt(8 * (5 - j))));\n                            }\n                            value = 0;\n                            count = 0;\n                        }\n                    }\n                    break;\n            }\n            result.append(StringEncoding.decode(decodedBytes.toByteArray(), encoding));\n            return codeIndex;\n        }\n        /**\n         * Numeric Compaction mode (see 5.4.4) permits efficient encoding of numeric data strings.\n         *\n         * @param codewords The array of codewords (data + error)\n         * @param codeIndex The current index into the codeword array.\n         * @param result    The decoded data is appended to the result.\n         * @return The next index into the codeword array.\n         *\n         * @throws FormatException\n         */\n        static numericCompaction(codewords, codeIndex /*int*/, result) {\n            let count = 0;\n            let end = false;\n            let numericCodewords = new Int32Array(DecodedBitStreamParser$2.MAX_NUMERIC_CODEWORDS);\n            while (codeIndex < codewords[0] && !end) {\n                let code = codewords[codeIndex++];\n                if (codeIndex === codewords[0]) {\n                    end = true;\n                }\n                if (code < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                    numericCodewords[count] = code;\n                    count++;\n                }\n                else {\n                    switch (code) {\n                        case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                            codeIndex--;\n                            end = true;\n                            break;\n                    }\n                }\n                if ((count % DecodedBitStreamParser$2.MAX_NUMERIC_CODEWORDS === 0 || code === DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH || end) && count > 0) {\n                    // Re-invoking Numeric Compaction mode (by using codeword 902\n                    // while in Numeric Compaction mode) serves  to terminate the\n                    // current Numeric Compaction mode grouping as described in 5.4.4.2,\n                    // and then to start a new one grouping.\n                    result.append(DecodedBitStreamParser$2.decodeBase900toBase10(numericCodewords, count));\n                    count = 0;\n                }\n            }\n            return codeIndex;\n        }\n        /**\n         * Convert a list of Numeric Compacted codewords from Base 900 to Base 10.\n         *\n         * @param codewords The array of codewords\n         * @param count     The number of codewords\n         * @return The decoded string representing the Numeric data.\n         *\n         * EXAMPLE\n         * Encode the fifteen digit numeric string 000213298174000\n         * Prefix the numeric string with a 1 and set the initial value of\n         * t = 1 000 213 298 174 000\n         * Calculate codeword 0\n         * d0 = 1 000 213 298 174 000 mod 900 = 200\n         *\n         * t = 1 000 213 298 174 000 div 900 = 1 111 348 109 082\n         * Calculate codeword 1\n         * d1 = 1 111 348 109 082 mod 900 = 282\n         *\n         * t = 1 111 348 109 082 div 900 = 1 234 831 232\n         * Calculate codeword 2\n         * d2 = 1 234 831 232 mod 900 = 632\n         *\n         * t = 1 234 831 232 div 900 = 1 372 034\n         * Calculate codeword 3\n         * d3 = 1 372 034 mod 900 = 434\n         *\n         * t = 1 372 034 div 900 = 1 524\n         * Calculate codeword 4\n         * d4 = 1 524 mod 900 = 624\n         *\n         * t = 1 524 div 900 = 1\n         * Calculate codeword 5\n         * d5 = 1 mod 900 = 1\n         * t = 1 div 900 = 0\n         * Codeword sequence is: 1, 624, 434, 632, 282, 200\n         *\n         * Decode the above codewords involves\n         *   1 x 900 power of 5 + 624 x 900 power of 4 + 434 x 900 power of 3 +\n         * 632 x 900 power of 2 + 282 x 900 power of 1 + 200 x 900 power of 0 = 1000213298174000\n         *\n         * Remove leading 1 =>  Result is 000213298174000\n         *\n         * @throws FormatException\n         */\n        static decodeBase900toBase10(codewords, count) {\n            let result = createBigInt(0);\n            for (let i /*int*/ = 0; i < count; i++) {\n                result += DecodedBitStreamParser$2.EXP900[count - i - 1] * createBigInt(codewords[i]);\n            }\n            let resultString = result.toString();\n            if (resultString.charAt(0) !== '1') {\n                throw new FormatException();\n            }\n            return resultString.substring(1);\n        }\n    }\n    DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH = 900;\n    DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH = 901;\n    DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH = 902;\n    DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6 = 924;\n    DecodedBitStreamParser$2.ECI_USER_DEFINED = 925;\n    DecodedBitStreamParser$2.ECI_GENERAL_PURPOSE = 926;\n    DecodedBitStreamParser$2.ECI_CHARSET = 927;\n    DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928;\n    DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923;\n    DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR = 922;\n    DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913;\n    DecodedBitStreamParser$2.MAX_NUMERIC_CODEWORDS = 15;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6;\n    DecodedBitStreamParser$2.PL = 25;\n    DecodedBitStreamParser$2.LL = 27;\n    DecodedBitStreamParser$2.AS = 27;\n    DecodedBitStreamParser$2.ML = 28;\n    DecodedBitStreamParser$2.AL = 28;\n    DecodedBitStreamParser$2.PS = 29;\n    DecodedBitStreamParser$2.PAL = 29;\n    DecodedBitStreamParser$2.PUNCT_CHARS = ';<>@[\\\\]_`~!\\r\\t,:\\n-.$/\"|*()?{}\\'';\n    DecodedBitStreamParser$2.MIXED_CHARS = '0123456789&\\r\\t,:#-.$/+%*=^';\n    /**\n     * Table containing values for the exponent of 900.\n     * This is used in the numeric compaction decode algorithm.\n     */\n    DecodedBitStreamParser$2.EXP900 = getBigIntConstructor() ? getEXP900() : [];\n    DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS = 2;\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    // import java.util.ArrayList;\n    // import java.util.Collection;\n    // import java.util.Formatter;\n    // import java.util.List;\n    /**\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417ScanningDecoder {\n        constructor() { }\n        /**\n         * @TODO don't pass in minCodewordWidth and maxCodewordWidth, pass in barcode columns for start and stop pattern\n         *\n         * columns. That way width can be deducted from the pattern column.\n         * This approach also allows to detect more details about the barcode, e.g. if a bar type (white or black) is wider\n         * than it should be. This can happen if the scanner used a bad blackpoint.\n         *\n         * @param BitMatrix\n         * @param image\n         * @param ResultPoint\n         * @param imageTopLeft\n         * @param ResultPoint\n         * @param imageBottomLeft\n         * @param ResultPoint\n         * @param imageTopRight\n         * @param ResultPoint\n         * @param imageBottomRight\n         * @param int\n         * @param minCodewordWidth\n         * @param int\n         * @param maxCodewordWidth\n         *\n         * @throws NotFoundException\n         * @throws FormatException\n         * @throws ChecksumException\n         */\n        static decode(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, minCodewordWidth, maxCodewordWidth) {\n            let boundingBox = new BoundingBox(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight);\n            let leftRowIndicatorColumn = null;\n            let rightRowIndicatorColumn = null;\n            let detectionResult;\n            for (let firstPass /*boolean*/ = true;; firstPass = false) {\n                if (imageTopLeft != null) {\n                    leftRowIndicatorColumn = PDF417ScanningDecoder.getRowIndicatorColumn(image, boundingBox, imageTopLeft, true, minCodewordWidth, maxCodewordWidth);\n                }\n                if (imageTopRight != null) {\n                    rightRowIndicatorColumn = PDF417ScanningDecoder.getRowIndicatorColumn(image, boundingBox, imageTopRight, false, minCodewordWidth, maxCodewordWidth);\n                }\n                detectionResult = PDF417ScanningDecoder.merge(leftRowIndicatorColumn, rightRowIndicatorColumn);\n                if (detectionResult == null) {\n                    throw NotFoundException.getNotFoundInstance();\n                }\n                let resultBox = detectionResult.getBoundingBox();\n                if (firstPass && resultBox != null &&\n                    (resultBox.getMinY() < boundingBox.getMinY() || resultBox.getMaxY() > boundingBox.getMaxY())) {\n                    boundingBox = resultBox;\n                }\n                else {\n                    break;\n                }\n            }\n            detectionResult.setBoundingBox(boundingBox);\n            let maxBarcodeColumn = detectionResult.getBarcodeColumnCount() + 1;\n            detectionResult.setDetectionResultColumn(0, leftRowIndicatorColumn);\n            detectionResult.setDetectionResultColumn(maxBarcodeColumn, rightRowIndicatorColumn);\n            let leftToRight = leftRowIndicatorColumn != null;\n            for (let barcodeColumnCount /*int*/ = 1; barcodeColumnCount <= maxBarcodeColumn; barcodeColumnCount++) {\n                let barcodeColumn = leftToRight ? barcodeColumnCount : maxBarcodeColumn - barcodeColumnCount;\n                if (detectionResult.getDetectionResultColumn(barcodeColumn) !== /* null */ undefined) {\n                    // This will be the case for the opposite row indicator column, which doesn't need to be decoded again.\n                    continue;\n                }\n                let detectionResultColumn;\n                if (barcodeColumn === 0 || barcodeColumn === maxBarcodeColumn) {\n                    detectionResultColumn = new DetectionResultRowIndicatorColumn(boundingBox, barcodeColumn === 0);\n                }\n                else {\n                    detectionResultColumn = new DetectionResultColumn(boundingBox);\n                }\n                detectionResult.setDetectionResultColumn(barcodeColumn, detectionResultColumn);\n                let startColumn = -1;\n                let previousStartColumn = startColumn;\n                // TODO start at a row for which we know the start position, then detect upwards and downwards from there.\n                for (let imageRow /*int*/ = boundingBox.getMinY(); imageRow <= boundingBox.getMaxY(); imageRow++) {\n                    startColumn = PDF417ScanningDecoder.getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight);\n                    if (startColumn < 0 || startColumn > boundingBox.getMaxX()) {\n                        if (previousStartColumn === -1) {\n                            continue;\n                        }\n                        startColumn = previousStartColumn;\n                    }\n                    let codeword = PDF417ScanningDecoder.detectCodeword(image, boundingBox.getMinX(), boundingBox.getMaxX(), leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth);\n                    if (codeword != null) {\n                        detectionResultColumn.setCodeword(imageRow, codeword);\n                        previousStartColumn = startColumn;\n                        minCodewordWidth = Math.min(minCodewordWidth, codeword.getWidth());\n                        maxCodewordWidth = Math.max(maxCodewordWidth, codeword.getWidth());\n                    }\n                }\n            }\n            return PDF417ScanningDecoder.createDecoderResult(detectionResult);\n        }\n        /**\n         *\n         * @param leftRowIndicatorColumn\n         * @param rightRowIndicatorColumn\n         *\n         * @throws NotFoundException\n         */\n        static merge(leftRowIndicatorColumn, rightRowIndicatorColumn) {\n            if (leftRowIndicatorColumn == null && rightRowIndicatorColumn == null) {\n                return null;\n            }\n            let barcodeMetadata = PDF417ScanningDecoder.getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn);\n            if (barcodeMetadata == null) {\n                return null;\n            }\n            let boundingBox = BoundingBox.merge(PDF417ScanningDecoder.adjustBoundingBox(leftRowIndicatorColumn), PDF417ScanningDecoder.adjustBoundingBox(rightRowIndicatorColumn));\n            return new DetectionResult(barcodeMetadata, boundingBox);\n        }\n        /**\n         *\n         * @param rowIndicatorColumn\n         *\n         * @throws NotFoundException\n         */\n        static adjustBoundingBox(rowIndicatorColumn) {\n            if (rowIndicatorColumn == null) {\n                return null;\n            }\n            let rowHeights = rowIndicatorColumn.getRowHeights();\n            if (rowHeights == null) {\n                return null;\n            }\n            let maxRowHeight = PDF417ScanningDecoder.getMax(rowHeights);\n            let missingStartRows = 0;\n            for (let rowHeight /*int*/ of rowHeights) {\n                missingStartRows += maxRowHeight - rowHeight;\n                if (rowHeight > 0) {\n                    break;\n                }\n            }\n            let codewords = rowIndicatorColumn.getCodewords();\n            for (let row /*int*/ = 0; missingStartRows > 0 && codewords[row] == null; row++) {\n                missingStartRows--;\n            }\n            let missingEndRows = 0;\n            for (let row /*int*/ = rowHeights.length - 1; row >= 0; row--) {\n                missingEndRows += maxRowHeight - rowHeights[row];\n                if (rowHeights[row] > 0) {\n                    break;\n                }\n            }\n            for (let row /*int*/ = codewords.length - 1; missingEndRows > 0 && codewords[row] == null; row--) {\n                missingEndRows--;\n            }\n            return rowIndicatorColumn.getBoundingBox().addMissingRows(missingStartRows, missingEndRows, rowIndicatorColumn.isLeft());\n        }\n        static getMax(values) {\n            let maxValue = -1;\n            for (let value /*int*/ of values) {\n                maxValue = Math.max(maxValue, value);\n            }\n            return maxValue;\n        }\n        static getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn) {\n            let leftBarcodeMetadata;\n            if (leftRowIndicatorColumn == null ||\n                (leftBarcodeMetadata = leftRowIndicatorColumn.getBarcodeMetadata()) == null) {\n                return rightRowIndicatorColumn == null ? null : rightRowIndicatorColumn.getBarcodeMetadata();\n            }\n            let rightBarcodeMetadata;\n            if (rightRowIndicatorColumn == null ||\n                (rightBarcodeMetadata = rightRowIndicatorColumn.getBarcodeMetadata()) == null) {\n                return leftBarcodeMetadata;\n            }\n            if (leftBarcodeMetadata.getColumnCount() !== rightBarcodeMetadata.getColumnCount() &&\n                leftBarcodeMetadata.getErrorCorrectionLevel() !== rightBarcodeMetadata.getErrorCorrectionLevel() &&\n                leftBarcodeMetadata.getRowCount() !== rightBarcodeMetadata.getRowCount()) {\n                return null;\n            }\n            return leftBarcodeMetadata;\n        }\n        static getRowIndicatorColumn(image, boundingBox, startPoint, leftToRight, minCodewordWidth, maxCodewordWidth) {\n            let rowIndicatorColumn = new DetectionResultRowIndicatorColumn(boundingBox, leftToRight);\n            for (let i /*int*/ = 0; i < 2; i++) {\n                let increment = i === 0 ? 1 : -1;\n                let startColumn = Math.trunc(Math.trunc(startPoint.getX()));\n                for (let imageRow /*int*/ = Math.trunc(Math.trunc(startPoint.getY())); imageRow <= boundingBox.getMaxY() &&\n                    imageRow >= boundingBox.getMinY(); imageRow += increment) {\n                    let codeword = PDF417ScanningDecoder.detectCodeword(image, 0, image.getWidth(), leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth);\n                    if (codeword != null) {\n                        rowIndicatorColumn.setCodeword(imageRow, codeword);\n                        if (leftToRight) {\n                            startColumn = codeword.getStartX();\n                        }\n                        else {\n                            startColumn = codeword.getEndX();\n                        }\n                    }\n                }\n            }\n            return rowIndicatorColumn;\n        }\n        /**\n         *\n         * @param detectionResult\n         * @param BarcodeValue\n         * @param param2\n         * @param param3\n         * @param barcodeMatrix\n         *\n         * @throws NotFoundException\n         */\n        static adjustCodewordCount(detectionResult, barcodeMatrix) {\n            let barcodeMatrix01 = barcodeMatrix[0][1];\n            let numberOfCodewords = barcodeMatrix01.getValue();\n            let calculatedNumberOfCodewords = detectionResult.getBarcodeColumnCount() *\n                detectionResult.getBarcodeRowCount() -\n                PDF417ScanningDecoder.getNumberOfECCodeWords(detectionResult.getBarcodeECLevel());\n            if (numberOfCodewords.length === 0) {\n                if (calculatedNumberOfCodewords < 1 || calculatedNumberOfCodewords > PDF417Common.MAX_CODEWORDS_IN_BARCODE) {\n                    throw NotFoundException.getNotFoundInstance();\n                }\n                barcodeMatrix01.setValue(calculatedNumberOfCodewords);\n            }\n            else if (numberOfCodewords[0] !== calculatedNumberOfCodewords) {\n                // The calculated one is more reliable as it is derived from the row indicator columns\n                barcodeMatrix01.setValue(calculatedNumberOfCodewords);\n            }\n        }\n        /**\n         *\n         * @param detectionResult\n         *\n         * @throws FormatException\n         * @throws ChecksumException\n         * @throws NotFoundException\n         */\n        static createDecoderResult(detectionResult) {\n            let barcodeMatrix = PDF417ScanningDecoder.createBarcodeMatrix(detectionResult);\n            PDF417ScanningDecoder.adjustCodewordCount(detectionResult, barcodeMatrix);\n            let erasures /*Collection<Integer>*/ = new Array();\n            let codewords = new Int32Array(detectionResult.getBarcodeRowCount() * detectionResult.getBarcodeColumnCount());\n            let ambiguousIndexValuesList = /*List<int[]>*/ [];\n            let ambiguousIndexesList = /*Collection<Integer>*/ new Array();\n            for (let row /*int*/ = 0; row < detectionResult.getBarcodeRowCount(); row++) {\n                for (let column /*int*/ = 0; column < detectionResult.getBarcodeColumnCount(); column++) {\n                    let values = barcodeMatrix[row][column + 1].getValue();\n                    let codewordIndex = row * detectionResult.getBarcodeColumnCount() + column;\n                    if (values.length === 0) {\n                        erasures.push(codewordIndex);\n                    }\n                    else if (values.length === 1) {\n                        codewords[codewordIndex] = values[0];\n                    }\n                    else {\n                        ambiguousIndexesList.push(codewordIndex);\n                        ambiguousIndexValuesList.push(values);\n                    }\n                }\n            }\n            let ambiguousIndexValues = new Array(ambiguousIndexValuesList.length);\n            for (let i /*int*/ = 0; i < ambiguousIndexValues.length; i++) {\n                ambiguousIndexValues[i] = ambiguousIndexValuesList[i];\n            }\n            return PDF417ScanningDecoder.createDecoderResultFromAmbiguousValues(detectionResult.getBarcodeECLevel(), codewords, PDF417Common.toIntArray(erasures), PDF417Common.toIntArray(ambiguousIndexesList), ambiguousIndexValues);\n        }\n        /**\n         * This method deals with the fact, that the decoding process doesn't always yield a single most likely value. The\n         * current error correction implementation doesn't deal with erasures very well, so it's better to provide a value\n         * for these ambiguous codewords instead of treating it as an erasure. The problem is that we don't know which of\n         * the ambiguous values to choose. We try decode using the first value, and if that fails, we use another of the\n         * ambiguous values and try to decode again. This usually only happens on very hard to read and decode barcodes,\n         * so decoding the normal barcodes is not affected by this.\n         *\n         * @param erasureArray contains the indexes of erasures\n         * @param ambiguousIndexes array with the indexes that have more than one most likely value\n         * @param ambiguousIndexValues two dimensional array that contains the ambiguous values. The first dimension must\n         * be the same length as the ambiguousIndexes array\n         *\n         * @throws FormatException\n         * @throws ChecksumException\n         */\n        static createDecoderResultFromAmbiguousValues(ecLevel, codewords, erasureArray, ambiguousIndexes, ambiguousIndexValues) {\n            let ambiguousIndexCount = new Int32Array(ambiguousIndexes.length);\n            let tries = 100;\n            while (tries-- > 0) {\n                for (let i /*int*/ = 0; i < ambiguousIndexCount.length; i++) {\n                    codewords[ambiguousIndexes[i]] = ambiguousIndexValues[i][ambiguousIndexCount[i]];\n                }\n                try {\n                    return PDF417ScanningDecoder.decodeCodewords(codewords, ecLevel, erasureArray);\n                }\n                catch (err) {\n                    let ignored = err instanceof ChecksumException;\n                    if (!ignored) {\n                        throw err;\n                    }\n                }\n                if (ambiguousIndexCount.length === 0) {\n                    throw ChecksumException.getChecksumInstance();\n                }\n                for (let i /*int*/ = 0; i < ambiguousIndexCount.length; i++) {\n                    if (ambiguousIndexCount[i] < ambiguousIndexValues[i].length - 1) {\n                        ambiguousIndexCount[i]++;\n                        break;\n                    }\n                    else {\n                        ambiguousIndexCount[i] = 0;\n                        if (i === ambiguousIndexCount.length - 1) {\n                            throw ChecksumException.getChecksumInstance();\n                        }\n                    }\n                }\n            }\n            throw ChecksumException.getChecksumInstance();\n        }\n        static createBarcodeMatrix(detectionResult) {\n            // let barcodeMatrix: BarcodeValue[][] =\n            // new BarcodeValue[detectionResult.getBarcodeRowCount()][detectionResult.getBarcodeColumnCount() + 2];\n            let barcodeMatrix = Array.from({ length: detectionResult.getBarcodeRowCount() }, () => new Array(detectionResult.getBarcodeColumnCount() + 2));\n            for (let row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n                for (let column /*int*/ = 0; column < barcodeMatrix[row].length; column++) {\n                    barcodeMatrix[row][column] = new BarcodeValue();\n                }\n            }\n            let column = 0;\n            for (let detectionResultColumn /*DetectionResultColumn*/ of detectionResult.getDetectionResultColumns()) {\n                if (detectionResultColumn != null) {\n                    for (let codeword /*Codeword*/ of detectionResultColumn.getCodewords()) {\n                        if (codeword != null) {\n                            let rowNumber = codeword.getRowNumber();\n                            if (rowNumber >= 0) {\n                                if (rowNumber >= barcodeMatrix.length) {\n                                    // We have more rows than the barcode metadata allows for, ignore them.\n                                    continue;\n                                }\n                                barcodeMatrix[rowNumber][column].setValue(codeword.getValue());\n                            }\n                        }\n                    }\n                }\n                column++;\n            }\n            return barcodeMatrix;\n        }\n        static isValidBarcodeColumn(detectionResult, barcodeColumn) {\n            return barcodeColumn >= 0 && barcodeColumn <= detectionResult.getBarcodeColumnCount() + 1;\n        }\n        static getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight) {\n            let offset = leftToRight ? 1 : -1;\n            let codeword = null;\n            if (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n                codeword = detectionResult.getDetectionResultColumn(barcodeColumn - offset).getCodeword(imageRow);\n            }\n            if (codeword != null) {\n                return leftToRight ? codeword.getEndX() : codeword.getStartX();\n            }\n            codeword = detectionResult.getDetectionResultColumn(barcodeColumn).getCodewordNearby(imageRow);\n            if (codeword != null) {\n                return leftToRight ? codeword.getStartX() : codeword.getEndX();\n            }\n            if (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n                codeword = detectionResult.getDetectionResultColumn(barcodeColumn - offset).getCodewordNearby(imageRow);\n            }\n            if (codeword != null) {\n                return leftToRight ? codeword.getEndX() : codeword.getStartX();\n            }\n            let skippedColumns = 0;\n            while (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n                barcodeColumn -= offset;\n                for (let previousRowCodeword /*Codeword*/ of detectionResult.getDetectionResultColumn(barcodeColumn).getCodewords()) {\n                    if (previousRowCodeword != null) {\n                        return (leftToRight ? previousRowCodeword.getEndX() : previousRowCodeword.getStartX()) +\n                            offset *\n                                skippedColumns *\n                                (previousRowCodeword.getEndX() - previousRowCodeword.getStartX());\n                    }\n                }\n                skippedColumns++;\n            }\n            return leftToRight ? detectionResult.getBoundingBox().getMinX() : detectionResult.getBoundingBox().getMaxX();\n        }\n        static detectCodeword(image, minColumn, maxColumn, leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth) {\n            startColumn = PDF417ScanningDecoder.adjustCodewordStartColumn(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n            // we usually know fairly exact now how long a codeword is. We should provide minimum and maximum expected length\n            // and try to adjust the read pixels, e.g. remove single pixel errors or try to cut off exceeding pixels.\n            // min and maxCodewordWidth should not be used as they are calculated for the whole barcode an can be inaccurate\n            // for the current position\n            let moduleBitCount = PDF417ScanningDecoder.getModuleBitCount(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n            if (moduleBitCount == null) {\n                return null;\n            }\n            let endColumn;\n            let codewordBitCount = MathUtils.sum(moduleBitCount);\n            if (leftToRight) {\n                endColumn = startColumn + codewordBitCount;\n            }\n            else {\n                for (let i /*int*/ = 0; i < moduleBitCount.length / 2; i++) {\n                    let tmpCount = moduleBitCount[i];\n                    moduleBitCount[i] = moduleBitCount[moduleBitCount.length - 1 - i];\n                    moduleBitCount[moduleBitCount.length - 1 - i] = tmpCount;\n                }\n                endColumn = startColumn;\n                startColumn = endColumn - codewordBitCount;\n            }\n            // TODO implement check for width and correction of black and white bars\n            // use start (and maybe stop pattern) to determine if black bars are wider than white bars. If so, adjust.\n            // should probably done only for codewords with a lot more than 17 bits.\n            // The following fixes 10-1.png, which has wide black bars and small white bars\n            //    for (let i /*int*/ = 0; i < moduleBitCount.length; i++) {\n            //      if (i % 2 === 0) {\n            //        moduleBitCount[i]--;\n            //      } else {\n            //        moduleBitCount[i]++;\n            //      }\n            //    }\n            // We could also use the width of surrounding codewords for more accurate results, but this seems\n            // sufficient for now\n            if (!PDF417ScanningDecoder.checkCodewordSkew(codewordBitCount, minCodewordWidth, maxCodewordWidth)) {\n                // We could try to use the startX and endX position of the codeword in the same column in the previous row,\n                // create the bit count from it and normalize it to 8. This would help with single pixel errors.\n                return null;\n            }\n            let decodedValue = PDF417CodewordDecoder.getDecodedValue(moduleBitCount);\n            let codeword = PDF417Common.getCodeword(decodedValue);\n            if (codeword === -1) {\n                return null;\n            }\n            return new Codeword(startColumn, endColumn, PDF417ScanningDecoder.getCodewordBucketNumber(decodedValue), codeword);\n        }\n        static getModuleBitCount(image, minColumn, maxColumn, leftToRight, startColumn, imageRow) {\n            let imageColumn = startColumn;\n            let moduleBitCount = new Int32Array(8);\n            let moduleNumber = 0;\n            let increment = leftToRight ? 1 : -1;\n            let previousPixelValue = leftToRight;\n            while ((leftToRight ? imageColumn < maxColumn : imageColumn >= minColumn) &&\n                moduleNumber < moduleBitCount.length) {\n                if (image.get(imageColumn, imageRow) === previousPixelValue) {\n                    moduleBitCount[moduleNumber]++;\n                    imageColumn += increment;\n                }\n                else {\n                    moduleNumber++;\n                    previousPixelValue = !previousPixelValue;\n                }\n            }\n            if (moduleNumber === moduleBitCount.length ||\n                ((imageColumn === (leftToRight ? maxColumn : minColumn)) &&\n                    moduleNumber === moduleBitCount.length - 1)) {\n                return moduleBitCount;\n            }\n            return null;\n        }\n        static getNumberOfECCodeWords(barcodeECLevel) {\n            return 2 << barcodeECLevel;\n        }\n        static adjustCodewordStartColumn(image, minColumn, maxColumn, leftToRight, codewordStartColumn, imageRow) {\n            let correctedStartColumn = codewordStartColumn;\n            let increment = leftToRight ? -1 : 1;\n            // there should be no black pixels before the start column. If there are, then we need to start earlier.\n            for (let i /*int*/ = 0; i < 2; i++) {\n                while ((leftToRight ? correctedStartColumn >= minColumn : correctedStartColumn < maxColumn) &&\n                    leftToRight === image.get(correctedStartColumn, imageRow)) {\n                    if (Math.abs(codewordStartColumn - correctedStartColumn) > PDF417ScanningDecoder.CODEWORD_SKEW_SIZE) {\n                        return codewordStartColumn;\n                    }\n                    correctedStartColumn += increment;\n                }\n                increment = -increment;\n                leftToRight = !leftToRight;\n            }\n            return correctedStartColumn;\n        }\n        static checkCodewordSkew(codewordSize, minCodewordWidth, maxCodewordWidth) {\n            return minCodewordWidth - PDF417ScanningDecoder.CODEWORD_SKEW_SIZE <= codewordSize &&\n                codewordSize <= maxCodewordWidth + PDF417ScanningDecoder.CODEWORD_SKEW_SIZE;\n        }\n        /**\n         * @throws FormatException,\n         * @throws ChecksumException\n         */\n        static decodeCodewords(codewords, ecLevel, erasures) {\n            if (codewords.length === 0) {\n                throw FormatException.getFormatInstance();\n            }\n            let numECCodewords = 1 << (ecLevel + 1);\n            let correctedErrorsCount = PDF417ScanningDecoder.correctErrors(codewords, erasures, numECCodewords);\n            PDF417ScanningDecoder.verifyCodewordCount(codewords, numECCodewords);\n            // Decode the codewords\n            let decoderResult = DecodedBitStreamParser$2.decode(codewords, '' + ecLevel);\n            decoderResult.setErrorsCorrected(correctedErrorsCount);\n            decoderResult.setErasures(erasures.length);\n            return decoderResult;\n        }\n        /**\n         * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n         * correct the errors in-place.</p>\n         *\n         * @param codewords   data and error correction codewords\n         * @param erasures positions of any known erasures\n         * @param numECCodewords number of error correction codewords that are available in codewords\n         * @throws ChecksumException if error correction fails\n         */\n        static correctErrors(codewords, erasures, numECCodewords) {\n            if (erasures != null &&\n                erasures.length > numECCodewords / 2 + PDF417ScanningDecoder.MAX_ERRORS ||\n                numECCodewords < 0 ||\n                numECCodewords > PDF417ScanningDecoder.MAX_EC_CODEWORDS) {\n                // Too many errors or EC Codewords is corrupted\n                throw ChecksumException.getChecksumInstance();\n            }\n            return PDF417ScanningDecoder.errorCorrection.decode(codewords, numECCodewords, erasures);\n        }\n        /**\n         * Verify that all is OK with the codeword array.\n         * @throws FormatException\n         */\n        static verifyCodewordCount(codewords, numECCodewords) {\n            if (codewords.length < 4) {\n                // Codeword array size should be at least 4 allowing for\n                // Count CW, At least one Data CW, Error Correction CW, Error Correction CW\n                throw FormatException.getFormatInstance();\n            }\n            // The first codeword, the Symbol Length Descriptor, shall always encode the total number of data\n            // codewords in the symbol, including the Symbol Length Descriptor itself, data codewords and pad\n            // codewords, but excluding the number of error correction codewords.\n            let numberOfCodewords = codewords[0];\n            if (numberOfCodewords > codewords.length) {\n                throw FormatException.getFormatInstance();\n            }\n            if (numberOfCodewords === 0) {\n                // Reset to the length of the array - 8 (Allow for at least level 3 Error Correction (8 Error Codewords)\n                if (numECCodewords < codewords.length) {\n                    codewords[0] = codewords.length - numECCodewords;\n                }\n                else {\n                    throw FormatException.getFormatInstance();\n                }\n            }\n        }\n        static getBitCountForCodeword(codeword) {\n            let result = new Int32Array(8);\n            let previousValue = 0;\n            let i = result.length - 1;\n            while (true) {\n                if ((codeword & 0x1) !== previousValue) {\n                    previousValue = codeword & 0x1;\n                    i--;\n                    if (i < 0) {\n                        break;\n                    }\n                }\n                result[i]++;\n                codeword >>= 1;\n            }\n            return result;\n        }\n        static getCodewordBucketNumber(codeword) {\n            if (codeword instanceof Int32Array) {\n                return this.getCodewordBucketNumber_Int32Array(codeword);\n            }\n            return this.getCodewordBucketNumber_number(codeword);\n        }\n        static getCodewordBucketNumber_number(codeword) {\n            return PDF417ScanningDecoder.getCodewordBucketNumber(PDF417ScanningDecoder.getBitCountForCodeword(codeword));\n        }\n        static getCodewordBucketNumber_Int32Array(moduleBitCount) {\n            return (moduleBitCount[0] - moduleBitCount[2] + moduleBitCount[4] - moduleBitCount[6] + 9) % 9;\n        }\n        static toString(barcodeMatrix) {\n            let formatter = new Formatter();\n            // try (let formatter = new Formatter()) {\n            for (let row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n                formatter.format('Row %2d: ', row);\n                for (let column /*int*/ = 0; column < barcodeMatrix[row].length; column++) {\n                    let barcodeValue = barcodeMatrix[row][column];\n                    if (barcodeValue.getValue().length === 0) {\n                        formatter.format('        ', null);\n                    }\n                    else {\n                        formatter.format('%4d(%2d)', barcodeValue.getValue()[0], barcodeValue.getConfidence(barcodeValue.getValue()[0]));\n                    }\n                }\n                formatter.format('%n');\n            }\n            return formatter.toString();\n            // }\n        }\n    }\n    /*final*/ PDF417ScanningDecoder.CODEWORD_SKEW_SIZE = 2;\n    /*final*/ PDF417ScanningDecoder.MAX_ERRORS = 3;\n    /*final*/ PDF417ScanningDecoder.MAX_EC_CODEWORDS = 512;\n    /*final*/ PDF417ScanningDecoder.errorCorrection = new ErrorCorrection();\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.ArrayList;\n    // import java.util.List;\n    // import java.util.Map;\n    /**\n     * This implementation can detect and decode PDF417 codes in an image.\n     *\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417Reader {\n        // private static /*final Result[]*/ EMPTY_RESULT_ARRAY: Result[] = new Result([0]);\n        /**\n         * Locates and decodes a PDF417 code in an image.\n         *\n         * @return a String representing the content encoded by the PDF417 code\n         * @throws NotFoundException if a PDF417 code cannot be found,\n         * @throws FormatException if a PDF417 cannot be decoded\n         * @throws ChecksumException\n         */\n        // @Override\n        decode(image, hints = null) {\n            let result = PDF417Reader.decode(image, hints, false);\n            if (result == null || result.length === 0 || result[0] == null) {\n                throw NotFoundException.getNotFoundInstance();\n            }\n            return result[0];\n        }\n        /**\n         *\n         * @param BinaryBitmap\n         * @param image\n         * @throws NotFoundException\n         */\n        //   @Override\n        decodeMultiple(image, hints = null) {\n            try {\n                return PDF417Reader.decode(image, hints, true);\n            }\n            catch (ignored) {\n                if (ignored instanceof FormatException || ignored instanceof ChecksumException) {\n                    throw NotFoundException.getNotFoundInstance();\n                }\n                throw ignored;\n            }\n        }\n        /**\n         *\n         * @param image\n         * @param hints\n         * @param multiple\n         *\n         * @throws NotFoundException\n         * @throws FormatException\u00DF\n         * @throws ChecksumException\n         */\n        static decode(image, hints, multiple) {\n            const results = new Array();\n            const detectorResult = Detector$3.detectMultiple(image, hints, multiple);\n            for (const points of detectorResult.getPoints()) {\n                const decoderResult = PDF417ScanningDecoder.decode(detectorResult.getBits(), points[4], points[5], points[6], points[7], PDF417Reader.getMinCodewordWidth(points), PDF417Reader.getMaxCodewordWidth(points));\n                const result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat$1.PDF_417);\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel());\n                const pdf417ResultMetadata = decoderResult.getOther();\n                if (pdf417ResultMetadata != null) {\n                    result.putMetadata(ResultMetadataType$1.PDF417_EXTRA_METADATA, pdf417ResultMetadata);\n                }\n                results.push(result);\n            }\n            return results.map(x => x);\n        }\n        static getMaxWidth(p1, p2) {\n            if (p1 == null || p2 == null) {\n                return 0;\n            }\n            return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n        }\n        static getMinWidth(p1, p2) {\n            if (p1 == null || p2 == null) {\n                return Integer.MAX_VALUE;\n            }\n            return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n        }\n        static getMaxCodewordWidth(p) {\n            return Math.floor(Math.max(Math.max(PDF417Reader.getMaxWidth(p[0], p[4]), PDF417Reader.getMaxWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN), Math.max(PDF417Reader.getMaxWidth(p[1], p[5]), PDF417Reader.getMaxWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN)));\n        }\n        static getMinCodewordWidth(p) {\n            return Math.floor(Math.min(Math.min(PDF417Reader.getMinWidth(p[0], p[4]), PDF417Reader.getMinWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN), Math.min(PDF417Reader.getMinWidth(p[1], p[5]), PDF417Reader.getMinWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN)));\n        }\n        // @Override\n        reset() {\n            // nothing needs to be reset\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ReaderException extends Exception {\n    }\n    ReaderException.kind = 'ReaderException';\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * MultiFormatReader is a convenience class and the main entry point into the library for most uses.\n     * By default it attempts to decode all barcode formats that the library supports. Optionally, you\n     * can provide a hints object to request different behavior, for example only decoding QR codes.\n     *\n     * @author Sean Owen\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class MultiFormatReader {\n        /**\n         * Creates an instance of this class\n         * \n         * @param {Boolean} verbose if 'true' logs will be dumped to console, otherwise hidden.\n         * @param hints The hints to use, clearing the previous state.\n         */\n        constructor(verbose, hints) {\n            this.verbose = (verbose === true);\n            if (hints) {\n                this.setHints(hints);\n            }\n        }\n        /**\n         * This version of decode honors the intent of Reader.decode(BinaryBitmap) in that it\n         * passes null as a hint to the decoders. However, that makes it inefficient to call repeatedly.\n         * Use setHints() followed by decodeWithState() for continuous scan applications.\n         *\n         * @param image The pixel data to decode\n         * @return The contents of the image\n         *\n         * @throws NotFoundException Any errors which occurred\n         */\n        /*@Override*/\n        // public decode(image: BinaryBitmap): Result {\n        //   setHints(null)\n        //   return decodeInternal(image)\n        // }\n        /**\n         * Decode an image using the hints provided. Does not honor existing state.\n         *\n         * @param image The pixel data to decode\n         * @param hints The hints to use, clearing the previous state.\n         * @return The contents of the image\n         *\n         * @throws NotFoundException Any errors which occurred\n         */\n        /*@Override*/\n        decode(image, hints) {\n            if (hints) {\n                this.setHints(hints);\n            }\n            return this.decodeInternal(image);\n        }\n        /**\n         * Decode an image using the state set up by calling setHints() previously. Continuous scan\n         * clients will get a <b>large</b> speed increase by using this instead of decode().\n         *\n         * @param image The pixel data to decode\n         * @return The contents of the image\n         *\n         * @throws NotFoundException Any errors which occurred\n         */\n        decodeWithState(image) {\n            // Make sure to set up the default state so we don't crash\n            if (this.readers === null || this.readers === undefined) {\n                this.setHints(null);\n            }\n            return this.decodeInternal(image);\n        }\n        /**\n         * This method adds state to the MultiFormatReader. By setting the hints once, subsequent calls\n         * to decodeWithState(image) can reuse the same set of readers without reallocating memory. This\n         * is important for performance in continuous scan clients.\n         *\n         * @param hints The set of hints to use for subsequent calls to decode(image)\n         */\n        setHints(hints) {\n            this.hints = hints;\n            const tryHarder = !isNullOrUndefined(hints)\n                && hints.get(DecodeHintType$1.TRY_HARDER) === true;\n            const formats = isNullOrUndefined(hints) ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n            const readers = new Array();\n            if (!isNullOrUndefined(formats)) {\n                const addOneDReader = formats.some(f => {\n                    return (\n                        f === BarcodeFormat$1.UPC_A ||\n                        f === BarcodeFormat$1.UPC_E ||\n                        f === BarcodeFormat$1.EAN_13 ||\n                        f === BarcodeFormat$1.EAN_8 ||\n                        f === BarcodeFormat$1.CODABAR ||\n                        f === BarcodeFormat$1.CODE_39 ||\n                        f === BarcodeFormat$1.CODE_93 ||\n                        f === BarcodeFormat$1.CODE_128 ||\n                        f === BarcodeFormat$1.ITF ||\n                        f === BarcodeFormat$1.RSS_14 ||\n                        f === BarcodeFormat$1.RSS_EXPANDED);\n                });\n                // Put 1D readers upfront in \"normal\" mode\n                if (addOneDReader && !tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n                if (formats.includes(BarcodeFormat$1.QR_CODE)) {\n                    readers.push(new QRCodeReader());\n                }\n                if (formats.includes(BarcodeFormat$1.DATA_MATRIX)) {\n                    readers.push(new DataMatrixReader());\n                }\n                if (formats.includes(BarcodeFormat$1.AZTEC)) {\n                    readers.push(new AztecReader());\n                }\n                if (formats.includes(BarcodeFormat$1.PDF_417)) {\n                    readers.push(new PDF417Reader());\n                }\n                // if (formats.includes(BarcodeFormat.MAXICODE)) {\n                //    readers.push(new MaxiCodeReader())\n                // }\n                // At end in \"try harder\" mode\n                if (addOneDReader && tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n            }\n            if (readers.length === 0) {\n                if (!tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n                readers.push(new QRCodeReader());\n                readers.push(new DataMatrixReader());\n                readers.push(new AztecReader());\n                readers.push(new PDF417Reader());\n                // readers.push(new MaxiCodeReader())\n                if (tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n            }\n            this.readers = readers; // .toArray(new Reader[readers.size()])\n        }\n        /*@Override*/\n        reset() {\n            if (this.readers !== null) {\n                for (const reader of this.readers) {\n                    reader.reset();\n                }\n            }\n        }\n        /**\n         * @throws NotFoundException\n         */\n        decodeInternal(image) {\n            if (this.readers === null) {\n                throw new ReaderException('No readers where selected, nothing can be read.');\n            }\n            for (const reader of this.readers) {\n                // Trying to decode with ${reader} reader.\n                try {\n                    return reader.decode(image, this.hints);\n                }\n                catch (ex) {\n                    if (ex instanceof ReaderException) {\n                        continue;\n                    }\n                    // Bad Exception.\n                }\n            }\n            throw new NotFoundException('No MultiFormat Readers were able to detect the code.');\n        }\n    }\n\n    class BrowserMultiFormatReader extends BrowserCodeReader {\n        constructor(hints = null, timeBetweenScansMillis = 500) {\n            const reader = new MultiFormatReader();\n            reader.setHints(hints);\n            super(reader, timeBetweenScansMillis);\n        }\n        /**\n         * Overwrite decodeBitmap to call decodeWithState, which will pay\n         * attention to the hints set in the constructor function\n         */\n        decodeBitmap(binaryBitmap) {\n            return this.reader.decodeWithState(binaryBitmap);\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * QR Code reader to use from browser.\n     */\n    class BrowserPDF417Reader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserPDF417Reader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new PDF417Reader(), timeBetweenScansMillis);\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * QR Code reader to use from browser.\n     */\n    class BrowserQRCodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserQRCodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new QRCodeReader(), timeBetweenScansMillis);\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * These are a set of hints that you may pass to Writers to specify their behavior.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    var EncodeHintType;\n    (function (EncodeHintType) {\n        /**\n         * Specifies what degree of error correction to use, for example in QR Codes.\n         * Type depends on the encoder. For example for QR codes it's type\n         * {@link com.google.zxing.qrcode.decoder.ErrorCorrectionLevel ErrorCorrectionLevel}.\n         * For Aztec it is of type {@link Integer}, representing the minimal percentage of error correction words.\n         * For PDF417 it is of type {@link Integer}, valid values being 0 to 8.\n         * In all cases, it can also be a {@link String} representation of the desired value as well.\n         * Note: an Aztec symbol should have a minimum of 25% EC words.\n         */\n        EncodeHintType[EncodeHintType[\"ERROR_CORRECTION\"] = 0] = \"ERROR_CORRECTION\";\n        /**\n         * Specifies what character encoding to use where applicable (type {@link String})\n         */\n        EncodeHintType[EncodeHintType[\"CHARACTER_SET\"] = 1] = \"CHARACTER_SET\";\n        /**\n         * Specifies the matrix shape for Data Matrix (type {@link com.google.zxing.datamatrix.encoder.SymbolShapeHint})\n         */\n        EncodeHintType[EncodeHintType[\"DATA_MATRIX_SHAPE\"] = 2] = \"DATA_MATRIX_SHAPE\";\n        /**\n         * Specifies a minimum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.\n         *\n         * @deprecated use width/height params in\n         * {@link com.google.zxing.datamatrix.DataMatrixWriter#encode(String, BarcodeFormat, int, int)}\n         */\n        /*@Deprecated*/\n        EncodeHintType[EncodeHintType[\"MIN_SIZE\"] = 3] = \"MIN_SIZE\";\n        /**\n         * Specifies a maximum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.\n         *\n         * @deprecated without replacement\n         */\n        /*@Deprecated*/\n        EncodeHintType[EncodeHintType[\"MAX_SIZE\"] = 4] = \"MAX_SIZE\";\n        /**\n         * Specifies margin, in pixels, to use when generating the barcode. The meaning can vary\n         * by format; for example it controls margin before and after the barcode horizontally for\n         * most 1D formats. (Type {@link Integer}, or {@link String} representation of the integer value).\n         */\n        EncodeHintType[EncodeHintType[\"MARGIN\"] = 5] = \"MARGIN\";\n        /**\n         * Specifies whether to use compact mode for PDF417 (type {@link Boolean}, or \"true\" or \"false\"\n         * {@link String} value).\n         */\n        EncodeHintType[EncodeHintType[\"PDF417_COMPACT\"] = 6] = \"PDF417_COMPACT\";\n        /**\n         * Specifies what compaction mode to use for PDF417 (type\n         * {@link com.google.zxing.pdf417.encoder.Compaction Compaction} or {@link String} value of one of its\n         * enum values).\n         */\n        EncodeHintType[EncodeHintType[\"PDF417_COMPACTION\"] = 7] = \"PDF417_COMPACTION\";\n        /**\n         * Specifies the minimum and maximum number of rows and columns for PDF417 (type\n         * {@link com.google.zxing.pdf417.encoder.Dimensions Dimensions}).\n         */\n        EncodeHintType[EncodeHintType[\"PDF417_DIMENSIONS\"] = 8] = \"PDF417_DIMENSIONS\";\n        /**\n         * Specifies the required number of layers for an Aztec code.\n         * A negative number (-1, -2, -3, -4) specifies a compact Aztec code.\n         * 0 indicates to use the minimum number of layers (the default).\n         * A positive number (1, 2, .. 32) specifies a normal (non-compact) Aztec code.\n         * (Type {@link Integer}, or {@link String} representation of the integer value).\n         */\n        EncodeHintType[EncodeHintType[\"AZTEC_LAYERS\"] = 9] = \"AZTEC_LAYERS\";\n        /**\n         * Specifies the exact version of QR code to be encoded.\n         * (Type {@link Integer}, or {@link String} representation of the integer value).\n         */\n        EncodeHintType[EncodeHintType[\"QR_VERSION\"] = 10] = \"QR_VERSION\";\n    })(EncodeHintType || (EncodeHintType = {}));\n    var EncodeHintType$1 = EncodeHintType;\n\n    /**\n     * <p>Implements Reed-Solomon encoding, as the name implies.</p>\n     *\n     * @author Sean Owen\n     * @author William Rucklidge\n     */\n    class ReedSolomonEncoder {\n        /**\n         * A reed solomon error-correcting encoding constructor is created by\n         * passing as Galois Field with of size equal to the number of code\n         * words (symbols) in the alphabet (the number of values in each\n         * element of arrays that are encoded/decoded).\n         * @param field A galois field with a number of elements equal to the size\n         * of the alphabet of symbols to encode.\n         */\n        constructor(field) {\n            this.field = field;\n            this.cachedGenerators = [];\n            this.cachedGenerators.push(new GenericGFPoly(field, Int32Array.from([1])));\n        }\n        buildGenerator(degree /*int*/) {\n            const cachedGenerators = this.cachedGenerators;\n            if (degree >= cachedGenerators.length) {\n                let lastGenerator = cachedGenerators[cachedGenerators.length - 1];\n                const field = this.field;\n                for (let d = cachedGenerators.length; d <= degree; d++) {\n                    const nextGenerator = lastGenerator.multiply(new GenericGFPoly(field, Int32Array.from([1, field.exp(d - 1 + field.getGeneratorBase())])));\n                    cachedGenerators.push(nextGenerator);\n                    lastGenerator = nextGenerator;\n                }\n            }\n            return cachedGenerators[degree];\n        }\n        /**\n         * <p>Encode a sequence of code words (symbols) using Reed-Solomon to allow decoders\n         * to detect and correct errors that may have been introduced when the resulting\n         * data is stored or transmitted.</p>\n         *\n         * @param toEncode array used for both and output. Caller initializes the array with\n         * the code words (symbols) to be encoded followed by empty elements allocated to make\n         * space for error-correction code words in the encoded output. The array contains\n         * the encdoded output when encode returns. Code words are encoded as numbers from\n         * 0 to n-1, where n is the number of possible code words (symbols), as determined\n         * by the size of the Galois Field passed in the constructor of this object.\n         * @param ecBytes the number of elements reserved in the array (first parameter)\n         * to store error-correction code words. Thus, the number of code words (symbols)\n         * to encode in the first parameter is thus toEncode.length - ecBytes.\n         * Note, the use of \"bytes\" in the name of this parameter is misleading, as there may\n         * be more or fewer than 256 symbols being encoded, as determined by the number of\n         * elements in the Galois Field passed as a constructor to this object.\n         * @throws IllegalArgumentException thrown in response to validation errros.\n         */\n        encode(toEncode, ecBytes /*int*/) {\n            if (ecBytes === 0) {\n                throw new IllegalArgumentException('No error correction bytes');\n            }\n            const dataBytes = toEncode.length - ecBytes;\n            if (dataBytes <= 0) {\n                throw new IllegalArgumentException('No data bytes provided');\n            }\n            const generator = this.buildGenerator(ecBytes);\n            const infoCoefficients = new Int32Array(dataBytes);\n            System.arraycopy(toEncode, 0, infoCoefficients, 0, dataBytes);\n            let info = new GenericGFPoly(this.field, infoCoefficients);\n            info = info.multiplyByMonomial(ecBytes, 1);\n            const remainder = info.divide(generator)[1];\n            const coefficients = remainder.getCoefficients();\n            const numZeroCoefficients = ecBytes - coefficients.length;\n            for (let i = 0; i < numZeroCoefficients; i++) {\n                toEncode[dataBytes + i] = 0;\n            }\n            System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length);\n        }\n    }\n\n    /**\n     * @author Satoru Takabayashi\n     * @author Daniel Switkin\n     * @author Sean Owen\n     */\n    class MaskUtil {\n        constructor() {\n            // do nothing\n        }\n        /**\n         * Apply mask penalty rule 1 and return the penalty. Find repetitive cells with the same color and\n         * give penalty to them. Example: 00000 or 11111.\n         */\n        static applyMaskPenaltyRule1(matrix) {\n            return MaskUtil.applyMaskPenaltyRule1Internal(matrix, true) + MaskUtil.applyMaskPenaltyRule1Internal(matrix, false);\n        }\n        /**\n         * Apply mask penalty rule 2 and return the penalty. Find 2x2 blocks with the same color and give\n         * penalty to them. This is actually equivalent to the spec's rule, which is to find MxN blocks and give a\n         * penalty proportional to (M-1)x(N-1), because this is the number of 2x2 blocks inside such a block.\n         */\n        static applyMaskPenaltyRule2(matrix) {\n            let penalty = 0;\n            const array = matrix.getArray();\n            const width = matrix.getWidth();\n            const height = matrix.getHeight();\n            for (let y = 0; y < height - 1; y++) {\n                const arrayY = array[y];\n                for (let x = 0; x < width - 1; x++) {\n                    const value = arrayY[x];\n                    if (value === arrayY[x + 1] && value === array[y + 1][x] && value === array[y + 1][x + 1]) {\n                        penalty++;\n                    }\n                }\n            }\n            return MaskUtil.N2 * penalty;\n        }\n        /**\n         * Apply mask penalty rule 3 and return the penalty. Find consecutive runs of 1:1:3:1:1:4\n         * starting with black, or 4:1:1:3:1:1 starting with white, and give penalty to them.  If we\n         * find patterns like 000010111010000, we give penalty once.\n         */\n        static applyMaskPenaltyRule3(matrix) {\n            let numPenalties = 0;\n            const array = matrix.getArray();\n            const width = matrix.getWidth();\n            const height = matrix.getHeight();\n            for (let y = 0; y < height; y++) {\n                for (let x = 0; x < width; x++) {\n                    const arrayY = array[y]; // We can at least optimize this access\n                    if (x + 6 < width &&\n                        arrayY[x] === 1 &&\n                        arrayY[x + 1] === 0 &&\n                        arrayY[x + 2] === 1 &&\n                        arrayY[x + 3] === 1 &&\n                        arrayY[x + 4] === 1 &&\n                        arrayY[x + 5] === 0 &&\n                        arrayY[x + 6] === 1 &&\n                        (MaskUtil.isWhiteHorizontal(arrayY, x - 4, x) || MaskUtil.isWhiteHorizontal(arrayY, x + 7, x + 11))) {\n                        numPenalties++;\n                    }\n                    if (y + 6 < height &&\n                        array[y][x] === 1 &&\n                        array[y + 1][x] === 0 &&\n                        array[y + 2][x] === 1 &&\n                        array[y + 3][x] === 1 &&\n                        array[y + 4][x] === 1 &&\n                        array[y + 5][x] === 0 &&\n                        array[y + 6][x] === 1 &&\n                        (MaskUtil.isWhiteVertical(array, x, y - 4, y) || MaskUtil.isWhiteVertical(array, x, y + 7, y + 11))) {\n                        numPenalties++;\n                    }\n                }\n            }\n            return numPenalties * MaskUtil.N3;\n        }\n        static isWhiteHorizontal(rowArray, from /*int*/, to /*int*/) {\n            from = Math.max(from, 0);\n            to = Math.min(to, rowArray.length);\n            for (let i = from; i < to; i++) {\n                if (rowArray[i] === 1) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        static isWhiteVertical(array, col /*int*/, from /*int*/, to /*int*/) {\n            from = Math.max(from, 0);\n            to = Math.min(to, array.length);\n            for (let i = from; i < to; i++) {\n                if (array[i][col] === 1) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        /**\n         * Apply mask penalty rule 4 and return the penalty. Calculate the ratio of dark cells and give\n         * penalty if the ratio is far from 50%. It gives 10 penalty for 5% distance.\n         */\n        static applyMaskPenaltyRule4(matrix) {\n            let numDarkCells = 0;\n            const array = matrix.getArray();\n            const width = matrix.getWidth();\n            const height = matrix.getHeight();\n            for (let y = 0; y < height; y++) {\n                const arrayY = array[y];\n                for (let x = 0; x < width; x++) {\n                    if (arrayY[x] === 1) {\n                        numDarkCells++;\n                    }\n                }\n            }\n            const numTotalCells = matrix.getHeight() * matrix.getWidth();\n            const fivePercentVariances = Math.floor(Math.abs(numDarkCells * 2 - numTotalCells) * 10 / numTotalCells);\n            return fivePercentVariances * MaskUtil.N4;\n        }\n        /**\n         * Return the mask bit for \"getMaskPattern\" at \"x\" and \"y\". See 8.8 of JISX0510:2004 for mask\n         * pattern conditions.\n         */\n        static getDataMaskBit(maskPattern /*int*/, x /*int*/, y /*int*/) {\n            let intermediate; /*int*/\n            let temp; /*int*/\n            switch (maskPattern) {\n                case 0:\n                    intermediate = (y + x) & 0x1;\n                    break;\n                case 1:\n                    intermediate = y & 0x1;\n                    break;\n                case 2:\n                    intermediate = x % 3;\n                    break;\n                case 3:\n                    intermediate = (y + x) % 3;\n                    break;\n                case 4:\n                    intermediate = (Math.floor(y / 2) + Math.floor(x / 3)) & 0x1;\n                    break;\n                case 5:\n                    temp = y * x;\n                    intermediate = (temp & 0x1) + (temp % 3);\n                    break;\n                case 6:\n                    temp = y * x;\n                    intermediate = ((temp & 0x1) + (temp % 3)) & 0x1;\n                    break;\n                case 7:\n                    temp = y * x;\n                    intermediate = ((temp % 3) + ((y + x) & 0x1)) & 0x1;\n                    break;\n                default:\n                    throw new IllegalArgumentException('Invalid mask pattern: ' + maskPattern);\n            }\n            return intermediate === 0;\n        }\n        /**\n         * Helper function for applyMaskPenaltyRule1. We need this for doing this calculation in both\n         * vertical and horizontal orders respectively.\n         */\n        static applyMaskPenaltyRule1Internal(matrix, isHorizontal) {\n            let penalty = 0;\n            const iLimit = isHorizontal ? matrix.getHeight() : matrix.getWidth();\n            const jLimit = isHorizontal ? matrix.getWidth() : matrix.getHeight();\n            const array = matrix.getArray();\n            for (let i = 0; i < iLimit; i++) {\n                let numSameBitCells = 0;\n                let prevBit = -1;\n                for (let j = 0; j < jLimit; j++) {\n                    const bit = isHorizontal ? array[i][j] : array[j][i];\n                    if (bit === prevBit) {\n                        numSameBitCells++;\n                    }\n                    else {\n                        if (numSameBitCells >= 5) {\n                            penalty += MaskUtil.N1 + (numSameBitCells - 5);\n                        }\n                        numSameBitCells = 1; // Include the cell itself.\n                        prevBit = bit;\n                    }\n                }\n                if (numSameBitCells >= 5) {\n                    penalty += MaskUtil.N1 + (numSameBitCells - 5);\n                }\n            }\n            return penalty;\n        }\n    }\n    // Penalty weights from section 6.8.2.1\n    MaskUtil.N1 = 3;\n    MaskUtil.N2 = 3;\n    MaskUtil.N3 = 40;\n    MaskUtil.N4 = 10;\n\n    /**\n     * JAVAPORT: The original code was a 2D array of ints, but since it only ever gets assigned\n     * -1, 0, and 1, I'm going to use less memory and go with bytes.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class ByteMatrix {\n        constructor(width /*int*/, height /*int*/) {\n            this.width = width;\n            this.height = height;\n            const bytes = new Array(height); // [height][width]\n            for (let i = 0; i !== height; i++) {\n                bytes[i] = new Uint8Array(width);\n            }\n            this.bytes = bytes;\n        }\n        getHeight() {\n            return this.height;\n        }\n        getWidth() {\n            return this.width;\n        }\n        get(x /*int*/, y /*int*/) {\n            return this.bytes[y][x];\n        }\n        /**\n         * @return an internal representation as bytes, in row-major order. array[y][x] represents point (x,y)\n         */\n        getArray() {\n            return this.bytes;\n        }\n        // TYPESCRIPTPORT: preffer to let two methods instead of override to avoid type comparison inside\n        setNumber(x /*int*/, y /*int*/, value /*byte|int*/) {\n            this.bytes[y][x] = value;\n        }\n        // public set(x: number /*int*/, y: number /*int*/, value: number /*int*/): void {\n        //   bytes[y][x] = (byte) value\n        // }\n        setBoolean(x /*int*/, y /*int*/, value) {\n            this.bytes[y][x] = /*(byte) */ (value ? 1 : 0);\n        }\n        clear(value /*byte*/) {\n            for (const aByte of this.bytes) {\n                Arrays.fill(aByte, value);\n            }\n        }\n        equals(o) {\n            if (!(o instanceof ByteMatrix)) {\n                return false;\n            }\n            const other = o;\n            if (this.width !== other.width) {\n                return false;\n            }\n            if (this.height !== other.height) {\n                return false;\n            }\n            for (let y = 0, height = this.height; y < height; ++y) {\n                const bytesY = this.bytes[y];\n                const otherBytesY = other.bytes[y];\n                for (let x = 0, width = this.width; x < width; ++x) {\n                    if (bytesY[x] !== otherBytesY[x]) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        }\n        /*@Override*/\n        toString() {\n            const result = new StringBuilder(); // (2 * width * height + 2)\n            for (let y = 0, height = this.height; y < height; ++y) {\n                const bytesY = this.bytes[y];\n                for (let x = 0, width = this.width; x < width; ++x) {\n                    switch (bytesY[x]) {\n                        case 0:\n                            result.append(' 0');\n                            break;\n                        case 1:\n                            result.append(' 1');\n                            break;\n                        default:\n                            result.append('  ');\n                            break;\n                    }\n                }\n                result.append('\\n');\n            }\n            return result.toString();\n        }\n    }\n\n    /**\n     * @author satorux@google.com (Satoru Takabayashi) - creator\n     * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n     */\n    class QRCode {\n        constructor() {\n            this.maskPattern = -1;\n        }\n        getMode() {\n            return this.mode;\n        }\n        getECLevel() {\n            return this.ecLevel;\n        }\n        getVersion() {\n            return this.version;\n        }\n        getMaskPattern() {\n            return this.maskPattern;\n        }\n        getMatrix() {\n            return this.matrix;\n        }\n        /*@Override*/\n        toString() {\n            const result = new StringBuilder(); // (200)\n            result.append('<<\\n');\n            result.append(' mode: ');\n            result.append(this.mode ? this.mode.toString() : 'null');\n            result.append('\\n ecLevel: ');\n            result.append(this.ecLevel ? this.ecLevel.toString() : 'null');\n            result.append('\\n version: ');\n            result.append(this.version ? this.version.toString() : 'null');\n            result.append('\\n maskPattern: ');\n            result.append(this.maskPattern.toString());\n            if (this.matrix) {\n                result.append('\\n matrix:\\n');\n                result.append(this.matrix.toString());\n            }\n            else {\n                result.append('\\n matrix: null\\n');\n            }\n            result.append('>>\\n');\n            return result.toString();\n        }\n        setMode(value) {\n            this.mode = value;\n        }\n        setECLevel(value) {\n            this.ecLevel = value;\n        }\n        setVersion(version) {\n            this.version = version;\n        }\n        setMaskPattern(value /*int*/) {\n            this.maskPattern = value;\n        }\n        setMatrix(value) {\n            this.matrix = value;\n        }\n        // Check if \"mask_pattern\" is valid.\n        static isValidMaskPattern(maskPattern /*int*/) {\n            return maskPattern >= 0 && maskPattern < QRCode.NUM_MASK_PATTERNS;\n        }\n    }\n    QRCode.NUM_MASK_PATTERNS = 8;\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class WriterException extends Exception {\n    }\n    WriterException.kind = 'WriterException';\n\n    /**\n     * @author satorux@google.com (Satoru Takabayashi) - creator\n     * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n     */\n    class MatrixUtil {\n        constructor() {\n            // do nothing\n        }\n        // Set all cells to -1 (TYPESCRIPTPORT: 255).  -1 (TYPESCRIPTPORT: 255) means that the cell is empty (not set yet).\n        //\n        // JAVAPORT: We shouldn't need to do this at all. The code should be rewritten to begin encoding\n        // with the ByteMatrix initialized all to zero.\n        static clearMatrix(matrix) {\n            // TYPESCRIPTPORT: we use UintArray se changed here from -1 to 255\n            matrix.clear(/*(byte) */ /*-1*/ 255);\n        }\n        // Build 2D matrix of QR Code from \"dataBits\" with \"ecLevel\", \"version\" and \"getMaskPattern\". On\n        // success, store the result in \"matrix\" and return true.\n        static buildMatrix(dataBits, ecLevel, version, maskPattern /*int*/, matrix) {\n            MatrixUtil.clearMatrix(matrix);\n            MatrixUtil.embedBasicPatterns(version, matrix);\n            // Type information appear with any version.\n            MatrixUtil.embedTypeInfo(ecLevel, maskPattern, matrix);\n            // Version info appear if version >= 7.\n            MatrixUtil.maybeEmbedVersionInfo(version, matrix);\n            // Data should be embedded at end.\n            MatrixUtil.embedDataBits(dataBits, maskPattern, matrix);\n        }\n        // Embed basic patterns. On success, modify the matrix and return true.\n        // The basic patterns are:\n        // - Position detection patterns\n        // - Timing patterns\n        // - Dark dot at the left bottom corner\n        // - Position adjustment patterns, if need be\n        static embedBasicPatterns(version, matrix) {\n            // Let's get started with embedding big squares at corners.\n            MatrixUtil.embedPositionDetectionPatternsAndSeparators(matrix);\n            // Then, embed the dark dot at the left bottom corner.\n            MatrixUtil.embedDarkDotAtLeftBottomCorner(matrix);\n            // Position adjustment patterns appear if version >= 2.\n            MatrixUtil.maybeEmbedPositionAdjustmentPatterns(version, matrix);\n            // Timing patterns should be embedded after position adj. patterns.\n            MatrixUtil.embedTimingPatterns(matrix);\n        }\n        // Embed type information. On success, modify the matrix.\n        static embedTypeInfo(ecLevel, maskPattern /*int*/, matrix) {\n            const typeInfoBits = new BitArray();\n            MatrixUtil.makeTypeInfoBits(ecLevel, maskPattern, typeInfoBits);\n            for (let i = 0, size = typeInfoBits.getSize(); i < size; ++i) {\n                // Place bits in LSB to MSB order.  LSB (least significant bit) is the last value in\n                // \"typeInfoBits\".\n                const bit = typeInfoBits.get(typeInfoBits.getSize() - 1 - i);\n                // Type info bits at the left top corner. See 8.9 of JISX0510:2004 (p.46).\n                const coordinates = MatrixUtil.TYPE_INFO_COORDINATES[i];\n                const x1 = coordinates[0];\n                const y1 = coordinates[1];\n                matrix.setBoolean(x1, y1, bit);\n                if (i < 8) {\n                    // Right top corner.\n                    const x2 = matrix.getWidth() - i - 1;\n                    const y2 = 8;\n                    matrix.setBoolean(x2, y2, bit);\n                }\n                else {\n                    // Left bottom corner.\n                    const x2 = 8;\n                    const y2 = matrix.getHeight() - 7 + (i - 8);\n                    matrix.setBoolean(x2, y2, bit);\n                }\n            }\n        }\n        // Embed version information if need be. On success, modify the matrix and return true.\n        // See 8.10 of JISX0510:2004 (p.47) for how to embed version information.\n        static maybeEmbedVersionInfo(version, matrix) {\n            if (version.getVersionNumber() < 7) { // Version info is necessary if version >= 7.\n                return; // Don't need version info.\n            }\n            const versionInfoBits = new BitArray();\n            MatrixUtil.makeVersionInfoBits(version, versionInfoBits);\n            let bitIndex = 6 * 3 - 1; // It will decrease from 17 to 0.\n            for (let i = 0; i < 6; ++i) {\n                for (let j = 0; j < 3; ++j) {\n                    // Place bits in LSB (least significant bit) to MSB order.\n                    const bit = versionInfoBits.get(bitIndex);\n                    bitIndex--;\n                    // Left bottom corner.\n                    matrix.setBoolean(i, matrix.getHeight() - 11 + j, bit);\n                    // Right bottom corner.\n                    matrix.setBoolean(matrix.getHeight() - 11 + j, i, bit);\n                }\n            }\n        }\n        // Embed \"dataBits\" using \"getMaskPattern\". On success, modify the matrix and return true.\n        // For debugging purposes, it skips masking process if \"getMaskPattern\" is -1(TYPESCRIPTPORT: 255).\n        // See 8.7 of JISX0510:2004 (p.38) for how to embed data bits.\n        static embedDataBits(dataBits, maskPattern /*int*/, matrix) {\n            let bitIndex = 0;\n            let direction = -1;\n            // Start from the right bottom cell.\n            let x = matrix.getWidth() - 1;\n            let y = matrix.getHeight() - 1;\n            while (x > 0) {\n                // Skip the vertical timing pattern.\n                if (x === 6) {\n                    x -= 1;\n                }\n                while (y >= 0 && y < matrix.getHeight()) {\n                    for (let i = 0; i < 2; ++i) {\n                        const xx = x - i;\n                        // Skip the cell if it's not empty.\n                        if (!MatrixUtil.isEmpty(matrix.get(xx, y))) {\n                            continue;\n                        }\n                        let bit;\n                        if (bitIndex < dataBits.getSize()) {\n                            bit = dataBits.get(bitIndex);\n                            ++bitIndex;\n                        }\n                        else {\n                            // Padding bit. If there is no bit left, we'll fill the left cells with 0, as described\n                            // in 8.4.9 of JISX0510:2004 (p. 24).\n                            bit = false;\n                        }\n                        // Skip masking if mask_pattern is -1 (TYPESCRIPTPORT: 255).\n                        if (maskPattern !== 255 && MaskUtil.getDataMaskBit(maskPattern, xx, y)) {\n                            bit = !bit;\n                        }\n                        matrix.setBoolean(xx, y, bit);\n                    }\n                    y += direction;\n                }\n                direction = -direction; // Reverse the direction.\n                y += direction;\n                x -= 2; // Move to the left.\n            }\n            // All bits should be consumed.\n            if (bitIndex !== dataBits.getSize()) {\n                throw new WriterException('Not all bits consumed: ' + bitIndex + '/' + dataBits.getSize());\n            }\n        }\n        // Return the position of the most significant bit set (one: to) in the \"value\". The most\n        // significant bit is position 32. If there is no bit set, return 0. Examples:\n        // - findMSBSet(0) => 0\n        // - findMSBSet(1) => 1\n        // - findMSBSet(255) => 8\n        static findMSBSet(value /*int*/) {\n            return 32 - Integer.numberOfLeadingZeros(value);\n        }\n        // Calculate BCH (Bose-Chaudhuri-Hocquenghem) code for \"value\" using polynomial \"poly\". The BCH\n        // code is used for encoding type information and version information.\n        // Example: Calculation of version information of 7.\n        // f(x) is created from 7.\n        //   - 7 = 000111 in 6 bits\n        //   - f(x) = x^2 + x^1 + x^0\n        // g(x) is given by the standard (p. 67)\n        //   - g(x) = x^12 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1\n        // Multiply f(x) by x^(18 - 6)\n        //   - f'(x) = f(x) * x^(18 - 6)\n        //   - f'(x) = x^14 + x^13 + x^12\n        // Calculate the remainder of f'(x) / g(x)\n        //         x^2\n        //         __________________________________________________\n        //   g(x) )x^14 + x^13 + x^12\n        //         x^14 + x^13 + x^12 + x^11 + x^10 + x^7 + x^4 + x^2\n        //         --------------------------------------------------\n        //                              x^11 + x^10 + x^7 + x^4 + x^2\n        //\n        // The remainder is x^11 + x^10 + x^7 + x^4 + x^2\n        // Encode it in binary: 110010010100\n        // The return value is 0xc94 (1100 1001 0100)\n        //\n        // Since all coefficients in the polynomials are 1 or 0, we can do the calculation by bit\n        // operations. We don't care if coefficients are positive or negative.\n        static calculateBCHCode(value /*int*/, poly /*int*/) {\n            if (poly === 0) {\n                throw new IllegalArgumentException('0 polynomial');\n            }\n            // If poly is \"1 1111 0010 0101\" (version info poly), msbSetInPoly is 13. We'll subtract 1\n            // from 13 to make it 12.\n            const msbSetInPoly = MatrixUtil.findMSBSet(poly);\n            value <<= msbSetInPoly - 1;\n            // Do the division business using exclusive-or operations.\n            while (MatrixUtil.findMSBSet(value) >= msbSetInPoly) {\n                value ^= poly << (MatrixUtil.findMSBSet(value) - msbSetInPoly);\n            }\n            // Now the \"value\" is the remainder (i.e. the BCH code)\n            return value;\n        }\n        // Make bit vector of type information. On success, store the result in \"bits\" and return true.\n        // Encode error correction level and mask pattern. See 8.9 of\n        // JISX0510:2004 (p.45) for details.\n        static makeTypeInfoBits(ecLevel, maskPattern /*int*/, bits) {\n            if (!QRCode.isValidMaskPattern(maskPattern)) {\n                throw new WriterException('Invalid mask pattern');\n            }\n            const typeInfo = (ecLevel.getBits() << 3) | maskPattern;\n            bits.appendBits(typeInfo, 5);\n            const bchCode = MatrixUtil.calculateBCHCode(typeInfo, MatrixUtil.TYPE_INFO_POLY);\n            bits.appendBits(bchCode, 10);\n            const maskBits = new BitArray();\n            maskBits.appendBits(MatrixUtil.TYPE_INFO_MASK_PATTERN, 15);\n            bits.xor(maskBits);\n            if (bits.getSize() !== 15) { // Just in case.\n                throw new WriterException('should not happen but we got: ' + bits.getSize());\n            }\n        }\n        // Make bit vector of version information. On success, store the result in \"bits\" and return true.\n        // See 8.10 of JISX0510:2004 (p.45) for details.\n        static makeVersionInfoBits(version, bits) {\n            bits.appendBits(version.getVersionNumber(), 6);\n            const bchCode = MatrixUtil.calculateBCHCode(version.getVersionNumber(), MatrixUtil.VERSION_INFO_POLY);\n            bits.appendBits(bchCode, 12);\n            if (bits.getSize() !== 18) { // Just in case.\n                throw new WriterException('should not happen but we got: ' + bits.getSize());\n            }\n        }\n        // Check if \"value\" is empty.\n        static isEmpty(value /*int*/) {\n            return value === 255; // -1\n        }\n        static embedTimingPatterns(matrix) {\n            // -8 is for skipping position detection patterns (7: size), and two horizontal/vertical\n            // separation patterns (1: size). Thus, 8 = 7 + 1.\n            for (let i = 8; i < matrix.getWidth() - 8; ++i) {\n                const bit = (i + 1) % 2;\n                // Horizontal line.\n                if (MatrixUtil.isEmpty(matrix.get(i, 6))) {\n                    matrix.setNumber(i, 6, bit);\n                }\n                // Vertical line.\n                if (MatrixUtil.isEmpty(matrix.get(6, i))) {\n                    matrix.setNumber(6, i, bit);\n                }\n            }\n        }\n        // Embed the lonely dark dot at left bottom corner. JISX0510:2004 (p.46)\n        static embedDarkDotAtLeftBottomCorner(matrix) {\n            if (matrix.get(8, matrix.getHeight() - 8) === 0) {\n                throw new WriterException();\n            }\n            matrix.setNumber(8, matrix.getHeight() - 8, 1);\n        }\n        static embedHorizontalSeparationPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let x = 0; x < 8; ++x) {\n                if (!MatrixUtil.isEmpty(matrix.get(xStart + x, yStart))) {\n                    throw new WriterException();\n                }\n                matrix.setNumber(xStart + x, yStart, 0);\n            }\n        }\n        static embedVerticalSeparationPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let y = 0; y < 7; ++y) {\n                if (!MatrixUtil.isEmpty(matrix.get(xStart, yStart + y))) {\n                    throw new WriterException();\n                }\n                matrix.setNumber(xStart, yStart + y, 0);\n            }\n        }\n        static embedPositionAdjustmentPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let y = 0; y < 5; ++y) {\n                const patternY = MatrixUtil.POSITION_ADJUSTMENT_PATTERN[y];\n                for (let x = 0; x < 5; ++x) {\n                    matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n                }\n            }\n        }\n        static embedPositionDetectionPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let y = 0; y < 7; ++y) {\n                const patternY = MatrixUtil.POSITION_DETECTION_PATTERN[y];\n                for (let x = 0; x < 7; ++x) {\n                    matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n                }\n            }\n        }\n        // Embed position detection patterns and surrounding vertical/horizontal separators.\n        static embedPositionDetectionPatternsAndSeparators(matrix) {\n            // Embed three big squares at corners.\n            const pdpWidth = MatrixUtil.POSITION_DETECTION_PATTERN[0].length;\n            // Left top corner.\n            MatrixUtil.embedPositionDetectionPattern(0, 0, matrix);\n            // Right top corner.\n            MatrixUtil.embedPositionDetectionPattern(matrix.getWidth() - pdpWidth, 0, matrix);\n            // Left bottom corner.\n            MatrixUtil.embedPositionDetectionPattern(0, matrix.getWidth() - pdpWidth, matrix);\n            // Embed horizontal separation patterns around the squares.\n            const hspWidth = 8;\n            // Left top corner.\n            MatrixUtil.embedHorizontalSeparationPattern(0, hspWidth - 1, matrix);\n            // Right top corner.\n            MatrixUtil.embedHorizontalSeparationPattern(matrix.getWidth() - hspWidth, hspWidth - 1, matrix);\n            // Left bottom corner.\n            MatrixUtil.embedHorizontalSeparationPattern(0, matrix.getWidth() - hspWidth, matrix);\n            // Embed vertical separation patterns around the squares.\n            const vspSize = 7;\n            // Left top corner.\n            MatrixUtil.embedVerticalSeparationPattern(vspSize, 0, matrix);\n            // Right top corner.\n            MatrixUtil.embedVerticalSeparationPattern(matrix.getHeight() - vspSize - 1, 0, matrix);\n            // Left bottom corner.\n            MatrixUtil.embedVerticalSeparationPattern(vspSize, matrix.getHeight() - vspSize, matrix);\n        }\n        // Embed position adjustment patterns if need be.\n        static maybeEmbedPositionAdjustmentPatterns(version, matrix) {\n            if (version.getVersionNumber() < 2) { // The patterns appear if version >= 2\n                return;\n            }\n            const index = version.getVersionNumber() - 1;\n            const coordinates = MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];\n            for (let i = 0, length = coordinates.length; i !== length; i++) {\n                const y = coordinates[i];\n                if (y >= 0) {\n                    for (let j = 0; j !== length; j++) {\n                        const x = coordinates[j];\n                        if (x >= 0 && MatrixUtil.isEmpty(matrix.get(x, y))) {\n                            // If the cell is unset, we embed the position adjustment pattern here.\n                            // -2 is necessary since the x/y coordinates point to the center of the pattern, not the\n                            // left top corner.\n                            MatrixUtil.embedPositionAdjustmentPattern(x - 2, y - 2, matrix);\n                        }\n                    }\n                }\n            }\n        }\n    }\n    MatrixUtil.POSITION_DETECTION_PATTERN = Array.from([\n        Int32Array.from([1, 1, 1, 1, 1, 1, 1]),\n        Int32Array.from([1, 0, 0, 0, 0, 0, 1]),\n        Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n        Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n        Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n        Int32Array.from([1, 0, 0, 0, 0, 0, 1]),\n        Int32Array.from([1, 1, 1, 1, 1, 1, 1]),\n    ]);\n    MatrixUtil.POSITION_ADJUSTMENT_PATTERN = Array.from([\n        Int32Array.from([1, 1, 1, 1, 1]),\n        Int32Array.from([1, 0, 0, 0, 1]),\n        Int32Array.from([1, 0, 1, 0, 1]),\n        Int32Array.from([1, 0, 0, 0, 1]),\n        Int32Array.from([1, 1, 1, 1, 1]),\n    ]);\n    // From Appendix E. Table 1, JIS0510X:2004 (71: p). The table was double-checked by komatsu.\n    MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = Array.from([\n        Int32Array.from([-1, -1, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 18, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 22, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 26, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 30, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 34, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 22, 38, -1, -1, -1, -1]),\n        Int32Array.from([6, 24, 42, -1, -1, -1, -1]),\n        Int32Array.from([6, 26, 46, -1, -1, -1, -1]),\n        Int32Array.from([6, 28, 50, -1, -1, -1, -1]),\n        Int32Array.from([6, 30, 54, -1, -1, -1, -1]),\n        Int32Array.from([6, 32, 58, -1, -1, -1, -1]),\n        Int32Array.from([6, 34, 62, -1, -1, -1, -1]),\n        Int32Array.from([6, 26, 46, 66, -1, -1, -1]),\n        Int32Array.from([6, 26, 48, 70, -1, -1, -1]),\n        Int32Array.from([6, 26, 50, 74, -1, -1, -1]),\n        Int32Array.from([6, 30, 54, 78, -1, -1, -1]),\n        Int32Array.from([6, 30, 56, 82, -1, -1, -1]),\n        Int32Array.from([6, 30, 58, 86, -1, -1, -1]),\n        Int32Array.from([6, 34, 62, 90, -1, -1, -1]),\n        Int32Array.from([6, 28, 50, 72, 94, -1, -1]),\n        Int32Array.from([6, 26, 50, 74, 98, -1, -1]),\n        Int32Array.from([6, 30, 54, 78, 102, -1, -1]),\n        Int32Array.from([6, 28, 54, 80, 106, -1, -1]),\n        Int32Array.from([6, 32, 58, 84, 110, -1, -1]),\n        Int32Array.from([6, 30, 58, 86, 114, -1, -1]),\n        Int32Array.from([6, 34, 62, 90, 118, -1, -1]),\n        Int32Array.from([6, 26, 50, 74, 98, 122, -1]),\n        Int32Array.from([6, 30, 54, 78, 102, 126, -1]),\n        Int32Array.from([6, 26, 52, 78, 104, 130, -1]),\n        Int32Array.from([6, 30, 56, 82, 108, 134, -1]),\n        Int32Array.from([6, 34, 60, 86, 112, 138, -1]),\n        Int32Array.from([6, 30, 58, 86, 114, 142, -1]),\n        Int32Array.from([6, 34, 62, 90, 118, 146, -1]),\n        Int32Array.from([6, 30, 54, 78, 102, 126, 150]),\n        Int32Array.from([6, 24, 50, 76, 102, 128, 154]),\n        Int32Array.from([6, 28, 54, 80, 106, 132, 158]),\n        Int32Array.from([6, 32, 58, 84, 110, 136, 162]),\n        Int32Array.from([6, 26, 54, 82, 110, 138, 166]),\n        Int32Array.from([6, 30, 58, 86, 114, 142, 170]),\n    ]);\n    // Type info cells at the left top corner.\n    MatrixUtil.TYPE_INFO_COORDINATES = Array.from([\n        Int32Array.from([8, 0]),\n        Int32Array.from([8, 1]),\n        Int32Array.from([8, 2]),\n        Int32Array.from([8, 3]),\n        Int32Array.from([8, 4]),\n        Int32Array.from([8, 5]),\n        Int32Array.from([8, 7]),\n        Int32Array.from([8, 8]),\n        Int32Array.from([7, 8]),\n        Int32Array.from([5, 8]),\n        Int32Array.from([4, 8]),\n        Int32Array.from([3, 8]),\n        Int32Array.from([2, 8]),\n        Int32Array.from([1, 8]),\n        Int32Array.from([0, 8]),\n    ]);\n    // From Appendix D in JISX0510:2004 (p. 67)\n    MatrixUtil.VERSION_INFO_POLY = 0x1f25; // 1 1111 0010 0101\n    // From Appendix C in JISX0510:2004 (p.65).\n    MatrixUtil.TYPE_INFO_POLY = 0x537;\n    MatrixUtil.TYPE_INFO_MASK_PATTERN = 0x5412;\n\n    /*namespace com.google.zxing.qrcode.encoder {*/\n    class BlockPair {\n        constructor(dataBytes, errorCorrectionBytes) {\n            this.dataBytes = dataBytes;\n            this.errorCorrectionBytes = errorCorrectionBytes;\n        }\n        getDataBytes() {\n            return this.dataBytes;\n        }\n        getErrorCorrectionBytes() {\n            return this.errorCorrectionBytes;\n        }\n    }\n\n    /*import java.io.UnsupportedEncodingException;*/\n    /*import java.util.ArrayList;*/\n    /*import java.util.Collection;*/\n    /*import java.util.Map;*/\n    /**\n     * @author satorux@google.com (Satoru Takabayashi) - creator\n     * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n     */\n    class Encoder {\n        // TYPESCRIPTPORT: changed to UTF8, the default for js\n        constructor() { }\n        // The mask penalty calculation is complicated.  See Table 21 of JISX0510:2004 (p.45) for details.\n        // Basically it applies four rules and summate all penalties.\n        static calculateMaskPenalty(matrix) {\n            return MaskUtil.applyMaskPenaltyRule1(matrix)\n                + MaskUtil.applyMaskPenaltyRule2(matrix)\n                + MaskUtil.applyMaskPenaltyRule3(matrix)\n                + MaskUtil.applyMaskPenaltyRule4(matrix);\n        }\n        /**\n         * @param content text to encode\n         * @param ecLevel error correction level to use\n         * @return {@link QRCode} representing the encoded QR code\n         * @throws WriterException if encoding can't succeed, because of for example invalid content\n         *   or configuration\n         */\n        // public static encode(content: string, ecLevel: ErrorCorrectionLevel): QRCode /*throws WriterException*/ {\n        //   return encode(content, ecLevel, null)\n        // }\n        static encode(content, ecLevel, hints = null) {\n            // Determine what character encoding has been specified by the caller, if any\n            let encoding = Encoder.DEFAULT_BYTE_MODE_ENCODING;\n            const hasEncodingHint = hints !== null && undefined !== hints.get(EncodeHintType$1.CHARACTER_SET);\n            if (hasEncodingHint) {\n                encoding = hints.get(EncodeHintType$1.CHARACTER_SET).toString();\n            }\n            // Pick an encoding mode appropriate for the content. Note that this will not attempt to use\n            // multiple modes / segments even if that were more efficient. Twould be nice.\n            const mode = this.chooseMode(content, encoding);\n            // This will store the header information, like mode and\n            // length, as well as \"header\" segments like an ECI segment.\n            const headerBits = new BitArray();\n            // Append ECI segment if applicable\n            if (mode === Mode$1.BYTE && (hasEncodingHint || Encoder.DEFAULT_BYTE_MODE_ENCODING !== encoding)) {\n                const eci = CharacterSetECI.getCharacterSetECIByName(encoding);\n                if (eci !== undefined) {\n                    this.appendECI(eci, headerBits);\n                }\n            }\n            // (With ECI in place,) Write the mode marker\n            this.appendModeInfo(mode, headerBits);\n            // Collect data within the main segment, separately, to count its size if needed. Don't add it to\n            // main payload yet.\n            const dataBits = new BitArray();\n            this.appendBytes(content, mode, dataBits, encoding);\n            let version;\n            if (hints !== null && undefined !== hints.get(EncodeHintType$1.QR_VERSION)) {\n                const versionNumber = Number.parseInt(hints.get(EncodeHintType$1.QR_VERSION).toString(), 10);\n                version = Version$1.getVersionForNumber(versionNumber);\n                const bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, version);\n                if (!this.willFit(bitsNeeded, version, ecLevel)) {\n                    throw new WriterException('Data too big for requested version');\n                }\n            }\n            else {\n                version = this.recommendVersion(ecLevel, mode, headerBits, dataBits);\n            }\n            const headerAndDataBits = new BitArray();\n            headerAndDataBits.appendBitArray(headerBits);\n            // Find \"length\" of main segment and write it\n            const numLetters = mode === Mode$1.BYTE ? dataBits.getSizeInBytes() : content.length;\n            this.appendLengthInfo(numLetters, version, mode, headerAndDataBits);\n            // Put data together into the overall payload\n            headerAndDataBits.appendBitArray(dataBits);\n            const ecBlocks = version.getECBlocksForLevel(ecLevel);\n            const numDataBytes = version.getTotalCodewords() - ecBlocks.getTotalECCodewords();\n            // Terminate the bits properly.\n            this.terminateBits(numDataBytes, headerAndDataBits);\n            // Interleave data bits with error correction code.\n            const finalBits = this.interleaveWithECBytes(headerAndDataBits, version.getTotalCodewords(), numDataBytes, ecBlocks.getNumBlocks());\n            const qrCode = new QRCode();\n            qrCode.setECLevel(ecLevel);\n            qrCode.setMode(mode);\n            qrCode.setVersion(version);\n            //  Choose the mask pattern and set to \"qrCode\".\n            const dimension = version.getDimensionForVersion();\n            const matrix = new ByteMatrix(dimension, dimension);\n            const maskPattern = this.chooseMaskPattern(finalBits, ecLevel, version, matrix);\n            qrCode.setMaskPattern(maskPattern);\n            // Build the matrix and set it to \"qrCode\".\n            MatrixUtil.buildMatrix(finalBits, ecLevel, version, maskPattern, matrix);\n            qrCode.setMatrix(matrix);\n            return qrCode;\n        }\n        /**\n         * Decides the smallest version of QR code that will contain all of the provided data.\n         *\n         * @throws WriterException if the data cannot fit in any version\n         */\n        static recommendVersion(ecLevel, mode, headerBits, dataBits) {\n            // Hard part: need to know version to know how many bits length takes. But need to know how many\n            // bits it takes to know version. First we take a guess at version by assuming version will be\n            // the minimum, 1:\n            const provisionalBitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, Version$1.getVersionForNumber(1));\n            const provisionalVersion = this.chooseVersion(provisionalBitsNeeded, ecLevel);\n            // Use that guess to calculate the right version. I am still not sure this works in 100% of cases.\n            const bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, provisionalVersion);\n            return this.chooseVersion(bitsNeeded, ecLevel);\n        }\n        static calculateBitsNeeded(mode, headerBits, dataBits, version) {\n            return headerBits.getSize() + mode.getCharacterCountBits(version) + dataBits.getSize();\n        }\n        /**\n         * @return the code point of the table used in alphanumeric mode or\n         *  -1 if there is no corresponding code in the table.\n         */\n        static getAlphanumericCode(code /*int*/) {\n            if (code < Encoder.ALPHANUMERIC_TABLE.length) {\n                return Encoder.ALPHANUMERIC_TABLE[code];\n            }\n            return -1;\n        }\n        // public static chooseMode(content: string): Mode {\n        //   return chooseMode(content, null);\n        // }\n        /**\n         * Choose the best mode by examining the content. Note that 'encoding' is used as a hint;\n         * if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.\n         */\n        static chooseMode(content, encoding = null) {\n            if (CharacterSetECI.SJIS.getName() === encoding && this.isOnlyDoubleByteKanji(content)) {\n                // Choose Kanji mode if all input are double-byte characters\n                return Mode$1.KANJI;\n            }\n            let hasNumeric = false;\n            let hasAlphanumeric = false;\n            for (let i = 0, length = content.length; i < length; ++i) {\n                const c = content.charAt(i);\n                if (Encoder.isDigit(c)) {\n                    hasNumeric = true;\n                }\n                else if (this.getAlphanumericCode(c.charCodeAt(0)) !== -1) {\n                    hasAlphanumeric = true;\n                }\n                else {\n                    return Mode$1.BYTE;\n                }\n            }\n            if (hasAlphanumeric) {\n                return Mode$1.ALPHANUMERIC;\n            }\n            if (hasNumeric) {\n                return Mode$1.NUMERIC;\n            }\n            return Mode$1.BYTE;\n        }\n        static isOnlyDoubleByteKanji(content) {\n            let bytes;\n            try {\n                bytes = StringEncoding.encode(content, CharacterSetECI.SJIS); // content.getBytes(\"Shift_JIS\"))\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                return false;\n            }\n            const length = bytes.length;\n            if (length % 2 !== 0) {\n                return false;\n            }\n            for (let i = 0; i < length; i += 2) {\n                const byte1 = bytes[i] & 0xFF;\n                if ((byte1 < 0x81 || byte1 > 0x9F) && (byte1 < 0xE0 || byte1 > 0xEB)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        static chooseMaskPattern(bits, ecLevel, version, matrix) {\n            let minPenalty = Number.MAX_SAFE_INTEGER; // Lower penalty is better.\n            let bestMaskPattern = -1;\n            // We try all mask patterns to choose the best one.\n            for (let maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {\n                MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);\n                let penalty = this.calculateMaskPenalty(matrix);\n                if (penalty < minPenalty) {\n                    minPenalty = penalty;\n                    bestMaskPattern = maskPattern;\n                }\n            }\n            return bestMaskPattern;\n        }\n        static chooseVersion(numInputBits /*int*/, ecLevel) {\n            for (let versionNum = 1; versionNum <= 40; versionNum++) {\n                const version = Version$1.getVersionForNumber(versionNum);\n                if (Encoder.willFit(numInputBits, version, ecLevel)) {\n                    return version;\n                }\n            }\n            throw new WriterException('Data too big');\n        }\n        /**\n         * @return true if the number of input bits will fit in a code with the specified version and\n         * error correction level.\n         */\n        static willFit(numInputBits /*int*/, version, ecLevel) {\n            // In the following comments, we use numbers of Version 7-H.\n            // numBytes = 196\n            const numBytes = version.getTotalCodewords();\n            // getNumECBytes = 130\n            const ecBlocks = version.getECBlocksForLevel(ecLevel);\n            const numEcBytes = ecBlocks.getTotalECCodewords();\n            // getNumDataBytes = 196 - 130 = 66\n            const numDataBytes = numBytes - numEcBytes;\n            const totalInputBytes = (numInputBits + 7) / 8;\n            return numDataBytes >= totalInputBytes;\n        }\n        /**\n         * Terminate bits as described in 8.4.8 and 8.4.9 of JISX0510:2004 (p.24).\n         */\n        static terminateBits(numDataBytes /*int*/, bits) {\n            const capacity = numDataBytes * 8;\n            if (bits.getSize() > capacity) {\n                throw new WriterException('data bits cannot fit in the QR Code' + bits.getSize() + ' > ' +\n                    capacity);\n            }\n            for (let i = 0; i < 4 && bits.getSize() < capacity; ++i) {\n                bits.appendBit(false);\n            }\n            // Append termination bits. See 8.4.8 of JISX0510:2004 (p.24) for details.\n            // If the last byte isn't 8-bit aligned, we'll add padding bits.\n            const numBitsInLastByte = bits.getSize() & 0x07;\n            if (numBitsInLastByte > 0) {\n                for (let i = numBitsInLastByte; i < 8; i++) {\n                    bits.appendBit(false);\n                }\n            }\n            // If we have more space, we'll fill the space with padding patterns defined in 8.4.9 (p.24).\n            const numPaddingBytes = numDataBytes - bits.getSizeInBytes();\n            for (let i = 0; i < numPaddingBytes; ++i) {\n                bits.appendBits((i & 0x01) === 0 ? 0xEC : 0x11, 8);\n            }\n            if (bits.getSize() !== capacity) {\n                throw new WriterException('Bits size does not equal capacity');\n            }\n        }\n        /**\n         * Get number of data bytes and number of error correction bytes for block id \"blockID\". Store\n         * the result in \"numDataBytesInBlock\", and \"numECBytesInBlock\". See table 12 in 8.5.1 of\n         * JISX0510:2004 (p.30)\n         */\n        static getNumDataBytesAndNumECBytesForBlockID(numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/, blockID /*int*/, numDataBytesInBlock, numECBytesInBlock) {\n            if (blockID >= numRSBlocks) {\n                throw new WriterException('Block ID too large');\n            }\n            // numRsBlocksInGroup2 = 196 % 5 = 1\n            const numRsBlocksInGroup2 = numTotalBytes % numRSBlocks;\n            // numRsBlocksInGroup1 = 5 - 1 = 4\n            const numRsBlocksInGroup1 = numRSBlocks - numRsBlocksInGroup2;\n            // numTotalBytesInGroup1 = 196 / 5 = 39\n            const numTotalBytesInGroup1 = Math.floor(numTotalBytes / numRSBlocks);\n            // numTotalBytesInGroup2 = 39 + 1 = 40\n            const numTotalBytesInGroup2 = numTotalBytesInGroup1 + 1;\n            // numDataBytesInGroup1 = 66 / 5 = 13\n            const numDataBytesInGroup1 = Math.floor(numDataBytes / numRSBlocks);\n            // numDataBytesInGroup2 = 13 + 1 = 14\n            const numDataBytesInGroup2 = numDataBytesInGroup1 + 1;\n            // numEcBytesInGroup1 = 39 - 13 = 26\n            const numEcBytesInGroup1 = numTotalBytesInGroup1 - numDataBytesInGroup1;\n            // numEcBytesInGroup2 = 40 - 14 = 26\n            const numEcBytesInGroup2 = numTotalBytesInGroup2 - numDataBytesInGroup2;\n            // Sanity checks.\n            // 26 = 26\n            if (numEcBytesInGroup1 !== numEcBytesInGroup2) {\n                throw new WriterException('EC bytes mismatch');\n            }\n            // 5 = 4 + 1.\n            if (numRSBlocks !== numRsBlocksInGroup1 + numRsBlocksInGroup2) {\n                throw new WriterException('RS blocks mismatch');\n            }\n            // 196 = (13 + 26) * 4 + (14 + 26) * 1\n            if (numTotalBytes !==\n                ((numDataBytesInGroup1 + numEcBytesInGroup1) *\n                    numRsBlocksInGroup1) +\n                    ((numDataBytesInGroup2 + numEcBytesInGroup2) *\n                        numRsBlocksInGroup2)) {\n                throw new WriterException('Total bytes mismatch');\n            }\n            if (blockID < numRsBlocksInGroup1) {\n                numDataBytesInBlock[0] = numDataBytesInGroup1;\n                numECBytesInBlock[0] = numEcBytesInGroup1;\n            }\n            else {\n                numDataBytesInBlock[0] = numDataBytesInGroup2;\n                numECBytesInBlock[0] = numEcBytesInGroup2;\n            }\n        }\n        /**\n         * Interleave \"bits\" with corresponding error correction bytes. On success, store the result in\n         * \"result\". The interleave rule is complicated. See 8.6 of JISX0510:2004 (p.37) for details.\n         */\n        static interleaveWithECBytes(bits, numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/) {\n            // \"bits\" must have \"getNumDataBytes\" bytes of data.\n            if (bits.getSizeInBytes() !== numDataBytes) {\n                throw new WriterException('Number of bits and data bytes does not match');\n            }\n            // Step 1.  Divide data bytes into blocks and generate error correction bytes for them. We'll\n            // store the divided data bytes blocks and error correction bytes blocks into \"blocks\".\n            let dataBytesOffset = 0;\n            let maxNumDataBytes = 0;\n            let maxNumEcBytes = 0;\n            // Since, we know the number of reedsolmon blocks, we can initialize the vector with the number.\n            const blocks = new Array(); // new Array<BlockPair>(numRSBlocks)\n            for (let i = 0; i < numRSBlocks; ++i) {\n                const numDataBytesInBlock = new Int32Array(1);\n                const numEcBytesInBlock = new Int32Array(1);\n                Encoder.getNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes, numRSBlocks, i, numDataBytesInBlock, numEcBytesInBlock);\n                const size = numDataBytesInBlock[0];\n                const dataBytes = new Uint8Array(size);\n                bits.toBytes(8 * dataBytesOffset, dataBytes, 0, size);\n                const ecBytes = Encoder.generateECBytes(dataBytes, numEcBytesInBlock[0]);\n                blocks.push(new BlockPair(dataBytes, ecBytes));\n                maxNumDataBytes = Math.max(maxNumDataBytes, size);\n                maxNumEcBytes = Math.max(maxNumEcBytes, ecBytes.length);\n                dataBytesOffset += numDataBytesInBlock[0];\n            }\n            if (numDataBytes !== dataBytesOffset) {\n                throw new WriterException('Data bytes does not match offset');\n            }\n            const result = new BitArray();\n            // First, place data blocks.\n            for (let i = 0; i < maxNumDataBytes; ++i) {\n                for (const block of blocks) {\n                    const dataBytes = block.getDataBytes();\n                    if (i < dataBytes.length) {\n                        result.appendBits(dataBytes[i], 8);\n                    }\n                }\n            }\n            // Then, place error correction blocks.\n            for (let i = 0; i < maxNumEcBytes; ++i) {\n                for (const block of blocks) {\n                    const ecBytes = block.getErrorCorrectionBytes();\n                    if (i < ecBytes.length) {\n                        result.appendBits(ecBytes[i], 8);\n                    }\n                }\n            }\n            if (numTotalBytes !== result.getSizeInBytes()) { // Should be same.\n                throw new WriterException('Interleaving error: ' + numTotalBytes + ' and ' +\n                    result.getSizeInBytes() + ' differ.');\n            }\n            return result;\n        }\n        static generateECBytes(dataBytes, numEcBytesInBlock /*int*/) {\n            const numDataBytes = dataBytes.length;\n            const toEncode = new Int32Array(numDataBytes + numEcBytesInBlock); // int[numDataBytes + numEcBytesInBlock]\n            for (let i = 0; i < numDataBytes; i++) {\n                toEncode[i] = dataBytes[i] & 0xFF;\n            }\n            new ReedSolomonEncoder(GenericGF.QR_CODE_FIELD_256).encode(toEncode, numEcBytesInBlock);\n            const ecBytes = new Uint8Array(numEcBytesInBlock);\n            for (let i = 0; i < numEcBytesInBlock; i++) {\n                ecBytes[i] = /*(byte) */ toEncode[numDataBytes + i];\n            }\n            return ecBytes;\n        }\n        /**\n         * Append mode info. On success, store the result in \"bits\".\n         */\n        static appendModeInfo(mode, bits) {\n            bits.appendBits(mode.getBits(), 4);\n        }\n        /**\n         * Append length info. On success, store the result in \"bits\".\n         */\n        static appendLengthInfo(numLetters /*int*/, version, mode, bits) {\n            const numBits = mode.getCharacterCountBits(version);\n            if (numLetters >= (1 << numBits)) {\n                throw new WriterException(numLetters + ' is bigger than ' + ((1 << numBits) - 1));\n            }\n            bits.appendBits(numLetters, numBits);\n        }\n        /**\n         * Append \"bytes\" in \"mode\" mode (encoding) into \"bits\". On success, store the result in \"bits\".\n         */\n        static appendBytes(content, mode, bits, encoding) {\n            switch (mode) {\n                case Mode$1.NUMERIC:\n                    Encoder.appendNumericBytes(content, bits);\n                    break;\n                case Mode$1.ALPHANUMERIC:\n                    Encoder.appendAlphanumericBytes(content, bits);\n                    break;\n                case Mode$1.BYTE:\n                    Encoder.append8BitBytes(content, bits, encoding);\n                    break;\n                case Mode$1.KANJI:\n                    Encoder.appendKanjiBytes(content, bits);\n                    break;\n                default:\n                    throw new WriterException('Invalid mode: ' + mode);\n            }\n        }\n        static getDigit(singleCharacter) {\n            return singleCharacter.charCodeAt(0) - 48;\n        }\n        static isDigit(singleCharacter) {\n            const cn = Encoder.getDigit(singleCharacter);\n            return cn >= 0 && cn <= 9;\n        }\n        static appendNumericBytes(content, bits) {\n            const length = content.length;\n            let i = 0;\n            while (i < length) {\n                const num1 = Encoder.getDigit(content.charAt(i));\n                if (i + 2 < length) {\n                    // Encode three numeric letters in ten bits.\n                    const num2 = Encoder.getDigit(content.charAt(i + 1));\n                    const num3 = Encoder.getDigit(content.charAt(i + 2));\n                    bits.appendBits(num1 * 100 + num2 * 10 + num3, 10);\n                    i += 3;\n                }\n                else if (i + 1 < length) {\n                    // Encode two numeric letters in seven bits.\n                    const num2 = Encoder.getDigit(content.charAt(i + 1));\n                    bits.appendBits(num1 * 10 + num2, 7);\n                    i += 2;\n                }\n                else {\n                    // Encode one numeric letter in four bits.\n                    bits.appendBits(num1, 4);\n                    i++;\n                }\n            }\n        }\n        static appendAlphanumericBytes(content, bits) {\n            const length = content.length;\n            let i = 0;\n            while (i < length) {\n                const code1 = Encoder.getAlphanumericCode(content.charCodeAt(i));\n                if (code1 === -1) {\n                    throw new WriterException();\n                }\n                if (i + 1 < length) {\n                    const code2 = Encoder.getAlphanumericCode(content.charCodeAt(i + 1));\n                    if (code2 === -1) {\n                        throw new WriterException();\n                    }\n                    // Encode two alphanumeric letters in 11 bits.\n                    bits.appendBits(code1 * 45 + code2, 11);\n                    i += 2;\n                }\n                else {\n                    // Encode one alphanumeric letter in six bits.\n                    bits.appendBits(code1, 6);\n                    i++;\n                }\n            }\n        }\n        static append8BitBytes(content, bits, encoding) {\n            let bytes;\n            try {\n                bytes = StringEncoding.encode(content, encoding);\n            }\n            catch (uee /*: UnsupportedEncodingException*/) {\n                throw new WriterException(uee);\n            }\n            for (let i = 0, length = bytes.length; i !== length; i++) {\n                const b = bytes[i];\n                bits.appendBits(b, 8);\n            }\n        }\n        /**\n         * @throws WriterException\n         */\n        static appendKanjiBytes(content, bits) {\n            let bytes;\n            try {\n                bytes = StringEncoding.encode(content, CharacterSetECI.SJIS);\n            }\n            catch (uee /*: UnsupportedEncodingException*/) {\n                throw new WriterException(uee);\n            }\n            const length = bytes.length;\n            for (let i = 0; i < length; i += 2) {\n                const byte1 = bytes[i] & 0xFF;\n                const byte2 = bytes[i + 1] & 0xFF;\n                const code = ((byte1 << 8) & 0xFFFFFFFF) | byte2;\n                let subtracted = -1;\n                if (code >= 0x8140 && code <= 0x9ffc) {\n                    subtracted = code - 0x8140;\n                }\n                else if (code >= 0xe040 && code <= 0xebbf) {\n                    subtracted = code - 0xc140;\n                }\n                if (subtracted === -1) {\n                    throw new WriterException('Invalid byte sequence');\n                }\n                const encoded = ((subtracted >> 8) * 0xc0) + (subtracted & 0xff);\n                bits.appendBits(encoded, 13);\n            }\n        }\n        static appendECI(eci, bits) {\n            bits.appendBits(Mode$1.ECI.getBits(), 4);\n            // This is correct for values up to 127, which is all we need now.\n            bits.appendBits(eci.getValue(), 8);\n        }\n    }\n    // The original table is defined in the table 5 of JISX0510:2004 (p.19).\n    Encoder.ALPHANUMERIC_TABLE = Int32Array.from([\n        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n        36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,\n        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1,\n        -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,\n    ]);\n    Encoder.DEFAULT_BYTE_MODE_ENCODING = CharacterSetECI.UTF8.getName(); // \"ISO-8859-1\"\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     */\n    class BrowserQRCodeSvgWriter {\n        /**\n         * Writes and renders a QRCode SVG element.\n         *\n         * @param contents\n         * @param width\n         * @param height\n         * @param hints\n         */\n        write(contents, width, height, hints = null) {\n            if (contents.length === 0) {\n                throw new IllegalArgumentException('Found empty contents');\n            }\n            // if (format != BarcodeFormat.QR_CODE) {\n            //   throw new IllegalArgumentException(\"Can only encode QR_CODE, but got \" + format)\n            // }\n            if (width < 0 || height < 0) {\n                throw new IllegalArgumentException('Requested dimensions are too small: ' + width + 'x' + height);\n            }\n            let errorCorrectionLevel = ErrorCorrectionLevel.L;\n            let quietZone = BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE;\n            if (hints !== null) {\n                if (undefined !== hints.get(EncodeHintType$1.ERROR_CORRECTION)) {\n                    errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType$1.ERROR_CORRECTION).toString());\n                }\n                if (undefined !== hints.get(EncodeHintType$1.MARGIN)) {\n                    quietZone = Number.parseInt(hints.get(EncodeHintType$1.MARGIN).toString(), 10);\n                }\n            }\n            const code = Encoder.encode(contents, errorCorrectionLevel, hints);\n            return this.renderResult(code, width, height, quietZone);\n        }\n        /**\n         * Renders the result and then appends it to the DOM.\n         */\n        writeToDom(containerElement, contents, width, height, hints = null) {\n            if (typeof containerElement === 'string') {\n                containerElement = document.querySelector(containerElement);\n            }\n            const svgElement = this.write(contents, width, height, hints);\n            if (containerElement)\n                containerElement.appendChild(svgElement);\n        }\n        /**\n         * Note that the input matrix uses 0 == white, 1 == black.\n         * The output matrix uses 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n         */\n        renderResult(code, width /*int*/, height /*int*/, quietZone /*int*/) {\n            const input = code.getMatrix();\n            if (input === null) {\n                throw new IllegalStateException();\n            }\n            const inputWidth = input.getWidth();\n            const inputHeight = input.getHeight();\n            const qrWidth = inputWidth + (quietZone * 2);\n            const qrHeight = inputHeight + (quietZone * 2);\n            const outputWidth = Math.max(width, qrWidth);\n            const outputHeight = Math.max(height, qrHeight);\n            const multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n            // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n            // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n            // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n            // handle all the padding from 100x100 (the actual QR) up to 200x160.\n            const leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n            const topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n            const svgElement = this.createSVGElement(outputWidth, outputHeight);\n            for (let inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n                // Write the contents of this row of the barcode\n                for (let inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                    if (input.get(inputX, inputY) === 1) {\n                        const svgRectElement = this.createSvgRectElement(outputX, outputY, multiple, multiple);\n                        svgElement.appendChild(svgRectElement);\n                    }\n                }\n            }\n            return svgElement;\n        }\n        /**\n         * Creates a SVG element.\n         *\n         * @param w SVG's width attribute\n         * @param h SVG's height attribute\n         */\n        createSVGElement(w, h) {\n            const svgElement = document.createElementNS(BrowserQRCodeSvgWriter.SVG_NS, 'svg');\n            svgElement.setAttributeNS(null, 'height', w.toString());\n            svgElement.setAttributeNS(null, 'width', h.toString());\n            return svgElement;\n        }\n        /**\n         * Creates a SVG rect element.\n         *\n         * @param x Element's x coordinate\n         * @param y Element's y coordinate\n         * @param w Element's width attribute\n         * @param h Element's height attribute\n         */\n        createSvgRectElement(x, y, w, h) {\n            const rect = document.createElementNS(BrowserQRCodeSvgWriter.SVG_NS, 'rect');\n            rect.setAttributeNS(null, 'x', x.toString());\n            rect.setAttributeNS(null, 'y', y.toString());\n            rect.setAttributeNS(null, 'height', w.toString());\n            rect.setAttributeNS(null, 'width', h.toString());\n            rect.setAttributeNS(null, 'fill', '#000000');\n            return rect;\n        }\n    }\n    BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE = 4;\n    /**\n     * SVG markup NameSpace\n     */\n    BrowserQRCodeSvgWriter.SVG_NS = 'http://www.w3.org/2000/svg';\n\n    /*import java.util.Map;*/\n    /**\n     * This object renders a QR Code as a BitMatrix 2D array of greyscale values.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class QRCodeWriter {\n        /*@Override*/\n        // public encode(contents: string, format: BarcodeFormat, width: number /*int*/, height: number /*int*/): BitMatrix\n        //     /*throws WriterException */ {\n        //   return encode(contents, format, width, height, null)\n        // }\n        /*@Override*/\n        encode(contents, format, width /*int*/, height /*int*/, hints) {\n            if (contents.length === 0) {\n                throw new IllegalArgumentException('Found empty contents');\n            }\n            if (format !== BarcodeFormat$1.QR_CODE) {\n                throw new IllegalArgumentException('Can only encode QR_CODE, but got ' + format);\n            }\n            if (width < 0 || height < 0) {\n                throw new IllegalArgumentException(`Requested dimensions are too small: ${width}x${height}`);\n            }\n            let errorCorrectionLevel = ErrorCorrectionLevel.L;\n            let quietZone = QRCodeWriter.QUIET_ZONE_SIZE;\n            if (hints !== null) {\n                if (undefined !== hints.get(EncodeHintType$1.ERROR_CORRECTION)) {\n                    errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType$1.ERROR_CORRECTION).toString());\n                }\n                if (undefined !== hints.get(EncodeHintType$1.MARGIN)) {\n                    quietZone = Number.parseInt(hints.get(EncodeHintType$1.MARGIN).toString(), 10);\n                }\n            }\n            const code = Encoder.encode(contents, errorCorrectionLevel, hints);\n            return QRCodeWriter.renderResult(code, width, height, quietZone);\n        }\n        // Note that the input matrix uses 0 == white, 1 == black, while the output matrix uses\n        // 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n        static renderResult(code, width /*int*/, height /*int*/, quietZone /*int*/) {\n            const input = code.getMatrix();\n            if (input === null) {\n                throw new IllegalStateException();\n            }\n            const inputWidth = input.getWidth();\n            const inputHeight = input.getHeight();\n            const qrWidth = inputWidth + (quietZone * 2);\n            const qrHeight = inputHeight + (quietZone * 2);\n            const outputWidth = Math.max(width, qrWidth);\n            const outputHeight = Math.max(height, qrHeight);\n            const multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n            // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n            // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n            // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n            // handle all the padding from 100x100 (the actual QR) up to 200x160.\n            const leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n            const topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n            const output = new BitMatrix(outputWidth, outputHeight);\n            for (let inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n                // Write the contents of this row of the barcode\n                for (let inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                    if (input.get(inputX, inputY) === 1) {\n                        output.setRegion(outputX, outputY, multiple, multiple);\n                    }\n                }\n            }\n            return output;\n        }\n    }\n    QRCodeWriter.QUIET_ZONE_SIZE = 4;\n\n    /*import java.util.Map;*/\n    /**\n     * This is a factory class which finds the appropriate Writer subclass for the BarcodeFormat\n     * requested and encodes the barcode with the supplied contents.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class MultiFormatWriter {\n        /*@Override*/\n        // public encode(contents: string,\n        //                         format: BarcodeFormat,\n        //                         width: number /*int*/,\n        //                         height: number /*int*/): BitMatrix /*throws WriterException */ {\n        //   return encode(contents, format, width, height, null)\n        // }\n        /*@Override*/\n        encode(contents, format, width /*int*/, height /*int*/, hints) {\n            let writer;\n            switch (format) {\n                // case BarcodeFormat.EAN_8:\n                //   writer = new EAN8Writer()\n                //   break\n                // case BarcodeFormat.UPC_E:\n                //   writer = new UPCEWriter()\n                //   break\n                // case BarcodeFormat.EAN_13:\n                //   writer = new EAN13Writer()\n                //   break\n                // case BarcodeFormat.UPC_A:\n                //   writer = new UPCAWriter()\n                //   break\n                case BarcodeFormat$1.QR_CODE:\n                    writer = new QRCodeWriter();\n                    break;\n                // case BarcodeFormat.CODE_39:\n                //   writer = new Code39Writer()\n                //   break\n                // case BarcodeFormat.CODE_93:\n                //   writer = new Code93Writer()\n                //   break\n                // case BarcodeFormat.CODE_128:\n                //   writer = new Code128Writer()\n                //   break\n                // case BarcodeFormat.ITF:\n                //   writer = new ITFWriter()\n                //   break\n                // case BarcodeFormat.PDF_417:\n                //   writer = new PDF417Writer()\n                //   break\n                // case BarcodeFormat.CODABAR:\n                //   writer = new CodaBarWriter()\n                //   break\n                // case BarcodeFormat.DATA_MATRIX:\n                //   writer = new DataMatrixWriter()\n                //   break\n                // case BarcodeFormat.AZTEC:\n                //   writer = new AztecWriter()\n                //   break\n                default:\n                    throw new IllegalArgumentException('No encoder available for format ' + format);\n            }\n            return writer.encode(contents, format, width, height, hints);\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This object extends LuminanceSource around an array of YUV data returned from the camera driver,\n     * with the option to crop to a rectangle within the full data. This can be used to exclude\n     * superfluous pixels around the perimeter and speed up decoding.\n     *\n     * It works for any pixel format where the Y channel is planar and appears first, including\n     * YCbCr_420_SP and YCbCr_422_SP.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class PlanarYUVLuminanceSource extends LuminanceSource {\n        constructor(yuvData, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/, width /*int*/, height /*int*/, reverseHorizontal) {\n            super(width, height);\n            this.yuvData = yuvData;\n            this.dataWidth = dataWidth;\n            this.dataHeight = dataHeight;\n            this.left = left;\n            this.top = top;\n            if (left + width > dataWidth || top + height > dataHeight) {\n                throw new IllegalArgumentException('Crop rectangle does not fit within image data.');\n            }\n            if (reverseHorizontal) {\n                this.reverseHorizontal(width, height);\n            }\n        }\n        /*@Override*/\n        getRow(y /*int*/, row) {\n            if (y < 0 || y >= this.getHeight()) {\n                throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n            }\n            const width = this.getWidth();\n            if (row === null || row === undefined || row.length < width) {\n                row = new Uint8ClampedArray(width);\n            }\n            const offset = (y + this.top) * this.dataWidth + this.left;\n            System.arraycopy(this.yuvData, offset, row, 0, width);\n            return row;\n        }\n        /*@Override*/\n        getMatrix() {\n            const width = this.getWidth();\n            const height = this.getHeight();\n            // If the caller asks for the entire underlying image, save the copy and give them the\n            // original data. The docs specifically warn that result.length must be ignored.\n            if (width === this.dataWidth && height === this.dataHeight) {\n                return this.yuvData;\n            }\n            const area = width * height;\n            const matrix = new Uint8ClampedArray(area);\n            let inputOffset = this.top * this.dataWidth + this.left;\n            // If the width matches the full width of the underlying data, perform a single copy.\n            if (width === this.dataWidth) {\n                System.arraycopy(this.yuvData, inputOffset, matrix, 0, area);\n                return matrix;\n            }\n            // Otherwise copy one cropped row at a time.\n            for (let y = 0; y < height; y++) {\n                const outputOffset = y * width;\n                System.arraycopy(this.yuvData, inputOffset, matrix, outputOffset, width);\n                inputOffset += this.dataWidth;\n            }\n            return matrix;\n        }\n        /*@Override*/\n        isCropSupported() {\n            return true;\n        }\n        /*@Override*/\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            return new PlanarYUVLuminanceSource(this.yuvData, this.dataWidth, this.dataHeight, this.left + left, this.top + top, width, height, false);\n        }\n        renderThumbnail() {\n            const width = this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n            const height = this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n            const pixels = new Int32Array(width * height);\n            const yuv = this.yuvData;\n            let inputOffset = this.top * this.dataWidth + this.left;\n            for (let y = 0; y < height; y++) {\n                const outputOffset = y * width;\n                for (let x = 0; x < width; x++) {\n                    const grey = yuv[inputOffset + x * PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR] & 0xff;\n                    pixels[outputOffset + x] = 0xFF000000 | (grey * 0x00010101);\n                }\n                inputOffset += this.dataWidth * PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n            }\n            return pixels;\n        }\n        /**\n         * @return width of image from {@link #renderThumbnail()}\n         */\n        getThumbnailWidth() {\n            return this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n        }\n        /**\n         * @return height of image from {@link #renderThumbnail()}\n         */\n        getThumbnailHeight() {\n            return this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n        }\n        reverseHorizontal(width /*int*/, height /*int*/) {\n            const yuvData = this.yuvData;\n            for (let y = 0, rowStart = this.top * this.dataWidth + this.left; y < height; y++, rowStart += this.dataWidth) {\n                const middle = rowStart + width / 2;\n                for (let x1 = rowStart, x2 = rowStart + width - 1; x1 < middle; x1++, x2--) {\n                    const temp = yuvData[x1];\n                    yuvData[x1] = yuvData[x2];\n                    yuvData[x2] = temp;\n                }\n            }\n        }\n        invert() {\n            return new InvertedLuminanceSource(this);\n        }\n    }\n    PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR = 2;\n\n    /*\n     * Copyright 2009 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This class is used to help decode images from files which arrive as RGB data from\n     * an ARGB pixel array. It does not support rotation.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Betaminos\n     */\n    class RGBLuminanceSource extends LuminanceSource {\n        constructor(luminances, width /*int*/, height /*int*/, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/) {\n            super(width, height);\n            this.dataWidth = dataWidth;\n            this.dataHeight = dataHeight;\n            this.left = left;\n            this.top = top;\n            if (luminances.BYTES_PER_ELEMENT === 4) { // Int32Array\n                const size = width * height;\n                const luminancesUint8Array = new Uint8ClampedArray(size);\n                for (let offset = 0; offset < size; offset++) {\n                    const pixel = luminances[offset];\n                    const r = (pixel >> 16) & 0xff; // red\n                    const g2 = (pixel >> 7) & 0x1fe; // 2 * green\n                    const b = pixel & 0xff; // blue\n                    // Calculate green-favouring average cheaply\n                    luminancesUint8Array[offset] = /*(byte) */ ((r + g2 + b) / 4) & 0xFF;\n                }\n                this.luminances = luminancesUint8Array;\n            }\n            else {\n                this.luminances = luminances;\n            }\n            if (undefined === dataWidth) {\n                this.dataWidth = width;\n            }\n            if (undefined === dataHeight) {\n                this.dataHeight = height;\n            }\n            if (undefined === left) {\n                this.left = 0;\n            }\n            if (undefined === top) {\n                this.top = 0;\n            }\n            if (this.left + width > this.dataWidth || this.top + height > this.dataHeight) {\n                throw new IllegalArgumentException('Crop rectangle does not fit within image data.');\n            }\n        }\n        /*@Override*/\n        getRow(y /*int*/, row) {\n            if (y < 0 || y >= this.getHeight()) {\n                throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n            }\n            const width = this.getWidth();\n            if (row === null || row === undefined || row.length < width) {\n                row = new Uint8ClampedArray(width);\n            }\n            const offset = (y + this.top) * this.dataWidth + this.left;\n            System.arraycopy(this.luminances, offset, row, 0, width);\n            return row;\n        }\n        /*@Override*/\n        getMatrix() {\n            const width = this.getWidth();\n            const height = this.getHeight();\n            // If the caller asks for the entire underlying image, save the copy and give them the\n            // original data. The docs specifically warn that result.length must be ignored.\n            if (width === this.dataWidth && height === this.dataHeight) {\n                return this.luminances;\n            }\n            const area = width * height;\n            const matrix = new Uint8ClampedArray(area);\n            let inputOffset = this.top * this.dataWidth + this.left;\n            // If the width matches the full width of the underlying data, perform a single copy.\n            if (width === this.dataWidth) {\n                System.arraycopy(this.luminances, inputOffset, matrix, 0, area);\n                return matrix;\n            }\n            // Otherwise copy one cropped row at a time.\n            for (let y = 0; y < height; y++) {\n                const outputOffset = y * width;\n                System.arraycopy(this.luminances, inputOffset, matrix, outputOffset, width);\n                inputOffset += this.dataWidth;\n            }\n            return matrix;\n        }\n        /*@Override*/\n        isCropSupported() {\n            return true;\n        }\n        /*@Override*/\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            return new RGBLuminanceSource(this.luminances, width, height, this.dataWidth, this.dataHeight, this.left + left, this.top + top);\n        }\n        invert() {\n            return new InvertedLuminanceSource(this);\n        }\n    }\n\n    /**\n     * Just to make a shortcut between Java code and TS code.\n     */\n    class Charset extends CharacterSetECI {\n        static forName(name) {\n            return this.getCharacterSetECIByName(name);\n        }\n    }\n\n    /**\n     * Just to make a shortcut between Java code and TS code.\n     */\n    class StandardCharsets {\n    }\n    StandardCharsets.ISO_8859_1 = CharacterSetECI.ISO8859_1;\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * Aztec 2D code representation\n     *\n     * @author Rustam Abdullaev\n     */\n    /*public final*/ class AztecCode {\n        /**\n         * @return {@code true} if compact instead of full mode\n         */\n        isCompact() {\n            return this.compact;\n        }\n        setCompact(compact) {\n            this.compact = compact;\n        }\n        /**\n         * @return size in pixels (width and height)\n         */\n        getSize() {\n            return this.size;\n        }\n        setSize(size) {\n            this.size = size;\n        }\n        /**\n         * @return number of levels\n         */\n        getLayers() {\n            return this.layers;\n        }\n        setLayers(layers) {\n            this.layers = layers;\n        }\n        /**\n         * @return number of data codewords\n         */\n        getCodeWords() {\n            return this.codeWords;\n        }\n        setCodeWords(codeWords) {\n            this.codeWords = codeWords;\n        }\n        /**\n         * @return the symbol image\n         */\n        getMatrix() {\n            return this.matrix;\n        }\n        setMatrix(matrix) {\n            this.matrix = matrix;\n        }\n    }\n\n    class Collections {\n        /**\n         * The singletonList(T) method is used to return an immutable list containing only the specified object.\n         */\n        static singletonList(item) {\n            return [item];\n        }\n        /**\n         * The min(Collection<? extends T>, Comparator<? super T>) method is used to return the minimum element of the given collection, according to the order induced by the specified comparator.\n         */\n        static min(collection, comparator) {\n            return collection.sort(comparator)[0];\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    class Token {\n        constructor(previous) {\n            this.previous = previous;\n        }\n        getPrevious() {\n            return this.previous;\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /*final*/ class SimpleToken extends Token {\n        constructor(previous, value, bitCount) {\n            super(previous);\n            this.value = value;\n            this.bitCount = bitCount;\n        }\n        /**\n         * @Override\n         */\n        appendTo(bitArray, text) {\n            bitArray.appendBits(this.value, this.bitCount);\n        }\n        add(value, bitCount) {\n            return new SimpleToken(this, value, bitCount);\n        }\n        addBinaryShift(start, byteCount) {\n            // no-op can't binary shift a simple token\n            console.warn('addBinaryShift on SimpleToken, this simply returns a copy of this token');\n            return new SimpleToken(this, start, byteCount);\n        }\n        /**\n         * @Override\n         */\n        toString() {\n            let value = this.value & ((1 << this.bitCount) - 1);\n            value |= 1 << this.bitCount;\n            return '<' + Integer.toBinaryString(value | (1 << this.bitCount)).substring(1) + '>';\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /*final*/ class BinaryShiftToken extends SimpleToken {\n        constructor(previous, binaryShiftStart, binaryShiftByteCount) {\n            super(previous, 0, 0);\n            this.binaryShiftStart = binaryShiftStart;\n            this.binaryShiftByteCount = binaryShiftByteCount;\n        }\n        /**\n         * @Override\n         */\n        appendTo(bitArray, text) {\n            for (let i = 0; i < this.binaryShiftByteCount; i++) {\n                if (i === 0 || (i === 31 && this.binaryShiftByteCount <= 62)) {\n                    // We need a header before the first character, and before\n                    // character 31 when the total byte code is <= 62\n                    bitArray.appendBits(31, 5); // BINARY_SHIFT\n                    if (this.binaryShiftByteCount > 62) {\n                        bitArray.appendBits(this.binaryShiftByteCount - 31, 16);\n                    }\n                    else if (i === 0) {\n                        // 1 <= binaryShiftByteCode <= 62\n                        bitArray.appendBits(Math.min(this.binaryShiftByteCount, 31), 5);\n                    }\n                    else {\n                        // 32 <= binaryShiftCount <= 62 and i == 31\n                        bitArray.appendBits(this.binaryShiftByteCount - 31, 5);\n                    }\n                }\n                bitArray.appendBits(text[this.binaryShiftStart + i], 8);\n            }\n        }\n        addBinaryShift(start, byteCount) {\n            // int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);\n            return new BinaryShiftToken(this, start, byteCount);\n        }\n        /**\n         * @Override\n         */\n        toString() {\n            return '<' + this.binaryShiftStart + '::' + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + '>';\n        }\n    }\n\n    function addBinaryShift(token, start, byteCount) {\n        // int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);\n        return new BinaryShiftToken(token, start, byteCount);\n    }\n    function add(token, value, bitCount) {\n        return new SimpleToken(token, value, bitCount);\n    }\n\n    const /*final*/ MODE_NAMES = [\n        'UPPER',\n        'LOWER',\n        'DIGIT',\n        'MIXED',\n        'PUNCT'\n    ];\n    const /*final*/ MODE_UPPER = 0; // 5 bits\n    const /*final*/ MODE_LOWER = 1; // 5 bits\n    const /*final*/ MODE_DIGIT = 2; // 4 bits\n    const /*final*/ MODE_MIXED = 3; // 5 bits\n    const /*final*/ MODE_PUNCT = 4; // 5 bits\n    const EMPTY_TOKEN = new SimpleToken(null, 0, 0);\n\n    // The Latch Table shows, for each pair of Modes, the optimal method for\n    // getting from one mode to another.  In the worst possible case, this can\n    // be up to 14 bits.  In the best possible case, we are already there!\n    // The high half-word of each entry gives the number of bits.\n    // The low half-word of each entry are the actual bits necessary to change\n    const LATCH_TABLE = [\n        Int32Array.from([\n            0,\n            (5 << 16) + 28,\n            (5 << 16) + 30,\n            (5 << 16) + 29,\n            (10 << 16) + (29 << 5) + 30 // UPPER -> MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (9 << 16) + (30 << 4) + 14,\n            0,\n            (5 << 16) + 30,\n            (5 << 16) + 29,\n            (10 << 16) + (29 << 5) + 30 // LOWER -> MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (4 << 16) + 14,\n            (9 << 16) + (14 << 5) + 28,\n            0,\n            (9 << 16) + (14 << 5) + 29,\n            (14 << 16) + (14 << 10) + (29 << 5) + 30\n            // DIGIT -> UPPER -> MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (5 << 16) + 29,\n            (5 << 16) + 28,\n            (10 << 16) + (29 << 5) + 30,\n            0,\n            (5 << 16) + 30 // MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (5 << 16) + 31,\n            (10 << 16) + (31 << 5) + 28,\n            (10 << 16) + (31 << 5) + 30,\n            (10 << 16) + (31 << 5) + 29,\n            0\n        ])\n    ];\n\n    function static_SHIFT_TABLE(SHIFT_TABLE) {\n        for (let table /*Int32Array*/ of SHIFT_TABLE) {\n            Arrays.fill(table, -1);\n        }\n        SHIFT_TABLE[MODE_UPPER][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_LOWER][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_LOWER][MODE_UPPER] = 28;\n        SHIFT_TABLE[MODE_MIXED][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_DIGIT][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_DIGIT][MODE_UPPER] = 15;\n        return SHIFT_TABLE;\n    }\n    const /*final*/ SHIFT_TABLE = static_SHIFT_TABLE(Arrays.createInt32Array(6, 6)); // mode shift codes, per table\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * State represents all information about a sequence necessary to generate the current output.\n     * Note that a state is immutable.\n     */\n    /*final*/ class State {\n        constructor(token, mode, binaryBytes, bitCount) {\n            this.token = token;\n            this.mode = mode;\n            this.binaryShiftByteCount = binaryBytes;\n            this.bitCount = bitCount;\n            // Make sure we match the token\n            // int binaryShiftBitCount = (binaryShiftByteCount * 8) +\n            //    (binaryShiftByteCount === 0 ? 0 :\n            //     binaryShiftByteCount <= 31 ? 10 :\n            //     binaryShiftByteCount <= 62 ? 20 : 21);\n            // assert this.bitCount === token.getTotalBitCount() + binaryShiftBitCount;\n        }\n        getMode() {\n            return this.mode;\n        }\n        getToken() {\n            return this.token;\n        }\n        getBinaryShiftByteCount() {\n            return this.binaryShiftByteCount;\n        }\n        getBitCount() {\n            return this.bitCount;\n        }\n        // Create a new state representing this state with a latch to a (not\n        // necessary different) mode, and then a code.\n        latchAndAppend(mode, value) {\n            // assert binaryShiftByteCount === 0;\n            let bitCount = this.bitCount;\n            let token = this.token;\n            if (mode !== this.mode) {\n                let latch = LATCH_TABLE[this.mode][mode];\n                token = add(token, latch & 0xffff, latch >> 16);\n                bitCount += latch >> 16;\n            }\n            let latchModeBitCount = mode === MODE_DIGIT ? 4 : 5;\n            token = add(token, value, latchModeBitCount);\n            return new State(token, mode, 0, bitCount + latchModeBitCount);\n        }\n        // Create a new state representing this state, with a temporary shift\n        // to a different mode to output a single value.\n        shiftAndAppend(mode, value) {\n            // assert binaryShiftByteCount === 0 && this.mode !== mode;\n            let token = this.token;\n            let thisModeBitCount = this.mode === MODE_DIGIT ? 4 : 5;\n            // Shifts exist only to UPPER and PUNCT, both with tokens size 5.\n            token = add(token, SHIFT_TABLE[this.mode][mode], thisModeBitCount);\n            token = add(token, value, 5);\n            return new State(token, this.mode, 0, this.bitCount + thisModeBitCount + 5);\n        }\n        // Create a new state representing this state, but an additional character\n        // output in Binary Shift mode.\n        addBinaryShiftChar(index) {\n            let token = this.token;\n            let mode = this.mode;\n            let bitCount = this.bitCount;\n            if (this.mode === MODE_PUNCT || this.mode === MODE_DIGIT) {\n                // assert binaryShiftByteCount === 0;\n                let latch = LATCH_TABLE[mode][MODE_UPPER];\n                token = add(token, latch & 0xffff, latch >> 16);\n                bitCount += latch >> 16;\n                mode = MODE_UPPER;\n            }\n            let deltaBitCount = this.binaryShiftByteCount === 0 || this.binaryShiftByteCount === 31\n                ? 18\n                : this.binaryShiftByteCount === 62\n                    ? 9\n                    : 8;\n            let result = new State(token, mode, this.binaryShiftByteCount + 1, bitCount + deltaBitCount);\n            if (result.binaryShiftByteCount === 2047 + 31) {\n                // The string is as long as it's allowed to be.  We should end it.\n                result = result.endBinaryShift(index + 1);\n            }\n            return result;\n        }\n        // Create the state identical to this one, but we are no longer in\n        // Binary Shift mode.\n        endBinaryShift(index) {\n            if (this.binaryShiftByteCount === 0) {\n                return this;\n            }\n            let token = this.token;\n            token = addBinaryShift(token, index - this.binaryShiftByteCount, this.binaryShiftByteCount);\n            // assert token.getTotalBitCount() === this.bitCount;\n            return new State(token, this.mode, 0, this.bitCount);\n        }\n        // Returns true if \"this\" state is better (equal: or) to be in than \"that\"\n        // state under all possible circumstances.\n        isBetterThanOrEqualTo(other) {\n            let newModeBitCount = this.bitCount + (LATCH_TABLE[this.mode][other.mode] >> 16);\n            if (this.binaryShiftByteCount < other.binaryShiftByteCount) {\n                // add additional B/S encoding cost of other, if any\n                newModeBitCount +=\n                    State.calculateBinaryShiftCost(other) -\n                        State.calculateBinaryShiftCost(this);\n            }\n            else if (this.binaryShiftByteCount > other.binaryShiftByteCount &&\n                other.binaryShiftByteCount > 0) {\n                // maximum possible additional cost (it: h)\n                newModeBitCount += 10;\n            }\n            return newModeBitCount <= other.bitCount;\n        }\n        toBitArray(text) {\n            // Reverse the tokens, so that they are in the order that they should\n            // be output\n            let symbols = [];\n            for (let token = this.endBinaryShift(text.length).token; token !== null; token = token.getPrevious()) {\n                symbols.unshift(token);\n            }\n            let bitArray = new BitArray();\n            // Add each token to the result.\n            for (const symbol of symbols) {\n                symbol.appendTo(bitArray, text);\n            }\n            // assert bitArray.getSize() === this.bitCount;\n            return bitArray;\n        }\n        /**\n         * @Override\n         */\n        toString() {\n            return StringUtils.format('%s bits=%d bytes=%d', MODE_NAMES[this.mode], this.bitCount, this.binaryShiftByteCount);\n        }\n        static calculateBinaryShiftCost(state) {\n            if (state.binaryShiftByteCount > 62) {\n                return 21; // B/S with extended length\n            }\n            if (state.binaryShiftByteCount > 31) {\n                return 20; // two B/S\n            }\n            if (state.binaryShiftByteCount > 0) {\n                return 10; // one B/S\n            }\n            return 0;\n        }\n    }\n    State.INITIAL_STATE = new State(EMPTY_TOKEN, MODE_UPPER, 0, 0);\n\n    function static_CHAR_MAP(CHAR_MAP) {\n        const spaceCharCode = StringUtils.getCharCode(' ');\n        const pointCharCode = StringUtils.getCharCode('.');\n        const commaCharCode = StringUtils.getCharCode(',');\n        CHAR_MAP[MODE_UPPER][spaceCharCode] = 1;\n        const zUpperCharCode = StringUtils.getCharCode('Z');\n        const aUpperCharCode = StringUtils.getCharCode('A');\n        for (let c = aUpperCharCode; c <= zUpperCharCode; c++) {\n            CHAR_MAP[MODE_UPPER][c] = c - aUpperCharCode + 2;\n        }\n        CHAR_MAP[MODE_LOWER][spaceCharCode] = 1;\n        const zLowerCharCode = StringUtils.getCharCode('z');\n        const aLowerCharCode = StringUtils.getCharCode('a');\n        for (let c = aLowerCharCode; c <= zLowerCharCode; c++) {\n            CHAR_MAP[MODE_LOWER][c] = c - aLowerCharCode + 2;\n        }\n        CHAR_MAP[MODE_DIGIT][spaceCharCode] = 1;\n        const nineCharCode = StringUtils.getCharCode('9');\n        const zeroCharCode = StringUtils.getCharCode('0');\n        for (let c = zeroCharCode; c <= nineCharCode; c++) {\n            CHAR_MAP[MODE_DIGIT][c] = c - zeroCharCode + 2;\n        }\n        CHAR_MAP[MODE_DIGIT][commaCharCode] = 12;\n        CHAR_MAP[MODE_DIGIT][pointCharCode] = 13;\n        const mixedTable = [\n            '\\x00',\n            ' ',\n            '\\x01',\n            '\\x02',\n            '\\x03',\n            '\\x04',\n            '\\x05',\n            '\\x06',\n            '\\x07',\n            '\\b',\n            '\\t',\n            '\\n',\n            '\\x0b',\n            '\\f',\n            '\\r',\n            '\\x1b',\n            '\\x1c',\n            '\\x1d',\n            '\\x1e',\n            '\\x1f',\n            '@',\n            '\\\\',\n            '^',\n            '_',\n            '`',\n            '|',\n            '~',\n            '\\x7f'\n        ];\n        for (let i = 0; i < mixedTable.length; i++) {\n            CHAR_MAP[MODE_MIXED][StringUtils.getCharCode(mixedTable[i])] = i;\n        }\n        const punctTable = [\n            '\\x00',\n            '\\r',\n            '\\x00',\n            '\\x00',\n            '\\x00',\n            '\\x00',\n            '!',\n            '\\'',\n            '#',\n            '$',\n            '%',\n            '&',\n            '\\'',\n            '(',\n            ')',\n            '*',\n            '+',\n            ',',\n            '-',\n            '.',\n            '/',\n            ':',\n            ';',\n            '<',\n            '=',\n            '>',\n            '?',\n            '[',\n            ']',\n            '{',\n            '}'\n        ];\n        for (let i = 0; i < punctTable.length; i++) {\n            if (StringUtils.getCharCode(punctTable[i]) > 0) {\n                CHAR_MAP[MODE_PUNCT][StringUtils.getCharCode(punctTable[i])] = i;\n            }\n        }\n        return CHAR_MAP;\n    }\n    const CHAR_MAP = static_CHAR_MAP(Arrays.createInt32Array(5, 256));\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This produces nearly optimal encodings of text into the first-level of\n     * encoding used by Aztec code.\n     *\n     * It uses a dynamic algorithm.  For each prefix of the string, it determines\n     * a set of encodings that could lead to this prefix.  We repeatedly add a\n     * character and generate a new set of optimal encodings until we have read\n     * through the entire input.\n     *\n     * @author Frank Yellin\n     * @author Rustam Abdullaev\n     */\n    /*public final*/ class HighLevelEncoder {\n        constructor(text) {\n            this.text = text;\n        }\n        /**\n         * @return text represented by this encoder encoded as a {@link BitArray}\n         */\n        encode() {\n            const spaceCharCode = StringUtils.getCharCode(' ');\n            const lineBreakCharCode = StringUtils.getCharCode('\\n');\n            let states = Collections.singletonList(State.INITIAL_STATE);\n            for (let index = 0; index < this.text.length; index++) {\n                let pairCode;\n                let nextChar = index + 1 < this.text.length ? this.text[index + 1] : 0;\n                switch (this.text[index]) {\n                    case StringUtils.getCharCode('\\r'):\n                        pairCode = nextChar === lineBreakCharCode ? 2 : 0;\n                        break;\n                    case StringUtils.getCharCode('.'):\n                        pairCode = nextChar === spaceCharCode ? 3 : 0;\n                        break;\n                    case StringUtils.getCharCode(','):\n                        pairCode = nextChar === spaceCharCode ? 4 : 0;\n                        break;\n                    case StringUtils.getCharCode(':'):\n                        pairCode = nextChar === spaceCharCode ? 5 : 0;\n                        break;\n                    default:\n                        pairCode = 0;\n                }\n                if (pairCode > 0) {\n                    // We have one of the four special PUNCT pairs.  Treat them specially.\n                    // Get a new set of states for the two new characters.\n                    states = HighLevelEncoder.updateStateListForPair(states, index, pairCode);\n                    index++;\n                }\n                else {\n                    // Get a new set of states for the new character.\n                    states = this.updateStateListForChar(states, index);\n                }\n            }\n            // We are left with a set of states.  Find the shortest one.\n            const minState = Collections.min(states, (a, b) => {\n                return a.getBitCount() - b.getBitCount();\n            });\n            // Convert it to a bit array, and return.\n            return minState.toBitArray(this.text);\n        }\n        // We update a set of states for a new character by updating each state\n        // for the new character, merging the results, and then removing the\n        // non-optimal states.\n        updateStateListForChar(states, index) {\n            const result = [];\n            for (let state /*State*/ of states) {\n                this.updateStateForChar(state, index, result);\n            }\n            return HighLevelEncoder.simplifyStates(result);\n        }\n        // Return a set of states that represent the possible ways of updating this\n        // state for the next character.  The resulting set of states are added to\n        // the \"result\" list.\n        updateStateForChar(state, index, result) {\n            let ch = (this.text[index] & 0xff);\n            let charInCurrentTable = CHAR_MAP[state.getMode()][ch] > 0;\n            let stateNoBinary = null;\n            for (let mode /*int*/ = 0; mode <= MODE_PUNCT; mode++) {\n                let charInMode = CHAR_MAP[mode][ch];\n                if (charInMode > 0) {\n                    if (stateNoBinary == null) {\n                        // Only create stateNoBinary the first time it's required.\n                        stateNoBinary = state.endBinaryShift(index);\n                    }\n                    // Try generating the character by latching to its mode\n                    if (!charInCurrentTable ||\n                        mode === state.getMode() ||\n                        mode === MODE_DIGIT) {\n                        // If the character is in the current table, we don't want to latch to\n                        // any other mode except possibly digit (which uses only 4 bits).  Any\n                        // other latch would be equally successful *after* this character, and\n                        // so wouldn't save any bits.\n                        const latchState = stateNoBinary.latchAndAppend(mode, charInMode);\n                        result.push(latchState);\n                    }\n                    // Try generating the character by switching to its mode.\n                    if (!charInCurrentTable &&\n                        SHIFT_TABLE[state.getMode()][mode] >= 0) {\n                        // It never makes sense to temporarily shift to another mode if the\n                        // character exists in the current mode.  That can never save bits.\n                        const shiftState = stateNoBinary.shiftAndAppend(mode, charInMode);\n                        result.push(shiftState);\n                    }\n                }\n            }\n            if (state.getBinaryShiftByteCount() > 0 ||\n                CHAR_MAP[state.getMode()][ch] === 0) {\n                // It's never worthwhile to go into binary shift mode if you're not already\n                // in binary shift mode, and the character exists in your current mode.\n                // That can never save bits over just outputting the char in the current mode.\n                let binaryState = state.addBinaryShiftChar(index);\n                result.push(binaryState);\n            }\n        }\n        static updateStateListForPair(states, index, pairCode) {\n            const result = [];\n            for (let state /*State*/ of states) {\n                this.updateStateForPair(state, index, pairCode, result);\n            }\n            return this.simplifyStates(result);\n        }\n        static updateStateForPair(state, index, pairCode, result) {\n            let stateNoBinary = state.endBinaryShift(index);\n            // Possibility 1.  Latch to C.MODE_PUNCT, and then append this code\n            result.push(stateNoBinary.latchAndAppend(MODE_PUNCT, pairCode));\n            if (state.getMode() !== MODE_PUNCT) {\n                // Possibility 2.  Shift to C.MODE_PUNCT, and then append this code.\n                // Every state except C.MODE_PUNCT (handled above) can shift\n                result.push(stateNoBinary.shiftAndAppend(MODE_PUNCT, pairCode));\n            }\n            if (pairCode === 3 || pairCode === 4) {\n                // both characters are in DIGITS.  Sometimes better to just add two digits\n                let digitState = stateNoBinary\n                    .latchAndAppend(MODE_DIGIT, 16 - pairCode) // period or comma in DIGIT\n                    .latchAndAppend(MODE_DIGIT, 1); // space in DIGIT\n                result.push(digitState);\n            }\n            if (state.getBinaryShiftByteCount() > 0) {\n                // It only makes sense to do the characters as binary if we're already\n                // in binary mode.\n                let binaryState = state\n                    .addBinaryShiftChar(index)\n                    .addBinaryShiftChar(index + 1);\n                result.push(binaryState);\n            }\n        }\n        static simplifyStates(states) {\n            let result = [];\n            for (const newState of states) {\n                let add = true;\n                for (const oldState of result) {\n                    if (oldState.isBetterThanOrEqualTo(newState)) {\n                        add = false;\n                        break;\n                    }\n                    if (newState.isBetterThanOrEqualTo(oldState)) {\n                        // iterator.remove();\n                        result = result.filter(x => x !== oldState); // remove old state\n                    }\n                }\n                if (add) {\n                    result.push(newState);\n                }\n            }\n            return result;\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.aztec.encoder;\n    // import com.google.zxing.common.BitArray;\n    // import com.google.zxing.common.BitMatrix;\n    // import com.google.zxing.common.reedsolomon.GenericGF;\n    // import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;\n    /**\n     * Generates Aztec 2D barcodes.\n     *\n     * @author Rustam Abdullaev\n     */\n    /*public final*/ class Encoder$1 {\n        constructor() {\n        }\n        /**\n         * Encodes the given binary content as an Aztec symbol\n         *\n         * @param data input data string\n         * @return Aztec symbol matrix with metadata\n         */\n        static encodeBytes(data) {\n            return Encoder$1.encode(data, Encoder$1.DEFAULT_EC_PERCENT, Encoder$1.DEFAULT_AZTEC_LAYERS);\n        }\n        /**\n         * Encodes the given binary content as an Aztec symbol\n         *\n         * @param data input data string\n         * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,\n         *                      a minimum of 23% + 3 words is recommended)\n         * @param userSpecifiedLayers if non-zero, a user-specified value for the number of layers\n         * @return Aztec symbol matrix with metadata\n         */\n        static encode(data, minECCPercent, userSpecifiedLayers) {\n            // High-level encode\n            let bits = new HighLevelEncoder(data).encode();\n            // stuff bits and choose symbol size\n            let eccBits = Integer.truncDivision((bits.getSize() * minECCPercent), 100) + 11;\n            let totalSizeBits = bits.getSize() + eccBits;\n            let compact;\n            let layers;\n            let totalBitsInLayer;\n            let wordSize;\n            let stuffedBits;\n            if (userSpecifiedLayers !== Encoder$1.DEFAULT_AZTEC_LAYERS) {\n                compact = userSpecifiedLayers < 0;\n                layers = Math.abs(userSpecifiedLayers);\n                if (layers > (compact ? Encoder$1.MAX_NB_BITS_COMPACT : Encoder$1.MAX_NB_BITS)) {\n                    throw new IllegalArgumentException(StringUtils.format('Illegal value %s for layers', userSpecifiedLayers));\n                }\n                totalBitsInLayer = Encoder$1.totalBitsInLayer(layers, compact);\n                wordSize = Encoder$1.WORD_SIZE[layers];\n                let usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n                stuffedBits = Encoder$1.stuffBits(bits, wordSize);\n                if (stuffedBits.getSize() + eccBits > usableBitsInLayers) {\n                    throw new IllegalArgumentException('Data to large for user specified layer');\n                }\n                if (compact && stuffedBits.getSize() > wordSize * 64) {\n                    // Compact format only allows 64 data words, though C4 can hold more words than that\n                    throw new IllegalArgumentException('Data to large for user specified layer');\n                }\n            }\n            else {\n                wordSize = 0;\n                stuffedBits = null;\n                // We look at the possible table sizes in the order Compact1, Compact2, Compact3,\n                // Compact4, Normal4,...  Normal(i) for i < 4 isn't typically used since Compact(i+1)\n                // is the same size, but has more data.\n                for (let i /*int*/ = 0;; i++) {\n                    if (i > Encoder$1.MAX_NB_BITS) {\n                        throw new IllegalArgumentException('Data too large for an Aztec code');\n                    }\n                    compact = i <= 3;\n                    layers = compact ? i + 1 : i;\n                    totalBitsInLayer = Encoder$1.totalBitsInLayer(layers, compact);\n                    if (totalSizeBits > totalBitsInLayer) {\n                        continue;\n                    }\n                    // [Re]stuff the bits if this is the first opportunity, or if the\n                    // wordSize has changed\n                    if (stuffedBits == null || wordSize !== Encoder$1.WORD_SIZE[layers]) {\n                        wordSize = Encoder$1.WORD_SIZE[layers];\n                        stuffedBits = Encoder$1.stuffBits(bits, wordSize);\n                    }\n                    let usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n                    if (compact && stuffedBits.getSize() > wordSize * 64) {\n                        // Compact format only allows 64 data words, though C4 can hold more words than that\n                        continue;\n                    }\n                    if (stuffedBits.getSize() + eccBits <= usableBitsInLayers) {\n                        break;\n                    }\n                }\n            }\n            let messageBits = Encoder$1.generateCheckWords(stuffedBits, totalBitsInLayer, wordSize);\n            // generate mode message\n            let messageSizeInWords = stuffedBits.getSize() / wordSize;\n            let modeMessage = Encoder$1.generateModeMessage(compact, layers, messageSizeInWords);\n            // allocate symbol\n            let baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n            let alignmentMap = new Int32Array(baseMatrixSize);\n            let matrixSize;\n            if (compact) {\n                // no alignment marks in compact mode, alignmentMap is a no-op\n                matrixSize = baseMatrixSize;\n                for (let i /*int*/ = 0; i < alignmentMap.length; i++) {\n                    alignmentMap[i] = i;\n                }\n            }\n            else {\n                matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n                let origCenter = Integer.truncDivision(baseMatrixSize, 2);\n                let center = Integer.truncDivision(matrixSize, 2);\n                for (let i /*int*/ = 0; i < origCenter; i++) {\n                    let newOffset = i + Integer.truncDivision(i, 15);\n                    alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n                    alignmentMap[origCenter + i] = center + newOffset + 1;\n                }\n            }\n            let matrix = new BitMatrix(matrixSize);\n            // draw data bits\n            for (let i /*int*/ = 0, rowOffset = 0; i < layers; i++) {\n                let rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n                for (let j /*int*/ = 0; j < rowSize; j++) {\n                    let columnOffset = j * 2;\n                    for (let k /*int*/ = 0; k < 2; k++) {\n                        if (messageBits.get(rowOffset + columnOffset + k)) {\n                            matrix.set(alignmentMap[i * 2 + k], alignmentMap[i * 2 + j]);\n                        }\n                        if (messageBits.get(rowOffset + rowSize * 2 + columnOffset + k)) {\n                            matrix.set(alignmentMap[i * 2 + j], alignmentMap[baseMatrixSize - 1 - i * 2 - k]);\n                        }\n                        if (messageBits.get(rowOffset + rowSize * 4 + columnOffset + k)) {\n                            matrix.set(alignmentMap[baseMatrixSize - 1 - i * 2 - k], alignmentMap[baseMatrixSize - 1 - i * 2 - j]);\n                        }\n                        if (messageBits.get(rowOffset + rowSize * 6 + columnOffset + k)) {\n                            matrix.set(alignmentMap[baseMatrixSize - 1 - i * 2 - j], alignmentMap[i * 2 + k]);\n                        }\n                    }\n                }\n                rowOffset += rowSize * 8;\n            }\n            // draw mode message\n            Encoder$1.drawModeMessage(matrix, compact, matrixSize, modeMessage);\n            // draw alignment marks\n            if (compact) {\n                Encoder$1.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 5);\n            }\n            else {\n                Encoder$1.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 7);\n                for (let i /*int*/ = 0, j = 0; i < Integer.truncDivision(baseMatrixSize, 2) - 1; i += 15, j += 16) {\n                    for (let k /*int*/ = Integer.truncDivision(matrixSize, 2) & 1; k < matrixSize; k += 2) {\n                        matrix.set(Integer.truncDivision(matrixSize, 2) - j, k);\n                        matrix.set(Integer.truncDivision(matrixSize, 2) + j, k);\n                        matrix.set(k, Integer.truncDivision(matrixSize, 2) - j);\n                        matrix.set(k, Integer.truncDivision(matrixSize, 2) + j);\n                    }\n                }\n            }\n            let aztec = new AztecCode();\n            aztec.setCompact(compact);\n            aztec.setSize(matrixSize);\n            aztec.setLayers(layers);\n            aztec.setCodeWords(messageSizeInWords);\n            aztec.setMatrix(matrix);\n            return aztec;\n        }\n        static drawBullsEye(matrix, center, size) {\n            for (let i /*int*/ = 0; i < size; i += 2) {\n                for (let j /*int*/ = center - i; j <= center + i; j++) {\n                    matrix.set(j, center - i);\n                    matrix.set(j, center + i);\n                    matrix.set(center - i, j);\n                    matrix.set(center + i, j);\n                }\n            }\n            matrix.set(center - size, center - size);\n            matrix.set(center - size + 1, center - size);\n            matrix.set(center - size, center - size + 1);\n            matrix.set(center + size, center - size);\n            matrix.set(center + size, center - size + 1);\n            matrix.set(center + size, center + size - 1);\n        }\n        static generateModeMessage(compact, layers, messageSizeInWords) {\n            let modeMessage = new BitArray();\n            if (compact) {\n                modeMessage.appendBits(layers - 1, 2);\n                modeMessage.appendBits(messageSizeInWords - 1, 6);\n                modeMessage = Encoder$1.generateCheckWords(modeMessage, 28, 4);\n            }\n            else {\n                modeMessage.appendBits(layers - 1, 5);\n                modeMessage.appendBits(messageSizeInWords - 1, 11);\n                modeMessage = Encoder$1.generateCheckWords(modeMessage, 40, 4);\n            }\n            return modeMessage;\n        }\n        static drawModeMessage(matrix, compact, matrixSize, modeMessage) {\n            let center = Integer.truncDivision(matrixSize, 2);\n            if (compact) {\n                for (let i /*int*/ = 0; i < 7; i++) {\n                    let offset = center - 3 + i;\n                    if (modeMessage.get(i)) {\n                        matrix.set(offset, center - 5);\n                    }\n                    if (modeMessage.get(i + 7)) {\n                        matrix.set(center + 5, offset);\n                    }\n                    if (modeMessage.get(20 - i)) {\n                        matrix.set(offset, center + 5);\n                    }\n                    if (modeMessage.get(27 - i)) {\n                        matrix.set(center - 5, offset);\n                    }\n                }\n            }\n            else {\n                for (let i /*int*/ = 0; i < 10; i++) {\n                    let offset = center - 5 + i + Integer.truncDivision(i, 5);\n                    if (modeMessage.get(i)) {\n                        matrix.set(offset, center - 7);\n                    }\n                    if (modeMessage.get(i + 10)) {\n                        matrix.set(center + 7, offset);\n                    }\n                    if (modeMessage.get(29 - i)) {\n                        matrix.set(offset, center + 7);\n                    }\n                    if (modeMessage.get(39 - i)) {\n                        matrix.set(center - 7, offset);\n                    }\n                }\n            }\n        }\n        static generateCheckWords(bitArray, totalBits, wordSize) {\n            // bitArray is guaranteed to be a multiple of the wordSize, so no padding needed\n            let messageSizeInWords = bitArray.getSize() / wordSize;\n            let rs = new ReedSolomonEncoder(Encoder$1.getGF(wordSize));\n            let totalWords = Integer.truncDivision(totalBits, wordSize);\n            let messageWords = Encoder$1.bitsToWords(bitArray, wordSize, totalWords);\n            rs.encode(messageWords, totalWords - messageSizeInWords);\n            let startPad = totalBits % wordSize;\n            let messageBits = new BitArray();\n            messageBits.appendBits(0, startPad);\n            for (const messageWord /*: int*/ of Array.from(messageWords)) {\n                messageBits.appendBits(messageWord, wordSize);\n            }\n            return messageBits;\n        }\n        static bitsToWords(stuffedBits, wordSize, totalWords) {\n            let message = new Int32Array(totalWords);\n            let i;\n            let n;\n            for (i = 0, n = stuffedBits.getSize() / wordSize; i < n; i++) {\n                let value = 0;\n                for (let j /*int*/ = 0; j < wordSize; j++) {\n                    value |= stuffedBits.get(i * wordSize + j) ? (1 << wordSize - j - 1) : 0;\n                }\n                message[i] = value;\n            }\n            return message;\n        }\n        static getGF(wordSize) {\n            switch (wordSize) {\n                case 4:\n                    return GenericGF.AZTEC_PARAM;\n                case 6:\n                    return GenericGF.AZTEC_DATA_6;\n                case 8:\n                    return GenericGF.AZTEC_DATA_8;\n                case 10:\n                    return GenericGF.AZTEC_DATA_10;\n                case 12:\n                    return GenericGF.AZTEC_DATA_12;\n                default:\n                    throw new IllegalArgumentException('Unsupported word size ' + wordSize);\n            }\n        }\n        static stuffBits(bits, wordSize) {\n            let out = new BitArray();\n            let n = bits.getSize();\n            let mask = (1 << wordSize) - 2;\n            for (let i /*int*/ = 0; i < n; i += wordSize) {\n                let word = 0;\n                for (let j /*int*/ = 0; j < wordSize; j++) {\n                    if (i + j >= n || bits.get(i + j)) {\n                        word |= 1 << (wordSize - 1 - j);\n                    }\n                }\n                if ((word & mask) === mask) {\n                    out.appendBits(word & mask, wordSize);\n                    i--;\n                }\n                else if ((word & mask) === 0) {\n                    out.appendBits(word | 1, wordSize);\n                    i--;\n                }\n                else {\n                    out.appendBits(word, wordSize);\n                }\n            }\n            return out;\n        }\n        static totalBitsInLayer(layers, compact) {\n            return ((compact ? 88 : 112) + 16 * layers) * layers;\n        }\n    }\n    Encoder$1.DEFAULT_EC_PERCENT = 33; // default minimal percentage of error check words\n    Encoder$1.DEFAULT_AZTEC_LAYERS = 0;\n    Encoder$1.MAX_NB_BITS = 32;\n    Encoder$1.MAX_NB_BITS_COMPACT = 4;\n    Encoder$1.WORD_SIZE = Int32Array.from([\n        4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n        12, 12, 12, 12, 12, 12, 12, 12, 12, 12\n    ]);\n\n    /*\n    * Copyright 2013 ZXing authors\n    *\n    * Licensed under the Apache License, Version 2.0 (the \"License\");\n    * you may not use this file except in compliance with the License.\n    * You may obtain a copy of the License at\n    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * Renders an Aztec code as a {@link BitMatrix}.\n     */\n    /*public final*/ class AztecWriter {\n        // @Override\n        encode(contents, format, width, height) {\n            return this.encodeWithHints(contents, format, width, height, null);\n        }\n        // @Override\n        encodeWithHints(contents, format, width, height, hints) {\n            let charset = StandardCharsets.ISO_8859_1;\n            let eccPercent = Encoder$1.DEFAULT_EC_PERCENT;\n            let layers = Encoder$1.DEFAULT_AZTEC_LAYERS;\n            if (hints != null) {\n                if (hints.has(EncodeHintType$1.CHARACTER_SET)) {\n                    charset = Charset.forName(hints.get(EncodeHintType$1.CHARACTER_SET).toString());\n                }\n                if (hints.has(EncodeHintType$1.ERROR_CORRECTION)) {\n                    eccPercent = Integer.parseInt(hints.get(EncodeHintType$1.ERROR_CORRECTION).toString());\n                }\n                if (hints.has(EncodeHintType$1.AZTEC_LAYERS)) {\n                    layers = Integer.parseInt(hints.get(EncodeHintType$1.AZTEC_LAYERS).toString());\n                }\n            }\n            return AztecWriter.encodeLayers(contents, format, width, height, charset, eccPercent, layers);\n        }\n        static encodeLayers(contents, format, width, height, charset, eccPercent, layers) {\n            if (format !== BarcodeFormat$1.AZTEC) {\n                throw new IllegalArgumentException('Can only encode AZTEC, but got ' + format);\n            }\n            let aztec = Encoder$1.encode(StringUtils.getBytes(contents, charset), eccPercent, layers);\n            return AztecWriter.renderResult(aztec, width, height);\n        }\n        static renderResult(code, width, height) {\n            let input = code.getMatrix();\n            if (input == null) {\n                throw new IllegalStateException();\n            }\n            let inputWidth = input.getWidth();\n            let inputHeight = input.getHeight();\n            let outputWidth = Math.max(width, inputWidth);\n            let outputHeight = Math.max(height, inputHeight);\n            let multiple = Math.min(outputWidth / inputWidth, outputHeight / inputHeight);\n            let leftPadding = (outputWidth - (inputWidth * multiple)) / 2;\n            let topPadding = (outputHeight - (inputHeight * multiple)) / 2;\n            let output = new BitMatrix(outputWidth, outputHeight);\n            for (let inputY /*int*/ = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n                // Write the contents of this row of the barcode\n                for (let inputX /*int*/ = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                    if (input.get(inputX, inputY)) {\n                        output.setRegion(outputX, outputY, multiple, multiple);\n                    }\n                }\n            }\n            return output;\n        }\n    }\n\n    exports.AbstractExpandedDecoder = AbstractExpandedDecoder;\n    exports.ArgumentException = ArgumentException;\n    exports.ArithmeticException = ArithmeticException;\n    exports.AztecCode = AztecCode;\n    exports.AztecCodeReader = AztecReader;\n    exports.AztecCodeWriter = AztecWriter;\n    exports.AztecDecoder = Decoder;\n    exports.AztecDetector = Detector;\n    exports.AztecDetectorResult = AztecDetectorResult;\n    exports.AztecEncoder = Encoder$1;\n    exports.AztecHighLevelEncoder = HighLevelEncoder;\n    exports.AztecPoint = Point;\n    exports.BarcodeFormat = BarcodeFormat$1;\n    exports.Binarizer = Binarizer;\n    exports.BinaryBitmap = BinaryBitmap;\n    exports.BitArray = BitArray;\n    exports.BitMatrix = BitMatrix;\n    exports.BitSource = BitSource;\n    exports.BrowserAztecCodeReader = BrowserAztecCodeReader;\n    exports.BrowserBarcodeReader = BrowserBarcodeReader;\n    exports.BrowserCodeReader = BrowserCodeReader;\n    exports.BrowserDatamatrixCodeReader = BrowserDatamatrixCodeReader;\n    exports.BrowserMultiFormatReader = BrowserMultiFormatReader;\n    exports.BrowserPDF417Reader = BrowserPDF417Reader;\n    exports.BrowserQRCodeReader = BrowserQRCodeReader;\n    exports.BrowserQRCodeSvgWriter = BrowserQRCodeSvgWriter;\n    exports.CharacterSetECI = CharacterSetECI;\n    exports.ChecksumException = ChecksumException;\n    exports.Code128Reader = Code128Reader;\n    exports.Code39Reader = Code39Reader;\n    exports.DataMatrixDecodedBitStreamParser = DecodedBitStreamParser;\n    exports.DataMatrixReader = DataMatrixReader;\n    exports.DecodeHintType = DecodeHintType$1;\n    exports.DecoderResult = DecoderResult;\n    exports.DefaultGridSampler = DefaultGridSampler;\n    exports.DetectorResult = DetectorResult;\n    exports.EAN13Reader = EAN13Reader;\n    exports.EncodeHintType = EncodeHintType$1;\n    exports.Exception = Exception;\n    exports.FormatException = FormatException;\n    exports.GenericGF = GenericGF;\n    exports.GenericGFPoly = GenericGFPoly;\n    exports.GlobalHistogramBinarizer = GlobalHistogramBinarizer;\n    exports.GridSampler = GridSampler;\n    exports.GridSamplerInstance = GridSamplerInstance;\n    exports.HTMLCanvasElementLuminanceSource = HTMLCanvasElementLuminanceSource;\n    exports.HybridBinarizer = HybridBinarizer;\n    exports.ITFReader = ITFReader;\n    exports.IllegalArgumentException = IllegalArgumentException;\n    exports.IllegalStateException = IllegalStateException;\n    exports.InvertedLuminanceSource = InvertedLuminanceSource;\n    exports.LuminanceSource = LuminanceSource;\n    exports.MathUtils = MathUtils;\n    exports.MultiFormatOneDReader = MultiFormatOneDReader;\n    exports.MultiFormatReader = MultiFormatReader;\n    exports.MultiFormatWriter = MultiFormatWriter;\n    exports.NotFoundException = NotFoundException;\n    exports.OneDReader = OneDReader;\n    exports.PDF417DecodedBitStreamParser = DecodedBitStreamParser$2;\n    exports.PDF417DecoderErrorCorrection = ErrorCorrection;\n    exports.PDF417Reader = PDF417Reader;\n    exports.PDF417ResultMetadata = PDF417ResultMetadata;\n    exports.PerspectiveTransform = PerspectiveTransform;\n    exports.PlanarYUVLuminanceSource = PlanarYUVLuminanceSource;\n    exports.QRCodeByteMatrix = ByteMatrix;\n    exports.QRCodeDataMask = DataMask;\n    exports.QRCodeDecodedBitStreamParser = DecodedBitStreamParser$1;\n    exports.QRCodeDecoderErrorCorrectionLevel = ErrorCorrectionLevel;\n    exports.QRCodeDecoderFormatInformation = FormatInformation;\n    exports.QRCodeEncoder = Encoder;\n    exports.QRCodeEncoderQRCode = QRCode;\n    exports.QRCodeMaskUtil = MaskUtil;\n    exports.QRCodeMatrixUtil = MatrixUtil;\n    exports.QRCodeMode = Mode$1;\n    exports.QRCodeReader = QRCodeReader;\n    exports.QRCodeVersion = Version$1;\n    exports.QRCodeWriter = QRCodeWriter;\n    exports.RGBLuminanceSource = RGBLuminanceSource;\n    exports.RSS14Reader = RSS14Reader;\n    exports.RSSExpandedReader = RSSExpandedReader;\n    exports.ReaderException = ReaderException;\n    exports.ReedSolomonDecoder = ReedSolomonDecoder;\n    exports.ReedSolomonEncoder = ReedSolomonEncoder;\n    exports.ReedSolomonException = ReedSolomonException;\n    exports.Result = Result;\n    exports.ResultMetadataType = ResultMetadataType$1;\n    exports.ResultPoint = ResultPoint;\n    exports.StringUtils = StringUtils;\n    exports.UnsupportedOperationException = UnsupportedOperationException;\n    exports.VideoInputDevice = VideoInputDevice;\n    exports.WhiteRectangleDetector = WhiteRectangleDetector;\n    exports.WriterException = WriterException;\n    exports.ZXingArrays = Arrays;\n    exports.ZXingCharset = Charset;\n    exports.ZXingInteger = Integer;\n    exports.ZXingStandardCharsets = StandardCharsets;\n    exports.ZXingStringBuilder = StringBuilder;\n    exports.ZXingStringEncoding = StringEncoding;\n    exports.ZXingSystem = System;\n    exports.createAbstractExpandedDecoder = createDecoder;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "// Generated by CoffeeScript 1.12.6\n(function() {\n  var AnimatedText, AnimatedTextFactory, Bar, BaseDonut, BaseGauge, Donut, Gauge, GaugePointer, TextRenderer, ValueUpdater, addCommas, cutHex, formatNumber, mergeObjects, secondsToString,\n    slice = [].slice,\n    hasProp = {}.hasOwnProperty,\n    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n  (function() {\n    var browserRequestAnimationFrame, isCancelled, j, lastId, len, vendor, vendors;\n    vendors = ['ms', 'moz', 'webkit', 'o'];\n    for (j = 0, len = vendors.length; j < len; j++) {\n      vendor = vendors[j];\n      if (window.requestAnimationFrame) {\n        break;\n      }\n      window.requestAnimationFrame = window[vendor + 'RequestAnimationFrame'];\n      window.cancelAnimationFrame = window[vendor + 'CancelAnimationFrame'] || window[vendor + 'CancelRequestAnimationFrame'];\n    }\n    browserRequestAnimationFrame = null;\n    lastId = 0;\n    isCancelled = {};\n    if (!requestAnimationFrame) {\n      window.requestAnimationFrame = function(callback, element) {\n        var currTime, id, lastTime, timeToCall;\n        currTime = new Date().getTime();\n        timeToCall = Math.max(0, 16 - (currTime - lastTime));\n        id = window.setTimeout(function() {\n          return callback(currTime + timeToCall);\n        }, timeToCall);\n        lastTime = currTime + timeToCall;\n        return id;\n      };\n      return window.cancelAnimationFrame = function(id) {\n        return clearTimeout(id);\n      };\n    } else if (!window.cancelAnimationFrame) {\n      browserRequestAnimationFrame = window.requestAnimationFrame;\n      window.requestAnimationFrame = function(callback, element) {\n        var myId;\n        myId = ++lastId;\n        browserRequestAnimationFrame(function() {\n          if (!isCancelled[myId]) {\n            return callback();\n          }\n        }, element);\n        return myId;\n      };\n      return window.cancelAnimationFrame = function(id) {\n        return isCancelled[id] = true;\n      };\n    }\n  })();\n\n  String.prototype.hashCode = function() {\n    var char, hash, i, j, ref;\n    hash = 0;\n    if (this.length === 0) {\n      return hash;\n    }\n    for (i = j = 0, ref = this.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {\n      char = this.charCodeAt(i);\n      hash = ((hash << 5) - hash) + char;\n      hash = hash & hash;\n    }\n    return hash;\n  };\n\n  secondsToString = function(sec) {\n    var hr, min;\n    hr = Math.floor(sec / 3600);\n    min = Math.floor((sec - (hr * 3600)) / 60);\n    sec -= (hr * 3600) + (min * 60);\n    sec += '';\n    min += '';\n    while (min.length < 2) {\n      min = '0' + min;\n    }\n    while (sec.length < 2) {\n      sec = '0' + sec;\n    }\n    hr = hr ? hr + ':' : '';\n    return hr + min + ':' + sec;\n  };\n\n  formatNumber = function() {\n    var digits, num, value;\n    num = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n    value = num[0];\n    digits = 0 || num[1];\n    return addCommas(value.toFixed(digits));\n  };\n\n  mergeObjects = function(obj1, obj2) {\n    var key, out, val;\n    out = {};\n    for (key in obj1) {\n      if (!hasProp.call(obj1, key)) continue;\n      val = obj1[key];\n      out[key] = val;\n    }\n    for (key in obj2) {\n      if (!hasProp.call(obj2, key)) continue;\n      val = obj2[key];\n      out[key] = val;\n    }\n    return out;\n  };\n\n  addCommas = function(nStr) {\n    var rgx, x, x1, x2;\n    nStr += '';\n    x = nStr.split('.');\n    x1 = x[0];\n    x2 = '';\n    if (x.length > 1) {\n      x2 = '.' + x[1];\n    }\n    rgx = /(\\d+)(\\d{3})/;\n    while (rgx.test(x1)) {\n      x1 = x1.replace(rgx, '$1' + ',' + '$2');\n    }\n    return x1 + x2;\n  };\n\n  cutHex = function(nStr) {\n    if (nStr.charAt(0) === \"#\") {\n      return nStr.substring(1, 7);\n    }\n    return nStr;\n  };\n\n  ValueUpdater = (function() {\n    ValueUpdater.prototype.animationSpeed = 32;\n\n    function ValueUpdater(addToAnimationQueue, clear) {\n      if (addToAnimationQueue == null) {\n        addToAnimationQueue = true;\n      }\n      this.clear = clear != null ? clear : true;\n      if (addToAnimationQueue) {\n        AnimationUpdater.add(this);\n      }\n    }\n\n    ValueUpdater.prototype.update = function(force) {\n      var diff;\n      if (force == null) {\n        force = false;\n      }\n      if (force || this.displayedValue !== this.value) {\n        if (this.ctx && this.clear) {\n          this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n        }\n        diff = this.value - this.displayedValue;\n        if (Math.abs(diff / this.animationSpeed) <= 0.001) {\n          this.displayedValue = this.value;\n        } else {\n          this.displayedValue = this.displayedValue + diff / this.animationSpeed;\n        }\n        this.render();\n        return true;\n      }\n      return false;\n    };\n\n    return ValueUpdater;\n\n  })();\n\n  BaseGauge = (function(superClass) {\n    extend(BaseGauge, superClass);\n\n    function BaseGauge() {\n      return BaseGauge.__super__.constructor.apply(this, arguments);\n    }\n\n    BaseGauge.prototype.displayScale = 1;\n\n    BaseGauge.prototype.textDisplayScale = 1;\n\n    BaseGauge.prototype.firstInit = 1;\n\n    BaseGauge.prototype.setTextField = function(textField, fractionDigits) {\n      return this.textField = textField instanceof TextRenderer ? textField : new TextRenderer(textField, fractionDigits);\n    };\n\n    BaseGauge.prototype.setMinValue = function(minValue, updateStartValue) {\n      var gauge, j, len, ref, results;\n      this.minValue = minValue;\n      if (updateStartValue == null) {\n        updateStartValue = true;\n      }\n      if (updateStartValue) {\n        this.displayedValue = this.minValue;\n        ref = this.gp || [];\n        results = [];\n        for (j = 0, len = ref.length; j < len; j++) {\n          gauge = ref[j];\n          results.push(gauge.displayedValue = this.minValue);\n        }\n        return results;\n      }\n    };\n\n    BaseGauge.prototype.setOptions = function(options) {\n      if (options == null) {\n        options = null;\n      }\n      this.options = mergeObjects(this.options, options);\n      if (this.textField) {\n        this.textField.el.style.fontSize = options.fontSize + 'px';\n      }\n      if (this.options.angle > .5) {\n        this.options.angle = .5;\n      }\n      this.configDisplayScale();\n      if (this.options.responsive) {\n        this.doresize = function() {\n          this.configDisplayScale();\n          return this.update(true);\n        };\n        window.addEventListener('resize', (function(_this) {\n          return function(e) {\n            return _this.doresize(e);\n          };\n        })(this));\n      }\n      return this;\n    };\n\n    BaseGauge.prototype.configDisplayScale = function() {\n      var backingStorePixelRatio, devicePixelRatio, height, prevDisplayScale, width;\n      prevDisplayScale = this.displayScale;\n      if (this.options.displayScaleOverride > 0) {\n        this.displayScale = this.options.displayScaleOverride;\n      } else if (this.options.highDpiSupport === false) {\n        delete this.displayScale;\n      } else {\n        devicePixelRatio = window.devicePixelRatio || 1;\n        backingStorePixelRatio = this.ctx.webkitBackingStorePixelRatio || this.ctx.mozBackingStorePixelRatiox || this.ctx.msBackingStorePixelRatio || this.ctx.oBackingStorePixelRatio || this.ctx.backingStorePixelRatio || 1;\n        this.displayScale = devicePixelRatio / backingStorePixelRatio;\n      }\n      if (this.options.responsive || this.displayScale !== prevDisplayScale) {\n        width = this.canvas.G__width || this.canvas.width;\n        height = this.canvas.G__height || this.canvas.height;\n        if (!this.firstInit) {\n          if (this.canvas.parentNode.clientWidth !== width) {\n            width = this.canvas.parentNode.clientWidth;\n          }\n        }\n        if (this.options.autoWidthToHeightRatio) {\n          height = this.options.autoWidthToHeightRatio * width;\n        }\n        this.canvas.width = width * this.displayScale;\n        this.canvas.height = height * this.displayScale;\n        this.canvas.style.width = width + \"px\";\n        this.canvas.style.height = height + \"px\";\n        this.canvas.G__width = width;\n        this.canvas.G__height = height;\n        if (this.options.responsive) {\n          this.textDisplayScale = width / 600;\n        }\n        this.firstInit = 0;\n      }\n      return this;\n    };\n\n    BaseGauge.prototype.parseValue = function(value) {\n      value = parseFloat(value) || Number(value);\n      if (isFinite(value)) {\n        return value;\n      } else {\n        return 0;\n      }\n    };\n\n    return BaseGauge;\n\n  })(ValueUpdater);\n\n  TextRenderer = (function() {\n    function TextRenderer(el, fractionDigits1) {\n      this.el = el;\n      this.fractionDigits = fractionDigits1;\n    }\n\n    TextRenderer.prototype.render = function(gauge) {\n      return this.el.innerHTML = formatNumber(gauge.displayedValue, this.fractionDigits);\n    };\n\n    return TextRenderer;\n\n  })();\n\n  AnimatedText = (function(superClass) {\n    extend(AnimatedText, superClass);\n\n    AnimatedText.prototype.displayedValue = 0;\n\n    AnimatedText.prototype.value = 0;\n\n    AnimatedText.prototype.setVal = function(value) {\n      return this.value = 1 * value;\n    };\n\n    function AnimatedText(elem1, text) {\n      this.elem = elem1;\n      this.text = text != null ? text : false;\n      this.value = 1 * this.elem.innerHTML;\n      if (this.text) {\n        this.value = 0;\n      }\n    }\n\n    AnimatedText.prototype.render = function() {\n      var textVal;\n      if (this.text) {\n        textVal = secondsToString(this.displayedValue.toFixed(0));\n      } else {\n        textVal = addCommas(formatNumber(this.displayedValue));\n      }\n      return this.elem.innerHTML = textVal;\n    };\n\n    return AnimatedText;\n\n  })(ValueUpdater);\n\n  AnimatedTextFactory = {\n    create: function(objList) {\n      var elem, j, len, out;\n      out = [];\n      for (j = 0, len = objList.length; j < len; j++) {\n        elem = objList[j];\n        out.push(new AnimatedText(elem));\n      }\n      return out;\n    }\n  };\n\n  GaugePointer = (function(superClass) {\n    extend(GaugePointer, superClass);\n\n    GaugePointer.prototype.displayedValue = 0;\n\n    GaugePointer.prototype.value = 0;\n\n    GaugePointer.prototype.options = {\n      strokeWidth: 0.035,\n      length: 0.1,\n      color: \"#000000\"\n    };\n\n    function GaugePointer(gauge1) {\n      this.gauge = gauge1;\n      this.ctx = this.gauge.ctx;\n      this.canvas = this.gauge.canvas;\n      GaugePointer.__super__.constructor.call(this, false, false);\n      this.setOptions();\n    }\n\n    GaugePointer.prototype.setOptions = function(options) {\n      if (options == null) {\n        options = null;\n      }\n      this.options = mergeObjects(this.options, options);\n      this.length = 2 * this.gauge.radius * this.gauge.options.radiusScale * this.options.length;\n      this.strokeWidth = this.canvas.height * this.options.strokeWidth;\n      this.maxValue = this.gauge.maxValue;\n      this.minValue = this.gauge.minValue;\n      this.animationSpeed = this.gauge.animationSpeed;\n      return this.options.angle = this.gauge.options.angle;\n    };\n\n    GaugePointer.prototype.render = function() {\n      var angle, endX, endY, img, imgX, imgY, startX, startY, x, y;\n      if (this.gauge.options.responsive) {\n        this.length = 2 * this.gauge.radius * this.gauge.options.radiusScale * this.options.length;\n        this.strokeWidth = this.canvas.height * this.options.strokeWidth;\n      }\n      angle = this.gauge.getAngle.call(this, this.displayedValue);\n      x = Math.round(this.length * Math.cos(angle));\n      y = Math.round(this.length * Math.sin(angle));\n      startX = Math.round(this.strokeWidth * Math.cos(angle - Math.PI / 2));\n      startY = Math.round(this.strokeWidth * Math.sin(angle - Math.PI / 2));\n      endX = Math.round(this.strokeWidth * Math.cos(angle + Math.PI / 2));\n      endY = Math.round(this.strokeWidth * Math.sin(angle + Math.PI / 2));\n      this.ctx.fillStyle = this.options.color;\n      this.ctx.beginPath();\n      this.ctx.arc(0, 0, this.strokeWidth, 0, Math.PI * 2, true);\n      this.ctx.fill();\n      this.ctx.beginPath();\n      this.ctx.moveTo(startX, startY);\n      this.ctx.lineTo(x, y);\n      this.ctx.lineTo(endX, endY);\n      this.ctx.fill();\n      if (this.options.iconPath) {\n        img = new Image();\n        img.src = this.options.iconPath;\n        imgX = Math.round(img.width * this.options.iconScale);\n        imgY = Math.round(img.height * this.options.iconScale);\n        this.ctx.save();\n        this.ctx.translate(x, y);\n        this.ctx.rotate(angle);\n        this.ctx.drawImage(img, -imgX / 2, -imgY / 2, imgX, imgY);\n        return this.ctx.restore();\n      }\n    };\n\n    return GaugePointer;\n\n  })(ValueUpdater);\n\n  Bar = (function() {\n    function Bar(elem1) {\n      this.elem = elem1;\n    }\n\n    Bar.prototype.updateValues = function(arrValues) {\n      this.value = arrValues[0];\n      this.maxValue = arrValues[1];\n      this.avgValue = arrValues[2];\n      return this.render();\n    };\n\n    Bar.prototype.render = function() {\n      var avgPercent, valPercent;\n      if (this.textField) {\n        this.textField.text(formatNumber(this.value));\n      }\n      if (this.maxValue === 0) {\n        this.maxValue = this.avgValue * 2;\n      }\n      valPercent = (this.value / this.maxValue) * 100;\n      avgPercent = (this.avgValue / this.maxValue) * 100;\n      $(\".bar-value\", this.elem).css({\n        \"width\": valPercent + \"%\"\n      });\n      return $(\".typical-value\", this.elem).css({\n        \"width\": avgPercent + \"%\"\n      });\n    };\n\n    return Bar;\n\n  })();\n\n  Gauge = (function(superClass) {\n    extend(Gauge, superClass);\n\n    Gauge.prototype.elem = null;\n\n    Gauge.prototype.value = [20];\n\n    Gauge.prototype.maxValue = 80;\n\n    Gauge.prototype.minValue = 0;\n\n    Gauge.prototype.displayedAngle = 0;\n\n    Gauge.prototype.displayedValue = 0;\n\n    Gauge.prototype.lineWidth = 40;\n\n    Gauge.prototype.percentColors = null;\n\n    Gauge.prototype.options = {\n      colorStart: \"#6fadcf\",\n      colorStop: void 0,\n      gradientType: 0,\n      strokeColor: \"#e0e0e0\",\n      pointer: {\n        length: 0.8,\n        strokeWidth: 0.035,\n        iconScale: 1.0\n      },\n      angle: 0.15,\n      lineWidth: 0.44,\n      radiusScale: 1.0,\n      fontSize: 40,\n      limitMax: false,\n      limitMin: false,\n      paddingTop: 0.1,\n      paddingBottom: 0.1\n    };\n\n    function Gauge(canvas) {\n      var h, w;\n      this.canvas = canvas;\n      Gauge.__super__.constructor.call(this);\n      this.percentColors = null;\n      this.forceUpdate = true;\n      if (typeof G_vmlCanvasManager !== 'undefined') {\n        this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);\n      }\n      this.ctx = this.canvas.getContext('2d');\n      this.ctx.imageSmoothingEnabled = true;\n      h = this.canvas.clientHeight;\n      w = this.canvas.clientWidth;\n      this.canvas.height = h;\n      this.canvas.width = w;\n      this.gp = [new GaugePointer(this)];\n      this.setOptions();\n      this.render();\n    }\n\n    Gauge.prototype.setOptions = function(options) {\n      var gauge, j, len, phi, ref;\n      if (options == null) {\n        options = null;\n      }\n      if (options && options.responsive) {\n        this.canvas.G__width = this.canvas.parentNode.clientWidth;\n        this.canvas.G__height = Math.min(this.canvas.parentNode.clientHeight, this.canvas.G__width / 2);\n      }\n      Gauge.__super__.setOptions.call(this, options);\n      this.configPercentColors();\n      this.extraPadding = 0;\n      if (this.options.angle < 0) {\n        phi = Math.PI * (1 + this.options.angle);\n        this.extraPadding = Math.sin(phi);\n      }\n      this.availableHeight = this.canvas.height * (1 - this.options.paddingTop - this.options.paddingBottom);\n      this.lineWidth = this.availableHeight * this.options.lineWidth;\n      this.radius = (this.availableHeight - this.lineWidth / 2) / (1.0 + this.extraPadding);\n      this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n      ref = this.gp;\n      for (j = 0, len = ref.length; j < len; j++) {\n        gauge = ref[j];\n        gauge.setOptions(this.options.pointer);\n        gauge.render();\n      }\n      return this;\n    };\n\n    Gauge.prototype.configPercentColors = function() {\n      var bval, gval, i, j, ref, results, rval;\n      this.percentColors = null;\n      if (this.options.percentColors !== void 0) {\n        this.percentColors = new Array();\n        results = [];\n        for (i = j = 0, ref = this.options.percentColors.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {\n          rval = parseInt((cutHex(this.options.percentColors[i][1])).substring(0, 2), 16);\n          gval = parseInt((cutHex(this.options.percentColors[i][1])).substring(2, 4), 16);\n          bval = parseInt((cutHex(this.options.percentColors[i][1])).substring(4, 6), 16);\n          results.push(this.percentColors[i] = {\n            pct: this.options.percentColors[i][0],\n            color: {\n              r: rval,\n              g: gval,\n              b: bval\n            }\n          });\n        }\n        return results;\n      }\n    };\n\n    Gauge.prototype.set = function(value) {\n      var gp, i, j, k, l, len, ref, ref1, val;\n      if (!(value instanceof Array)) {\n        value = [value];\n      }\n      for (i = j = 0, ref = value.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {\n        value[i] = this.parseValue(value[i]);\n      }\n      if (value.length > this.gp.length) {\n        for (i = k = 0, ref1 = value.length - this.gp.length; 0 <= ref1 ? k < ref1 : k > ref1; i = 0 <= ref1 ? ++k : --k) {\n          gp = new GaugePointer(this);\n          gp.setOptions(this.options.pointer);\n          this.gp.push(gp);\n        }\n      } else if (value.length < this.gp.length) {\n        this.gp = this.gp.slice(this.gp.length - value.length);\n      }\n      i = 0;\n      for (l = 0, len = value.length; l < len; l++) {\n        val = value[l];\n        if (val > this.maxValue) {\n          if (this.options.limitMax) {\n            val = this.maxValue;\n          } else {\n            this.maxValue = val + 1;\n          }\n        } else if (val < this.minValue) {\n          if (this.options.limitMin) {\n            val = this.minValue;\n          } else {\n            this.minValue = val - 1;\n          }\n        }\n        this.gp[i].value = val;\n        this.gp[i++].setOptions({\n          minValue: this.minValue,\n          maxValue: this.maxValue,\n          angle: this.options.angle\n        });\n      }\n      this.value = Math.max(Math.min(value[value.length - 1], this.maxValue), this.minValue);\n      AnimationUpdater.run(this.forceUpdate);\n      return this.forceUpdate = false;\n    };\n\n    Gauge.prototype.getAngle = function(value) {\n      return (1 + this.options.angle) * Math.PI + ((value - this.minValue) / (this.maxValue - this.minValue)) * (1 - this.options.angle * 2) * Math.PI;\n    };\n\n    Gauge.prototype.getColorForPercentage = function(pct, grad) {\n      var color, endColor, i, j, rangePct, ref, startColor;\n      if (pct === 0) {\n        color = this.percentColors[0].color;\n      } else {\n        color = this.percentColors[this.percentColors.length - 1].color;\n        for (i = j = 0, ref = this.percentColors.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {\n          if (pct <= this.percentColors[i].pct) {\n            if (grad === true) {\n              startColor = this.percentColors[i - 1] || this.percentColors[0];\n              endColor = this.percentColors[i];\n              rangePct = (pct - startColor.pct) / (endColor.pct - startColor.pct);\n              color = {\n                r: Math.floor(startColor.color.r * (1 - rangePct) + endColor.color.r * rangePct),\n                g: Math.floor(startColor.color.g * (1 - rangePct) + endColor.color.g * rangePct),\n                b: Math.floor(startColor.color.b * (1 - rangePct) + endColor.color.b * rangePct)\n              };\n            } else {\n              color = this.percentColors[i].color;\n            }\n            break;\n          }\n        }\n      }\n      return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';\n    };\n\n    Gauge.prototype.getColorForValue = function(val, grad) {\n      var pct;\n      pct = (val - this.minValue) / (this.maxValue - this.minValue);\n      return this.getColorForPercentage(pct, grad);\n    };\n\n    Gauge.prototype.renderStaticLabels = function(staticLabels, w, h, radius) {\n      var adjustedRadius, angle, displayText, font, fontsize, index, j, len, match, re, ref, rest, rotationAngle, skipTextRotate, textMeasurement, value, xPos, yPos;\n      this.ctx.save();\n      this.ctx.translate(w, h);\n      font = staticLabels.font || \"10px Times\";\n      re = /\\d+\\.?\\d?/;\n      match = font.match(re)[0];\n      rest = font.slice(match.length);\n      fontsize = parseFloat(match) * this.displayScale * this.textDisplayScale;\n      this.ctx.font = fontsize + rest;\n      this.ctx.fillStyle = staticLabels.color || \"#000000\";\n      skipTextRotate = staticLabels.skipTextRotate || false;\n      this.ctx.textBaseline = \"bottom\";\n      this.ctx.textAlign = \"center\";\n      ref = staticLabels.labels;\n      for (index = j = 0, len = ref.length; j < len; index = ++j) {\n        value = ref[index];\n        displayText = staticLabels.labelsDisplay[index] || formatNumber(value, staticLabels.fractionDigits);\n        if ((!this.options.limitMin || value >= this.minValue) && (!this.options.limitMax || value <= this.maxValue)) {\n          if (skipTextRotate) {\n            this.ctx.textBaseline = 'middle';\n            angle = this.getAngle(value);\n            textMeasurement = this.ctx.measureText(displayText);\n            adjustedRadius = (this.lineWidth / 2) + radius + textMeasurement.width / 2;\n            xPos = 0 + (adjustedRadius * Math.cos(angle));\n            yPos = 0 + (adjustedRadius * Math.sin(angle));\n            this.ctx.fillText(displayText, xPos, yPos);\n          } else {\n            rotationAngle = this.getAngle(value) - 3 * Math.PI / 2;\n            this.ctx.rotate(rotationAngle);\n            this.ctx.fillText(displayText, 0, -radius - this.lineWidth / 2);\n            this.ctx.rotate(-rotationAngle);\n          }\n        }\n      }\n      return this.ctx.restore();\n    };\n\n    Gauge.prototype.render = function() {\n      var checkAvailableHeight, displayedAngle, fillStyle, gauge, grad, h, halfLine, index, item, j, k, l, len, len1, len2, len3, len4, len5, m, max, min, n, o, radius, radiusForGrad, ref, ref1, ref2, ref3, step, w, zone;\n      if (this.options.responsive) {\n        checkAvailableHeight = this.canvas.height * (1 - this.options.paddingTop - this.options.paddingBottom);\n        if (checkAvailableHeight !== this.availableHeight) {\n          this.availableHeight = this.canvas.height * (1 - this.options.paddingTop - this.options.paddingBottom);\n          this.lineWidth = this.availableHeight * this.options.lineWidth;\n          this.radius = (this.availableHeight - this.lineWidth / 2) / (1.0 + this.extraPadding);\n        }\n      }\n      if (this.options.renderBefore) {\n        this.options.renderBefore(this.ctx);\n      }\n      w = this.canvas.width / 2;\n      h = this.canvas.height * this.options.paddingTop + this.availableHeight - (this.radius + this.lineWidth / 2) * this.extraPadding;\n      displayedAngle = this.getAngle(this.displayedValue);\n      if (this.textField) {\n        this.textField.render(this);\n      }\n      this.ctx.lineCap = \"butt\";\n      radius = this.radius * this.options.radiusScale;\n      if (this.options.staticLabels) {\n        this.renderStaticLabels(this.options.staticLabels, w, h, radius);\n      }\n      this.ctx.save();\n      this.ctx.translate(w, h);\n      this.ctx.lineWidth = this.lineWidth * 1.05;\n      this.ctx.strokeStyle = \"#e6e6e6\";\n      this.ctx.beginPath();\n      this.ctx.arc(0, 0, radius, this.getAngle(this.minValue), this.getAngle(this.maxValue), false);\n      this.ctx.stroke();\n      this.ctx.restore();\n      if (this.options.staticZones) {\n        this.ctx.save();\n        this.ctx.translate(w, h);\n        this.ctx.lineWidth = this.lineWidth;\n        ref = this.options.staticZones;\n        for (j = 0, len = ref.length; j < len; j++) {\n          zone = ref[j];\n          min = zone.min;\n          if (this.options.limitMin && min < this.minValue) {\n            min = this.minValue;\n          }\n          max = zone.max;\n          if (this.options.limitMax && max > this.maxValue) {\n            max = this.maxValue;\n          }\n          this.ctx.strokeStyle = zone.strokeStyle;\n          this.ctx.beginPath();\n          this.ctx.arc(0, 0, radius, this.getAngle(min), this.getAngle(max), false);\n          this.ctx.stroke();\n        }\n        this.ctx.restore();\n      } else if (this.options.staticGradient) {\n        this.ctx.save();\n        this.ctx.translate(w, h);\n        this.ctx.lineWidth = this.lineWidth;\n        ref1 = this.options.staticGradient;\n        for (k = 0, len1 = ref1.length; k < len1; k++) {\n          grad = ref1[k];\n          min = grad.min;\n          if (this.options.limitMin && min < this.minValue) {\n            min = this.minValue;\n          }\n          max = grad.max;\n          if (this.options.limitMax && max > this.maxValue) {\n            max = this.maxValue;\n          }\n          this.ctx.strokeStyle = grad.color;\n          this.ctx.beginPath();\n          this.ctx.arc(0, 0, radius, this.getAngle(min), this.getAngle(max), false);\n          this.ctx.stroke();\n        }\n        halfLine = this.lineWidth / 2;\n        ref2 = this.options.staticGradient;\n        for (l = 0, len2 = ref2.length; l < len2; l++) {\n          grad = ref2[l];\n          radiusForGrad = radius - halfLine;\n          fillStyle = this.ctx.createLinearGradient(radiusForGrad * Math.cos(this.getAngle(grad[0].val)), radiusForGrad * Math.sin(this.getAngle(grad[0].val)), radiusForGrad * Math.cos(this.getAngle(grad[grad.length - 1].val)), radiusForGrad * Math.sin(this.getAngle(grad[grad.length - 1].val)));\n          for (index = m = 0, len3 = grad.length; m < len3; index = ++m) {\n            item = grad[index];\n            step = index / grad.length;\n            fillStyle.addColorStop(step, item.color);\n          }\n          this.ctx.strokeStyle = fillStyle;\n          this.ctx.beginPath();\n          for (index = n = 0, len4 = grad.length; n < len4; index = ++n) {\n            item = grad[index];\n            if (index === 0) {\n              continue;\n            }\n            this.ctx.arc(0, 0, radius, this.getAngle(grad[index - 1].val), this.getAngle(item.val), false);\n          }\n          this.ctx.lineWidth = this.lineWidth;\n          this.ctx.stroke();\n        }\n        this.ctx.restore();\n      } else {\n        if (this.options.customFillStyle !== void 0) {\n          fillStyle = this.options.customFillStyle(this);\n        } else if (this.percentColors !== null) {\n          fillStyle = this.getColorForValue(this.displayedValue, true);\n        } else if (this.options.colorStop !== void 0) {\n          if (this.options.gradientType === 0) {\n            fillStyle = this.ctx.createRadialGradient(w, h, 9, w, h, 70);\n          } else {\n            fillStyle = this.ctx.createLinearGradient(0, 0, w, 0);\n          }\n          fillStyle.addColorStop(0, this.options.colorStart);\n          fillStyle.addColorStop(1, this.options.colorStop);\n        } else {\n          fillStyle = this.options.colorStart;\n        }\n        this.ctx.strokeStyle = fillStyle;\n        this.ctx.beginPath();\n        this.ctx.arc(w, h, radius, (1 + this.options.angle) * Math.PI, displayedAngle, false);\n        this.ctx.lineWidth = this.lineWidth;\n        this.ctx.stroke();\n        this.ctx.strokeStyle = this.options.strokeColor;\n        this.ctx.beginPath();\n        this.ctx.arc(w, h, radius, displayedAngle, (2 - this.options.angle) * Math.PI, false);\n        this.ctx.stroke();\n      }\n      this.ctx.translate(w, h);\n      ref3 = this.gp;\n      for (o = 0, len5 = ref3.length; o < len5; o++) {\n        gauge = ref3[o];\n        gauge.update(true);\n      }\n      return this.ctx.translate(-w, -h);\n    };\n\n    return Gauge;\n\n  })(BaseGauge);\n\n  BaseDonut = (function(superClass) {\n    extend(BaseDonut, superClass);\n\n    BaseDonut.prototype.lineWidth = 15;\n\n    BaseDonut.prototype.displayedValue = 0;\n\n    BaseDonut.prototype.value = 33;\n\n    BaseDonut.prototype.maxValue = 80;\n\n    BaseDonut.prototype.minValue = 0;\n\n    BaseDonut.prototype.options = {\n      lineWidth: 0.10,\n      colorStart: \"#6f6ea0\",\n      colorStop: \"#c0c0db\",\n      strokeColor: \"#eeeeee\",\n      shadowColor: \"#d5d5d5\",\n      angle: 0.35,\n      radiusScale: 1.0\n    };\n\n    function BaseDonut(canvas) {\n      this.canvas = canvas;\n      BaseDonut.__super__.constructor.call(this);\n      if (typeof G_vmlCanvasManager !== 'undefined') {\n        this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);\n      }\n      this.ctx = this.canvas.getContext('2d');\n      this.setOptions();\n      this.render();\n    }\n\n    BaseDonut.prototype.getAngle = function(value) {\n      return (1 - this.options.angle) * Math.PI + ((value - this.minValue) / (this.maxValue - this.minValue)) * ((2 + this.options.angle) - (1 - this.options.angle)) * Math.PI;\n    };\n\n    BaseDonut.prototype.setOptions = function(options) {\n      if (options == null) {\n        options = null;\n      }\n      if (options && options.responsive) {\n        this.canvas.G__width = Math.min(this.canvas.parentNode.clientWidth, this.canvas.parentNode.clientHeight);\n        this.canvas.G__height = this.canvas.G__width;\n      }\n      BaseDonut.__super__.setOptions.call(this, options);\n      this.lineWidth = this.canvas.height * this.options.lineWidth;\n      this.radius = this.options.radiusScale * (this.canvas.height / 2 - this.lineWidth / 2);\n      return this;\n    };\n\n    BaseDonut.prototype.set = function(value) {\n      this.value = this.parseValue(value);\n      if (this.value > this.maxValue) {\n        this.maxValue = this.value * 1.1;\n      }\n      return AnimationUpdater.run();\n    };\n\n    BaseDonut.prototype.render = function() {\n      var displayedAngle, grdFill, h, start, stop, w;\n      displayedAngle = this.getAngle(this.displayedValue);\n      w = this.canvas.width / 2;\n      h = this.canvas.height / 2;\n      if (this.textField) {\n        this.textField.render(this);\n      }\n      grdFill = this.ctx.createRadialGradient(w, h, 39, w, h, 70);\n      grdFill.addColorStop(0, this.options.colorStart);\n      grdFill.addColorStop(1, this.options.colorStop);\n      start = this.radius - this.lineWidth / 2;\n      stop = this.radius + this.lineWidth / 2;\n      this.ctx.strokeStyle = this.options.strokeColor;\n      this.ctx.beginPath();\n      this.ctx.arc(w, h, this.radius, (1 - this.options.angle) * Math.PI, (2 + this.options.angle) * Math.PI, false);\n      this.ctx.lineWidth = this.lineWidth;\n      this.ctx.lineCap = \"round\";\n      this.ctx.stroke();\n      this.ctx.strokeStyle = grdFill;\n      this.ctx.beginPath();\n      this.ctx.arc(w, h, this.radius, (1 - this.options.angle) * Math.PI, displayedAngle, false);\n      return this.ctx.stroke();\n    };\n\n    return BaseDonut;\n\n  })(BaseGauge);\n\n  Donut = (function(superClass) {\n    extend(Donut, superClass);\n\n    function Donut() {\n      return Donut.__super__.constructor.apply(this, arguments);\n    }\n\n    Donut.prototype.strokeGradient = function(w, h, start, stop) {\n      var grd;\n      grd = this.ctx.createRadialGradient(w, h, start, w, h, stop);\n      grd.addColorStop(0, this.options.shadowColor);\n      grd.addColorStop(0.12, this.options._orgStrokeColor);\n      grd.addColorStop(0.88, this.options._orgStrokeColor);\n      grd.addColorStop(1, this.options.shadowColor);\n      return grd;\n    };\n\n    Donut.prototype.setOptions = function(options) {\n      var h, start, stop, w;\n      if (options == null) {\n        options = null;\n      }\n      Donut.__super__.setOptions.call(this, options);\n      w = this.canvas.width / 2;\n      h = this.canvas.height / 2;\n      start = this.radius - this.lineWidth / 2;\n      stop = this.radius + this.lineWidth / 2;\n      this.options._orgStrokeColor = this.options.strokeColor;\n      this.options.strokeColor = this.strokeGradient(w, h, start, stop);\n      return this;\n    };\n\n    return Donut;\n\n  })(BaseDonut);\n\n  window.AnimationUpdater = {\n    elements: [],\n    animId: null,\n    addAll: function(list) {\n      var elem, j, len, results;\n      results = [];\n      for (j = 0, len = list.length; j < len; j++) {\n        elem = list[j];\n        results.push(AnimationUpdater.elements.push(elem));\n      }\n      return results;\n    },\n    add: function(object) {\n      return AnimationUpdater.elements.push(object);\n    },\n    run: function(force) {\n      var animationFinished, elem, j, len, ref;\n      if (force == null) {\n        force = false;\n      }\n      animationFinished = true;\n      ref = AnimationUpdater.elements;\n      for (j = 0, len = ref.length; j < len; j++) {\n        elem = ref[j];\n        if (elem.update(force === true)) {\n          animationFinished = false;\n        }\n      }\n      if (!animationFinished) {\n        return AnimationUpdater.animId = requestAnimationFrame(AnimationUpdater.run);\n      } else {\n        return cancelAnimationFrame(AnimationUpdater.animId);\n      }\n    }\n  };\n\n  if (typeof window.define === 'function' && (window.define.amd != null)) {\n    define(function() {\n      return {\n        Gauge: Gauge,\n        Donut: Donut,\n        BaseDonut: BaseDonut,\n        TextRenderer: TextRenderer\n      };\n    });\n  } else if (typeof module !== 'undefined' && (module.exports != null)) {\n    module.exports = {\n      Gauge: Gauge,\n      Donut: Donut,\n      BaseDonut: BaseDonut,\n      TextRenderer: TextRenderer\n    };\n  } else {\n    window.Gauge = Gauge;\n    window.Donut = Donut;\n    window.BaseDonut = BaseDonut;\n    window.TextRenderer = TextRenderer;\n  }\n\n}).call(this);\n", "/*\n * International Telephone Input v12.1.0\n * https://github.com/jackocnr/intl-tel-input.git\n * Licensed under the MIT license\n */\n\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],function(b){a(b,window,document)}):\"object\"==typeof module&&module.exports?module.exports=a(require(\"jquery\"),window,document):a(jQuery,window,document)}(function(a,b,c,d){\"use strict\";function e(b,c){this.a=a(b),this.b=a.extend({},h,c),this.ns=\".\"+f+g++,this.d=Boolean(b.setSelectionRange),this.e=Boolean(a(b).attr(\"placeholder\"))}var f=\"intlTelInput\",g=1,h={allowDropdown:!0,autoHideDialCode:!0,autoPlaceholder:\"polite\",customPlaceholder:null,dropdownContainer:\"\",excludeCountries:[],formatOnDisplay:!0,geoIpLookup:null,hiddenInput:\"\",initialCountry:\"\",nationalMode:!0,onlyCountries:[],placeholderNumberType:\"MOBILE\",preferredCountries:[\"us\",\"gb\"],separateDialCode:!1,utilsScript:\"\"},i={b:38,c:40,d:13,e:27,f:43,A:65,Z:90,j:32,k:9},j=[\"800\",\"822\",\"833\",\"844\",\"855\",\"866\",\"877\",\"880\",\"881\",\"882\",\"883\",\"884\",\"885\",\"886\",\"887\",\"888\",\"889\"];a(b).on(\"load\",function(){a.fn[f].windowLoaded=!0}),e.prototype={_a:function(){return this.b.nationalMode&&(this.b.autoHideDialCode=!1),this.b.separateDialCode&&(this.b.autoHideDialCode=this.b.nationalMode=!1),this.g=/Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),this.g&&(a(\"body\").addClass(\"iti-mobile\"),this.b.dropdownContainer||(this.b.dropdownContainer=\"body\")),this.h=new a.Deferred,this.i=new a.Deferred,this.s={},this._b(),this._f(),this._h(),this._i(),this._i2(),[this.h,this.i]},_b:function(){this._d(),this._d2(),this._e()},_c:function(a,b,c){b in this.q||(this.q[b]=[]);var d=c||0;this.q[b][d]=a},_d:function(){if(this.b.onlyCountries.length){var a=this.b.onlyCountries.map(function(a){return a.toLowerCase()});this.p=k.filter(function(b){return a.indexOf(b.iso2)>-1})}else if(this.b.excludeCountries.length){var b=this.b.excludeCountries.map(function(a){return a.toLowerCase()});this.p=k.filter(function(a){return-1===b.indexOf(a.iso2)})}else this.p=k},_d2:function(){this.q={};for(var a=0;a<this.p.length;a++){var b=this.p[a];if(this._c(b.iso2,b.dialCode,b.priority),b.areaCodes)for(var c=0;c<b.areaCodes.length;c++)this._c(b.iso2,b.dialCode+b.areaCodes[c])}},_e:function(){this.preferredCountries=[];for(var a=0;a<this.b.preferredCountries.length;a++){var b=this.b.preferredCountries[a].toLowerCase(),c=this._y(b,!1,!0);c&&this.preferredCountries.push(c)}},_f:function(){this.a.attr(\"autocomplete\",\"off\");var b=\"intl-tel-input\";this.b.allowDropdown&&(b+=\" allow-dropdown\"),this.b.separateDialCode&&(b+=\" separate-dial-code\"),this.a.wrap(a(\"<div>\",{\"class\":b})),this.k=a(\"<div>\",{\"class\":\"flag-container\"}).insertBefore(this.a);var c=a(\"<div>\",{\"class\":\"selected-flag\"});c.appendTo(this.k),this.l=a(\"<div>\",{\"class\":\"iti-flag\"}).appendTo(c),this.b.separateDialCode&&(this.t=a(\"<div>\",{\"class\":\"selected-dial-code\"}).appendTo(c)),this.b.allowDropdown?(c.attr(\"tabindex\",\"0\"),a(\"<div>\",{\"class\":\"iti-arrow\"}).appendTo(c),this.m=a(\"<ul>\",{\"class\":\"country-list hide\"}),this.preferredCountries.length&&(this._g(this.preferredCountries,\"preferred\"),a(\"<li>\",{\"class\":\"divider\"}).appendTo(this.m)),this._g(this.p,\"\"),this.o=this.m.children(\".country\"),this.b.dropdownContainer?this.dropdown=a(\"<div>\",{\"class\":\"intl-tel-input iti-container\"}).append(this.m):this.m.appendTo(this.k)):this.o=a(),this.b.hiddenInput&&(this.hiddenInput=a(\"<input>\",{type:\"hidden\",name:this.b.hiddenInput}).insertBefore(this.a))},_g:function(a,b){for(var c=\"\",d=0;d<a.length;d++){var e=a[d];c+=\"<li class='country \"+b+\"' data-dial-code='\"+e.dialCode+\"' data-country-code='\"+e.iso2+\"'>\",c+=\"<div class='flag-box'><div class='iti-flag \"+e.iso2+\"'></div></div>\",c+=\"<span class='country-name'>\"+e.name+\"</span>\",c+=\"<span class='dial-code'>+\"+e.dialCode+\"</span>\",c+=\"</li>\"}this.m.append(c)},_h:function(){var a=this.a.val();this._af(a)&&(!this._isRegionlessNanp(a)||this.b.nationalMode&&!this.b.initialCountry)?this._v(a):\"auto\"!==this.b.initialCountry&&(this.b.initialCountry?this._z(this.b.initialCountry.toLowerCase()):(this.j=this.preferredCountries.length?this.preferredCountries[0].iso2:this.p[0].iso2,a||this._z(this.j)),a||this.b.nationalMode||this.b.autoHideDialCode||this.b.separateDialCode||this.a.val(\"+\"+this.s.dialCode)),a&&this._u(a)},_i:function(){this._j(),this.b.autoHideDialCode&&this._l(),this.b.allowDropdown&&this._i1(),this.hiddenInput&&this._initHiddenInputListener()},_initHiddenInputListener:function(){var a=this,b=this.a.closest(\"form\");b.length&&b.submit(function(){a.hiddenInput.val(a.getNumber())})},_i1:function(){var a=this,b=this.a.closest(\"label\");b.length&&b.on(\"click\"+this.ns,function(b){a.m.hasClass(\"hide\")?a.a.focus():b.preventDefault()}),this.l.parent().on(\"click\"+this.ns,function(b){!a.m.hasClass(\"hide\")||a.a.prop(\"disabled\")||a.a.prop(\"readonly\")||a._n()}),this.k.on(\"keydown\"+a.ns,function(b){!a.m.hasClass(\"hide\")||b.which!=i.b&&b.which!=i.c&&b.which!=i.j&&b.which!=i.d||(b.preventDefault(),b.stopPropagation(),a._n()),b.which==i.k&&a._ac()})},_i2:function(){var c=this;this.b.utilsScript?a.fn[f].windowLoaded?a.fn[f].loadUtils(this.b.utilsScript,this.i):a(b).on(\"load\",function(){a.fn[f].loadUtils(c.b.utilsScript,c.i)}):this.i.resolve(),\"auto\"===this.b.initialCountry?this._i3():this.h.resolve()},_i3:function(){a.fn[f].autoCountry?this.handleAutoCountry():a.fn[f].startedLoadingAutoCountry||(a.fn[f].startedLoadingAutoCountry=!0,\"function\"==typeof this.b.geoIpLookup&&this.b.geoIpLookup(function(b){a.fn[f].autoCountry=b.toLowerCase(),setTimeout(function(){a(\".intl-tel-input input\").intlTelInput(\"handleAutoCountry\")})}))},_j:function(){var a=this;this.a.on(\"keyup\"+this.ns,function(){a._v(a.a.val())&&a._triggerCountryChange()}),this.a.on(\"cut\"+this.ns+\" paste\"+this.ns,function(){setTimeout(function(){a._v(a.a.val())&&a._triggerCountryChange()})})},_j2:function(a){var b=this.a.attr(\"maxlength\");return b&&a.length>b?a.substr(0,b):a},_l:function(){var b=this;this.a.on(\"mousedown\"+this.ns,function(a){b.a.is(\":focus\")||b.a.val()||(a.preventDefault(),b.a.focus())}),this.a.on(\"focus\"+this.ns,function(a){b.a.val()||b.a.prop(\"readonly\")||!b.s.dialCode||(b.a.val(\"+\"+b.s.dialCode),b.a.one(\"keypress.plus\"+b.ns,function(a){a.which==i.f&&b.a.val(\"\")}),setTimeout(function(){var a=b.a[0];if(b.d){var c=b.a.val().length;a.setSelectionRange(c,c)}}))});var c=this.a.prop(\"form\");c&&a(c).on(\"submit\"+this.ns,function(){b._removeEmptyDialCode()}),this.a.on(\"blur\"+this.ns,function(){b._removeEmptyDialCode()})},_removeEmptyDialCode:function(){var a=this.a.val();if(\"+\"==a.charAt(0)){var b=this._m(a);b&&this.s.dialCode!=b||this.a.val(\"\")}this.a.off(\"keypress.plus\"+this.ns)},_m:function(a){return a.replace(/\\D/g,\"\")},_n:function(){this._o();var a=this.m.children(\".active\");a.length&&(this._x(a),this._ad(a)),this._p(),this.l.children(\".iti-arrow\").addClass(\"up\"),this.a.trigger(\"open:countrydropdown\")},_o:function(){var c=this;if(this.b.dropdownContainer&&this.dropdown.appendTo(this.b.dropdownContainer),this.n=this.m.removeClass(\"hide\").outerHeight(),!this.g){var d=this.a.offset(),e=d.top,f=a(b).scrollTop(),g=e+this.a.outerHeight()+this.n<f+a(b).height(),h=e-this.n>f;if(this.m.toggleClass(\"dropup\",!g&&h),this.b.dropdownContainer){var i=!g&&h?0:this.a.innerHeight();this.dropdown.css({top:e+i,left:d.left}),a(b).on(\"scroll\"+this.ns,function(){c._ac()})}}},_p:function(){var b=this;this.m.on(\"mouseover\"+this.ns,\".country\",function(c){b._x(a(this))}),this.m.on(\"click\"+this.ns,\".country\",function(c){b._ab(a(this))});var d=!0;a(\"html\").on(\"click\"+this.ns,function(a){d||b._ac(),d=!1});var e=\"\",f=null;a(c).on(\"keydown\"+this.ns,function(a){a.preventDefault(),a.which==i.b||a.which==i.c?b._q(a.which):a.which==i.d?b._r():a.which==i.e?b._ac():(a.which>=i.A&&a.which<=i.Z||a.which==i.j)&&(f&&clearTimeout(f),e+=String.fromCharCode(a.which),b._s(e),f=setTimeout(function(){e=\"\"},1e3))})},_q:function(a){var b=this.m.children(\".highlight\").first(),c=a==i.b?b.prev():b.next();c.length&&(c.hasClass(\"divider\")&&(c=a==i.b?c.prev():c.next()),this._x(c),this._ad(c))},_r:function(){var a=this.m.children(\".highlight\").first();a.length&&this._ab(a)},_s:function(a){for(var b=0;b<this.p.length;b++)if(this._t(this.p[b].name,a)){var c=this.m.children(\"[data-country-code=\"+this.p[b].iso2+\"]\").not(\".preferred\");this._x(c),this._ad(c,!0);break}},_t:function(a,b){return a.substr(0,b.length).toUpperCase()==b},_u:function(a){if(this.b.formatOnDisplay&&b.intlTelInputUtils&&this.s){var c=this.b.separateDialCode||!this.b.nationalMode&&\"+\"==a.charAt(0)?intlTelInputUtils.numberFormat.INTERNATIONAL:intlTelInputUtils.numberFormat.NATIONAL;a=intlTelInputUtils.formatNumber(a,this.s.iso2,c)}a=this._ah(a),this.a.val(a)},_v:function(b){b&&this.b.nationalMode&&\"1\"==this.s.dialCode&&\"+\"!=b.charAt(0)&&(\"1\"!=b.charAt(0)&&(b=\"1\"+b),b=\"+\"+b);var c=this._af(b),d=null,e=this._m(b);if(c){var f=this.q[this._m(c)],g=a.inArray(this.s.iso2,f)>-1,h=\"+1\"==c&&e.length>=4;if((!(\"1\"==this.s.dialCode)||!this._isRegionlessNanp(e))&&(!g||h))for(var i=0;i<f.length;i++)if(f[i]){d=f[i];break}}else\"+\"==b.charAt(0)&&e.length?d=\"\":b&&\"+\"!=b||(d=this.j);return null!==d&&this._z(d)},_isRegionlessNanp:function(b){var c=this._m(b);if(\"1\"==c.charAt(0)){var d=c.substr(1,3);return a.inArray(d,j)>-1}return!1},_x:function(a){this.o.removeClass(\"highlight\"),a.addClass(\"highlight\")},_y:function(a,b,c){for(var d=b?k:this.p,e=0;e<d.length;e++)if(d[e].iso2==a)return d[e];if(c)return null;throw new Error(\"No country data for '\"+a+\"'\")},_z:function(a){var b=this.s.iso2?this.s:{};this.s=a?this._y(a,!1,!1):{},this.s.iso2&&(this.j=this.s.iso2),this.l.attr(\"class\",\"iti-flag \"+a);var c=a?this.s.name+\": +\"+this.s.dialCode:\"Unknown\";if(this.l.parent().attr(\"title\",c),this.b.separateDialCode){var d=this.s.dialCode?\"+\"+this.s.dialCode:\"\",e=this.a.parent();b.dialCode&&e.removeClass(\"iti-sdc-\"+(b.dialCode.length+1)),d&&e.addClass(\"iti-sdc-\"+d.length),this.t.text(d)}return this._aa(),this.o.removeClass(\"active\"),a&&this.o.find(\".iti-flag.\"+a).first().closest(\".country\").addClass(\"active\"),b.iso2!==a},_aa:function(){var a=\"aggressive\"===this.b.autoPlaceholder||!this.e&&(!0===this.b.autoPlaceholder||\"polite\"===this.b.autoPlaceholder);if(b.intlTelInputUtils&&a){var c=intlTelInputUtils.numberType[this.b.placeholderNumberType],d=this.s.iso2?intlTelInputUtils.getExampleNumber(this.s.iso2,this.b.nationalMode,c):\"\";d=this._ah(d),\"function\"==typeof this.b.customPlaceholder&&(d=this.b.customPlaceholder(d,this.s)),this.a.attr(\"placeholder\",d)}},_ab:function(a){var b=this._z(a.attr(\"data-country-code\"));if(this._ac(),this._ae(a.attr(\"data-dial-code\"),!0),this.a.focus(),this.d){var c=this.a.val().length;this.a[0].setSelectionRange(c,c)}b&&this._triggerCountryChange()},_ac:function(){this.m.addClass(\"hide\"),this.l.children(\".iti-arrow\").removeClass(\"up\"),a(c).off(this.ns),a(\"html\").off(this.ns),this.m.off(this.ns),this.b.dropdownContainer&&(this.g||a(b).off(\"scroll\"+this.ns),this.dropdown.detach()),this.a.trigger(\"close:countrydropdown\")},_ad:function(a,b){var c=this.m,d=c.height(),e=c.offset().top,f=e+d,g=a.outerHeight(),h=a.offset().top,i=h+g,j=h-e+c.scrollTop(),k=d/2-g/2;if(h<e)b&&(j-=k),c.scrollTop(j);else if(i>f){b&&(j+=k);var l=d-g;c.scrollTop(j-l)}},_ae:function(a,b){var c,d=this.a.val();if(a=\"+\"+a,\"+\"==d.charAt(0)){var e=this._af(d);c=e?d.replace(e,a):a}else{if(this.b.nationalMode||this.b.separateDialCode)return;if(d)c=a+d;else{if(!b&&this.b.autoHideDialCode)return;c=a}}this.a.val(c)},_af:function(b){var c=\"\";if(\"+\"==b.charAt(0))for(var d=\"\",e=0;e<b.length;e++){var f=b.charAt(e);if(a.isNumeric(f)&&(d+=f,this.q[d]&&(c=b.substr(0,e+1)),4==d.length))break}return c},_ag:function(){var b=a.trim(this.a.val()),c=this.s.dialCode,d=this._m(b),e=\"1\"==d.charAt(0)?d:\"1\"+d;return(this.b.separateDialCode?\"+\"+c:\"+\"!=b.charAt(0)&&\"1\"!=b.charAt(0)&&c&&\"1\"==c.charAt(0)&&4==c.length&&c!=e.substr(0,4)?c.substr(1):\"\")+b},_ah:function(a){if(this.b.separateDialCode){var b=this._af(a);if(b){null!==this.s.areaCodes&&(b=\"+\"+this.s.dialCode);var c=\" \"===a[b.length]||\"-\"===a[b.length]?b.length+1:b.length;a=a.substr(c)}}return this._j2(a)},_triggerCountryChange:function(){this.a.trigger(\"countrychange\",this.s)},handleAutoCountry:function(){\"auto\"===this.b.initialCountry&&(this.j=a.fn[f].autoCountry,this.a.val()||this.setCountry(this.j),this.h.resolve())},handleUtils:function(){b.intlTelInputUtils&&(this.a.val()&&this._u(this.a.val()),this._aa()),this.i.resolve()},destroy:function(){if(this.allowDropdown&&(this._ac(),this.l.parent().off(this.ns),this.a.closest(\"label\").off(this.ns)),this.b.autoHideDialCode){var b=this.a.prop(\"form\");b&&a(b).off(this.ns)}this.a.off(this.ns),this.a.parent().before(this.a).remove()},getExtension:function(){return b.intlTelInputUtils?intlTelInputUtils.getExtension(this._ag(),this.s.iso2):\"\"},getNumber:function(a){return b.intlTelInputUtils?intlTelInputUtils.formatNumber(this._ag(),this.s.iso2,a):\"\"},getNumberType:function(){return b.intlTelInputUtils?intlTelInputUtils.getNumberType(this._ag(),this.s.iso2):-99},getSelectedCountryData:function(){return this.s},getValidationError:function(){return b.intlTelInputUtils?intlTelInputUtils.getValidationError(this._ag(),this.s.iso2):-99},isValidNumber:function(){var c=a.trim(this._ag()),d=this.b.nationalMode?this.s.iso2:\"\";return b.intlTelInputUtils?intlTelInputUtils.isValidNumber(c,d):null},setCountry:function(a){a=a.toLowerCase(),this.l.hasClass(a)||(this._z(a),this._ae(this.s.dialCode,!1),this._triggerCountryChange())},setNumber:function(a){var b=this._v(a);this._u(a),b&&this._triggerCountryChange()},setPlaceholderNumberType:function(a){this.b.placeholderNumberType=a,this._aa()}},a.fn[f]=function(b){var c=arguments;if(b===d||\"object\"==typeof b){var g=[];return this.each(function(){if(!a.data(this,\"plugin_\"+f)){var c=new e(this,b),d=c._a();g.push(d[0]),g.push(d[1]),a.data(this,\"plugin_\"+f,c)}}),a.when.apply(null,g)}if(\"string\"==typeof b&&\"_\"!==b[0]){var h;return this.each(function(){var d=a.data(this,\"plugin_\"+f);d instanceof e&&\"function\"==typeof d[b]&&(h=d[b].apply(d,Array.prototype.slice.call(c,1))),\"destroy\"===b&&a.data(this,\"plugin_\"+f,null)}),h!==d?h:this}},a.fn[f].getCountryData=function(){return k},a.fn[f].loadUtils=function(b,c){a.fn[f].loadedUtilsScript?c&&c.resolve():(a.fn[f].loadedUtilsScript=!0,a.ajax({type:\"GET\",url:b,complete:function(){a(\".intl-tel-input input\").intlTelInput(\"handleUtils\")},dataType:\"script\",cache:!0}))},a.fn[f].defaults=h,a.fn[f].version=\"12.1.0\";for(var k=[[\"Afghanistan (\u202B\u0627\u0641\u063A\u0627\u0646\u0633\u062A\u0627\u0646\u202C\u200E)\",\"af\",\"93\"],[\"Albania (Shqip\u00EBri)\",\"al\",\"355\"],[\"Algeria (\u202B\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u202C\u200E)\",\"dz\",\"213\"],[\"American Samoa\",\"as\",\"1684\"],[\"Andorra\",\"ad\",\"376\"],[\"Angola\",\"ao\",\"244\"],[\"Anguilla\",\"ai\",\"1264\"],[\"Antigua and Barbuda\",\"ag\",\"1268\"],[\"Argentina\",\"ar\",\"54\"],[\"Armenia (\u0540\u0561\u0575\u0561\u057D\u057F\u0561\u0576)\",\"am\",\"374\"],[\"Aruba\",\"aw\",\"297\"],[\"Australia\",\"au\",\"61\",0],[\"Austria (\u00D6sterreich)\",\"at\",\"43\"],[\"Azerbaijan (Az\u0259rbaycan)\",\"az\",\"994\"],[\"Bahamas\",\"bs\",\"1242\"],[\"Bahrain (\u202B\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u202C\u200E)\",\"bh\",\"973\"],[\"Bangladesh (\u09AC\u09BE\u0982\u09B2\u09BE\u09A6\u09C7\u09B6)\",\"bd\",\"880\"],[\"Barbados\",\"bb\",\"1246\"],[\"Belarus (\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C)\",\"by\",\"375\"],[\"Belgium (Belgi\u00EB)\",\"be\",\"32\"],[\"Belize\",\"bz\",\"501\"],[\"Benin (B\u00E9nin)\",\"bj\",\"229\"],[\"Bermuda\",\"bm\",\"1441\"],[\"Bhutan (\u0F60\u0F56\u0FB2\u0F74\u0F42)\",\"bt\",\"975\"],[\"Bolivia\",\"bo\",\"591\"],[\"Bosnia and Herzegovina (\u0411\u043E\u0441\u043D\u0430 \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043E\u0432\u0438\u043D\u0430)\",\"ba\",\"387\"],[\"Botswana\",\"bw\",\"267\"],[\"Brazil (Brasil)\",\"br\",\"55\"],[\"British Indian Ocean Territory\",\"io\",\"246\"],[\"British Virgin Islands\",\"vg\",\"1284\"],[\"Brunei\",\"bn\",\"673\"],[\"Bulgaria (\u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F)\",\"bg\",\"359\"],[\"Burkina Faso\",\"bf\",\"226\"],[\"Burundi (Uburundi)\",\"bi\",\"257\"],[\"Cambodia (\u1780\u1798\u17D2\u1796\u17BB\u1787\u17B6)\",\"kh\",\"855\"],[\"Cameroon (Cameroun)\",\"cm\",\"237\"],[\"Canada\",\"ca\",\"1\",1,[\"204\",\"226\",\"236\",\"249\",\"250\",\"289\",\"306\",\"343\",\"365\",\"387\",\"403\",\"416\",\"418\",\"431\",\"437\",\"438\",\"450\",\"506\",\"514\",\"519\",\"548\",\"579\",\"581\",\"587\",\"604\",\"613\",\"639\",\"647\",\"672\",\"705\",\"709\",\"742\",\"778\",\"780\",\"782\",\"807\",\"819\",\"825\",\"867\",\"873\",\"902\",\"905\"]],[\"Cape Verde (Kabu Verdi)\",\"cv\",\"238\"],[\"Caribbean Netherlands\",\"bq\",\"599\",1],[\"Cayman Islands\",\"ky\",\"1345\"],[\"Central African Republic (R\u00E9publique centrafricaine)\",\"cf\",\"236\"],[\"Chad (Tchad)\",\"td\",\"235\"],[\"Chile\",\"cl\",\"56\"],[\"China (\u4E2D\u56FD)\",\"cn\",\"86\"],[\"Christmas Island\",\"cx\",\"61\",2],[\"Cocos (Keeling) Islands\",\"cc\",\"61\",1],[\"Colombia\",\"co\",\"57\"],[\"Comoros (\u202B\u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631\u202C\u200E)\",\"km\",\"269\"],[\"Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)\",\"cd\",\"243\"],[\"Congo (Republic) (Congo-Brazzaville)\",\"cg\",\"242\"],[\"Cook Islands\",\"ck\",\"682\"],[\"Costa Rica\",\"cr\",\"506\"],[\"C\u00F4te d\u2019Ivoire\",\"ci\",\"225\"],[\"Croatia (Hrvatska)\",\"hr\",\"385\"],[\"Cuba\",\"cu\",\"53\"],[\"Cura\u00E7ao\",\"cw\",\"599\",0],[\"Cyprus (\u039A\u03CD\u03C0\u03C1\u03BF\u03C2)\",\"cy\",\"357\"],[\"Czech Republic (\u010Cesk\u00E1 republika)\",\"cz\",\"420\"],[\"Denmark (Danmark)\",\"dk\",\"45\"],[\"Djibouti\",\"dj\",\"253\"],[\"Dominica\",\"dm\",\"1767\"],[\"Dominican Republic (Rep\u00FAblica Dominicana)\",\"do\",\"1\",2,[\"809\",\"829\",\"849\"]],[\"Ecuador\",\"ec\",\"593\"],[\"Egypt (\u202B\u0645\u0635\u0631\u202C\u200E)\",\"eg\",\"20\"],[\"El Salvador\",\"sv\",\"503\"],[\"Equatorial Guinea (Guinea Ecuatorial)\",\"gq\",\"240\"],[\"Eritrea\",\"er\",\"291\"],[\"Estonia (Eesti)\",\"ee\",\"372\"],[\"Ethiopia\",\"et\",\"251\"],[\"Falkland Islands (Islas Malvinas)\",\"fk\",\"500\"],[\"Faroe Islands (F\u00F8royar)\",\"fo\",\"298\"],[\"Fiji\",\"fj\",\"679\"],[\"Finland (Suomi)\",\"fi\",\"358\",0],[\"France\",\"fr\",\"33\"],[\"French Guiana (Guyane fran\u00E7aise)\",\"gf\",\"594\"],[\"French Polynesia (Polyn\u00E9sie fran\u00E7aise)\",\"pf\",\"689\"],[\"Gabon\",\"ga\",\"241\"],[\"Gambia\",\"gm\",\"220\"],[\"Georgia (\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD)\",\"ge\",\"995\"],[\"Germany (Deutschland)\",\"de\",\"49\"],[\"Ghana (Gaana)\",\"gh\",\"233\"],[\"Gibraltar\",\"gi\",\"350\"],[\"Greece (\u0395\u03BB\u03BB\u03AC\u03B4\u03B1)\",\"gr\",\"30\"],[\"Greenland (Kalaallit Nunaat)\",\"gl\",\"299\"],[\"Grenada\",\"gd\",\"1473\"],[\"Guadeloupe\",\"gp\",\"590\",0],[\"Guam\",\"gu\",\"1671\"],[\"Guatemala\",\"gt\",\"502\"],[\"Guernsey\",\"gg\",\"44\",1],[\"Guinea (Guin\u00E9e)\",\"gn\",\"224\"],[\"Guinea-Bissau (Guin\u00E9 Bissau)\",\"gw\",\"245\"],[\"Guyana\",\"gy\",\"592\"],[\"Haiti\",\"ht\",\"509\"],[\"Honduras\",\"hn\",\"504\"],[\"Hong Kong (\u9999\u6E2F)\",\"hk\",\"852\"],[\"Hungary (Magyarorsz\u00E1g)\",\"hu\",\"36\"],[\"Iceland (\u00CDsland)\",\"is\",\"354\"],[\"India (\u092D\u093E\u0930\u0924)\",\"in\",\"91\"],[\"Indonesia\",\"id\",\"62\"],[\"Iran (\u202B\u0627\u06CC\u0631\u0627\u0646\u202C\u200E)\",\"ir\",\"98\"],[\"Iraq (\u202B\u0627\u0644\u0639\u0631\u0627\u0642\u202C\u200E)\",\"iq\",\"964\"],[\"Ireland\",\"ie\",\"353\"],[\"Isle of Man\",\"im\",\"44\",2],[\"Israel (\u202B\u05D9\u05E9\u05E8\u05D0\u05DC\u202C\u200E)\",\"il\",\"972\"],[\"Italy (Italia)\",\"it\",\"39\",0],[\"Jamaica\",\"jm\",\"1876\"],[\"Japan (\u65E5\u672C)\",\"jp\",\"81\"],[\"Jersey\",\"je\",\"44\",3],[\"Jordan (\u202B\u0627\u0644\u0623\u0631\u062F\u0646\u202C\u200E)\",\"jo\",\"962\"],[\"Kazakhstan (\u041A\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043D)\",\"kz\",\"7\",1],[\"Kenya\",\"ke\",\"254\"],[\"Kiribati\",\"ki\",\"686\"],[\"Kosovo\",\"xk\",\"383\"],[\"Kuwait (\u202B\u0627\u0644\u0643\u0648\u064A\u062A\u202C\u200E)\",\"kw\",\"965\"],[\"Kyrgyzstan (\u041A\u044B\u0440\u0433\u044B\u0437\u0441\u0442\u0430\u043D)\",\"kg\",\"996\"],[\"Laos (\u0EA5\u0EB2\u0EA7)\",\"la\",\"856\"],[\"Latvia (Latvija)\",\"lv\",\"371\"],[\"Lebanon (\u202B\u0644\u0628\u0646\u0627\u0646\u202C\u200E)\",\"lb\",\"961\"],[\"Lesotho\",\"ls\",\"266\"],[\"Liberia\",\"lr\",\"231\"],[\"Libya (\u202B\u0644\u064A\u0628\u064A\u0627\u202C\u200E)\",\"ly\",\"218\"],[\"Liechtenstein\",\"li\",\"423\"],[\"Lithuania (Lietuva)\",\"lt\",\"370\"],[\"Luxembourg\",\"lu\",\"352\"],[\"Macau (\u6FB3\u9580)\",\"mo\",\"853\"],[\"Macedonia (FYROM) (\u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430)\",\"mk\",\"389\"],[\"Madagascar (Madagasikara)\",\"mg\",\"261\"],[\"Malawi\",\"mw\",\"265\"],[\"Malaysia\",\"my\",\"60\"],[\"Maldives\",\"mv\",\"960\"],[\"Mali\",\"ml\",\"223\"],[\"Malta\",\"mt\",\"356\"],[\"Marshall Islands\",\"mh\",\"692\"],[\"Martinique\",\"mq\",\"596\"],[\"Mauritania (\u202B\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u202C\u200E)\",\"mr\",\"222\"],[\"Mauritius (Moris)\",\"mu\",\"230\"],[\"Mayotte\",\"yt\",\"262\",1],[\"Mexico (M\u00E9xico)\",\"mx\",\"52\"],[\"Micronesia\",\"fm\",\"691\"],[\"Moldova (Republica Moldova)\",\"md\",\"373\"],[\"Monaco\",\"mc\",\"377\"],[\"Mongolia (\u041C\u043E\u043D\u0433\u043E\u043B)\",\"mn\",\"976\"],[\"Montenegro (Crna Gora)\",\"me\",\"382\"],[\"Montserrat\",\"ms\",\"1664\"],[\"Morocco (\u202B\u0627\u0644\u0645\u063A\u0631\u0628\u202C\u200E)\",\"ma\",\"212\",0],[\"Mozambique (Mo\u00E7ambique)\",\"mz\",\"258\"],[\"Myanmar (Burma) (\u1019\u103C\u1014\u103A\u1019\u102C)\",\"mm\",\"95\"],[\"Namibia (Namibi\u00EB)\",\"na\",\"264\"],[\"Nauru\",\"nr\",\"674\"],[\"Nepal (\u0928\u0947\u092A\u093E\u0932)\",\"np\",\"977\"],[\"Netherlands (Nederland)\",\"nl\",\"31\"],[\"New Caledonia (Nouvelle-Cal\u00E9donie)\",\"nc\",\"687\"],[\"New Zealand\",\"nz\",\"64\"],[\"Nicaragua\",\"ni\",\"505\"],[\"Niger (Nijar)\",\"ne\",\"227\"],[\"Nigeria\",\"ng\",\"234\"],[\"Niue\",\"nu\",\"683\"],[\"Norfolk Island\",\"nf\",\"672\"],[\"North Korea (\uC870\uC120 \uBBFC\uC8FC\uC8FC\uC758 \uC778\uBBFC \uACF5\uD654\uAD6D)\",\"kp\",\"850\"],[\"Northern Mariana Islands\",\"mp\",\"1670\"],[\"Norway (Norge)\",\"no\",\"47\",0],[\"Oman (\u202B\u0639\u064F\u0645\u0627\u0646\u202C\u200E)\",\"om\",\"968\"],[\"Pakistan (\u202B\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u202C\u200E)\",\"pk\",\"92\"],[\"Palau\",\"pw\",\"680\"],[\"Palestine (\u202B\u0641\u0644\u0633\u0637\u064A\u0646\u202C\u200E)\",\"ps\",\"970\"],[\"Panama (Panam\u00E1)\",\"pa\",\"507\"],[\"Papua New Guinea\",\"pg\",\"675\"],[\"Paraguay\",\"py\",\"595\"],[\"Peru (Per\u00FA)\",\"pe\",\"51\"],[\"Philippines\",\"ph\",\"63\"],[\"Poland (Polska)\",\"pl\",\"48\"],[\"Portugal\",\"pt\",\"351\"],[\"Puerto Rico\",\"pr\",\"1\",3,[\"787\",\"939\"]],[\"Qatar (\u202B\u0642\u0637\u0631\u202C\u200E)\",\"qa\",\"974\"],[\"R\u00E9union (La R\u00E9union)\",\"re\",\"262\",0],[\"Romania (Rom\u00E2nia)\",\"ro\",\"40\"],[\"Russia (\u0420\u043E\u0441\u0441\u0438\u044F)\",\"ru\",\"7\",0],[\"Rwanda\",\"rw\",\"250\"],[\"Saint Barth\u00E9lemy\",\"bl\",\"590\",1],[\"Saint Helena\",\"sh\",\"290\"],[\"Saint Kitts and Nevis\",\"kn\",\"1869\"],[\"Saint Lucia\",\"lc\",\"1758\"],[\"Saint Martin (Saint-Martin (partie fran\u00E7aise))\",\"mf\",\"590\",2],[\"Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)\",\"pm\",\"508\"],[\"Saint Vincent and the Grenadines\",\"vc\",\"1784\"],[\"Samoa\",\"ws\",\"685\"],[\"San Marino\",\"sm\",\"378\"],[\"S\u00E3o Tom\u00E9 and Pr\u00EDncipe (S\u00E3o Tom\u00E9 e Pr\u00EDncipe)\",\"st\",\"239\"],[\"Saudi Arabia (\u202B\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u202C\u200E)\",\"sa\",\"966\"],[\"Senegal (S\u00E9n\u00E9gal)\",\"sn\",\"221\"],[\"Serbia (\u0421\u0440\u0431\u0438\u0458\u0430)\",\"rs\",\"381\"],[\"Seychelles\",\"sc\",\"248\"],[\"Sierra Leone\",\"sl\",\"232\"],[\"Singapore\",\"sg\",\"65\"],[\"Sint Maarten\",\"sx\",\"1721\"],[\"Slovakia (Slovensko)\",\"sk\",\"421\"],[\"Slovenia (Slovenija)\",\"si\",\"386\"],[\"Solomon Islands\",\"sb\",\"677\"],[\"Somalia (Soomaaliya)\",\"so\",\"252\"],[\"South Africa\",\"za\",\"27\"],[\"South Korea (\uB300\uD55C\uBBFC\uAD6D)\",\"kr\",\"82\"],[\"South Sudan (\u202B\u062C\u0646\u0648\u0628 \u0627\u0644\u0633\u0648\u062F\u0627\u0646\u202C\u200E)\",\"ss\",\"211\"],[\"Spain (Espa\u00F1a)\",\"es\",\"34\"],[\"Sri Lanka (\u0DC1\u0DCA\u200D\u0DBB\u0DD3 \u0DBD\u0D82\u0D9A\u0DCF\u0DC0)\",\"lk\",\"94\"],[\"Sudan (\u202B\u0627\u0644\u0633\u0648\u062F\u0627\u0646\u202C\u200E)\",\"sd\",\"249\"],[\"Suriname\",\"sr\",\"597\"],[\"Svalbard and Jan Mayen\",\"sj\",\"47\",1],[\"Swaziland\",\"sz\",\"268\"],[\"Sweden (Sverige)\",\"se\",\"46\"],[\"Switzerland (Schweiz)\",\"ch\",\"41\"],[\"Syria (\u202B\u0633\u0648\u0631\u064A\u0627\u202C\u200E)\",\"sy\",\"963\"],[\"Taiwan (\u53F0\u7063)\",\"tw\",\"886\"],[\"Tajikistan\",\"tj\",\"992\"],[\"Tanzania\",\"tz\",\"255\"],[\"Thailand (\u0E44\u0E17\u0E22)\",\"th\",\"66\"],[\"Timor-Leste\",\"tl\",\"670\"],[\"Togo\",\"tg\",\"228\"],[\"Tokelau\",\"tk\",\"690\"],[\"Tonga\",\"to\",\"676\"],[\"Trinidad and Tobago\",\"tt\",\"1868\"],[\"Tunisia (\u202B\u062A\u0648\u0646\u0633\u202C\u200E)\",\"tn\",\"216\"],[\"Turkey (T\u00FCrkiye)\",\"tr\",\"90\"],[\"Turkmenistan\",\"tm\",\"993\"],[\"Turks and Caicos Islands\",\"tc\",\"1649\"],[\"Tuvalu\",\"tv\",\"688\"],[\"U.S. Virgin Islands\",\"vi\",\"1340\"],[\"Uganda\",\"ug\",\"256\"],[\"Ukraine (\u0423\u043A\u0440\u0430\u0457\u043D\u0430)\",\"ua\",\"380\"],[\"United Arab Emirates (\u202B\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629\u202C\u200E)\",\"ae\",\"971\"],[\"United Kingdom\",\"gb\",\"44\",0],[\"United States\",\"us\",\"1\",0],[\"Uruguay\",\"uy\",\"598\"],[\"Uzbekistan (O\u02BBzbekiston)\",\"uz\",\"998\"],[\"Vanuatu\",\"vu\",\"678\"],[\"Vatican City (Citt\u00E0 del Vaticano)\",\"va\",\"39\",1],[\"Venezuela\",\"ve\",\"58\"],[\"Vietnam (Vi\u1EC7t Nam)\",\"vn\",\"84\"],[\"Wallis and Futuna (Wallis-et-Futuna)\",\"wf\",\"681\"],[\"Western Sahara (\u202B\u0627\u0644\u0635\u062D\u0631\u0627\u0621 \u0627\u0644\u063A\u0631\u0628\u064A\u0629\u202C\u200E)\",\"eh\",\"212\",1],[\"Yemen (\u202B\u0627\u0644\u064A\u0645\u0646\u202C\u200E)\",\"ye\",\"967\"],[\"Zambia\",\"zm\",\"260\"],[\"Zimbabwe\",\"zw\",\"263\"],[\"\u00C5land Islands\",\"ax\",\"358\",1]],l=0;l<k.length;l++){var m=k[l];k[l]={name:m[0],iso2:m[1],dialCode:m[2],priority:m[3]||0,areaCodes:m[4]||null}}});", "/*!\n * OverlayScrollbars\n * https://github.com/KingSora/OverlayScrollbars\n *\n * Version: 1.6.1\n *\n * Copyright KingSora.\n * https://github.com/KingSora\n *\n * Released under the MIT license.\n * Date: 16.12.2018\n */\n!function(e,t){\"function\"==typeof define&&define.amd?define([\"jquery\"],function(n){return t(e,e.document,undefined,n)}):\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=t(e,e.document,undefined,require(\"jquery\")):t(e,e.document,undefined,e.jQuery)}(\"undefined\"!=typeof window?window:this,function(e,t,n,r){\"use strict\";var i,o,a=\"OverlayScrollbars\",s={o:\"object\",f:\"function\",a:\"array\",s:\"string\",b:\"boolean\",n:\"number\",u:\"undefined\",z:\"null\"},c={c:\"class\",s:\"style\",i:\"id\",l:\"length\",p:\"prototype\",oH:\"offsetHeight\",cH:\"clientHeight\",sH:\"scrollHeight\",oW:\"offsetWidth\",cW:\"clientWidth\",sW:\"scrollWidth\"},l={wW:function(){return e.innerWidth||t.documentElement[c.cW]||t.body[c.cW]},wH:function(){return e.innerHeight||t.documentElement[c.cH]||t.body[c.cH]},mO:function(){return e.MutationObserver||e.WebKitMutationObserver||e.WebkitMutationObserver||e.MozMutationObserver||n},rO:function(){return e.ResizeObserver||e.WebKitResizeObserver||e.WebkitResizeObserver||e.MozResizeObserver||n},rAF:function(){return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t){return e.setTimeout(t,1e3/60)}},cAF:function(){return e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.mozCancelAnimationFrame||e.oCancelAnimationFrame||e.msCancelAnimationFrame||function(t){return e.clearTimeout(t)}},now:function(){return Date.now&&Date.now()||(new Date).getTime()},stpP:function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},prvD:function(e){e.preventDefault&&e.cancelable?e.preventDefault():e.returnValue=!1},page:function(e){var r=\"page\",i=\"client\",o=\"X\",a=\"Y\",s=((e=e.originalEvent||e).target||e.srcElement||t).ownerDocument||t,c=s.documentElement,l=s.body;if(e.touches!==n){var u=e.touches[0];return{x:u[r+o],y:u[r+a]}}return!e[r+o]&&e[i+o]&&null!=e[i+o]?{x:e[i+o]+(c&&c.scrollLeft||l&&l.scrollLeft||0)-(c&&c.clientLeft||l&&l.clientLeft||0),y:e[i+a]+(c&&c.scrollTop||l&&l.scrollTop||0)-(c&&c.clientTop||l&&l.clientTop||0)}:{x:e[r+o],y:e[r+a]}},mBtn:function(e){var t=e.button;return e.which||t===n?e.which:1&t?1:2&t?3:4&t?2:0},inA:function(e,t){for(var n=0;n<t[c.l];n++)try{if(t[n]===e)return n}catch(r){}return-1},isA:function(e){var t=Array.isArray;return t?t(e):this.type(e)==s.a},type:function(e){return e===n?e+\"\":null===e?e+\"\":Object[c.p].toString.call(e).replace(/^\\[object (.+)\\]$/,\"$1\").toLowerCase()},bind:function(e,t){if(typeof e!=s.f)throw\"Can't bind function!\";var n=c.p,r=Array[n].slice.call(arguments,2),i=function(){},o=function(){return e.apply(this instanceof i?this:t,r.concat(Array[n].slice.call(arguments)))};return e[n]&&(i[n]=e[n]),o[n]=new i,o}},u=Math,f=r,d=(r.easing,r),h=(i=[],o=\"__overlayScrollbars__\",function(e,t){var n=arguments[c.l];if(n<1)return i;if(t)e[o]=t,i.push(e);else{var r=l.inA(e,i);if(r>-1){if(!(n>1))return i[r][o];delete e[o],i.splice(r,1)}}}),v=function(){var r,i,o,v,p,y,x,m,w,b,g,S,O,z,A=[],W=(o=[s.b,s.n,s.s,s.a,s.o,s.f,s.z],v=\" \",p=\":\",y=[s.z,s.s],x=s.n,m=[s.z,s.b],w=[!0,s.b],b=[!1,s.b],g=[null,[s.z,s.f]],O={className:[\"os-theme-dark\",y],resize:[\"none\",\"n:none b:both h:horizontal v:vertical\"],sizeAutoCapable:w,clipAlways:w,normalizeRTL:w,paddingAbsolute:b,autoUpdate:[null,m],autoUpdateInterval:[33,x],nativeScrollbarsOverlaid:{showNativeScrollbars:b,initialize:w},overflowBehavior:{x:[\"scroll\",S=\"v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden\"],y:[\"scroll\",S]},scrollbars:{visibility:[\"auto\",\"v:visible h:hidden a:auto\"],autoHide:[\"never\",\"n:never s:scroll l:leave m:move\"],autoHideDelay:[800,x],dragScrolling:w,clickScrolling:b,touchSupport:w},textarea:{dynWidth:b,dynHeight:b,inheritedAttrs:[[\"style\",\"class\"],[s.s,s.a,s.z]]},callbacks:{onInitialized:g,onInitializationWithdrawn:g,onDestroyed:g,onScrollStart:g,onScroll:g,onScrollStop:g,onOverflowChanged:g,onOverflowAmountChanged:g,onDirectionChanged:g,onContentSizeChanged:g,onHostSizeChanged:g,onUpdated:g}},{d:(z=function(e){var t=function(n){var r,i,o;for(r in n)n.hasOwnProperty(r)&&(i=n[r],(o=l.type(i))==s.a?n[r]=i[e?1:0]:o==s.o&&(n[r]=t(i)));return n};return t(d.extend(!0,{},O))})(),t:z(!0),v:function(t,n,r,i,a){var c={},u=d.extend(!0,{},t),f=function(e,t,n,a){for(var c in t)if(t.hasOwnProperty(c)&&e.hasOwnProperty(c)){var u,h,y,x,m,w,b,g,S=!1,O=t[c],z=l.type(O),A=l.type(O)!=s.a?[O]:O,W=e[c],C=l.type(W),H=a?a+\".\":\"\",T='The option \"'+H+c+\"\\\" wasn't set, because\",k=[],L=[];if(z==s.o)n[c]={},f(W,O,n[c],H+c),d.isEmptyObject(W)&&delete e[c];else{for(w=0;w<A.length;w++)if(m=A[w],y=(z=l.type(m))==s.s&&-1===d.inArray(m,o))for(k.push(s.s),u=m.split(v),L=L.concat(u),b=0;b<u.length;b++){for(x=(h=u[b].split(p))[0],g=0;g<h.length;g++)if(W===h[g]){S=!0;break}if(S)break}else if(k.push(m),C===m){S=!0;break}S?n[c]=y&&i?x:W:r&&console.warn(T+\" it doesn't accept the type [ \"+C.toUpperCase()+' ] with the value of \"'+W+'\".\\r\\nAccepted types are: [ '+k.join(\", \").toUpperCase()+\" ].\"+(L.length>0?\"\\r\\nValid strings are: [ \"+L.join(\", \").split(p).join(\", \")+\" ].\":\"\")),delete e[c]}}};return f(u,n,c),a?d.extend(!0,c,u):!d.isEmptyObject(u)&&r&&console.warn(\"The following options are discarded due to invalidity:\\r\\n\"+e.JSON.stringify(u,null,2)),c}});function C(){r||(r=new H(W.d)),i||(i=new T(r))}function H(r){var i=this,o=\"overflow\",a=\"hidden\",s=\"scroll\",f=d(\"body\"),v=d('<div id=\"os-dummy-scrollbar-size\"><div></div></div>'),p=v[0],y=d(v.children(\"div\").eq(0));f.append(v),v.hide().show();var x,m,w,b,g,S,O,z,A,W=T(p),C={x:0===W.x,y:0===W.y};function H(e){var r=!1,i=\"Webkit Moz ms O\".split(\" \"),o=t.createElement(\"div\"),a=null,s=0;if(e=e.toLowerCase(),o[c.s][e]!==n&&(r=!0),!r)for(a=e.charAt(0).toUpperCase()+e.substr(1);s<i.length;s++)if(o[c.s][i[s]+a]!==n){r=!0;break}return r}function T(e){return{x:e[c.oH]-e[c.cH],y:e[c.oW]-e[c.cW]}}d.extend(i,{defaultOptions:r,autoUpdateLoop:!1,autoUpdateRecommended:!l.mO(),nativeScrollbarSize:W,nativeScrollbarIsOverlaid:C,nativeScrollbarStyling:(v.addClass(\"os-viewport-native-scrollbars-invisible\"),v.css(o,a).hide().css(o,s).show(),p[c.oH]-p[c.cH]==0&&p[c.oW]-p[c.cW]==0),overlayScrollbarDummySize:{x:30,y:30},msie:(m=e.navigator.userAgent,w=\"indexOf\",b=\"substring\",g=m[w](\"MSIE \"),S=m[w](\"Trident/\"),O=m[w](\"Edge/\"),z=m[w](\"rv:\"),A=parseInt,g>0?x=A(m[b](g+5,m[w](\".\",g)),10):S>0?x=A(m[b](z+3,m[w](\".\",z)),10):O>0&&(x=A(m[b](O+5,m[w](\".\",O)),10)),x),cssCalc:function(){var e,n,r=t.createElement(\"div\"),i=[\"calc\",\"-webkit-calc\",\"-moz-calc\",\"-o-calc\"];for(e=0;e<i.length;++e)if(n=i[e],r[c.s].cssText=\"width:\"+n+\"(1px);\",r[c.s].length)return n;return null}(),restrictedMeasuring:function(){v.css(o,a);var e={w:p[c.sW],h:p[c.sH]};v.css(o,\"visible\");var t={w:p[c.sW],h:p[c.sH]};return e.w-t.w!=0||e.h-t.h!=0}(),rtlScrollBehavior:function(){v.css({\"overflow-y\":a,\"overflow-x\":s,direction:\"rtl\"}).scrollLeft(0);var e=v.offset(),t=y.offset();v.scrollLeft(999);var n=y.offset();return{i:e.left===t.left,n:t.left-n.left==0}}(),supportTransform:H(\"transform\"),supportTransition:H(\"transition\"),supportPassiveEvents:function(){var t=!1;try{e.addEventListener(\"test\",null,Object.defineProperty({},\"passive\",{get:function(){t=!0}}))}catch(n){}return t}(),supportResizeObserver:!!l.rO(),supportMutationObserver:!!l.mO()}),v.removeAttr(c.s).remove(),function(){if(!C.x||!C.y){var t=u.abs,n=l.wW(),r=l.wH(),o=c(),a=function(){if(h().length>0){var e=l.wW(),a=l.wH(),p=e-n,y=a-r;if(0===p&&0===y)return;var x,m=u.round(e/(n/100)),w=u.round(a/(r/100)),b=t(p),g=t(y),S=t(m),O=t(w),z=c(),A=b>2&&g>2,W=!s(S,O),C=A&&W&&(z!==o&&o>0),H=i.nativeScrollbarSize;C&&(f.append(v),x=i.nativeScrollbarSize=T(v[0]),v.remove(),H.x===x.x&&H.y===x.y||d.each(h(),function(){h(this)&&h(this).update(\"zoom\")})),n=e,r=a,o=z}};d(e).on(\"resize\",a)}function s(e,n){var r=t(e),i=t(n);return!(r===i||r+1===i||r-1===i)}function c(){var t=e.screen.deviceXDPI||0,n=e.screen.logicalXDPI||1;return e.devicePixelRatio||t/n}}()}function T(e){var t,r=this,i=\"autoUpdate\",o=i+\"Interval\",a=c.l,s=[],f=[],h=!1,v=33,p=v,y=l.now(),x=function(){if(s[a]>0&&h){t=l.rAF()(function(){x()});var e=l.now(),r=e-y;if(r>p){y=e-r%p;for(var c=v,d=0;d<s[a];d++){var m=s[d];if(m!==n){var w=m.options(),b=w[i],g=u.max(1,w[o]),S=l.now();(!0===b||null===b)&&S-f[d]>g&&(m.update(\"auto\"),f[d]=new Date(S+=g)),c=u.max(1,u.min(c,g))}}p=c}}else p=v};r.add=function(t){-1===d.inArray(t,s)&&(s.push(t),f.push(l.now()),s[a]>0&&!h&&(h=!0,e.autoUpdateLoop=h,x()))},r.remove=function(r){var i=d.inArray(r,s);i>-1&&(f.splice(i,1),s.splice(i,1),0===s[a]&&h&&(h=!1,e.autoUpdateLoop=h,t!==n&&(l.cAF()(t),t=-1)))}}function k(r,i,o,v,p){if(ti(r)){if(h(r)){var y=h(r);return y.options(i),y}var x,m,w,b,g,S,O,z,A,C,H,T,k,L,E,P,R,D,j,F,N,I,M,U,_,B,q,V,X,Y,K,$,J,Q,G,Z,ee,te,ne,re,ie,oe,ae,se,ce,le,ue,fe,de,he,ve,pe,ye,xe,me,we,be,ge,Se,Oe,ze,Ae,We,Ce,He,Te,ke,Le,Ee,Pe,Re,De,je,Fe,Ne,Ie,Me,Ue,_e,Be,qe,Ve,Xe,Ye,Ke,$e,Je,Qe,Ge,Ze,et,tt,nt,rt,it,ot,at,st,ct,lt,ut,ft,dt,ht,vt,pt,yt,xt,mt,wt,bt,gt,St,Ot,zt,At,Wt,Ct,Ht,Tt,kt,Lt=new e[a],Et=d[c.p],Pt={},Rt={},Dt={},jt={},Ft={},Nt=\"-hidden\",It=\"margin-\",Mt=\"padding-\",Ut=\"border-\",_t=\"top\",Bt=\"right\",qt=\"bottom\",Vt=\"left\",Xt=\"min-\",Yt=\"max-\",Kt=\"width\",$t=\"height\",Jt=\"float\",Qt=\"\",Gt=\"auto\",Zt=\"scroll\",en=\"100%\",tn=\"x\",nn=\"y\",rn=\".\",on=\" \",an=\"scrollbar\",sn=\"-horizontal\",cn=\"-vertical\",ln=Zt+\"Left\",un=Zt+\"Top\",fn=\"mousedown touchstart\",dn=\"mouseup touchend touchcancel\",hn=\"mousemove touchmove\",vn=\"mouseenter\",pn=\"mouseleave\",yn=\"keydown\",xn=\"keyup\",mn=\"selectstart\",wn=\"transitionend webkitTransitionEnd oTransitionEnd\",bn=\"__overlayScrollbarsRO__\",gn=\"os-\",Sn=gn+\"html\",On=gn+\"host\",zn=On+\"-textarea\",An=On+\"-\"+an+sn+Nt,Wn=On+\"-\"+an+cn+Nt,Cn=On+\"-transition\",Hn=On+\"-rtl\",Tn=On+\"-resize-disabled\",kn=On+\"-scrolling\",Ln=On+\"-overflow\",En=Ln+\"-x\",Pn=Ln+\"-y\",Rn=gn+\"textarea\",Dn=Rn+\"-cover\",jn=gn+\"padding\",Fn=gn+\"viewport\",Nn=Fn+\"-native-scrollbars-invisible\",In=Fn+\"-native-scrollbars-overlaid\",Mn=gn+\"content\",Un=gn+\"content-arrange\",_n=gn+\"content-glue\",Bn=gn+\"size-auto-observer\",qn=gn+\"resize-observer\",Vn=gn+\"resize-observer-item\",Xn=Vn+\"-final\",Yn=gn+\"text-inherit\",Kn=gn+an,$n=Kn+\"-track\",Jn=$n+\"-off\",Qn=Kn+\"-handle\",Gn=Qn+\"-off\",Zn=Kn+\"-unusable\",er=Kn+\"-\"+Gt+Nt,tr=Kn+\"-corner\",nr=tr+\"-resize\",rr=nr+\"-both\",ir=nr+sn,or=nr+cn,ar=Kn+sn,sr=Kn+cn,cr=gn+\"dragging\",lr=gn+\"theme-none\",ur=[],fr={},dr=\"added removed on contract\",hr={},vr=42,pr=[];if(Lt.sleep=function(){X=!0},Lt.update=function(e){var t,n,r=hi(e)==s.s,i=\"img\",o=\"load\";r?0===e.indexOf(Gt)?(t=jr(),n=Dr(),(t||n)&&Ir(!1,n,!1,\"+\"==e.slice(-1))):\"zoom\"===e&&Ir(!0,!0):(e=X||e,X=!1,Ir(!1,!1,e,!0)),R||ue.find(i).each(function(e,t){-1===l.inA(t,pr)&&d(t).off(o,Lr).on(o,Lr)})},Lt.options=function(e,t){if(d.isEmptyObject(e)||!d.isPlainObject(e)){if(hi(e)==s.s){if(arguments.length>1){var n={};return li(n,e,t),Mr(n),void Ir()}return ci(K,e)}return K}Mr(e);var r=X||!1;X=!1,Ir(),X=r},Lt.destroy=function(){for(var e in P=!0,p.remove(Lt),zr(),wr(oe),N&&wr(ie),fr)Lt.removeExt(e);Tr(!0),_r(!0),ae&&xi(ae),le&&xi(le),N&&xi(ie),Br(!0),Qr(!0),Ur(!0);for(var t=0;t<pr[c.l];t++)d(pr[t]).off(\"load\",Lr);for(var i in pr=n,h(r,0),Zr(\"onDestroyed\"),Lt)delete Lt[i];Lt=n},Lt.scroll=function(e,t,r,i){if(0===arguments.length||e===n){var o=Rt,a=Dt,l=rt&&V&&w.i,h=rt&&V&&w.n,v=o.cs,p=o.csr,y=o.ms;return v=l?y-v:v,{x:{position:v*=h?-1:1,ratio:p=l?1-p:p,max:y*=h?-1:1,handleOffset:o.ho,handleLength:o.hl,handleLengthRatio:o.hlr,trackLength:o.tl,isRTL:V,isRTLNormalized:rt},y:{position:a.cs,ratio:a.csr,max:a.ms,handleOffset:a.ho,handleLength:a.hl,handleLengthRatio:a.hlr,trackLength:a.tl},position:{x:v,y:a.cs},ratio:{x:p,y:a.csr},max:{x:y,y:a.ms},handleOffset:{x:o.ho,y:a.ho},handleLength:{x:o.hl,y:a.hl},handleLengthRatio:{x:o.hlr,y:a.hlr},trackLength:{x:o.tl,y:a.tl},isRTL:V,isRTLNormalized:rt}}var x,m,b,g,S,O,z,A,W,H=rt,T=[tn,Vt,\"l\"],k=[nn,_t,\"t\"],L=[\"+=\",\"-=\",\"*=\",\"/=\"],E=hi(t)==s.o,P=E?t.complete:i,R={},D={},j=\"end\",F=\"begin\",N=\"center\",I=\"nearest\",M=\"always\",U=\"never\",_=\"ifneeded\",B=c.l,q=[tn,nn,\"xy\",\"yx\"],X=[F,j,N,I],Y=[M,U,_],K=e.hasOwnProperty(\"el\"),$=K?e.el:e,J=!!($ instanceof d||f)&&$ instanceof f,Q=!J&&ti($),G=hi(P)!=s.f?n:function(){m&&Kr(!0),b&&Kr(!1),P()},Z=function(e,t){for(x=0;x<t[B];x++)if(e===t[x])return!0;return!1},ee=function(e,t){var n=e?T:k;if(hi(t=hi(t)==s.s||hi(t)==s.n?[t,t]:t)==s.a)return e?t[0]:t[1];if(hi(t)==s.o)for(H=hi(t.n)==s.b?t.n:H,x=0;x<n[B];x++)if(n[x]in t)return t[n[x]]},te=function(e,t){var r,i,o=hi(t)==s.s;o&&Lt.update(Gt+\"+\");var a,c=e?Rt:Dt,l=c.cs,f=c.ms,d=\" * \",h=V&&e,v=h&&w.n&&!H,p=\"replace\",y=eval;if(o){if(t[B]>2){var m=t.substr(0,2);for(x=0;x<L[B];x++)if(m===L[x]){r=L[x];break}}i=ri(ri(y(t=(t=(t=(t=(t=(t=(t=(t=(t=r!==n?t.substr(2):t)[p](/min/g,0))[p](/</g,0))[p](/max/g,(v?\"-\":Qt)+en))[p](/>/g,(v?\"-\":Qt)+en))[p](/px/g,Qt))[p](/%/g,d+f*(h&&w.n?-1:1)/100))[p](/vw/g,d+jt.w))[p](/vh/g,d+jt.h)),!0).toFixed())}else i=t;if(i!==n&&!isNaN(i)&&hi(i)==s.n){var b=H&&h,g=l*(b&&w.n?-1:1),S=b&&w.i,O=b&&w.n;switch(g=S?f-g:g,r){case\"+=\":a=g+i;break;case\"-=\":a=g-i;break;case\"*=\":a=g*i;break;case\"/=\":a=g/i;break;default:a=i}a=S?f-a:a,a*=O?-1:1,a=h&&w.n?u.min(0,u.max(f,a)):u.max(0,u.min(f,a))}return a===l?n:a},ne=function(e,t,n,r){var i,o,a=[n,n],c=hi(e);if(c==t)e=[e,e];else if(c==s.a){if((i=e[B])>2||i<1)e=a;else for(1===i&&(e[1]=n),x=0;x<i;x++)if(hi(o=e[x])!=t||!Z(o,r)){e=a;break}}else e=c==s.o?[e[tn]||n,e[nn]||n]:a;return{x:e[0],y:e[1]}},re=function(e){var t,n,r=[],i=[_t,Bt,qt,Vt];for(x=0;x<e[B]&&x!==i[B];x++)(n=hi(t=e[x]))==s.b?r.push(t?ri(W.css(It+i[x])):0):r.push(n==s.n?t:0);return r};if(J||Q){var ie,oe=K?e.margin:0,ae=K?e.axis:0,le=K?e.scroll:0,ue=K?e.block:0,fe=[0,0,0,0],de=hi(oe);if(0===(W=J?$:d($))[B])return;Lt.update(Gt+\"+\"),oe=de==s.n||de==s.b?re([oe,oe,oe,oe]):de==s.a?2===(ie=oe[B])?re([oe[0],oe[1],oe[0],oe[1]]):ie>=4?re(oe):fe:de==s.o?re([oe[_t],oe[Bt],oe[qt],oe[Vt]]):fe,S=Z(ae,q)?ae:\"xy\",O=ne(le,s.s,M,Y),z=ne(ue,s.s,F,X),A=oe;var he={l:Rt.cs,t:Dt.cs},ve=se.offset(),pe=W.offset(),ye={x:O.x==U||S==nn,y:O.y==U||S==tn};pe[_t]-=A[0],pe[Vt]-=A[3];var xe={x:u.round(pe[Vt]-ve[Vt]+he.l),y:u.round(pe[_t]-ve[_t]+he.t)};if(V&&(w.n||w.i||(xe.x=u.round(ve[Vt]-pe[Vt]+he.l)),w.n&&H&&(xe.x*=-1),w.i&&H&&(xe.x=u.round(ve[Vt]-pe[Vt]+(Rt.ms-he.l)))),z.x!=F||z.y!=F||O.x==_||O.y==_||V){var me=W[0],we=C?me.getBoundingClientRect():{width:me[c.oW],height:me[c.oH]},be={w:we[Kt]+A[3]+A[1],h:we[$t]+A[0]+A[2]},ge=function(e){var t=Jr(e),n=t._wh,r=t.lt,i=t.xy,o=z[i]==(e&&V?F:j),a=z[i]==N,s=z[i]==I,c=O[i]==U,l=O[i]==_,u=jt[n],f=ve[r],d=be[n],h=pe[r],v=a?2:1,p=h+d/2,y=f+u/2,x=d<=u&&h>=f&&h+d<=f+u;c?ye[i]=!0:ye[i]||((s||l)&&(ye[i]=!!l&&x,o=d<u?p>y:p<y),xe[i]-=o||a?(u/v-d/v)*(e&&V&&H?-1:1):0)};ge(!0),ge(!1)}ye.y&&delete xe.y,ye.x&&delete xe.x,e=xe}R[ln]=te(!0,ee(!0,e)),R[un]=te(!1,ee(!1,e)),m=R[ln]!==n,b=R[un]!==n,(m||b)&&(t>0||E)?E?(t.complete=G,ce.animate(R,t)):(g={duration:t,complete:G},hi(r)==s.a||d.isPlainObject(r)?(D[ln]=r[0]||r.x,D[un]=r[1]||r.y,g.specialEasing=D):g.easing=r,ce.animate(R,g)):(m&&ce[ln](R[ln]),b&&ce[un](R[un]))},Lt.scrollStop=function(e,t,n){return ce.stop(e,t,n),Lt},Lt.getElements=function(e){var t={target:ne[0],host:re[0],padding:se[0],viewport:ce[0],content:ue[0],scrollbarHorizontal:{scrollbar:he[0],track:ve[0],handle:pe[0]},scrollbarVertical:{scrollbar:ye[0],track:xe[0],handle:me[0]},scrollbarCorner:de[0]};return hi(e)==s.s?ci(t,e):t},Lt.getState=function(e){var t=function(e){if(!d.isPlainObject(e))return e;var t=vi(!0,{},e),n=function(e,n){t.hasOwnProperty(e)&&(t[n]=t[e],delete t[e])};return n(\"w\",Kt),n(\"h\",$t),delete t.c,t},n={sleeping:t(X)||!1,autoUpdate:t(!ht),widthAuto:t(ze),heightAuto:t(Ae),padding:t(He),overflowAmount:t(Fe),hideOverflow:t(Oe),hasOverflow:t(Se),contentScrollSize:t(be),viewportSize:t(jt),hostSize:t(we),documentMixed:t(j)};return hi(e)==s.s?ci(n,e):n},Lt.ext=function(e){var t,n=dr.split(\" \"),r=0;if(hi(e)==s.s){if(fr.hasOwnProperty(e))for(t=vi(!0,{},fr[e]);r<n.length;r++)delete t[n[r]]}else for(r in t={},fr)t[r]=vi(!0,{},Lt.ext(r));return t},Lt.addExt=function(t,n){var r,i,o,c,u=e[a].extension(t),f=!0;if(u){if(fr.hasOwnProperty(t))return Lt.ext(t);if((r=u.extensionFactory.call(Lt,vi(!0,{},u.defaultOptions),d,l))&&(hi(o=r.contract)==s.f&&(f=hi(c=o(e))==s.b?c:f),f))return fr[t]=r,hi(i=r.added)==s.f&&i(n),Lt.ext(t)}else console.warn('A extension with the name \"'+t+\"\\\" isn't registered.\")},Lt.removeExt=function(e){var t,n=fr[e];return!!n&&(delete fr[e],hi(t=n.removed)==s.f&&t(),!0)},wi(r,i,o))return h(r,Lt),Lt;Lt=n}function yr(e,t,n){for(var r=t.split(on),i=0;i<r.length;i++)e[0].addEventListener(r[i],n,{passive:!0})}function xr(e,t,n){for(var r=t.split(on),i=0;i<r.length;i++)e[0].removeEventListener(r[i],n,{passive:!0})}function mr(e,t){var r=3333333,i=l.rO(),o=\"animationstart mozAnimationStart webkitAnimationStart MSAnimationStart\",a=\"childNodes\",u=function(){e[un](r)[ln](V?w.n?-r:w.i?0:r:r),t()};if(T){var f=e.append(si(qn+\" observed\")).contents()[0];(f[bn]=new i(u)).observe(f)}else if(g>9||!b){e.prepend(si(qn,si({className:Vn,dir:\"ltr\"},si(Vn,si(Xn))+si(Vn,si({className:Xn,style:\"width: 200%; height: 200%\"})))));var h,p,y,x,m=e[0][a][0][a][0],S=d(m[a][1]),O=d(m[a][0]),z=d(O[0][a][0]),A=m[c.oW],W=m[c.oH],C=2,H=v.nativeScrollbarSize,k=function(){O[ln](r)[un](r),S[ln](r)[un](r)},L=function(){p=0,h&&(A=y,W=x,u())},E=function(e){return y=m[c.oW],x=m[c.oH],h=y!=A||x!=W,e&&h&&!p?(l.cAF()(p),p=l.rAF()(L)):e||L(),k(),e&&(l.prvD(e),l.stpP(e)),!1},P={},R={};R[_t]=-(H.y+1)*C,R[Bt]=H.x*-C,R[qt]=H.y*-C,R[Vt]=-(H.x+1)*C,d(m).css(R),O.on(Zt,E),S.on(Zt,E),e.on(o,function(){E(!1)}),P[Kt]=r,P[$t]=r,z.css(P),k()}else{var D=Z[0],j=D.attachEvent,F=g!==n;if(j)e.prepend(si(qn)),mi(e,rn+qn)[0].attachEvent(\"onresize\",u);else{var N=D.createElement(s.o);N.setAttribute(\"tabindex\",\"-1\"),N.setAttribute(c.c,qn),N.onload=function(){var e=this.contentDocument.defaultView;e.addEventListener(\"resize\",u),e.document.documentElement.style.display=\"none\"},N.type=\"text/html\",F&&e.prepend(N),N.data=\"about:blank\",F||e.prepend(N),e.on(o,u)}}if(e[0]===oe[0]){var I=function(){var t=re.css(\"direction\"),n={},i=0,o=!1;return t!==Ee&&(\"ltr\"===t?(n[Vt]=0,n[Bt]=Gt,i=r):(n[Vt]=Gt,n[Bt]=0,i=w.n?-r:w.i?0:r),oe.children().eq(0).css(n),e[ln](i)[un](r),Ee=t,o=!0),o};I(),e.on(Zt,function(e){return I()&&Ir(),l.prvD(e),l.stpP(e),!1})}}function wr(e){if(T){var t=e.contents()[0];t[bn].disconnect(),delete t[bn]}else xi(e.children(rn+qn).eq(0))}function br(e){}function gr(e){}function Sr(){if(k){var e,t,n,r,i,o,a=11,s=l.mO(),u=l.now();ft=new s(function(n){if(E&&!X){var r,i=!1;d.each(n,function(){if(e=(r=this).target,t=r.attributeName,i=t===c.c?Pr(r.oldValue,e.className):t!==c.s||r.oldValue!==e[c.s].cssText)return!1}),i&&Lt.update(Gt)}}),dt=new s(function(e){if(E&&!X){var t=!1;d.each(e,function(){return!(t=Rr(this))}),t&&(r=l.now(),i=Ae||ze,o=function(){P||(u=r,R&&Nr(),i?Ir():Lt.update(Gt))},clearTimeout(n),a<=0||r-u>a||!i?o():n=setTimeout(o,a))}})}}function Or(){k&&!ht&&(ft.observe(re[0],{attributes:!0,attributeOldValue:!0,attributeFilter:[c.i,c.c,c.s]}),dt.observe(R?ne[0]:ue[0],{attributes:!0,attributeOldValue:!0,subtree:!R,childList:!R,characterData:!R,attributeFilter:R?[\"wrap\",\"cols\",\"rows\"]:[c.i,c.c,c.s]}),ht=!0)}function zr(){k&&ht&&(ft.disconnect(),dt.disconnect(),ht=!1)}function Ar(){if(!X){var e=oe[0],t={w:e[c.sW],h:e[c.sH]};if(E){var n=fi(t,Qe);Qe=t,n&&Ir(!0,!1)}else Qe=t}}function Wr(){St&&Xr(!0)}function Cr(){St&&!te.hasClass(cr)&&Xr(!1)}function Hr(){gt&&(Xr(!0),clearTimeout(xt),xt=setTimeout(function(){gt&&!P&&Xr(!1)},100))}function Tr(e){var t=e?xr:yr,n=e?\"off\":\"on\",r=function(e,r,i){H?t(e,r,i):e[n](r,i)};gt&&!e?r(re,hn,Hr):(e&&r(re,hn,Hr),r(re,vn,Wr),r(re,pn,Cr)),E||e||re.one(\"mouseover\",Wr)}function kr(e){return l.prvD(e),!1}function Lr(){Ir()}function Er(){var e={};return D&&le&&(e.w=ri(le.css(Xt+Kt)),e.h=ri(le.css(Xt+$t)),e.c=fi(e,ct),e.f=!0),ct=e,e.c||!1}function Pr(e,t){var r=t!==n&&null!==t?t.split(on):Qt,i=e!==n&&null!==e?e.split(on):Qt;if(r===Qt&&i===Qt)return!1;var o,a,s,c,l,u=ni(i,r),f=!1,h=ot!==n&&null!==ot?ot.split(on):[Qt],v=it!==n&&null!==it?it.split(on):[Qt],p=d.inArray(lr,u);for(p>-1&&u.splice(p,1),a=0;a<u.length;a++)if(0!==(o=u[a]).indexOf(On)){for(c=!0,l=!0,s=0;s<h.length;s++)if(o===h[s]){c=!1;break}for(s=0;s<v.length;s++)if(o===v[s]){l=!1;break}if(c&&l){f=!0;break}}return f}function Rr(e){var t=e.attributeName,n=e.target,r=e.type,i=\"closest\";if(n===ue[0])return null===t;if(\"attributes\"===r&&(t===c.c||t===c.s)&&!R){if(t===c.c&&d(n).hasClass(On))return Pr(e.oldValue,n.getAttribute(c.c));if(typeof n[i]!=s.f)return!0;if(null!==n[i](rn+qn)||null!==n[i](rn+Kn)||null!==n[i](rn+tr))return!1}return!0}function Dr(){if(X)return!1;var e,t=R&&ze&&!Ue?ne.val().length:0,n=!ht&&ze&&!R,r={},i={};L&&(r={x:ce[0][c.sW],y:ce[0][c.sH]}),n&&(e=ue.css(Jt),i[Jt]=V?Bt:Vt,i[Kt]=Gt,ue.css(i));var o={w:ai()[c.sW]+t,h:ai()[c.sH]+t};n&&(i[Jt]=e,i[Kt]=en,ue.css(i));var a=Er(),s=fi(o,Je),l=fi(r,lt,tn,nn);return Je=o,lt=r,s||a||l}function jr(){if(X||ht)return!1;var e=re.attr(c.i)||Qt,t=ui(e,Be),n=re.attr(c.c)||Qt,r=ui(n,qe),i=re.attr(c.s)||Qt,o=ui(i,Ve),a=re.is(\":visible\")||Qt,s=ui(a,Xe),l=R&&ne.attr(\"rows\")||Qt,u=ui(l,Ye),f=R&&ne.attr(\"cols\")||Qt,d=ui(f,Ke),h=R&&ne.attr(\"wrap\")||Qt,v=ui(h,$e);return Be=e,r&&(r=Pr(qe,n)),qe=n,Ve=i,Xe=a,Ye=l,Ke=f,$e=h,t||r||o||s||u||d||v}function Fr(e){if(!E)return!0;var t=\"flex-grow\",n=\"flex-shrink\",r=\"flex-basis\",i=[Kt,Xt+Kt,Yt+Kt,It+Vt,It+Bt,Vt,Bt,\"font-weight\",\"word-spacing\",t,n,r],o=[Mt+Vt,Mt+Bt,Ut+Vt+Kt,Ut+Bt+Kt],a=[$t,Xt+$t,Yt+$t,It+_t,It+qt,_t,qt,\"line-height\",t,n,r],s=[Mt+_t,Mt+qt,Ut+_t+Kt,Ut+qt+Kt],c=\"s\",l=\"v-s\",u=je.x===c||je.x===l,f=!1,d=function(e,t){for(var n=0;n<e.length;n++)if(e[n]===t)return!0;return!1};return(je.y===c||je.y===l)&&((f=d(a,e))||F||(f=d(s,e))),u&&!f&&((f=d(i,e))||F||(f=d(o,e))),f}function Nr(){if(!X){var e,t,n,r,i=!Ue,o=jt.w,a=jt.h,s={},l=ze||i,f=ne[0];return s[Xt+Kt]=Qt,s[Xt+$t]=Qt,s[Kt]=Gt,ne.css(s),e=f[c.oW],t=l?u.max(e,f[c.sW]-1):1,s[Kt]=ze?Gt:en,s[Xt+Kt]=en,s[$t]=Gt,ne.css(s),n=f[c.oH],r=u.max(n,f[c.sH]-1),s[Kt]=t,s[$t]=r,fe.css(s),s[Xt+Kt]=o,s[Xt+$t]=a,ne.css(s),{ow:e,oh:n,dw:t,dh:r}}}function Ir(e,t,r,i){var o=l.now(),a=vr>0&&E&&o-J<vr&&!Ae&&!ze&&!i,s=re.is(\":hidden\"),f=ui(s,ut,r);if(ut=s,clearTimeout(Q),a&&(hr.h=e,hr.c=t,hr.f=r,Q=setTimeout(Ir,vr)),!(P||a||X||E&&!r&&s||\"inline\"===re.css(\"display\"))){J=o,e=e||hr.h,t=t||hr.c,r=r||hr.f,hr={},e=e!==n&&e,t=t!==n&&t,r=r!==n&&r,!S||x.x&&x.y?z=vi(!0,{},v.nativeScrollbarSize):(z.x=0,z.y=0),Ft={x:3*(z.x+(x.x?0:3)),y:3*(z.y+(x.y?0:3))},br(oe),br(ie);var h={l:ce[ln](),t:ce[un]()},y=$.scrollbars,g=$.textarea,A=y.visibility,W=ui(A,Ge,r),C=y.autoHide,H=ui(C,Ze,r),T=y.clickScrolling,k=ui(T,et,r),j=y.dragScrolling,Y=ui(j,tt,r),K=$.className,G=ui(K,it,r),Z=$.resize,ee=ui(Z,nt,r)&&!D,te=!!R&&\"off\"!==ne.attr(\"wrap\"),he=ui(te,Ue,r),ve=$.paddingAbsolute,pe=ui(ve,Pe,r),ye=$.clipAlways,xe=ui(ye,Re,r),me=$.sizeAutoCapable&&!D,Ee=ui(me,Me,r),Be=$.nativeScrollbarsOverlaid.showNativeScrollbars,qe=ui(Be,Ne),Ve=$.autoUpdate,Xe=ui(Ve,Ie),Ye=$.overflowBehavior,Ke=fi(Ye,je,tn,nn,r),$e=g.dynWidth,Je=ui(st,$e),Qe=g.dynHeight,lt=ui(at,Qe);if(wt=\"n\"===C,bt=\"s\"===C,gt=\"m\"===C,St=\"l\"===C,mt=y.autoHideDelay,Ot=y.touchSupport,ot=it,Wt=\"n\"===Z,Ct=\"b\"===Z,Ht=\"h\"===Z,Tt=\"v\"===Z,rt=$.normalizeRTL,Be=Be&&x.x&&x.y,Ge=A,Ze=C,et=T,tt=j,it=K,nt=Z,Ue=te,Pe=ve,Re=ye,Me=me,Ne=Be,Ie=Ve,je=vi(!0,{},Ye),st=$e,at=Qe,Se=Se||{x:!1,y:!1},G&&(yi(re,ot+on+lr),pi(re,K!==n&&null!==K&&K.length>0?K:lr)),Xe&&(!0===Ve?(zr(),p.add(Lt)):null===Ve&&b?(zr(),p.add(Lt)):(p.remove(Lt),Or())),Ee)if(me)if(ae===n&&(ae=d(si(_n)),se.before(ae)),N)ie.show();else{ie=d(si(Bn)),ae.before(ie);var ft={w:-1,h:-1};mr(ie,function(){var e={w:ie[0][c.oW],h:ie[0][c.oH]};fi(e,ft)&&(E&&Ae&&e.h>0||ze&&e.w>0?Ir():(E&&!Ae&&0===e.h||!ze&&0===e.w)&&Ir()),ft=e}),N=!0,null!==O&&ie.css($t,O+\"(100% + 1px)\")}else N&&ie.hide();r&&(oe.find(\"*\").trigger(Zt),N&&ie.find(\"*\").trigger(Zt));var dt,vt=re.css(\"direction\"),yt=ui(vt,Le,r),xt=re.css(\"box-sizing\"),zt=ui(xt,Ce,r),At={c:r,t:ri(re.css(Mt+_t)),r:ri(re.css(Mt+Bt)),b:ri(re.css(Mt+qt)),l:ri(re.css(Mt+Vt))};try{dt=N?ie[0].getBoundingClientRect():null}catch(ki){return}F=\"border-box\"===xt;var Et=(V=\"rtl\"===vt)?Vt:Bt,Rt=V?Bt:Vt,Dt=re[0],Nt=se[0],rn=!1,an=!(!N||\"none\"===re.css(Jt))&&(0===u.round(dt.right-dt.left)&&(!!ve||Dt[c.cW]-I>0));if(me&&!an){var sn=Dt[c.oW],cn=ae.css(Kt);ae.css(Kt,Gt);var dn=Dt[c.oW];ae.css(Kt,cn),(rn=sn!==dn)||(ae.css(Kt,sn+1),dn=Dt[c.oW],ae.css(Kt,cn),rn=sn!==dn)}var hn=(an||rn)&&me&&!s,vn=ui(hn,ze,r),pn=!hn&&ze,yn=!(!N||s)&&0===u.round(dt.bottom-dt.top),xn=ui(yn,Ae,r),mn=!yn&&Ae,wn=\"-\"+Kt,bn=hn&&F||!F,gn=yn&&F||!F,Sn={c:r,t:gn?ri(re.css(Ut+_t+wn),!0):0,r:bn?ri(re.css(Ut+Bt+wn),!0):0,b:gn?ri(re.css(Ut+qt+wn),!0):0,l:bn?ri(re.css(Ut+Vt+wn),!0):0},On={c:r,t:ri(re.css(It+_t)),r:ri(re.css(It+Bt)),b:ri(re.css(It+qt)),l:ri(re.css(It+Vt))},zn={h:String(re.css(Yt+$t)),w:String(re.css(Yt+Kt))},An={},Wn={},Cn=function(){return{w:Dt[c.cW],h:Dt[c.cH]}},Rn=function(){var e=Nt.getBoundingClientRect();return e[Kt]?{w:e[Kt],h:e[$t]}:{w:Nt[c.oW],h:Nt[c.oH]}};if(I=At.l+At.r,M=At.t+At.b,At.ax=ve?I:0,At.ay=ve?M:0,At.c=di(At,He),U=Sn.l+Sn.r,_=Sn.t+Sn.b,Sn.c=di(Sn,Te),B=On.l+On.r,q=On.t+On.b,On.c=di(On,ke),zn.ih=ri(zn.h),zn.iw=ri(zn.w),zn.ch=zn.h.indexOf(\"px\")>-1,zn.cw=zn.w.indexOf(\"px\")>-1,zn.c=fi(zn,We,r),Le=vt,Ce=xt,ze=hn,Ae=yn,He=At,Te=Sn,ke=On,We=zn,yt&&N&&ie.css(Jt,Rt),At.c||yt||pe||vn||xn||zt||Ee){var Dn={},jn={};ei(Wn,It,[-At.t,-At.r,-At.b,-At.l]),ve?(ei(Dn,Qt,[At.t,At.r,At.b,At.l]),ei(R?jn:An,Mt)):(ei(Dn,Qt),ei(R?jn:An,Mt,[At.t,At.r,At.b,At.l])),se.css(Dn),ne.css(jn)}jt=Rn();var Fn=!!R&&Nr();if(yn&&(xn||pe||zt||zn.c||At.c||Sn.c)?(zn.cw&&(An[Yt+$t]=zn.ch?zn.ih-At.ay+(F?-_:M):Qt),An[$t]=Gt):(xn||pe)&&(An[Yt+$t]=Qt,An[$t]=en),hn&&(vn||pe||zt||zn.c||At.c||Sn.c||yt)?(zn.cw&&(An[Yt+Kt]=zn.cw?zn.iw-At.ax+(F?-U:I)+(x.y?m.y:0):Qt),An[Kt]=Gt,Wn[Yt+Kt]=en):(vn||pe)&&(An[Yt+Kt]=Qt,An[Kt]=en,An[Jt]=Qt,Wn[Yt+Kt]=Qt),hn&&(zn.cw||(An[Yt+Kt]=Qt),Wn[Kt]=R&&$e?Fn.dw:Gt,An[Kt]=Gt,An[Jt]=Rt),yn&&(zn.ch||(An[Yt+$t]=Qt),Wn[$t]=R?Qe?Fn.dh:Gt:ue[0][c.cH]),me&&ae.css(Wn),ue.css(An),An={},Wn={},e||t||yt||zt||pe||vn||hn||xn||yn||zn.c||qe||Ke||xe||ee||W||Je||lt||he||r){var Nn=\"overflow\",In=Nn+\"-x\",Mn=Nn+\"-y\",qn=\"hidden\",Vn=\"visible\",Xn=L?x.x||x.y||jt.w<Ft.y||jt.h<Ft.x||yn||f:yn,Yn={},Kn=Se.y&&Oe.ys&&!Be?x.y?ce.css(Et):-z.y:0,$n=Se.x&&Oe.xs&&!Be?x.x?ce.css(qt):-z.x:0;ei(Yn,Qt),ce.css(Yn),Xn&&ue.css(Nn,qn);var Jn=ai(),Qn=L&&!Xn?ce[0]:Jn,Gn={w:Jn[c.cW],h:Jn[c.cH]},Zn={w:u.max(Jn[c.sW],Qn[c.sW]),h:u.max(Jn[c.sH],Qn[c.sH])},er={w:R&&Fn&&!$e?Fn.ow:hn?Gn.w:Zn.w,h:R&&Fn&&!Qe?Fn.oh:yn?Gn.h:Zn.h};Yn[qt]=mn?Qt:$n,Yn[Et]=pn?Qt:Kn,ce.css(Yn),jt=Rn();var tr=Cn(),ar={w:u.max(er.w+At.ax,tr.w-I),h:u.max(er.h+At.ay,tr.h-M)};if(ar.c=fi(ar,De,r),De=ar,me){(ar.c||yn||hn)&&(Wn[Kt]=ar.w,Wn[$t]=ar.h);var sr=Wn[Kt]+(F?U:-I),cr=Wn[$t]+(F?_:-M),ur={};(!hn||!hn&&Sn.c)&&(Wn[Kt]=tr.w-(F?0:I+U)-1-B),(!yn||!yn&&Sn.c)&&(Wn[$t]=tr.h-(F?0:M+_)-1-q),hn&&zn.cw&&zn.iw===sr&&(Wn[Kt]=sr+(F?0:I)+1),yn&&zn.ch&&zn.ih===cr&&(Wn[$t]=cr+(F?0:M)+1),hn&&(Gn.w<jt.w||R&&!te)&&0===I&&(R&&(ur[Kt]=ri(fe.css(Kt))-1),Wn[Kt]-=1),yn&&(Gn.h<jt.h||R)&&0===M&&(R&&(ur[$t]=ri(fe.css($t))-1),Wn[$t]-=1),er.h>0&&(Wn[Kt]=u.max(1,Wn[Kt]),Wn[$t]=u.max(1,Wn[$t])),R&&fe.css(ur),ae.css(Wn)}hn&&(An[Kt]=en),!hn||F||ht||(An[Jt]=\"none\"),ue.css(An),An={};var fr=Jn.getBoundingClientRect(),dr=fr[Kt]||0,pr=fr[$t]||0,yr={w:u.max(Jn[c.sW],Qn[c.sW])+ri(dr)-dr,h:u.max(Jn[c.sH],Qn[c.sH])+ri(pr)-pr};yr.c=t=fi(yr,be,r),be=yr,Xn&&ue.css(Nn,Qt),jt=Rn(),e=fi(tr=Cn(),we),we=tr;var xr={x:\"v-s\"===Ye.x,y:\"v-s\"===Ye.y},wr={x:\"v-h\"===Ye.x,y:\"v-h\"===Ye.y},Sr={x:\"s\"===Ye.x,y:\"s\"===Ye.y},Ar={x:u.max(0,u.round(100*(yr.w-jt.w))/100),y:u.max(0,u.round(100*(yr.h-jt.h))/100)},Wr=R&&(0===jt.w||0===jt.h),Cr=0===ce[0].scrollLeftMax&&Ar.x>0&&Ar.x<1||0===ce[0].scrollTopMax&&Ar.y>0&&Ar.y<1;(Wr||Cr)&&(Ar.x=Ar.y=0);var Hr={x:Ar.x>0,y:Ar.y>0},kr={x:Hr.x,y:Hr.y};(xr.x||wr.x)&&(kr.x=Hr.y&&!xr.y&&!wr.y),(xr.y||wr.y)&&(kr.y=Hr.x&&!xr.x&&!wr.x),kr.xs=!!kr.x&&(Sr.x||xr.x),kr.ys=!!kr.y&&(Sr.y||xr.y);var Lr={x:Hr.x&&kr.xs,y:Hr.y&&kr.ys},Pr=Fe;if(Ar.c=fi(Ar,Fe,tn,nn,r),Fe=Ar,Hr.c=fi(Hr,Se,tn,nn,r),Se=Hr,kr.c=fi(kr,Oe,tn,nn,r),Oe=kr,x.x||x.y){var Rr=\"px solid transparent\",Dr={},jr={},Fr=r;(Hr.x||Hr.y)&&(jr.w=x.y&&Hr.y?yr.w+m.y:Qt,jr.h=x.x&&Hr.x?yr.h+m.x:Qt,Fr=ui(jr,ge,r),ge=jr),(Hr.c||kr.c||yr.c||yt||vn||xn||hn||yn||qe)&&(An[It+Rt]=An[Ut+Rt]=Qt,x.x&&Hr.x&&kr.xs?(An[It+qt]=yn?Be?Qt:m.x:Qt,An[Ut+qt]=yn||Be?Qt:m.x+Rr):(jr.h=An[It+qt]=An[Ut+qt]=Qt,Fr=!0),x.y&&Hr.y&&kr.ys?(An[It+Et]=hn?Be?Qt:m.y:Qt,An[Ut+Et]=Be?Qt:m.y+Rr):(jr.w=An[It+Et]=An[Ut+Et]=Qt,Fr=!0)),Be&&(jr.w=jr.h=Qt,Fr=!0),Fr&&(Dr[Kt]=kr.y?jr.w:Qt,Dr[$t]=kr.x?jr.h:Qt,le||(le=d(si(Un)),ce.prepend(le)),le.css(Dr)),ue.css(An)}var Mr={};Dn={};if(e||Hr.c||kr.c||yr.c||Ke||zt||qe||yt||xe||xn){Mr[Rt]=Qt;var Ur=function(){Mr[qt]=Qt,Pt.h=0},_r=function(){Mr[Et]=Qt,Pt.w=0};if(Hr.x&&kr.xs?(Mr[In]=Zt,Be?Ur():(Mr[qt]=-(x.x?m.x:z.x),Pt.h=x.x?m.y:0)):(Mr[In]=Qt,Ur()),Hr.y&&kr.ys?(Mr[Mn]=Zt,Be?_r():(Mr[Et]=-(x.y?m.y:z.y),Pt.w=x.y?m.x:0)):(Mr[Mn]=Qt,_r()),(jt.h<Ft.x||jt.w<Ft.y)&&(Hr.x&&kr.x&&!x.x||Hr.y&&kr.y&&!x.y)?(Mr[Mt+_t]=Ft.x,Mr[It+_t]=-Ft.x,Mr[Mt+Rt]=Ft.y,Mr[It+Rt]=-Ft.y):Mr[Mt+_t]=Mr[It+_t]=Mr[Mt+Rt]=Mr[It+Rt]=Qt,Mr[Mt+Et]=Mr[It+Et]=Qt,Hr.x&&kr.x||Hr.y&&kr.y||Wr?R&&Wr&&(Dn[In]=Dn[Mn]=qn):(!ye||wr.x||xr.x||wr.y||xr.y)&&(R&&(Dn[In]=Dn[Mn]=Qt),Mr[In]=Mr[Mn]=Vn),se.css(Dn),ce.css(Mr),Mr={},(Hr.c||zt||vn||xn)&&(!x.x||!x.y)){var Br=ue[0],qr=Br[c.s];qr.webkitTransform=\"scale(1)\",qr.display=\"run-in\",Br[c.oH],qr.display=Qt,qr.webkitTransform=Qt}}if(An={},yt||vn||xn)if(V&&hn){var Jr=ue.css(Jt),Qr=u.round(ue.css(Jt,Qt).css(Vt,Qt).position().left);ue.css(Jt,Jr),Qr!==u.round(ue.position().left)&&(An[Vt]=Qr)}else An[Vt]=Qt;ue.css(An);var Gr,ti,ni=\"v\"===A,oi=\"h\"===A,ci=\"a\"===A,li=l.bind(Vr,0,!0,!0,Lr.x),hi=l.bind(Vr,0,!1,!0,Lr.y),xi=l.bind(Vr,0,!0,!1,Lr.x),mi=l.bind(Vr,0,!1,!1,Lr.y);if(kr.x||kr.y?pi(re,Ln):yi(re,Ln),kr.x?pi(re,En):yi(re,En),kr.y?pi(re,Pn):yi(re,Pn),yt&&(V?pi(re,Hn):yi(re,Hn)),D&&pi(re,Tn),ee){var wi=function(){de.on(fn,kt)},bi=function(){de.off(fn,kt)};Wt?(pi(re,Tn),yi(de,[nr,rr,ir,or].join(on)),bi()):(yi(re,Tn),pi(de,nr),Ct?pi(de,rr):Ht?pi(de,ir):Tt&&pi(de,or),bi(),wi())}if((W||Ke||kr.c||Hr.c||qe)&&(Be?qe&&(yi(re,kn),Be&&(xi(),mi())):ci?(Lr.x?li():xi(),Lr.y?hi():mi()):ni?(li(),hi()):oi&&(xi(),mi())),(H||qe)&&(St||gt?(Tr(!0),Tr()):Tr(!0),wt?Xr(!0):Xr(!1,!0)),(e||Ar.c||xn||vn||ee||zt||pe||qe||yt)&&(Yr(!0),Kr(!0,h.l),Yr(!1),Kr(!1,h.t)),k&&$r(!0,T),Y&&$r(!1,j),R&&t){var gi=ii();if(gi){var Si=_e===n||gi.rows!==_e.rows,Oi=gi.cR,zi=gi.cC,Ai=gi.w,Wi=gi.r,Ci=gi.c,Hi=gi.p>=gi.m&&pt,Ti={x:te||zi!==Ci||Oi!==Ai?-1:Fe.x,y:(te?Hi||Si&&Pr!==n&&h.t===Pr.y:(Hi||Si)&&Oi===Wi)?Fe.y:-1};Gr=Ti.x>-1,(ti=Ti.y>-1)&&ce[un](Ti.y),Gr&&(V&&rt&&w.i?ce[ln](0):ce[ln](Ti.x))}_e=gi}V&&w.i&&x.y&&Hr.x&&rt&&(h.l+=Pt.w||0),Gr||ce[ln](h.l),ti||ce[un](h.t),hn&&re[ln](0),yn&&re[un](0),yt&&Zr(\"onDirectionChanged\",{isRTL:V,dir:vt}),e&&Zr(\"onHostSizeChanged\",{width:we.w,height:we.h}),t&&Zr(\"onContentSizeChanged\",{width:be.w,height:be.h}),(Hr.c||kr.c)&&Zr(\"onOverflowChanged\",{x:Hr.x,y:Hr.y,xScrollable:kr.xs,yScrollable:kr.ys,clipped:kr.x||kr.y}),Ar.c&&Zr(\"onOverflowAmountChanged\",{x:Ar.x,y:Ar.y})}D&&(Se.c||ct.c)&&(ct.f||Er(),x.y&&Se.x&&ue.css(Xt+Kt,ct.w+m.y),x.x&&Se.y&&ue.css(Xt+$t,ct.h+m.x),ct.c=!1),gr(oe),gr(ie),Zr(\"onUpdated\",{forced:r})}}function Mr(e){K=vi(!0,{},K,W.v(e,W.t,!0)),$=vi(!0,{},$,W.v(e,W.t,!1,!0))}function Ur(e){var t=$.textarea.inheritedAttrs,n={},r=function(){var t=e?ne:re;d.each(n,function(e,n){hi(n)==s.s&&(e==c.c?t.addClass(n):t.attr(e,n))})},i=[On,zn,Tn,Hn,An,Wn,Cn,kn,Ln,En,Pn,lr,it].join(on);if(hi(t=hi(t)==s.s?t.split(\" \"):t)==s.a&&d.each(t,function(t,r){hi(r)==s.s&&(n[r]=e?re.attr(r):ne.attr(r))}),e)ue.contents().unwrap().unwrap().unwrap(),R?(ne.removeAttr(c.s),r(),yi(ne,i+on+Rn+on+Yn).unwrap(),xi(fe),xi(re)):(yi(ne,On),yi(re,i)),D&&yi(ee,Sn),xi(oe);else{if(R){var o={};$.sizeAutoCapable||(o[Kt]=ne.css(Kt),o[$t]=ne.css($t)),ne.wrap(si(zn)),(re=ne.parent()).css(o).wrapInner(si(Mn+on+Yn)).wrapInner(si(Fn+on+Yn)).wrapInner(si(jn+on+Yn)),ue=mi(re,rn+Mn),ce=mi(re,rn+Fn),se=mi(re,rn+jn),fe=d(si(Dn)),ue.prepend(fe),pi(ne,Rn+on+Yn),r()}else(re=ne).wrapInner(si(Mn)).wrapInner(si(Fn)).wrapInner(si(jn)),ue=mi(re,rn+Mn),ce=mi(re,rn+Fn),se=mi(re,rn+jn),pi(ne,On);S&&pi(ce,x.x&&x.y?In:Nn),D&&pi(ee,Sn),oe=d(si(\"os-resize-observer-host\")),re.prepend(oe)}}function _r(e){var t,r,i,o,a=[112,113,114,115,116,117,118,119,120,121,123,33,34,37,38,39,40,16,17,18,19,20,144],s=[],c=175,u=e?\"off\":\"on\";!e&&R&&(i=function(e){Nr(),Lt.update(Gt),e&&clearInterval(t)},(vt={})[Zt]=function(e){return ne[ln](w.i&&rt?9999999:0),ne[un](0),l.prvD(e),l.stpP(e),!1},vt.drop=function(){setTimeout(function(){P||i()},50)},vt.focus=function(){pt=!0},vt.focusout=function(){pt=!1,s=[],i(!0)},g>9||!b?vt.input=function(){i()}:(vt[yn]=function(e){var n=e.keyCode;d.inArray(n,a)>-1||(s.length||(i(),t=setInterval(i,1e3/60)),-1===d.inArray(n,s)&&s.push(n))},vt[xn]=function(e){var t=e.keyCode,n=d.inArray(t,s);d.inArray(t,a)>-1||(n>-1&&s.splice(n,1),s.length||i(!0))})),R?d.each(vt,function(e,t){ne[u](e,t)}):ue[u](wn,function(e){!0!==Ie&&Fr((e=e.originalEvent||e).propertyName)&&Ir(Gt)}),e||(o=function(e){X||(r!==n?clearTimeout(r):((bt||gt)&&Xr(!0),oi()||pi(re,kn),Zr(\"onScrollStart\",e)),Kr(!0),Kr(!1),Zr(\"onScroll\",e),r=setTimeout(function(){P||(clearTimeout(r),r=n,(bt||gt)&&Xr(!1),oi()||yi(re,kn),Zr(\"onScrollStop\",e))},c))},H?yr(ce,Zt,o):ce.on(Zt,o))}function Br(e){e?(xi(he),xi(ye)):(he=d(si(Kn+on+ar)),ve=d(si($n)),pe=d(si(Qn)),ye=d(si(Kn+on+sr)),xe=d(si($n)),me=d(si(Qn)),he.append(ve),ve.append(pe),ye.append(xe),xe.append(me),se.after(ye),se.after(he))}function qr(e){var t,r,i,o=Jr(e),a=G.top!==G,s=o.xy,c=o.XY,f=Zt+o.LT,h=\"active\",v=1,p=[16,17];function y(){v=.5}function x(){v=1}function m(e){d.inArray(e.keyCode,p)>-1&&y()}function b(e){d.inArray(e.keyCode,p)>-1&&x()}function S(e){var t=(e.originalEvent||e).touches!==n;return!(X||P||oi()||!tt||t&&!Ot)&&(1===l.mBtn(e)||t)}function O(n){if(S(n)){var i=o.i.tl,u=o.i.hl,d=o.i.ms*(((g&&a?n[\"screen\"+c]:l.page(n)[s])-r)/(i-u));d=isFinite(d)?d:0,V&&e&&!w.i&&(d*=-1),ce[f](t+d),H||l.prvD(n)}else z(n)}function z(e){if(e=e||e.originalEvent,yi(te,cr),yi(o.h,h),yi(o.t,h),yi(o.s,h),Z.off(hn,O).off(dn,z).off(yn,m).off(xn,b).off(mn,kr),x(),t=n,r=n,i!==n&&(Lt.scrollStop(),clearTimeout(i),i=n),e){var a=re[0].getBoundingClientRect();e.clientX>=a.left&&e.clientX<=a.right&&e.clientY>=a.top&&e.clientY<=a.bottom||Cr(),(bt||gt)&&Xr(!1)}}function W(i){t=(t=ce[f]())===n?0:t,(V&&e&&!w.n||!V)&&(t=t<0?0:t),r=g&&a?i[\"screen\"+c]:l.page(i)[s],pi(te,cr),pi(o.h,h),pi(o.s,h),Z.on(hn,O).on(dn,z).on(mn,kr),!g&&j||l.prvD(i),l.stpP(i)}o.h.on(fn,function(e){S(e)&&W(e)}),o.t.on(fn,function(t){if(S(t)){var a,c,d=jt[o._wh],p=o.t.offset()[o.lt],x=t.ctrlKey,g=t.shiftKey,O=g&&x,A=!0,C=\"linear\",H=function(){if(!P){var l=r-p,h=o.i.tl,y=o.i.ho,x=o.i.hl,m=o.i.ms,b=270*v,S=A?u.max(400,b):b,z=m*((l-x/2)/(h-x)),T=V&&e&&(!w.i&&!w.n||rt),k=T?y<l:y>l,L={};g?(z=isFinite(z)?z:0,V&&e&&!w.i&&(z=m-z),O?(L.n=!1,L[s]=z,Lt.scroll(L,130,C,function(){W(t)})):(ce[f](z),W(t))):(a=A?k:a,c=T?a?y+x>=l:y<=l:a?y<=l:y+x>=l,L[s]=a?\"-=\"+d:\"+=\"+d,Lt.scrollStop(),Lt.scroll(L,b,C),c?(clearTimeout(i),Lt.scrollStop(),i=n):i=setTimeout(H,S),A=!1)}};x&&y(),r=l.page(t)[s],pi(te,cr),pi(o.t,h),pi(o.s,h),Z.on(dn,z).on(yn,m).on(xn,b).on(mn,kr),H(),l.prvD(t),l.stpP(t)}}).on(vn,function(){(bt||gt)&&(zt=!0,Xr(!0))}).on(pn,function(){(bt||gt)&&(zt=!1,Xr(!1))}),o.s.on(fn,function(e){l.stpP(e)}),A&&o.s.on(wn,function(t){t.target===o.s[0]&&(Yr(e),Kr(e))})}function Vr(e,t,n){var r=e?An:Wn,i=e?he:ye;t?yi(re,r):pi(re,r),n?yi(i,Zn):pi(i,Zn)}function Xr(e,t){if(clearTimeout(yt),e)yi(he,er),yi(ye,er);else{var n=\"active\",r=function(){if(!zt&&!P){var e=pe.hasClass(n)||me.hasClass(n);!e&&(bt||gt||St)&&pi(he,er),!e&&(bt||gt||St)&&pi(ye,er)}};mt>0&&!0!==t?yt=setTimeout(r,mt):r()}}function Yr(e){var t={},n=Jr(e),r=1e6,i=u.min(1,(we[n._wh]-(Pe?e?I:M:0))/be[n._wh]);t[n.wh]=u.floor(100*i*r)/r+\"%\",oi()||n.h.css(t),n.i.hl=n.h[0][\"offset\"+n.WH],n.i.hlr=i}function Kr(e,t){t=t===n?e?ce[ln]():ce[un]():t;var r,i,o,a=V&&e,s={},c=Jr(e),l=\"translate(\",f=\"transform\",d=ce[0][Zt+c.WH]-ce[0][\"client\"+c.WH],h=c.i.hl,v=c.t[0][\"offset\"+c.WH],p=v-h;w.n&&a&&(d*=-1),o=t/d,o=isNaN(o)?0:u.min(1,o),c.i.ms=d,c.i.cs=t,c.i.csr=o,p*=o,p=isNaN(p)?0:p,a&&!w.i&&(p=v-h-p),p=u.max(0,p),C?(i=a?-(v-h-p):p,r=e?l+i+\"px, 0)\":l+\"0, \"+i+\"px)\",s[\"-webkit-\"+f]=r,s[\"-moz-\"+f]=r,s[\"-ms-\"+f]=r,s[\"-o-\"+f]=r,s[f]=r):s[c.lt]=p,oi()||c.h.css(s),c.i.ho=p,c.i.tl=v}function $r(e,t){var n=t?\"removeClass\":\"addClass\",r=e?xe:me,i=e?Jn:Gn;(e?ve:pe)[n](i),r[n](i)}function Jr(e){return{wh:e?Kt:$t,WH:e?\"Width\":\"Height\",lt:e?Vt:_t,LT:e?\"Left\":\"Top\",xy:e?tn:nn,XY:e?\"X\":\"Y\",_wh:e?\"w\":\"h\",_lt:e?\"l\":\"t\",t:e?ve:xe,h:e?pe:me,s:e?he:ye,i:e?Rt:Dt}}function Qr(e){e?xi(de):(de=d(si(tr)),re.append(de))}function Gr(){var e=G.top!==G,t={},r={};function i(e){if(a(e)){var n=s(e),i={};(Ht||Ct)&&(i[Kt]=r.w+n.x-t.x),(Tt||Ct)&&(i[$t]=r.h+n.y-t.y),re.css(i),l.stpP(e)}else o(e)}function o(e){var t=e!==n;Z.off(mn,kr).off(hn,i).off(dn,o),yi(te,cr),de.releaseCapture&&de.releaseCapture(),t&&(At&&Or(),Lt.update(Gt)),At=!1}function a(e){var t=(e.originalEvent||e).touches!==n;return!X&&!P&&(1===l.mBtn(e)||t)}function s(t){return g&&e?{x:t.screenX,y:t.screenY}:l.page(t)}kt=function(e){a(e)&&(ht&&(At=!0,zr()),t=s(e),r.w=re[0][c.oW]-(F?0:I),r.h=re[0][c.oH]-(F?0:M),Z.on(mn,kr).on(hn,i).on(dn,o),pi(te,cr),de.setCapture&&de.setCapture(),l.prvD(e),l.stpP(e))}}function Zr(e,t){if(E){var n,r=$.callbacks[e],i=e;\"on\"===i.substr(0,2)&&(i=i.substr(2,1).toLowerCase()+i.substr(3)),hi(r)==s.f&&r.call(Lt,t),d.each(fr,function(){hi((n=this).on)==s.f&&n.on(i,t)})}else P||ur.push({n:e,a:t})}function ei(e,t,r){r===n&&(r=[Qt,Qt,Qt,Qt]),e[t+_t]=r[0],e[t+Bt]=r[1],e[t+qt]=r[2],e[t+Vt]=r[3]}function ti(t){var n=\"ownerDocument\",r=\"HTMLElement\",i=t&&t[n]&&t[n].parentWindow||e;return typeof i[r]==s.o?t instanceof i[r]:t&&typeof t==s.o&&null!==t&&1===t.nodeType&&typeof t.nodeName==s.s}function ni(e,t){var n,r,i=[],o=[];for(n=0;n<e.length;n++)i[e[n]]=!0;for(n=0;n<t.length;n++)i[t[n]]?delete i[t[n]]:i[t[n]]=!0;for(r in i)o.push(r);return o}function ri(e,t){var n=t?parseFloat(e):parseInt(e);return isNaN(n)?0:n}function ii(){var e=ne[0].selectionStart;if(e!==n){var t,r,i=\"length\",o=ne.val(),a=o[i],s=o.split(\"\\n\"),c=s[i],l=o.substr(0,e).split(\"\\n\"),u=0,f=0,d=l[i],h=l[l[i]-1][i];for(r=0;r<s[i];r++)(t=s[r][i])>f&&(u=r+1,f=t);return{cR:d,cC:h,r:c,c:f,w:u,p:e,m:a}}}function oi(){return Ne&&x.x&&x.y}function ai(){return R?fe[0]:ue[0]}function si(e,t){return\"<div \"+(e?hi(e)==s.s?'class=\"'+e+'\"':function(){var t,n=\"\";if(d.isPlainObject(e))for(t in e)n+=(\"className\"===t?\"class\":t)+'=\"'+e[t]+'\" ';return n}():Qt)+\">\"+(t||Qt)+\"</div>\"}function ci(e,t){for(var n,r=t.split(rn),i=0;i<r.length;i++){if(!e.hasOwnProperty(r[i]))return;n=e[r[i]],i<r.length&&hi(n)==s.o&&(e=n)}return n}function li(e,t,n){for(var r=t.split(rn),i=r.length,o=0,a={},s=a;o<i;o++)a=a[r[o]]=o+1<i?{}:n;d.extend(e,s,!0)}function ui(e,t,r){return!0===r?r:t===n||e!==t}function fi(e,t,r,i,o){if(!0===o)return o;if(i===n&&o===n){if(!0===r)return r;r=n}return r=r===n?\"w\":r,i=i===n?\"h\":i,t===n||(e[r]!==t[r]||e[i]!==t[i])}function di(e,t){return t===n||(e.t!==t.t||e.r!==t.r||e.b!==t.b||e.l!==t.l)}function hi(e){return l.type(e)}function vi(){return d.extend.apply(this,arguments)}function pi(e,t){return Et.addClass.call(e,t)}function yi(e,t){return Et.removeClass.call(e,t)}function xi(e){return Et.remove.call(e)}function mi(e,t){return Et.find.call(e,t).eq(0)}function wi(e,n,r){return Y=v.defaultOptions,S=v.nativeScrollbarStyling,z=vi(!0,{},v.nativeScrollbarSize),x=vi(!0,{},v.nativeScrollbarIsOverlaid),m=vi(!0,{},v.overlayScrollbarDummySize),w=vi(!0,{},v.rtlScrollBehavior),Mr(vi(!0,{},Y,n)),x.x&&x.x&&!$.nativeScrollbarsOverlaid.initialize?(Zr(\"onInitializationWithdrawn\"),!1):(O=v.cssCalc,g=v.msie,b=v.autoUpdateRecommended,A=v.supportTransition,C=v.supportTransform,H=v.supportPassiveEvents,T=v.supportResizeObserver,k=v.supportMutationObserver,L=v.restrictedMeasuring,Z=d(e.ownerDocument),G=d(Z[0].defaultView||Z[0].parentWindow),ee=mi(Z,\"html\"),te=mi(ee,\"body\"),ne=d(e),R=ne.is(\"textarea\"),D=ne.is(\"body\"),j=Z[0]!==t,D&&((i={}).l=u.max(ne[ln](),ee[ln](),G[ln]()),i.t=u.max(ne[un](),ee[un](),G[un]())),Ur(),_r(),Br(),qr(!0),qr(!1),Qr(),Gr(),Sr(),D&&(ce[ln](i.l)[un](i.t),t.activeElement==e&&ce[0].focus&&(ce.attr(\"tabindex\",\"-1\"),ce[0].focus(),ce.one(fn,function(){ce.removeAttr(\"tabindex\")}))),mr(oe,Ar),Ar(),Lt.update(Gt),E=!0,Zr(\"onInitialized\"),d.each(ur,function(e,t){Zr(t.n,t.a)}),ur=[],hi(r)==s.s&&(r=[r]),l.isA(r)?d.each(r,function(e,t){Lt.addExt(t)}):d.isPlainObject(r)&&d.each(r,function(e,t){Lt.addExt(e,t)}),setTimeout(function(){A&&!P&&pi(re,Cn)},333),E);var i}}return e[a]=function(t,o,c){if(0===arguments.length)return this;var u,f,v=[],p=d.isPlainObject(o);return t?(t=t.length!=n?t:[t[0]||t],C(),t.length>0&&(p?d.each(t,function(e,t){(u=t)!==n&&v.push(k(u,o,c,r,i))}):d.each(t,function(t,r){u=h(r),\"!\"===o&&u instanceof e[a]||l.type(o)==s.f&&o(r,u)?v.push(u):o===n&&v.push(u)}),f=1===v.length?v[0]:v),f):p||!o?f:v},e[a].globals=function(){C();var e=d.extend(!0,{},r);return delete e.msie,e},e[a].defaultOptions=function(e){C();var t=r.defaultOptions;if(e===n)return d.extend(!0,{},t);r.defaultOptions=d.extend(!0,{},t,W.v(e,W.t,!0))},e[a].extension=function(e,t,n){var r=l.type(e)==s.s,i=arguments[c.l],o=0;if(i<1||!r)return d.extend(!0,{length:A[c.l]},A);if(r)if(l.type(t)==s.f)A.push({name:e,extensionFactory:t,defaultOptions:n});else for(;o<A[c.l];o++)if(A[o].name===e){if(!(i>1))return d.extend(!0,{},A[o]);A.splice(o,1)}},e[a]}();return f&&f.fn&&(f.fn.overlayScrollbars=function(e,t){var n=this;return f.isPlainObject(e)?(f.each(n,function(){v(this,e,t)}),n):v(n,e)}),v});", "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n!function(n){\"function\"==typeof define&&define.amd?define([\"jquery\"],n):\"object\"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(e)),n(t),t}:n(jQuery)}(function(d){var e=function(){if(d&&d.fn&&d.fn.select2&&d.fn.select2.amd)var e=d.fn.select2.amd;var t,n,i,h,o,s,f,g,m,v,y,_,r,a,w,l;function b(e,t){return r.call(e,t)}function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split(\"/\"),f=y.map,g=f&&f[\"*\"]||{};if(e){for(s=(e=e.split(\"/\")).length-1,y.nodeIdCompat&&w.test(e[s])&&(e[s]=e[s].replace(w,\"\")),\".\"===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u<e.length;u++)if(\".\"===(p=e[u]))e.splice(u,1),u-=1;else if(\"..\"===p){if(0===u||1===u&&\"..\"===e[2]||\"..\"===e[u-1])continue;0<u&&(e.splice(u-1,2),u-=2)}e=e.join(\"/\")}if((h||g)&&f){for(u=(n=e.split(\"/\")).length;0<u;u-=1){if(i=n.slice(0,u).join(\"/\"),h)for(d=h.length;0<d;d-=1)if(r=(r=f[h.slice(0,d).join(\"/\")])&&r[i]){o=r,a=u;break}if(o)break;!l&&g&&g[i]&&(l=g[i],c=u)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join(\"/\"))}return e}function A(t,n){return function(){var e=a.call(arguments,0);return\"string\"!=typeof e[0]&&1===e.length&&e.push(null),s.apply(h,e.concat([t,n]))}}function x(t){return function(e){m[t]=e}}function D(e){if(b(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(!b(m,e)&&!b(_,e))throw new Error(\"No \"+e);return m[e]}function u(e){var t,n=e?e.indexOf(\"!\"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function S(e){return e?u(e):[]}return e&&e.requirejs||(e?n=e:e={},m={},v={},y={},_={},r=Object.prototype.hasOwnProperty,a=[].slice,w=/\\.js$/,f=function(e,t){var n,i=u(e),r=i[0],o=t[1];return e=i[1],r&&(n=D(r=c(r,o))),r?e=n&&n.normalize?n.normalize(e,function(t){return function(e){return c(e,t)}}(o)):c(e,o):(r=(i=u(e=c(e,o)))[0],e=i[1],r&&(n=D(r))),{f:r?r+\"!\"+e:e,n:e,pr:r,p:n}},g={require:function(e){return A(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:\"\",exports:m[e],config:function(e){return function(){return y&&y.config&&y.config[e]||{}}}(e)}}},o=function(e,t,n,i){var r,o,s,a,l,c,u,d=[],p=typeof n;if(c=S(i=i||e),\"undefined\"==p||\"function\"==p){for(t=!t.length&&n.length?[\"require\",\"exports\",\"module\"]:t,l=0;l<t.length;l+=1)if(\"require\"===(o=(a=f(t[l],c)).f))d[l]=g.require(e);else if(\"exports\"===o)d[l]=g.exports(e),u=!0;else if(\"module\"===o)r=d[l]=g.module(e);else if(b(m,o)||b(v,o)||b(_,o))d[l]=D(o);else{if(!a.p)throw new Error(e+\" missing \"+o);a.p.load(a.n,A(i,!0),x(o),{}),d[l]=m[o]}s=n?n.apply(m[e],d):void 0,e&&(r&&r.exports!==h&&r.exports!==m[e]?m[e]=r.exports:s===h&&u||(m[e]=s))}else e&&(m[e]=n)},t=n=s=function(e,t,n,i,r){if(\"string\"==typeof e)return g[e]?g[e](t):D(f(e,S(t)).f);if(!e.splice){if((y=e).deps&&s(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=h}return t=t||function(){},\"function\"==typeof n&&(n=i,i=r),i?o(h,e,t,n):setTimeout(function(){o(h,e,t,n)},4),s},s.config=function(e){return s(e)},t._defined=m,(i=function(e,t,n){if(\"string\"!=typeof e)throw new Error(\"See almond README: incorrect module build, no module name\");t.splice||(n=t,t=[]),b(m,e)||b(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0},e.requirejs=t,e.require=n,e.define=i),e.define(\"almond\",function(){}),e.define(\"jquery\",[],function(){var e=d||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e}),e.define(\"select2/utils\",[\"jquery\"],function(o){var r={};function u(e){var t=e.prototype,n=[];for(var i in t){\"function\"==typeof t[i]&&\"constructor\"!==i&&n.push(i)}return n}r.Extend=function(e,t){var n={}.hasOwnProperty;function i(){this.constructor=e}for(var r in t)n.call(t,r)&&(e[r]=t[r]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},r.Decorate=function(i,r){var e=u(r),t=u(i);function o(){var e=Array.prototype.unshift,t=r.prototype.constructor.length,n=i.prototype.constructor;0<t&&(e.call(arguments,i.prototype.constructor),n=r.prototype.constructor),n.apply(this,arguments)}r.displayName=i.displayName,o.prototype=new function(){this.constructor=o};for(var n=0;n<t.length;n++){var s=t[n];o.prototype[s]=i.prototype[s]}function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);var n=r.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}for(var l=0;l<e.length;l++){var c=e[l];o.prototype[c]=a(c)}return o};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,i=e.length;n<i;n++)e[n].apply(this,t)},r.Observable=e,r.generateChars=function(e){for(var t=\"\",n=0;n<e;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},r.bind=function(e,t){return function(){e.apply(t,arguments)}},r._convertData=function(e){for(var t in e){var n=t.split(\"-\"),i=e;if(1!==n.length){for(var r=0;r<n.length;r++){var o=n[r];(o=o.substring(0,1).toLowerCase()+o.substring(1))in i||(i[o]={}),r==n.length-1&&(i[o]=e[t]),i=i[o]}delete e[t]}}return e},r.hasScroll=function(e,t){var n=o(t),i=t.style.overflowX,r=t.style.overflowY;return(i!==r||\"hidden\"!==r&&\"visible\"!==r)&&(\"scroll\"===i||\"scroll\"===r||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},r.escapeMarkup=function(e){var t={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof e?e:String(e).replace(/[&<>\"'\\/\\\\]/g,function(e){return t[e]})},r.appendMany=function(e,t){if(\"1.7\"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null==t&&(e.id?(t=e.id,e.setAttribute(\"data-select2-id\",t)):(e.setAttribute(\"data-select2-id\",++n),t=n.toString())),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:o(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute(\"data-select2-id\")},r}),e.define(\"select2/results\",[\"jquery\",\"./utils\"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var n=h('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),i=this.options.get(\"translations\").get(e.message);n.append(t(i(e.args))),n[0].className+=\" select2-results__message\",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},i.prototype.position=function(e,t){t.find(\".select2-results\").append(e)},i.prototype.sort=function(e){return this.options.get(\"sorter\")(e)},i.prototype.highlightFirstItem=function(){var e=this.$results.find(\".select2-results__option[aria-selected]\"),t=e.filter(\"[aria-selected=true]\");0<t.length?t.first().trigger(\"mouseenter\"):e.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},i.prototype.setClasses=function(){var t=this;this.data.current(function(e){var i=h.map(e,function(e){return e.id.toString()});t.$results.find(\".select2-results__option[aria-selected]\").each(function(){var e=h(this),t=f.GetData(this,\"data\"),n=\"\"+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<h.inArray(n,i)?e.attr(\"aria-selected\",\"true\"):e.attr(\"aria-selected\",\"false\")})})},i.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(e)},n=this.option(t);n.className+=\" loading-results\",this.$results.prepend(n)},i.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},i.prototype.option=function(e){var t=document.createElement(\"li\");t.className=\"select2-results__option\";var n={role:\"option\",\"aria-selected\":\"false\"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var r in(null!=e.element&&i.call(e.element,\":disabled\")||null==e.element&&e.disabled)&&(delete n[\"aria-selected\"],n[\"aria-disabled\"]=\"true\"),null==e.id&&delete n[\"aria-selected\"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role=\"group\",n[\"aria-label\"]=e.text,delete n[\"aria-selected\"]),n){var o=n[r];t.setAttribute(r,o)}if(e.children){var s=h(t),a=document.createElement(\"strong\");a.className=\"select2-results__group\";h(a);this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],d=this.option(u);l.push(d)}var p=h(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,\"data\",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+\"-results\";this.$results.attr(\"id\",n),t.on(\"results:all\",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on(\"results:append\",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on(\"query\",function(e){l.hideMessages(),l.showLoading(e)}),t.on(\"select\",function(){t.isOpen()&&(l.setClasses(),l.options.get(\"scrollAfterSelect\")&&l.highlightFirstItem())}),t.on(\"unselect\",function(){t.isOpen()&&(l.setClasses(),l.options.get(\"scrollAfterSelect\")&&l.highlightFirstItem())}),t.on(\"open\",function(){l.$results.attr(\"aria-expanded\",\"true\"),l.$results.attr(\"aria-hidden\",\"false\"),l.setClasses(),l.ensureHighlightVisible()}),t.on(\"close\",function(){l.$results.attr(\"aria-expanded\",\"false\"),l.$results.attr(\"aria-hidden\",\"true\"),l.$results.removeAttr(\"aria-activedescendant\")}),t.on(\"results:toggle\",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")}),t.on(\"results:select\",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],\"data\");\"true\"==e.attr(\"aria-selected\")?l.trigger(\"close\",{}):l.trigger(\"select\",{data:t})}}),t.on(\"results:previous\",function(){var e=l.getHighlightedResults(),t=l.$results.find(\"[aria-selected]\"),n=t.index(e);if(!(n<=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger(\"mouseenter\");var o=l.$results.offset().top,s=r.offset().top,a=l.$results.scrollTop()+(s-o);0===i?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on(\"results:next\",function(){var e=l.getHighlightedResults(),t=l.$results.find(\"[aria-selected]\"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger(\"mouseenter\");var r=l.$results.offset().top+l.$results.outerHeight(!1),o=i.offset().top+i.outerHeight(!1),s=l.$results.scrollTop()+o-r;0===n?l.$results.scrollTop(0):r<o&&l.$results.scrollTop(s)}}),t.on(\"results:focus\",function(e){e.element.addClass(\"select2-results__option--highlighted\")}),t.on(\"results:message\",function(e){l.displayMessage(e)}),h.fn.mousewheel&&this.$results.on(\"mousewheel\",function(e){var t=l.$results.scrollTop(),n=l.$results.get(0).scrollHeight-t+e.deltaY,i=0<e.deltaY&&t-e.deltaY<=0,r=e.deltaY<0&&n<=l.$results.height();i?(l.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):r&&(l.$results.scrollTop(l.$results.get(0).scrollHeight-l.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",function(e){var t=h(this),n=f.GetData(this,\"data\");\"true\"!==t.attr(\"aria-selected\")?l.trigger(\"select\",{originalEvent:e,data:n}):l.options.get(\"multiple\")?l.trigger(\"unselect\",{originalEvent:e,data:n}):l.trigger(\"close\",{})}),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",function(e){var t=f.GetData(this,\"data\");l.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),l.trigger(\"results:focus\",{data:t,element:h(this)})})},i.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},i.prototype.destroy=function(){this.$results.remove()},i.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find(\"[aria-selected]\").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),o=i-n;r-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get(\"templateResult\"),i=this.options.get(\"escapeMarkup\"),r=n(e,t);null==r?t.style.display=\"none\":\"string\"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define(\"select2/keys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],function(n,i,r){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return i.Extend(o,i.Observable),o.prototype.render=function(){var e=n('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=i.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=i.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),e.attr(\"title\",this.$element.attr(\"title\")),e.attr(\"tabindex\",this._tabindex),e.attr(\"aria-disabled\",\"false\"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,i=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",function(e){n.trigger(\"focus\",e)}),this.$selection.on(\"blur\",function(e){n._handleBlur(e)}),this.$selection.on(\"keydown\",function(e){n.trigger(\"keypress\",e),e.which===r.SPACE&&e.preventDefault()}),e.on(\"results:focus\",function(e){n.$selection.attr(\"aria-activedescendant\",e.data._resultId)}),e.on(\"selection:update\",function(e){n.update(e.data)}),e.on(\"open\",function(){n.$selection.attr(\"aria-expanded\",\"true\"),n.$selection.attr(\"aria-owns\",i),n._attachCloseHandler(e)}),e.on(\"close\",function(){n.$selection.attr(\"aria-expanded\",\"false\"),n.$selection.removeAttr(\"aria-activedescendant\"),n.$selection.removeAttr(\"aria-owns\"),n.$selection.trigger(\"focus\"),n._detachCloseHandler(e)}),e.on(\"enable\",function(){n.$selection.attr(\"tabindex\",n._tabindex),n.$selection.attr(\"aria-disabled\",\"false\")}),e.on(\"disable\",function(){n.$selection.attr(\"tabindex\",\"-1\"),n.$selection.attr(\"aria-disabled\",\"true\")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger(\"blur\",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on(\"mousedown.select2.\"+e.id,function(e){var t=n(e.target).closest(\".select2\");n(\".select2.select2-container--open\").each(function(){this!=t[0]&&i.GetData(this,\"element\").select2(\"close\")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off(\"mousedown.select2.\"+e.id)},o.prototype.position=function(e,t){t.find(\".selection\").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o}),e.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass(\"select2-selection--single\"),e.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",i).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",i),this.$selection.on(\"mousedown\",function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"focus\",function(e){}),this.$selection.on(\"blur\",function(e){}),t.on(\"focus\",function(e){t.isOpen()||n.$selection.trigger(\"focus\")})},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return e(\"<span></span>\")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(\".select2-selection__rendered\"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr(\"title\",r):n.removeAttr(\"title\")}else this.clear()},r}),e.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],function(r,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass(\"select2-selection--multiple\"),e.html('<ul class=\"select2-selection__rendered\"></ul>'),e},n.prototype.bind=function(e,t){var i=this;n.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",function(e){i.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=l.GetData(t[0],\"data\");i.trigger(\"unselect\",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},n.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},n.prototype.selectionContainer=function(){return r('<li class=\"select2-selection__choice\"><span class=\"select2-selection__choice__remove\" role=\"presentation\">&times;</span></li>')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n<e.length;n++){var i=e[n],r=this.selectionContainer(),o=this.display(i,r);r.append(o);var s=i.title||i.text;s&&r.attr(\"title\",s),l.StoreData(r[0],\"data\",i),t.push(r)}var a=this.$selection.find(\".select2-selection__rendered\");l.appendMany(a,t)}},n}),e.define(\"select2/selection/placeholder\",[\"../utils\"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(i)},t}),e.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],function(r,i,a){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",function(e){i._handleClear(e)}),t.on(\"keypress\",function(e){i._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(\".select2-selection__clear\");if(0!==n.length){t.stopPropagation();var i=a.GetData(n[0],\"data\"),r=this.$element.val();this.$element.val(this.placeholder.id);var o={data:i};if(this.trigger(\"clear\",o),o.prevented)this.$element.val(r);else{for(var s=0;s<i.length;s++)if(o={data:i[s]},this.trigger(\"unselect\",o),o.prevented)return void this.$element.val(r);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=i.DELETE&&t.which!=i.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){if(e.call(this,t),!(0<this.$selection.find(\".select2-selection__placeholder\").length||0===t.length)){var n=this.options.get(\"translations\").get(\"removeAllItems\"),i=r('<span class=\"select2-selection__clear\" title=\"'+n()+'\">&times;</span>');a.StoreData(i[0],\"data\",t),this.$selection.find(\".select2-selection__rendered\").prepend(i)}},e}),e.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],function(i,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('<li class=\"select2-search select2-search--inline\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></li>');this.$searchContainer=t,this.$search=t.find(\"input\");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+\"-results\";e.call(this,t,n),t.on(\"open\",function(){i.$search.attr(\"aria-controls\",r),i.$search.trigger(\"focus\")}),t.on(\"close\",function(){i.$search.val(\"\"),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.trigger(\"focus\")}),t.on(\"enable\",function(){i.$search.prop(\"disabled\",!1),i._transferTabIndex()}),t.on(\"disable\",function(){i.$search.prop(\"disabled\",!0)}),t.on(\"focus\",function(e){i.$search.trigger(\"focus\")}),t.on(\"results:focus\",function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(e){i.trigger(\"focus\",e)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(e){i._handleBlur(e)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(e){if(e.stopPropagation(),i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&\"\"===i.$search.val()){var t=i.$searchContainer.prev(\".select2-selection__choice\");if(0<t.length){var n=a.GetData(t[0],\"data\");i.searchRemoveChoice(n),e.preventDefault()}}}),this.$selection.on(\"click\",\".select2-search--inline\",function(e){i.$search.val()&&e.stopPropagation()});var o=document.documentMode,s=o&&o<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(e){s?i.$selection.off(\"input.search input.searchcheck\"):i.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(e){if(s&&\"input\"===e.type)i.$selection.off(\"input.search input.searchcheck\");else{var t=e.which;t!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&i.handleSearch(e)}})},e.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger(\"query\",{term:e})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"\";\"\"!==this.$search.attr(\"placeholder\")?e=this.$selection.find(\".select2-selection__rendered\").width():e=.75*(this.$search.val().length+1)+\"em\";this.$search.css(\"width\",e)},e}),e.define(\"select2/selection/eventRelay\",[\"jquery\"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var i=this,r=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],o=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,t,n),t.on(\"*\",function(e,t){if(-1!==s.inArray(e,r)){t=t||{};var n=s.Event(\"select2:\"+e,{params:t});i.$element.trigger(n),-1!==s.inArray(e,o)&&(t.prevented=n.isDefaultPrevented())}})},e}),e.define(\"select2/translation\",[\"jquery\",\"require\"],function(t,n){function i(e){this.dict=e||{}}return i.prototype.all=function(){return this.dict},i.prototype.get=function(e){return this.dict[e]},i.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},i._cache={},i.loadPath=function(e){if(!(e in i._cache)){var t=n(e);i._cache[e]=t}return new i(i._cache[e])},i}),e.define(\"select2/diacritics\",[],function(){return{\"\u24B6\":\"A\",\"\uFF21\":\"A\",\"\u00C0\":\"A\",\"\u00C1\":\"A\",\"\u00C2\":\"A\",\"\u1EA6\":\"A\",\"\u1EA4\":\"A\",\"\u1EAA\":\"A\",\"\u1EA8\":\"A\",\"\u00C3\":\"A\",\"\u0100\":\"A\",\"\u0102\":\"A\",\"\u1EB0\":\"A\",\"\u1EAE\":\"A\",\"\u1EB4\":\"A\",\"\u1EB2\":\"A\",\"\u0226\":\"A\",\"\u01E0\":\"A\",\"\u00C4\":\"A\",\"\u01DE\":\"A\",\"\u1EA2\":\"A\",\"\u00C5\":\"A\",\"\u01FA\":\"A\",\"\u01CD\":\"A\",\"\u0200\":\"A\",\"\u0202\":\"A\",\"\u1EA0\":\"A\",\"\u1EAC\":\"A\",\"\u1EB6\":\"A\",\"\u1E00\":\"A\",\"\u0104\":\"A\",\"\u023A\":\"A\",\"\u2C6F\":\"A\",\"\uA732\":\"AA\",\"\u00C6\":\"AE\",\"\u01FC\":\"AE\",\"\u01E2\":\"AE\",\"\uA734\":\"AO\",\"\uA736\":\"AU\",\"\uA738\":\"AV\",\"\uA73A\":\"AV\",\"\uA73C\":\"AY\",\"\u24B7\":\"B\",\"\uFF22\":\"B\",\"\u1E02\":\"B\",\"\u1E04\":\"B\",\"\u1E06\":\"B\",\"\u0243\":\"B\",\"\u0182\":\"B\",\"\u0181\":\"B\",\"\u24B8\":\"C\",\"\uFF23\":\"C\",\"\u0106\":\"C\",\"\u0108\":\"C\",\"\u010A\":\"C\",\"\u010C\":\"C\",\"\u00C7\":\"C\",\"\u1E08\":\"C\",\"\u0187\":\"C\",\"\u023B\":\"C\",\"\uA73E\":\"C\",\"\u24B9\":\"D\",\"\uFF24\":\"D\",\"\u1E0A\":\"D\",\"\u010E\":\"D\",\"\u1E0C\":\"D\",\"\u1E10\":\"D\",\"\u1E12\":\"D\",\"\u1E0E\":\"D\",\"\u0110\":\"D\",\"\u018B\":\"D\",\"\u018A\":\"D\",\"\u0189\":\"D\",\"\uA779\":\"D\",\"\u01F1\":\"DZ\",\"\u01C4\":\"DZ\",\"\u01F2\":\"Dz\",\"\u01C5\":\"Dz\",\"\u24BA\":\"E\",\"\uFF25\":\"E\",\"\u00C8\":\"E\",\"\u00C9\":\"E\",\"\u00CA\":\"E\",\"\u1EC0\":\"E\",\"\u1EBE\":\"E\",\"\u1EC4\":\"E\",\"\u1EC2\":\"E\",\"\u1EBC\":\"E\",\"\u0112\":\"E\",\"\u1E14\":\"E\",\"\u1E16\":\"E\",\"\u0114\":\"E\",\"\u0116\":\"E\",\"\u00CB\":\"E\",\"\u1EBA\":\"E\",\"\u011A\":\"E\",\"\u0204\":\"E\",\"\u0206\":\"E\",\"\u1EB8\":\"E\",\"\u1EC6\":\"E\",\"\u0228\":\"E\",\"\u1E1C\":\"E\",\"\u0118\":\"E\",\"\u1E18\":\"E\",\"\u1E1A\":\"E\",\"\u0190\":\"E\",\"\u018E\":\"E\",\"\u24BB\":\"F\",\"\uFF26\":\"F\",\"\u1E1E\":\"F\",\"\u0191\":\"F\",\"\uA77B\":\"F\",\"\u24BC\":\"G\",\"\uFF27\":\"G\",\"\u01F4\":\"G\",\"\u011C\":\"G\",\"\u1E20\":\"G\",\"\u011E\":\"G\",\"\u0120\":\"G\",\"\u01E6\":\"G\",\"\u0122\":\"G\",\"\u01E4\":\"G\",\"\u0193\":\"G\",\"\uA7A0\":\"G\",\"\uA77D\":\"G\",\"\uA77E\":\"G\",\"\u24BD\":\"H\",\"\uFF28\":\"H\",\"\u0124\":\"H\",\"\u1E22\":\"H\",\"\u1E26\":\"H\",\"\u021E\":\"H\",\"\u1E24\":\"H\",\"\u1E28\":\"H\",\"\u1E2A\":\"H\",\"\u0126\":\"H\",\"\u2C67\":\"H\",\"\u2C75\":\"H\",\"\uA78D\":\"H\",\"\u24BE\":\"I\",\"\uFF29\":\"I\",\"\u00CC\":\"I\",\"\u00CD\":\"I\",\"\u00CE\":\"I\",\"\u0128\":\"I\",\"\u012A\":\"I\",\"\u012C\":\"I\",\"\u0130\":\"I\",\"\u00CF\":\"I\",\"\u1E2E\":\"I\",\"\u1EC8\":\"I\",\"\u01CF\":\"I\",\"\u0208\":\"I\",\"\u020A\":\"I\",\"\u1ECA\":\"I\",\"\u012E\":\"I\",\"\u1E2C\":\"I\",\"\u0197\":\"I\",\"\u24BF\":\"J\",\"\uFF2A\":\"J\",\"\u0134\":\"J\",\"\u0248\":\"J\",\"\u24C0\":\"K\",\"\uFF2B\":\"K\",\"\u1E30\":\"K\",\"\u01E8\":\"K\",\"\u1E32\":\"K\",\"\u0136\":\"K\",\"\u1E34\":\"K\",\"\u0198\":\"K\",\"\u2C69\":\"K\",\"\uA740\":\"K\",\"\uA742\":\"K\",\"\uA744\":\"K\",\"\uA7A2\":\"K\",\"\u24C1\":\"L\",\"\uFF2C\":\"L\",\"\u013F\":\"L\",\"\u0139\":\"L\",\"\u013D\":\"L\",\"\u1E36\":\"L\",\"\u1E38\":\"L\",\"\u013B\":\"L\",\"\u1E3C\":\"L\",\"\u1E3A\":\"L\",\"\u0141\":\"L\",\"\u023D\":\"L\",\"\u2C62\":\"L\",\"\u2C60\":\"L\",\"\uA748\":\"L\",\"\uA746\":\"L\",\"\uA780\":\"L\",\"\u01C7\":\"LJ\",\"\u01C8\":\"Lj\",\"\u24C2\":\"M\",\"\uFF2D\":\"M\",\"\u1E3E\":\"M\",\"\u1E40\":\"M\",\"\u1E42\":\"M\",\"\u2C6E\":\"M\",\"\u019C\":\"M\",\"\u24C3\":\"N\",\"\uFF2E\":\"N\",\"\u01F8\":\"N\",\"\u0143\":\"N\",\"\u00D1\":\"N\",\"\u1E44\":\"N\",\"\u0147\":\"N\",\"\u1E46\":\"N\",\"\u0145\":\"N\",\"\u1E4A\":\"N\",\"\u1E48\":\"N\",\"\u0220\":\"N\",\"\u019D\":\"N\",\"\uA790\":\"N\",\"\uA7A4\":\"N\",\"\u01CA\":\"NJ\",\"\u01CB\":\"Nj\",\"\u24C4\":\"O\",\"\uFF2F\":\"O\",\"\u00D2\":\"O\",\"\u00D3\":\"O\",\"\u00D4\":\"O\",\"\u1ED2\":\"O\",\"\u1ED0\":\"O\",\"\u1ED6\":\"O\",\"\u1ED4\":\"O\",\"\u00D5\":\"O\",\"\u1E4C\":\"O\",\"\u022C\":\"O\",\"\u1E4E\":\"O\",\"\u014C\":\"O\",\"\u1E50\":\"O\",\"\u1E52\":\"O\",\"\u014E\":\"O\",\"\u022E\":\"O\",\"\u0230\":\"O\",\"\u00D6\":\"O\",\"\u022A\":\"O\",\"\u1ECE\":\"O\",\"\u0150\":\"O\",\"\u01D1\":\"O\",\"\u020C\":\"O\",\"\u020E\":\"O\",\"\u01A0\":\"O\",\"\u1EDC\":\"O\",\"\u1EDA\":\"O\",\"\u1EE0\":\"O\",\"\u1EDE\":\"O\",\"\u1EE2\":\"O\",\"\u1ECC\":\"O\",\"\u1ED8\":\"O\",\"\u01EA\":\"O\",\"\u01EC\":\"O\",\"\u00D8\":\"O\",\"\u01FE\":\"O\",\"\u0186\":\"O\",\"\u019F\":\"O\",\"\uA74A\":\"O\",\"\uA74C\":\"O\",\"\u0152\":\"OE\",\"\u01A2\":\"OI\",\"\uA74E\":\"OO\",\"\u0222\":\"OU\",\"\u24C5\":\"P\",\"\uFF30\":\"P\",\"\u1E54\":\"P\",\"\u1E56\":\"P\",\"\u01A4\":\"P\",\"\u2C63\":\"P\",\"\uA750\":\"P\",\"\uA752\":\"P\",\"\uA754\":\"P\",\"\u24C6\":\"Q\",\"\uFF31\":\"Q\",\"\uA756\":\"Q\",\"\uA758\":\"Q\",\"\u024A\":\"Q\",\"\u24C7\":\"R\",\"\uFF32\":\"R\",\"\u0154\":\"R\",\"\u1E58\":\"R\",\"\u0158\":\"R\",\"\u0210\":\"R\",\"\u0212\":\"R\",\"\u1E5A\":\"R\",\"\u1E5C\":\"R\",\"\u0156\":\"R\",\"\u1E5E\":\"R\",\"\u024C\":\"R\",\"\u2C64\":\"R\",\"\uA75A\":\"R\",\"\uA7A6\":\"R\",\"\uA782\":\"R\",\"\u24C8\":\"S\",\"\uFF33\":\"S\",\"\u1E9E\":\"S\",\"\u015A\":\"S\",\"\u1E64\":\"S\",\"\u015C\":\"S\",\"\u1E60\":\"S\",\"\u0160\":\"S\",\"\u1E66\":\"S\",\"\u1E62\":\"S\",\"\u1E68\":\"S\",\"\u0218\":\"S\",\"\u015E\":\"S\",\"\u2C7E\":\"S\",\"\uA7A8\":\"S\",\"\uA784\":\"S\",\"\u24C9\":\"T\",\"\uFF34\":\"T\",\"\u1E6A\":\"T\",\"\u0164\":\"T\",\"\u1E6C\":\"T\",\"\u021A\":\"T\",\"\u0162\":\"T\",\"\u1E70\":\"T\",\"\u1E6E\":\"T\",\"\u0166\":\"T\",\"\u01AC\":\"T\",\"\u01AE\":\"T\",\"\u023E\":\"T\",\"\uA786\":\"T\",\"\uA728\":\"TZ\",\"\u24CA\":\"U\",\"\uFF35\":\"U\",\"\u00D9\":\"U\",\"\u00DA\":\"U\",\"\u00DB\":\"U\",\"\u0168\":\"U\",\"\u1E78\":\"U\",\"\u016A\":\"U\",\"\u1E7A\":\"U\",\"\u016C\":\"U\",\"\u00DC\":\"U\",\"\u01DB\":\"U\",\"\u01D7\":\"U\",\"\u01D5\":\"U\",\"\u01D9\":\"U\",\"\u1EE6\":\"U\",\"\u016E\":\"U\",\"\u0170\":\"U\",\"\u01D3\":\"U\",\"\u0214\":\"U\",\"\u0216\":\"U\",\"\u01AF\":\"U\",\"\u1EEA\":\"U\",\"\u1EE8\":\"U\",\"\u1EEE\":\"U\",\"\u1EEC\":\"U\",\"\u1EF0\":\"U\",\"\u1EE4\":\"U\",\"\u1E72\":\"U\",\"\u0172\":\"U\",\"\u1E76\":\"U\",\"\u1E74\":\"U\",\"\u0244\":\"U\",\"\u24CB\":\"V\",\"\uFF36\":\"V\",\"\u1E7C\":\"V\",\"\u1E7E\":\"V\",\"\u01B2\":\"V\",\"\uA75E\":\"V\",\"\u0245\":\"V\",\"\uA760\":\"VY\",\"\u24CC\":\"W\",\"\uFF37\":\"W\",\"\u1E80\":\"W\",\"\u1E82\":\"W\",\"\u0174\":\"W\",\"\u1E86\":\"W\",\"\u1E84\":\"W\",\"\u1E88\":\"W\",\"\u2C72\":\"W\",\"\u24CD\":\"X\",\"\uFF38\":\"X\",\"\u1E8A\":\"X\",\"\u1E8C\":\"X\",\"\u24CE\":\"Y\",\"\uFF39\":\"Y\",\"\u1EF2\":\"Y\",\"\u00DD\":\"Y\",\"\u0176\":\"Y\",\"\u1EF8\":\"Y\",\"\u0232\":\"Y\",\"\u1E8E\":\"Y\",\"\u0178\":\"Y\",\"\u1EF6\":\"Y\",\"\u1EF4\":\"Y\",\"\u01B3\":\"Y\",\"\u024E\":\"Y\",\"\u1EFE\":\"Y\",\"\u24CF\":\"Z\",\"\uFF3A\":\"Z\",\"\u0179\":\"Z\",\"\u1E90\":\"Z\",\"\u017B\":\"Z\",\"\u017D\":\"Z\",\"\u1E92\":\"Z\",\"\u1E94\":\"Z\",\"\u01B5\":\"Z\",\"\u0224\":\"Z\",\"\u2C7F\":\"Z\",\"\u2C6B\":\"Z\",\"\uA762\":\"Z\",\"\u24D0\":\"a\",\"\uFF41\":\"a\",\"\u1E9A\":\"a\",\"\u00E0\":\"a\",\"\u00E1\":\"a\",\"\u00E2\":\"a\",\"\u1EA7\":\"a\",\"\u1EA5\":\"a\",\"\u1EAB\":\"a\",\"\u1EA9\":\"a\",\"\u00E3\":\"a\",\"\u0101\":\"a\",\"\u0103\":\"a\",\"\u1EB1\":\"a\",\"\u1EAF\":\"a\",\"\u1EB5\":\"a\",\"\u1EB3\":\"a\",\"\u0227\":\"a\",\"\u01E1\":\"a\",\"\u00E4\":\"a\",\"\u01DF\":\"a\",\"\u1EA3\":\"a\",\"\u00E5\":\"a\",\"\u01FB\":\"a\",\"\u01CE\":\"a\",\"\u0201\":\"a\",\"\u0203\":\"a\",\"\u1EA1\":\"a\",\"\u1EAD\":\"a\",\"\u1EB7\":\"a\",\"\u1E01\":\"a\",\"\u0105\":\"a\",\"\u2C65\":\"a\",\"\u0250\":\"a\",\"\uA733\":\"aa\",\"\u00E6\":\"ae\",\"\u01FD\":\"ae\",\"\u01E3\":\"ae\",\"\uA735\":\"ao\",\"\uA737\":\"au\",\"\uA739\":\"av\",\"\uA73B\":\"av\",\"\uA73D\":\"ay\",\"\u24D1\":\"b\",\"\uFF42\":\"b\",\"\u1E03\":\"b\",\"\u1E05\":\"b\",\"\u1E07\":\"b\",\"\u0180\":\"b\",\"\u0183\":\"b\",\"\u0253\":\"b\",\"\u24D2\":\"c\",\"\uFF43\":\"c\",\"\u0107\":\"c\",\"\u0109\":\"c\",\"\u010B\":\"c\",\"\u010D\":\"c\",\"\u00E7\":\"c\",\"\u1E09\":\"c\",\"\u0188\":\"c\",\"\u023C\":\"c\",\"\uA73F\":\"c\",\"\u2184\":\"c\",\"\u24D3\":\"d\",\"\uFF44\":\"d\",\"\u1E0B\":\"d\",\"\u010F\":\"d\",\"\u1E0D\":\"d\",\"\u1E11\":\"d\",\"\u1E13\":\"d\",\"\u1E0F\":\"d\",\"\u0111\":\"d\",\"\u018C\":\"d\",\"\u0256\":\"d\",\"\u0257\":\"d\",\"\uA77A\":\"d\",\"\u01F3\":\"dz\",\"\u01C6\":\"dz\",\"\u24D4\":\"e\",\"\uFF45\":\"e\",\"\u00E8\":\"e\",\"\u00E9\":\"e\",\"\u00EA\":\"e\",\"\u1EC1\":\"e\",\"\u1EBF\":\"e\",\"\u1EC5\":\"e\",\"\u1EC3\":\"e\",\"\u1EBD\":\"e\",\"\u0113\":\"e\",\"\u1E15\":\"e\",\"\u1E17\":\"e\",\"\u0115\":\"e\",\"\u0117\":\"e\",\"\u00EB\":\"e\",\"\u1EBB\":\"e\",\"\u011B\":\"e\",\"\u0205\":\"e\",\"\u0207\":\"e\",\"\u1EB9\":\"e\",\"\u1EC7\":\"e\",\"\u0229\":\"e\",\"\u1E1D\":\"e\",\"\u0119\":\"e\",\"\u1E19\":\"e\",\"\u1E1B\":\"e\",\"\u0247\":\"e\",\"\u025B\":\"e\",\"\u01DD\":\"e\",\"\u24D5\":\"f\",\"\uFF46\":\"f\",\"\u1E1F\":\"f\",\"\u0192\":\"f\",\"\uA77C\":\"f\",\"\u24D6\":\"g\",\"\uFF47\":\"g\",\"\u01F5\":\"g\",\"\u011D\":\"g\",\"\u1E21\":\"g\",\"\u011F\":\"g\",\"\u0121\":\"g\",\"\u01E7\":\"g\",\"\u0123\":\"g\",\"\u01E5\":\"g\",\"\u0260\":\"g\",\"\uA7A1\":\"g\",\"\u1D79\":\"g\",\"\uA77F\":\"g\",\"\u24D7\":\"h\",\"\uFF48\":\"h\",\"\u0125\":\"h\",\"\u1E23\":\"h\",\"\u1E27\":\"h\",\"\u021F\":\"h\",\"\u1E25\":\"h\",\"\u1E29\":\"h\",\"\u1E2B\":\"h\",\"\u1E96\":\"h\",\"\u0127\":\"h\",\"\u2C68\":\"h\",\"\u2C76\":\"h\",\"\u0265\":\"h\",\"\u0195\":\"hv\",\"\u24D8\":\"i\",\"\uFF49\":\"i\",\"\u00EC\":\"i\",\"\u00ED\":\"i\",\"\u00EE\":\"i\",\"\u0129\":\"i\",\"\u012B\":\"i\",\"\u012D\":\"i\",\"\u00EF\":\"i\",\"\u1E2F\":\"i\",\"\u1EC9\":\"i\",\"\u01D0\":\"i\",\"\u0209\":\"i\",\"\u020B\":\"i\",\"\u1ECB\":\"i\",\"\u012F\":\"i\",\"\u1E2D\":\"i\",\"\u0268\":\"i\",\"\u0131\":\"i\",\"\u24D9\":\"j\",\"\uFF4A\":\"j\",\"\u0135\":\"j\",\"\u01F0\":\"j\",\"\u0249\":\"j\",\"\u24DA\":\"k\",\"\uFF4B\":\"k\",\"\u1E31\":\"k\",\"\u01E9\":\"k\",\"\u1E33\":\"k\",\"\u0137\":\"k\",\"\u1E35\":\"k\",\"\u0199\":\"k\",\"\u2C6A\":\"k\",\"\uA741\":\"k\",\"\uA743\":\"k\",\"\uA745\":\"k\",\"\uA7A3\":\"k\",\"\u24DB\":\"l\",\"\uFF4C\":\"l\",\"\u0140\":\"l\",\"\u013A\":\"l\",\"\u013E\":\"l\",\"\u1E37\":\"l\",\"\u1E39\":\"l\",\"\u013C\":\"l\",\"\u1E3D\":\"l\",\"\u1E3B\":\"l\",\"\u017F\":\"l\",\"\u0142\":\"l\",\"\u019A\":\"l\",\"\u026B\":\"l\",\"\u2C61\":\"l\",\"\uA749\":\"l\",\"\uA781\":\"l\",\"\uA747\":\"l\",\"\u01C9\":\"lj\",\"\u24DC\":\"m\",\"\uFF4D\":\"m\",\"\u1E3F\":\"m\",\"\u1E41\":\"m\",\"\u1E43\":\"m\",\"\u0271\":\"m\",\"\u026F\":\"m\",\"\u24DD\":\"n\",\"\uFF4E\":\"n\",\"\u01F9\":\"n\",\"\u0144\":\"n\",\"\u00F1\":\"n\",\"\u1E45\":\"n\",\"\u0148\":\"n\",\"\u1E47\":\"n\",\"\u0146\":\"n\",\"\u1E4B\":\"n\",\"\u1E49\":\"n\",\"\u019E\":\"n\",\"\u0272\":\"n\",\"\u0149\":\"n\",\"\uA791\":\"n\",\"\uA7A5\":\"n\",\"\u01CC\":\"nj\",\"\u24DE\":\"o\",\"\uFF4F\":\"o\",\"\u00F2\":\"o\",\"\u00F3\":\"o\",\"\u00F4\":\"o\",\"\u1ED3\":\"o\",\"\u1ED1\":\"o\",\"\u1ED7\":\"o\",\"\u1ED5\":\"o\",\"\u00F5\":\"o\",\"\u1E4D\":\"o\",\"\u022D\":\"o\",\"\u1E4F\":\"o\",\"\u014D\":\"o\",\"\u1E51\":\"o\",\"\u1E53\":\"o\",\"\u014F\":\"o\",\"\u022F\":\"o\",\"\u0231\":\"o\",\"\u00F6\":\"o\",\"\u022B\":\"o\",\"\u1ECF\":\"o\",\"\u0151\":\"o\",\"\u01D2\":\"o\",\"\u020D\":\"o\",\"\u020F\":\"o\",\"\u01A1\":\"o\",\"\u1EDD\":\"o\",\"\u1EDB\":\"o\",\"\u1EE1\":\"o\",\"\u1EDF\":\"o\",\"\u1EE3\":\"o\",\"\u1ECD\":\"o\",\"\u1ED9\":\"o\",\"\u01EB\":\"o\",\"\u01ED\":\"o\",\"\u00F8\":\"o\",\"\u01FF\":\"o\",\"\u0254\":\"o\",\"\uA74B\":\"o\",\"\uA74D\":\"o\",\"\u0275\":\"o\",\"\u0153\":\"oe\",\"\u01A3\":\"oi\",\"\u0223\":\"ou\",\"\uA74F\":\"oo\",\"\u24DF\":\"p\",\"\uFF50\":\"p\",\"\u1E55\":\"p\",\"\u1E57\":\"p\",\"\u01A5\":\"p\",\"\u1D7D\":\"p\",\"\uA751\":\"p\",\"\uA753\":\"p\",\"\uA755\":\"p\",\"\u24E0\":\"q\",\"\uFF51\":\"q\",\"\u024B\":\"q\",\"\uA757\":\"q\",\"\uA759\":\"q\",\"\u24E1\":\"r\",\"\uFF52\":\"r\",\"\u0155\":\"r\",\"\u1E59\":\"r\",\"\u0159\":\"r\",\"\u0211\":\"r\",\"\u0213\":\"r\",\"\u1E5B\":\"r\",\"\u1E5D\":\"r\",\"\u0157\":\"r\",\"\u1E5F\":\"r\",\"\u024D\":\"r\",\"\u027D\":\"r\",\"\uA75B\":\"r\",\"\uA7A7\":\"r\",\"\uA783\":\"r\",\"\u24E2\":\"s\",\"\uFF53\":\"s\",\"\u00DF\":\"s\",\"\u015B\":\"s\",\"\u1E65\":\"s\",\"\u015D\":\"s\",\"\u1E61\":\"s\",\"\u0161\":\"s\",\"\u1E67\":\"s\",\"\u1E63\":\"s\",\"\u1E69\":\"s\",\"\u0219\":\"s\",\"\u015F\":\"s\",\"\u023F\":\"s\",\"\uA7A9\":\"s\",\"\uA785\":\"s\",\"\u1E9B\":\"s\",\"\u24E3\":\"t\",\"\uFF54\":\"t\",\"\u1E6B\":\"t\",\"\u1E97\":\"t\",\"\u0165\":\"t\",\"\u1E6D\":\"t\",\"\u021B\":\"t\",\"\u0163\":\"t\",\"\u1E71\":\"t\",\"\u1E6F\":\"t\",\"\u0167\":\"t\",\"\u01AD\":\"t\",\"\u0288\":\"t\",\"\u2C66\":\"t\",\"\uA787\":\"t\",\"\uA729\":\"tz\",\"\u24E4\":\"u\",\"\uFF55\":\"u\",\"\u00F9\":\"u\",\"\u00FA\":\"u\",\"\u00FB\":\"u\",\"\u0169\":\"u\",\"\u1E79\":\"u\",\"\u016B\":\"u\",\"\u1E7B\":\"u\",\"\u016D\":\"u\",\"\u00FC\":\"u\",\"\u01DC\":\"u\",\"\u01D8\":\"u\",\"\u01D6\":\"u\",\"\u01DA\":\"u\",\"\u1EE7\":\"u\",\"\u016F\":\"u\",\"\u0171\":\"u\",\"\u01D4\":\"u\",\"\u0215\":\"u\",\"\u0217\":\"u\",\"\u01B0\":\"u\",\"\u1EEB\":\"u\",\"\u1EE9\":\"u\",\"\u1EEF\":\"u\",\"\u1EED\":\"u\",\"\u1EF1\":\"u\",\"\u1EE5\":\"u\",\"\u1E73\":\"u\",\"\u0173\":\"u\",\"\u1E77\":\"u\",\"\u1E75\":\"u\",\"\u0289\":\"u\",\"\u24E5\":\"v\",\"\uFF56\":\"v\",\"\u1E7D\":\"v\",\"\u1E7F\":\"v\",\"\u028B\":\"v\",\"\uA75F\":\"v\",\"\u028C\":\"v\",\"\uA761\":\"vy\",\"\u24E6\":\"w\",\"\uFF57\":\"w\",\"\u1E81\":\"w\",\"\u1E83\":\"w\",\"\u0175\":\"w\",\"\u1E87\":\"w\",\"\u1E85\":\"w\",\"\u1E98\":\"w\",\"\u1E89\":\"w\",\"\u2C73\":\"w\",\"\u24E7\":\"x\",\"\uFF58\":\"x\",\"\u1E8B\":\"x\",\"\u1E8D\":\"x\",\"\u24E8\":\"y\",\"\uFF59\":\"y\",\"\u1EF3\":\"y\",\"\u00FD\":\"y\",\"\u0177\":\"y\",\"\u1EF9\":\"y\",\"\u0233\":\"y\",\"\u1E8F\":\"y\",\"\u00FF\":\"y\",\"\u1EF7\":\"y\",\"\u1E99\":\"y\",\"\u1EF5\":\"y\",\"\u01B4\":\"y\",\"\u024F\":\"y\",\"\u1EFF\":\"y\",\"\u24E9\":\"z\",\"\uFF5A\":\"z\",\"\u017A\":\"z\",\"\u1E91\":\"z\",\"\u017C\":\"z\",\"\u017E\":\"z\",\"\u1E93\":\"z\",\"\u1E95\":\"z\",\"\u01B6\":\"z\",\"\u0225\":\"z\",\"\u0240\":\"z\",\"\u2C6C\":\"z\",\"\uA763\":\"z\",\"\u0386\":\"\u0391\",\"\u0388\":\"\u0395\",\"\u0389\":\"\u0397\",\"\u038A\":\"\u0399\",\"\u03AA\":\"\u0399\",\"\u038C\":\"\u039F\",\"\u038E\":\"\u03A5\",\"\u03AB\":\"\u03A5\",\"\u038F\":\"\u03A9\",\"\u03AC\":\"\u03B1\",\"\u03AD\":\"\u03B5\",\"\u03AE\":\"\u03B7\",\"\u03AF\":\"\u03B9\",\"\u03CA\":\"\u03B9\",\"\u0390\":\"\u03B9\",\"\u03CC\":\"\u03BF\",\"\u03CD\":\"\u03C5\",\"\u03CB\":\"\u03C5\",\"\u03B0\":\"\u03C5\",\"\u03CE\":\"\u03C9\",\"\u03C2\":\"\u03C3\",\"\u2019\":\"'\"}}),e.define(\"select2/data/base\",[\"../utils\"],function(i){function n(e,t){n.__super__.constructor.call(this)}return i.Extend(n,i.Observable),n.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},n.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},n.prototype.bind=function(e,t){},n.prototype.destroy=function(){},n.prototype.generateResultId=function(e,t){var n=e.id+\"-result-\";return n+=i.generateChars(4),null!=t.id?n+=\"-\"+t.id.toString():n+=\"-\"+i.generateChars(4),n},n}),e.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var n=[],i=this;this.$element.find(\":selected\").each(function(){var e=l(this),t=i.item(e);n.push(t)}),e(n)},n.prototype.select=function(r){var o=this;if(r.selected=!0,l(r.element).is(\"option\"))return r.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current(function(e){var t=[];(r=[r]).push.apply(r,e);for(var n=0;n<r.length;n++){var i=r[n].id;-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger(\"input\").trigger(\"change\")});else{var e=r.id;this.$element.val(e),this.$element.trigger(\"input\").trigger(\"change\")}},n.prototype.unselect=function(r){var o=this;if(this.$element.prop(\"multiple\")){if(r.selected=!1,l(r.element).is(\"option\"))return r.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n].id;i!==r.id&&-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger(\"input\").trigger(\"change\")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on(\"select\",function(e){n.select(e.data)}),e.on(\"unselect\",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find(\"*\").each(function(){a.RemoveData(this)})},n.prototype.query=function(i,e){var r=[],o=this;this.$element.children().each(function(){var e=l(this);if(e.is(\"option\")||e.is(\"optgroup\")){var t=o.item(e),n=o.matches(i,t);null!==n&&r.push(n)}}),e({results:r})},n.prototype.addOptions=function(e){a.appendMany(this.$element,e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement(\"optgroup\")).label=e.text:void 0!==(t=document.createElement(\"option\")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var n=l(t),i=this._normalizeItem(e);return i.element=t,a.StoreData(t,\"data\",i),n},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],\"data\")))return t;if(e.is(\"option\"))t={id:e.val(),text:e.text(),disabled:e.prop(\"disabled\"),selected:e.prop(\"selected\"),title:e.prop(\"title\")};else if(e.is(\"optgroup\")){t={text:e.prop(\"label\"),children:[],title:e.prop(\"title\")};for(var n=e.children(\"option\"),i=[],r=0;r<n.length;r++){var o=l(n[r]),s=this.item(o);i.push(s)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],\"data\",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:\"\"},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get(\"matcher\")(e,t)},n}),e.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],function(e,f,g){function i(e,t){this._dataToConvert=t.get(\"data\")||[],i.__super__.constructor.call(this,e,t)}return f.Extend(i,e),i.prototype.bind=function(e,t){i.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},i.prototype.select=function(n){var e=this.$element.find(\"option\").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),i.__super__.select.call(this,n)},i.prototype.convertToOptions=function(e){var t=this,n=this.$element.find(\"option\"),i=n.map(function(){return t.item(g(this)).id}).get(),r=[];function o(e){return function(){return g(this).val()==e.id}}for(var s=0;s<e.length;s++){var a=this._normalizeItem(e[s]);if(0<=g.inArray(a.id,i)){var l=n.filter(o(a)),c=this.item(l),u=g.extend(!0,{},a,c),d=this.option(u);l.replaceWith(d)}else{var p=this.option(a);if(a.children){var h=this.convertToOptions(a.children);f.appendMany(p,h)}r.push(p)}}return r},i}),e.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],function(e,t,o){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return o.extend({},e,{q:e.term})},transport:function(e,t,n){var i=o.ajax(e);return i.then(t),i.fail(n),i}};return o.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(n,i){var r=this;null!=this._request&&(o.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var t=o.extend({type:\"GET\"},this.ajaxOptions);function e(){var e=t.transport(t,function(e){var t=r.processResults(e,n);r.options.get(\"debug\")&&window.console&&console.error&&(t&&t.results&&o.isArray(t.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),i(t)},function(){\"status\"in e&&(0===e.status||\"0\"===e.status)||r.trigger(\"results:message\",{message:\"errorLoading\"})});r._request=e}\"function\"==typeof t.url&&(t.url=t.url.call(this.$element,n)),\"function\"==typeof t.data&&(t.data=t.data.call(this.$element,n)),this.ajaxOptions.delay&&null!=n.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),e.define(\"select2/data/tags\",[\"jquery\"],function(u){function e(e,t,n){var i=n.get(\"tags\"),r=n.get(\"createTag\");void 0!==r&&(this.createTag=r);var o=n.get(\"insertTag\");if(void 0!==o&&(this.insertTag=o),e.call(this,t,n),u.isArray(i))for(var s=0;s<i.length;s++){var a=i[s],l=this._normalizeItem(a),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var i=t.results,r=0;r<i.length;r++){var o=i[r],s=null!=o.children&&!e({results:o.children},!0);if((o.text||\"\").toUpperCase()===(c.term||\"\").toUpperCase()||s)return!n&&(t.data=i,void u(t))}if(n)return!0;var a=d.createTag(c);if(null!=a){var l=d.option(a);l.attr(\"data-select2-tag\",!0),d.addOptions([l]),d.insertTag(i,a)}t.results=i,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){var n=u.trim(t.term);return\"\"===n?null:{id:n,text:n}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each(function(){this.selected||u(this).remove()})},e}),e.define(\"select2/data/tokenizer\",[\"jquery\"],function(d){function e(e,t,n){var i=n.get(\"tokenizer\");void 0!==i&&(this.tokenizer=i),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,t,n){var i=this;t.term=t.term||\"\";var r=this.tokenizer(t,this.options,function(e){var t=i._normalizeItem(e);if(!i.$element.find(\"option\").filter(function(){return d(this).val()===t.id}).length){var n=i.option(t);n.attr(\"data-select2-tag\",!0),i._removeOldTags(),i.addOptions([n])}!function(e){i.trigger(\"select\",{data:e})}(t)});r.term!==t.term&&(this.$search.length&&(this.$search.val(r.term),this.$search.trigger(\"focus\")),t.term=r.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,i){for(var r=n.get(\"tokenSeparators\")||[],o=t.term,s=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};s<o.length;){var l=o[s];if(-1!==d.inArray(l,r)){var c=o.substr(0,s),u=a(d.extend({},t,{term:c}));null!=u?(i(u),o=o.substr(s+1)||\"\",s=0):s++}else s++}return{term:o}},e}),e.define(\"select2/data/minimumInputLength\",[],function(){function e(e,t,n){this.minimumInputLength=n.get(\"minimumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",t.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define(\"select2/data/maximumInputLength\",[],function(){function e(e,t,n){this.maximumInputLength=n.get(\"maximumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define(\"select2/data/maximumSelectionLength\",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"select\",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0<i.maximumSelectionLength&&t>=i.maximumSelectionLength?i.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define(\"select2/dropdown/search\",[\"jquery\",\"../utils\"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=n,this.$search=n.find(\"input\"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var i=this,r=t.id+\"-results\";e.call(this,t,n),this.$search.on(\"keydown\",function(e){i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on(\"input\",function(e){o(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(e){i.handleSearch(e)}),t.on(\"open\",function(){i.$search.attr(\"tabindex\",0),i.$search.attr(\"aria-controls\",r),i.$search.trigger(\"focus\"),window.setTimeout(function(){i.$search.trigger(\"focus\")},0)}),t.on(\"close\",function(){i.$search.attr(\"tabindex\",-1),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.val(\"\"),i.$search.trigger(\"blur\")}),t.on(\"focus\",function(){t.isOpen()||i.$search.trigger(\"focus\")}),t.on(\"results:all\",function(e){null!=e.query.term&&\"\"!==e.query.term||(i.showSearch(e)?i.$searchContainer.removeClass(\"select2-search--hide\"):i.$searchContainer.addClass(\"select2-search--hide\"))}),t.on(\"results:focus\",function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger(\"query\",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define(\"select2/dropdown/hidePlaceholder\",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0<=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"query\",function(e){i.lastParams=e,i.loading=!0}),t.on(\"query:append\",function(e){i.lastParams=e,i.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),t=this.options.get(\"translations\").get(\"loadingMore\");return e.html(t(this.lastParams)),e},e}),e.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get(\"dropdownParent\")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"open\",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on(\"close\",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on(\"mousedown\",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t.removeClass(\"select2\"),t.addClass(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(\"<span></span>\"),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on(\"results:all\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:append\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:message\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"select\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"unselect\",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i=\"scroll.select2.\"+t.id,r=\"resize.select2.\"+t.id,o=\"orientationchange.select2.\"+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,\"select2-scroll-position\",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(i,function(e){var t=a.GetData(this,\"select2-scroll-position\");f(this).scrollTop(t.y)}),f(window).on(i+\" \"+r+\" \"+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n=\"scroll.select2.\"+t.id,i=\"resize.select2.\"+t.id,r=\"orientationchange.select2.\"+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+\" \"+i+\" \"+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass(\"select2-dropdown--above\"),n=this.$dropdown.hasClass(\"select2-dropdown--below\"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=r.top,o.bottom=r.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<r.top-s,u=l>r.bottom+s,d={left:r.left,top:o.bottom},p=this.$dropdownParent;\"static\"===p.css(\"position\")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i=\"below\"),u||!c||t?!c&&u&&t&&(i=\"below\"):i=\"above\",(\"above\"==i||t&&\"below\"!==i)&&(d.top=o.top-h.top-s),null!=i&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+i),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define(\"select2/dropdown/minimumResultsForSearch\",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i<t.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),e.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"close\",function(e){i._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if(\"select\"===n._type||\"unselect\"===n._type)return}var i=this.getHighlightedResults();if(!(i.length<1)){var r=o.GetData(i[0],\"data\");null!=r.element&&r.element.selected||null==r.element&&r.selected||this.trigger(\"select\",{data:r})}},e}),e.define(\"select2/dropdown/closeOnSelect\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"select\",function(e){i._selectTriggered(e)}),t.on(\"unselect\",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:t})},e}),e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Please delete \"+t+\" character\";return 1!=t&&(n+=\"s\"),n},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results\u2026\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching\u2026\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define(\"select2/defaults\",[\"jquery\",\"require\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./i18n/en\"],function(c,u,d,p,h,f,g,m,v,y,s,t,_,w,$,b,A,x,D,S,C,E,O,T,q,j,L,I,e){function n(){this.reset()}return n.prototype.apply=function(e){if(null==(e=c.extend(!0,{},this.defaults,e)).dataAdapter){if(null!=e.ajax?e.dataAdapter=$:null!=e.data?e.dataAdapter=w:e.dataAdapter=_,0<e.minimumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,x)),0<e.maximumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,D)),0<e.maximumSelectionLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,S)),e.tags&&(e.dataAdapter=y.Decorate(e.dataAdapter,b)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=y.Decorate(e.dataAdapter,A)),null!=e.query){var t=u(e.amdBase+\"compat/query\");e.dataAdapter=y.Decorate(e.dataAdapter,t)}if(null!=e.initSelection){var n=u(e.amdBase+\"compat/initSelection\");e.dataAdapter=y.Decorate(e.dataAdapter,n)}}if(null==e.resultsAdapter&&(e.resultsAdapter=d,null!=e.ajax&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,T)),null!=e.placeholder&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,O)),e.selectOnClose&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,L))),null==e.dropdownAdapter){if(e.multiple)e.dropdownAdapter=C;else{var i=y.Decorate(C,E);e.dropdownAdapter=i}if(0!==e.minimumResultsForSearch&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,j)),e.closeOnSelect&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,I)),null!=e.dropdownCssClass||null!=e.dropdownCss||null!=e.adaptDropdownCssClass){var r=u(e.amdBase+\"compat/dropdownCss\");e.dropdownAdapter=y.Decorate(e.dropdownAdapter,r)}e.dropdownAdapter=y.Decorate(e.dropdownAdapter,q)}if(null==e.selectionAdapter){if(e.multiple?e.selectionAdapter=h:e.selectionAdapter=p,null!=e.placeholder&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,f)),e.allowClear&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,g)),e.multiple&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,m)),null!=e.containerCssClass||null!=e.containerCss||null!=e.adaptContainerCssClass){var o=u(e.amdBase+\"compat/containerCss\");e.selectionAdapter=y.Decorate(e.selectionAdapter,o)}e.selectionAdapter=y.Decorate(e.selectionAdapter,v)}e.language=this._resolveLanguage(e.language),e.language.push(\"en\");for(var s=[],a=0;a<e.language.length;a++){var l=e.language[a];-1===s.indexOf(l)&&s.push(l)}return e.language=s,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\\u0000-\\u007E]/g,function(e){return t[e]||e})}this.defaults={amdBase:\"./\",amdLanguageBase:\"./i18n/\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:y.escapeMarkup,language:{},matcher:function e(t,n){if(\"\"===c.trim(t.term))return n;if(n.children&&0<n.children.length){for(var i=c.extend(!0,{},n),r=n.children.length-1;0<=r;r--)null==e(t,n.children[r])&&i.children.splice(r,1);return 0<i.children.length?i:e(t,i)}var o=a(n.text).toUpperCase(),s=a(t.term).toUpperCase();return-1<o.indexOf(s)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:\"default\",width:\"resolve\"}},n.prototype.applyFromElement=function(e,t){var n=e.language,i=this.defaults.language,r=t.prop(\"lang\"),o=t.closest(\"[lang]\").prop(\"lang\"),s=Array.prototype.concat.call(this._resolveLanguage(r),this._resolveLanguage(n),this._resolveLanguage(i),this._resolveLanguage(o));return e.language=s,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(c.isEmptyObject(e))return[];if(c.isPlainObject(e))return[e];var t;t=c.isArray(e)?e:[e];for(var n=[],i=0;i<t.length;i++)if(n.push(t[i]),\"string\"==typeof t[i]&&0<t[i].indexOf(\"-\")){var r=t[i].split(\"-\")[0];n.push(r)}return n},n.prototype._processTranslations=function(e,t){for(var n=new s,i=0;i<e.length;i++){var r=new s,o=e[i];if(\"string\"==typeof o)try{r=s.loadPath(o)}catch(e){try{o=this.defaults.amdLanguageBase+o,r=s.loadPath(o)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+o+'\" could not be automatically loaded. A fallback will be used instead.')}}else r=c.isPlainObject(o)?new s(o):o;n.extend(r)}return n},n.prototype.set=function(e,t){var n={};n[c.camelCase(e)]=t;var i=y._convertData(n);c.extend(!0,this.defaults,i)},new n}),e.define(\"select2/options\",[\"require\",\"jquery\",\"./defaults\",\"./utils\"],function(i,d,r,p){function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=r.applyFromElement(this.options,t)),this.options=r.apply(this.options),t&&t.is(\"input\")){var n=i(this.get(\"amdBase\")+\"compat/inputData\");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,n)}}return e.prototype.fromElement=function(e){var t=[\"select2\"];null==this.options.multiple&&(this.options.multiple=e.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=e.prop(\"disabled\")),null==this.options.dir&&(e.prop(\"dir\")?this.options.dir=e.prop(\"dir\"):e.closest(\"[dir]\").prop(\"dir\")?this.options.dir=e.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),e.prop(\"disabled\",this.options.disabled),e.prop(\"multiple\",this.options.multiple),p.GetData(e[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),p.StoreData(e[0],\"data\",p.GetData(e[0],\"select2Tags\")),p.StoreData(e[0],\"tags\",!0)),p.GetData(e[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),e.attr(\"ajax--url\",p.GetData(e[0],\"ajaxUrl\")),p.StoreData(e[0],\"ajax-Url\",p.GetData(e[0],\"ajaxUrl\")));var n={};function i(e,t){return t.toUpperCase()}for(var r=0;r<e[0].attributes.length;r++){var o=e[0].attributes[r].name,s=\"data-\";if(o.substr(0,s.length)==s){var a=o.substring(s.length),l=p.GetData(e[0],a);n[a.replace(/-([a-z])/g,i)]=l}}d.fn.jquery&&\"1.\"==d.fn.jquery.substr(0,2)&&e[0].dataset&&(n=d.extend(!0,{},e[0].dataset,n));var c=d.extend(!0,{},p.GetData(e[0]),n);for(var u in c=p._convertData(c))-1<d.inArray(u,t)||(d.isPlainObject(this.options[u])?d.extend(this.options[u],c[u]):this.options[u]=c[u]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),e.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],function(o,c,u,i){var d=function(e,t){null!=u.GetData(e[0],\"select2\")&&u.GetData(e[0],\"select2\").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new c(t,e),d.__super__.constructor.call(this);var n=e.attr(\"tabindex\")||0;u.StoreData(e[0],\"old-tabindex\",n),e.attr(\"tabindex\",\"-1\");var i=this.options.get(\"dataAdapter\");this.dataAdapter=new i(e,this.options);var r=this.render();this._placeContainer(r);var o=this.options.get(\"selectionAdapter\");this.selection=new o(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,r);var s=this.options.get(\"dropdownAdapter\");this.dropdown=new s(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,r);var a=this.options.get(\"resultsAdapter\");this.results=new a(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){l.trigger(\"selection:update\",{data:e})}),e.addClass(\"select2-hidden-accessible\"),e.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),u.StoreData(e[0],\"select2\",this),e.data(\"select2\",this)};return u.Extend(d,u.Observable),d.prototype._generateId=function(e){return\"select2-\"+(null!=e.attr(\"id\")?e.attr(\"id\"):null!=e.attr(\"name\")?e.attr(\"name\")+\"-\"+u.generateChars(2):u.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},d.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=t&&e.css(\"width\",t)},d.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==t){var i=this._resolveWidth(e,\"style\");return null!=i?i:this._resolveWidth(e,\"element\")}if(\"element\"==t){var r=e.outerWidth(!1);return r<=0?\"auto\":r+\"px\"}if(\"style\"!=t)return\"computedstyle\"!=t?t:window.getComputedStyle(e[0]).width;var o=e.attr(\"style\");if(\"string\"!=typeof o)return null;for(var s=o.split(\";\"),a=0,l=s.length;a<l;a+=1){var c=s[a].replace(/\\s/g,\"\").match(n);if(null!==c&&1<=c.length)return c[1]}return null},d.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},d.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",function(){t.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})}),this.$element.on(\"focus.select2\",function(e){t.trigger(\"focus\",e)}),this._syncA=u.bind(this._syncAttributes,this),this._syncS=u.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e(function(e){t._syncA(),t._syncS(null,e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",t._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",t._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",t._syncS,!1))},d.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerSelectionEvents=function(){var n=this,i=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",function(){n.toggleDropdown()}),this.selection.on(\"focus\",function(e){n.focus(e)}),this.selection.on(\"*\",function(e,t){-1===o.inArray(e,i)&&n.trigger(e,t)})},d.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerResultsEvents=function(){var n=this;this.results.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerEvents=function(){var n=this;this.on(\"open\",function(){n.$container.addClass(\"select2-container--open\")}),this.on(\"close\",function(){n.$container.removeClass(\"select2-container--open\")}),this.on(\"enable\",function(){n.$container.removeClass(\"select2-container--disabled\")}),this.on(\"disable\",function(){n.$container.addClass(\"select2-container--disabled\")}),this.on(\"blur\",function(){n.$container.removeClass(\"select2-container--focus\")}),this.on(\"query\",function(t){n.isOpen()||n.trigger(\"open\",{}),this.dataAdapter.query(t,function(e){n.trigger(\"results:all\",{data:e,query:t})})}),this.on(\"query:append\",function(t){this.dataAdapter.query(t,function(e){n.trigger(\"results:append\",{data:e,query:t})})}),this.on(\"keypress\",function(e){var t=e.which;n.isOpen()?t===i.ESC||t===i.TAB||t===i.UP&&e.altKey?(n.close(e),e.preventDefault()):t===i.ENTER?(n.trigger(\"results:select\",{}),e.preventDefault()):t===i.SPACE&&e.ctrlKey?(n.trigger(\"results:toggle\",{}),e.preventDefault()):t===i.UP?(n.trigger(\"results:previous\",{}),e.preventDefault()):t===i.DOWN&&(n.trigger(\"results:next\",{}),e.preventDefault()):(t===i.ENTER||t===i.SPACE||t===i.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},d.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},d.prototype._isChangeMutation=function(e,t){var n=!1,i=this;if(!e||!e.target||\"OPTION\"===e.target.nodeName||\"OPTGROUP\"===e.target.nodeName){if(t)if(t.addedNodes&&0<t.addedNodes.length)for(var r=0;r<t.addedNodes.length;r++){t.addedNodes[r].selected&&(n=!0)}else t.removedNodes&&0<t.removedNodes.length?n=!0:o.isArray(t)&&o.each(t,function(e,t){if(i._isChangeMutation(e,t))return!(n=!0)});else n=!0;return n}},d.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),i=this;n&&this.dataAdapter.current(function(e){i.trigger(\"selection:update\",{data:e})})},d.prototype.trigger=function(e,t){var n=d.__super__.trigger,i={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===t&&(t={}),e in i){var r=i[e],o={prevented:!1,name:e,args:t};if(n.call(this,r,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},d.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},d.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},d.prototype.close=function(e){this.isOpen()&&this.trigger(\"close\",{originalEvent:e})},d.prototype.isEnabled=function(){return!this.isDisabled()},d.prototype.isDisabled=function(){return this.options.get(\"disabled\")},d.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},d.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},d.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},d.prototype.enable=function(e){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop(\"disabled\",t)},d.prototype.data=function(){this.options.get(\"debug\")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},d.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var t=e[0];o.isArray(t)&&(t=o.map(t,function(e){return e.toString()})),this.$element.val(t).trigger(\"input\").trigger(\"change\")},d.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",u.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),u.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},d.prototype.render=function(){var e=o('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),u.StoreData(e[0],\"element\",this.$element),e},d}),e.define(\"select2/compat/utils\",[\"jquery\"],function(s){return{syncCssClasses:function(e,t,n){var i,r,o=[];(i=s.trim(e.attr(\"class\")))&&s((i=\"\"+i).split(/\\s+/)).each(function(){0===this.indexOf(\"select2-\")&&o.push(this)}),(i=s.trim(t.attr(\"class\")))&&s((i=\"\"+i).split(/\\s+/)).each(function(){0!==this.indexOf(\"select2-\")&&null!=(r=n(this))&&o.push(r)}),e.attr(\"class\",o.join(\" \"))}}}),e.define(\"select2/compat/containerCss\",[\"jquery\",\"./utils\"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"containerCssClass\")||\"\";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get(\"adaptContainerCssClass\");if(i=i||l,-1!==n.indexOf(\":all:\")){n=n.replace(\":all:\",\"\");var r=i;i=function(e){var t=r(e);return null!=t?t+\" \"+e:e}}var o=this.options.get(\"containerCss\")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define(\"select2/compat/dropdownCss\",[\"jquery\",\"./utils\"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"dropdownCssClass\")||\"\";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get(\"adaptDropdownCssClass\");if(i=i||l,-1!==n.indexOf(\":all:\")){n=n.replace(\":all:\",\"\");var r=i;i=function(e){var t=r(e);return null!=t?t+\" \"+e:e}}var o=this.options.get(\"dropdownCss\")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define(\"select2/compat/initSelection\",[\"jquery\"],function(i){function e(e,t,n){n.get(\"debug\")&&window.console&&console.warn&&console.warn(\"Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2\"),this.initSelection=n.get(\"initSelection\"),this._isInitialized=!1,e.call(this,t,n)}return e.prototype.current=function(e,t){var n=this;this._isInitialized?e.call(this,t):this.initSelection.call(null,this.$element,function(e){n._isInitialized=!0,i.isArray(e)||(e=[e]),t(e)})},e}),e.define(\"select2/compat/inputData\",[\"jquery\",\"../utils\"],function(s,i){function e(e,t,n){this._currentData=[],this._valueSeparator=n.get(\"valueSeparator\")||\",\",\"hidden\"===t.prop(\"type\")&&n.get(\"debug\")&&console&&console.warn&&console.warn(\"Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead.\"),e.call(this,t,n)}return e.prototype.current=function(e,t){function i(e,t){var n=[];return e.selected||-1!==s.inArray(e.id,t)?(e.selected=!0,n.push(e)):e.selected=!1,e.children&&n.push.apply(n,i(e.children,t)),n}for(var n=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r];n.push.apply(n,i(o,this.$element.val().split(this._valueSeparator)))}t(n)},e.prototype.select=function(e,t){if(this.options.get(\"multiple\")){var n=this.$element.val();n+=this._valueSeparator+t.id,this.$element.val(n),this.$element.trigger(\"input\").trigger(\"change\")}else this.current(function(e){s.map(e,function(e){e.selected=!1})}),this.$element.val(t.id),this.$element.trigger(\"input\").trigger(\"change\")},e.prototype.unselect=function(e,r){var o=this;r.selected=!1,this.current(function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n];r.id!=i.id&&t.push(i.id)}o.$element.val(t.join(o._valueSeparator)),o.$element.trigger(\"input\").trigger(\"change\")})},e.prototype.query=function(e,t,n){for(var i=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r],s=this.matches(t,o);null!==s&&i.push(s)}n({results:i})},e.prototype.addOptions=function(e,t){var n=s.map(t,function(e){return i.GetData(e[0],\"data\")});this._currentData.push.apply(this._currentData,n)},e}),e.define(\"select2/compat/matcher\",[\"jquery\"],function(s){return function(o){return function(e,t){var n=s.extend(!0,{},t);if(null==e.term||\"\"===s.trim(e.term))return n;if(t.children){for(var i=t.children.length-1;0<=i;i--){var r=t.children[i];o(e.term,r.text,r)||n.children.splice(i,1)}if(0<n.children.length)return n}return o(e.term,t.text,t)?n:null}}}),e.define(\"select2/compat/query\",[],function(){function e(e,t,n){n.get(\"debug\")&&window.console&&console.warn&&console.warn(\"Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2.\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.callback=n,this.options.get(\"query\").call(null,t)},e}),e.define(\"select2/dropdown/attachContainer\",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(\".dropdown-wrapper\").append(t),t.addClass(\"select2-dropdown--below\"),n.addClass(\"select2-container--below\")},e}),e.define(\"select2/dropdown/stopPropagation\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(e){e.stopPropagation()})},e}),e.define(\"select2/selection/stopPropagation\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(e){e.stopPropagation()})},e}),l=function(p){var h,f,e=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],t=\"onwheel\"in document||9<=document.documentMode?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],g=Array.prototype.slice;if(p.event.fixHooks)for(var n=e.length;n;)p.event.fixHooks[e[--n]]=p.event.mouseHooks;var m=p.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],i,!1);else this.onmousewheel=i;p.data(this,\"mousewheel-line-height\",m.getLineHeight(this)),p.data(this,\"mousewheel-page-height\",m.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],i,!1);else this.onmousewheel=null;p.removeData(this,\"mousewheel-line-height\"),p.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(e){var t=p(e),n=t[\"offsetParent\"in p.fn?\"offsetParent\":\"parent\"]();return n.length||(n=p(\"body\")),parseInt(n.css(\"fontSize\"),10)||parseInt(t.css(\"fontSize\"),10)||16},getPageHeight:function(e){return p(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function i(e){var t,n=e||window.event,i=g.call(arguments,1),r=0,o=0,s=0,a=0,l=0;if((e=p.event.fix(n)).type=\"mousewheel\",\"detail\"in n&&(s=-1*n.detail),\"wheelDelta\"in n&&(s=n.wheelDelta),\"wheelDeltaY\"in n&&(s=n.wheelDeltaY),\"wheelDeltaX\"in n&&(o=-1*n.wheelDeltaX),\"axis\"in n&&n.axis===n.HORIZONTAL_AXIS&&(o=-1*s,s=0),r=0===s?o:s,\"deltaY\"in n&&(r=s=-1*n.deltaY),\"deltaX\"in n&&(o=n.deltaX,0===s&&(r=-1*o)),0!==s||0!==o){if(1===n.deltaMode){var c=p.data(this,\"mousewheel-line-height\");r*=c,s*=c,o*=c}else if(2===n.deltaMode){var u=p.data(this,\"mousewheel-page-height\");r*=u,s*=u,o*=u}if(t=Math.max(Math.abs(s),Math.abs(o)),(!f||t<f)&&y(n,f=t)&&(f/=40),y(n,t)&&(r/=40,o/=40,s/=40),r=Math[1<=r?\"floor\":\"ceil\"](r/f),o=Math[1<=o?\"floor\":\"ceil\"](o/f),s=Math[1<=s?\"floor\":\"ceil\"](s/f),m.settings.normalizeOffset&&this.getBoundingClientRect){var d=this.getBoundingClientRect();a=e.clientX-d.left,l=e.clientY-d.top}return e.deltaX=o,e.deltaY=s,e.deltaFactor=f,e.offsetX=a,e.offsetY=l,e.deltaMode=0,i.unshift(e,r,o,s),h&&clearTimeout(h),h=setTimeout(v,200),(p.event.dispatch||p.event.handle).apply(this,i)}}function v(){f=null}function y(e,t){return m.settings.adjustOldDeltas&&\"mousewheel\"===e.type&&t%120==0}p.fn.extend({mousewheel:function(e){return e?this.bind(\"mousewheel\",e):this.trigger(\"mousewheel\")},unmousewheel:function(e){return this.unbind(\"mousewheel\",e)}})},\"function\"==typeof e.define&&e.define.amd?e.define(\"jquery-mousewheel\",[\"jquery\"],l):\"object\"==typeof exports?module.exports=l:l(d),e.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],function(r,e,o,t,s){if(null==r.fn.select2){var a=[\"open\",\"close\",\"destroy\"];r.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each(function(){var e=r.extend(!0,{},t);new o(r(this),e)}),this;if(\"string\"!=typeof t)throw new Error(\"Invalid arguments for Select2: \"+t);var n,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),n=e[t].apply(e,i)}),-1<r.inArray(t,a)?this:n}}return null==r.fn.select2.defaults&&(r.fn.select2.defaults=t),o}),{define:e.define,require:e.require}}(),t=e.require(\"jquery.select2\");return d.fn.select2.amd=e,t});", "/**\n  * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation)\n  *\n  * @version v1.25.0\n  * @homepage https://bootstrap-table.com\n  * @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)\n  * @license MIT\n  */\n\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).BootstrapTable=e(t.jQuery)}(this,(function(t){\"use strict\";function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function n(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function i(t,e,n){return e&&function(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(t,u(i.key),i)}}(t.prototype,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t}function r(t,e){var n=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(!n){if(Array.isArray(t)||(n=f(t))||e){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function o(t,e,n){return(e=u(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach((function(e){o(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function l(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=n){var i,r,o,a,s=[],l=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e);else for(;!(l=(i=o.call(n)).done)&&(s.push(i.value),s.length!==e);l=!0);}catch(t){c=!0,r=t}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw r}}return s}}(t,e)||f(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function c(t){return function(t){if(Array.isArray(t))return e(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||f(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function u(t){var e=function(t,e){if(\"object\"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if(\"object\"!=typeof i)return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t,\"string\");return\"symbol\"==typeof e?e:e+\"\"}function h(t){return h=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},h(t)}function f(t,n){if(t){if(\"string\"==typeof t)return e(t,n);var i={}.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?e(t,n):void 0}}var d,p,g=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{},v={};function b(){if(p)return d;p=1;var t=function(t){return t&&t.Math===Math&&t};return d=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof g&&g)||t(\"object\"==typeof d&&d)||function(){return this}()||Function(\"return this\")()}var m,y,w,S,x,O,k,T,C={};function P(){return y?m:(y=1,m=function(t){try{return!!t()}catch(t){return!0}})}function I(){if(S)return w;S=1;var t=P();return w=!t((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))}function A(){if(O)return x;O=1;var t=P();return x=!t((function(){var t=function(){}.bind();return\"function\"!=typeof t||t.hasOwnProperty(\"prototype\")}))}function $(){if(T)return k;T=1;var t=A(),e=Function.prototype.call;return k=t?e.bind(e):function(){return e.apply(e,arguments)},k}var R,E,j,N,F,L,D,_,V,B,H,M,U,z,q,W,G,K,Y,J,Q,X,Z,tt,et,nt,it,rt,ot,at,st,lt,ct,ut,ht,ft,dt,pt,gt,vt,bt,mt={};function yt(){if(R)return mt;R=1;var t={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,n=e&&!t.call({1:2},1);return mt.f=n?function(t){var n=e(this,t);return!!n&&n.enumerable}:t,mt}function wt(){return j?E:(j=1,E=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}})}function St(){if(F)return N;F=1;var t=A(),e=Function.prototype,n=e.call,i=t&&e.bind.bind(n,n);return N=t?i:function(t){return function(){return n.apply(t,arguments)}},N}function xt(){if(D)return L;D=1;var t=St(),e=t({}.toString),n=t(\"\".slice);return L=function(t){return n(e(t),8,-1)}}function Ot(){if(V)return _;V=1;var t=St(),e=P(),n=xt(),i=Object,r=t(\"\".split);return _=e((function(){return!i(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"===n(t)?r(t,\"\"):i(t)}:i}function kt(){return H?B:(H=1,B=function(t){return null==t})}function Tt(){if(U)return M;U=1;var t=kt(),e=TypeError;return M=function(n){if(t(n))throw new e(\"Can't call method on \"+n);return n}}function Ct(){if(q)return z;q=1;var t=Ot(),e=Tt();return z=function(n){return t(e(n))}}function Pt(){if(G)return W;G=1;var t=\"object\"==typeof document&&document.all;return W=void 0===t&&void 0!==t?function(e){return\"function\"==typeof e||e===t}:function(t){return\"function\"==typeof t}}function It(){if(Y)return K;Y=1;var t=Pt();return K=function(e){return\"object\"==typeof e?null!==e:t(e)}}function At(){if(Q)return J;Q=1;var t=b(),e=Pt();return J=function(n,i){return arguments.length<2?(r=t[n],e(r)?r:void 0):t[n]&&t[n][i];var r},J}function $t(){if(Z)return X;Z=1;var t=St();return X=t({}.isPrototypeOf)}function Rt(){if(et)return tt;et=1;var t=b().navigator,e=t&&t.userAgent;return tt=e?String(e):\"\"}function Et(){if(it)return nt;it=1;var t,e,n=b(),i=Rt(),r=n.process,o=n.Deno,a=r&&r.versions||o&&o.version,s=a&&a.v8;return s&&(e=(t=s.split(\".\"))[0]>0&&t[0]<4?1:+(t[0]+t[1])),!e&&i&&(!(t=i.match(/Edge\\/(\\d+)/))||t[1]>=74)&&(t=i.match(/Chrome\\/(\\d+)/))&&(e=+t[1]),nt=e}function jt(){if(ot)return rt;ot=1;var t=Et(),e=P(),n=b().String;return rt=!!Object.getOwnPropertySymbols&&!e((function(){var e=Symbol(\"symbol detection\");return!n(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&t&&t<41}))}function Nt(){if(st)return at;st=1;var t=jt();return at=t&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator}function Ft(){if(ct)return lt;ct=1;var t=At(),e=Pt(),n=$t(),i=Nt(),r=Object;return lt=i?function(t){return\"symbol\"==typeof t}:function(i){var o=t(\"Symbol\");return e(o)&&n(o.prototype,r(i))}}function Lt(){if(ht)return ut;ht=1;var t=String;return ut=function(e){try{return t(e)}catch(t){return\"Object\"}}}function Dt(){if(dt)return ft;dt=1;var t=Pt(),e=Lt(),n=TypeError;return ft=function(i){if(t(i))return i;throw new n(e(i)+\" is not a function\")}}function _t(){if(gt)return pt;gt=1;var t=Dt(),e=kt();return pt=function(n,i){var r=n[i];return e(r)?void 0:t(r)}}function Vt(){if(bt)return vt;bt=1;var t=$(),e=Pt(),n=It(),i=TypeError;return vt=function(r,o){var a,s;if(\"string\"===o&&e(a=r.toString)&&!n(s=t(a,r)))return s;if(e(a=r.valueOf)&&!n(s=t(a,r)))return s;if(\"string\"!==o&&e(a=r.toString)&&!n(s=t(a,r)))return s;throw new i(\"Can't convert object to primitive value\")}}var Bt,Ht,Mt,Ut,zt,qt,Wt,Gt,Kt,Yt,Jt,Qt,Xt,Zt,te,ee,ne,ie,re,oe,ae,se,le,ce,ue={exports:{}};function he(){return Ht?Bt:(Ht=1,Bt=!1)}function fe(){if(Ut)return Mt;Ut=1;var t=b(),e=Object.defineProperty;return Mt=function(n,i){try{e(t,n,{value:i,configurable:!0,writable:!0})}catch(e){t[n]=i}return i}}function de(){if(zt)return ue.exports;zt=1;var t=he(),e=b(),n=fe(),i=\"__core-js_shared__\",r=ue.exports=e[i]||n(i,{});return(r.versions||(r.versions=[])).push({version:\"3.44.0\",mode:t?\"pure\":\"global\",copyright:\"\u00A9 2014-2025 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.44.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"}),ue.exports}function pe(){if(Wt)return qt;Wt=1;var t=de();return qt=function(e,n){return t[e]||(t[e]=n||{})}}function ge(){if(Kt)return Gt;Kt=1;var t=Tt(),e=Object;return Gt=function(n){return e(t(n))}}function ve(){if(Jt)return Yt;Jt=1;var t=St(),e=ge(),n=t({}.hasOwnProperty);return Yt=Object.hasOwn||function(t,i){return n(e(t),i)}}function be(){if(Xt)return Qt;Xt=1;var t=St(),e=0,n=Math.random(),i=t(1.1.toString);return Qt=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+i(++e+n,36)}}function me(){if(te)return Zt;te=1;var t=b(),e=pe(),n=ve(),i=be(),r=jt(),o=Nt(),a=t.Symbol,s=e(\"wks\"),l=o?a.for||a:a&&a.withoutSetter||i;return Zt=function(t){return n(s,t)||(s[t]=r&&n(a,t)?a[t]:l(\"Symbol.\"+t)),s[t]}}function ye(){if(ne)return ee;ne=1;var t=$(),e=It(),n=Ft(),i=_t(),r=Vt(),o=me(),a=TypeError,s=o(\"toPrimitive\");return ee=function(o,l){if(!e(o)||n(o))return o;var c,u=i(o,s);if(u){if(void 0===l&&(l=\"default\"),c=t(u,o,l),!e(c)||n(c))return c;throw new a(\"Can't convert object to primitive value\")}return void 0===l&&(l=\"number\"),r(o,l)}}function we(){if(re)return ie;re=1;var t=ye(),e=Ft();return ie=function(n){var i=t(n,\"string\");return e(i)?i:i+\"\"}}function Se(){if(ae)return oe;ae=1;var t=b(),e=It(),n=t.document,i=e(n)&&e(n.createElement);return oe=function(t){return i?n.createElement(t):{}}}function xe(){if(le)return se;le=1;var t=I(),e=P(),n=Se();return se=!t&&!e((function(){return 7!==Object.defineProperty(n(\"div\"),\"a\",{get:function(){return 7}}).a}))}function Oe(){if(ce)return C;ce=1;var t=I(),e=$(),n=yt(),i=wt(),r=Ct(),o=we(),a=ve(),s=xe(),l=Object.getOwnPropertyDescriptor;return C.f=t?l:function(t,c){if(t=r(t),c=o(c),s)try{return l(t,c)}catch(t){}if(a(t,c))return i(!e(n.f,t,c),t[c])},C}var ke,Te,Ce,Pe,Ie,Ae,$e,Re={};function Ee(){if(Te)return ke;Te=1;var t=I(),e=P();return ke=t&&e((function(){return 42!==Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))}function je(){if(Pe)return Ce;Pe=1;var t=It(),e=String,n=TypeError;return Ce=function(i){if(t(i))return i;throw new n(e(i)+\" is not an object\")}}function Ne(){if(Ie)return Re;Ie=1;var t=I(),e=xe(),n=Ee(),i=je(),r=we(),o=TypeError,a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,l=\"enumerable\",c=\"configurable\",u=\"writable\";return Re.f=t?n?function(t,e,n){if(i(t),e=r(e),i(n),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in n&&u in n&&!n[u]){var o=s(t,e);o&&o[u]&&(t[e]=n.value,n={configurable:c in n?n[c]:o[c],enumerable:l in n?n[l]:o[l],writable:!1})}return a(t,e,n)}:a:function(t,n,s){if(i(t),n=r(n),i(s),e)try{return a(t,n,s)}catch(t){}if(\"get\"in s||\"set\"in s)throw new o(\"Accessors not supported\");return\"value\"in s&&(t[n]=s.value),t},Re}function Fe(){if($e)return Ae;$e=1;var t=I(),e=Ne(),n=wt();return Ae=t?function(t,i,r){return e.f(t,i,n(1,r))}:function(t,e,n){return t[e]=n,t}}var Le,De,_e,Ve,Be,He,Me,Ue,ze,qe,We,Ge,Ke,Ye,Je,Qe={exports:{}};function Xe(){if(De)return Le;De=1;var t=I(),e=ve(),n=Function.prototype,i=t&&Object.getOwnPropertyDescriptor,r=e(n,\"name\"),o=r&&\"something\"===function(){}.name,a=r&&(!t||t&&i(n,\"name\").configurable);return Le={EXISTS:r,PROPER:o,CONFIGURABLE:a}}function Ze(){if(Ve)return _e;Ve=1;var t=St(),e=Pt(),n=de(),i=t(Function.toString);return e(n.inspectSource)||(n.inspectSource=function(t){return i(t)}),_e=n.inspectSource}function tn(){if(Ue)return Me;Ue=1;var t=pe(),e=be(),n=t(\"keys\");return Me=function(t){return n[t]||(n[t]=e(t))}}function en(){return qe?ze:(qe=1,ze={})}function nn(){if(Ge)return We;Ge=1;var t,e,n,i=function(){if(He)return Be;He=1;var t=b(),e=Pt(),n=t.WeakMap;return Be=e(n)&&/native code/.test(String(n))}(),r=b(),o=It(),a=Fe(),s=ve(),l=de(),c=tn(),u=en(),h=\"Object already initialized\",f=r.TypeError,d=r.WeakMap;if(i||l.state){var p=l.state||(l.state=new d);p.get=p.get,p.has=p.has,p.set=p.set,t=function(t,e){if(p.has(t))throw new f(h);return e.facade=t,p.set(t,e),e},e=function(t){return p.get(t)||{}},n=function(t){return p.has(t)}}else{var g=c(\"state\");u[g]=!0,t=function(t,e){if(s(t,g))throw new f(h);return e.facade=t,a(t,g,e),e},e=function(t){return s(t,g)?t[g]:{}},n=function(t){return s(t,g)}}return We={set:t,get:e,has:n,enforce:function(i){return n(i)?e(i):t(i,{})},getterFor:function(t){return function(n){var i;if(!o(n)||(i=e(n)).type!==t)throw new f(\"Incompatible receiver, \"+t+\" required\");return i}}}}function rn(){if(Ke)return Qe.exports;Ke=1;var t=St(),e=P(),n=Pt(),i=ve(),r=I(),o=Xe().CONFIGURABLE,a=Ze(),s=nn(),l=s.enforce,c=s.get,u=String,h=Object.defineProperty,f=t(\"\".slice),d=t(\"\".replace),p=t([].join),g=r&&!e((function(){return 8!==h((function(){}),\"length\",{value:8}).length})),v=String(String).split(\"String\"),b=Qe.exports=function(t,e,n){\"Symbol(\"===f(u(e),0,7)&&(e=\"[\"+d(u(e),/^Symbol\\(([^)]*)\\).*$/,\"$1\")+\"]\"),n&&n.getter&&(e=\"get \"+e),n&&n.setter&&(e=\"set \"+e),(!i(t,\"name\")||o&&t.name!==e)&&(r?h(t,\"name\",{value:e,configurable:!0}):t.name=e),g&&n&&i(n,\"arity\")&&t.length!==n.arity&&h(t,\"length\",{value:n.arity});try{n&&i(n,\"constructor\")&&n.constructor?r&&h(t,\"prototype\",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var a=l(t);return i(a,\"source\")||(a.source=p(v,\"string\"==typeof e?e:\"\")),t};return Function.prototype.toString=b((function(){return n(this)&&c(this).source||a(this)}),\"toString\"),Qe.exports}function on(){if(Je)return Ye;Je=1;var t=Pt(),e=Ne(),n=rn(),i=fe();return Ye=function(r,o,a,s){s||(s={});var l=s.enumerable,c=void 0!==s.name?s.name:o;if(t(a)&&n(a,c,s),s.global)l?r[o]=a:i(o,a);else{try{s.unsafe?r[o]&&(l=!0):delete r[o]}catch(t){}l?r[o]=a:e.f(r,o,{value:a,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return r}}var an,sn,ln,cn,un,hn,fn,dn,pn,gn,vn,bn,mn,yn,wn,Sn,xn,On={};function kn(){if(cn)return ln;cn=1;var t=function(){if(sn)return an;sn=1;var t=Math.ceil,e=Math.floor;return an=Math.trunc||function(n){var i=+n;return(i>0?e:t)(i)}}();return ln=function(e){var n=+e;return n!=n||0===n?0:t(n)}}function Tn(){if(hn)return un;hn=1;var t=kn(),e=Math.max,n=Math.min;return un=function(i,r){var o=t(i);return o<0?e(o+r,0):n(o,r)}}function Cn(){if(dn)return fn;dn=1;var t=kn(),e=Math.min;return fn=function(n){var i=t(n);return i>0?e(i,9007199254740991):0}}function Pn(){if(gn)return pn;gn=1;var t=Cn();return pn=function(e){return t(e.length)}}function In(){if(bn)return vn;bn=1;var t=Ct(),e=Tn(),n=Pn(),i=function(i){return function(r,o,a){var s=t(r),l=n(s);if(0===l)return!i&&-1;var c,u=e(a,l);if(i&&o!=o){for(;l>u;)if((c=s[u++])!=c)return!0}else for(;l>u;u++)if((i||u in s)&&s[u]===o)return i||u||0;return!i&&-1}};return vn={includes:i(!0),indexOf:i(!1)}}function An(){if(yn)return mn;yn=1;var t=St(),e=ve(),n=Ct(),i=In().indexOf,r=en(),o=t([].push);return mn=function(t,a){var s,l=n(t),c=0,u=[];for(s in l)!e(r,s)&&e(l,s)&&o(u,s);for(;a.length>c;)e(l,s=a[c++])&&(~i(u,s)||o(u,s));return u}}function $n(){return Sn?wn:(Sn=1,wn=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"])}function Rn(){if(xn)return On;xn=1;var t=An(),e=$n().concat(\"length\",\"prototype\");return On.f=Object.getOwnPropertyNames||function(n){return t(n,e)},On}var En,jn,Nn,Fn,Ln,Dn,_n,Vn,Bn,Hn,Mn,Un,zn,qn,Wn,Gn,Kn,Yn,Jn,Qn,Xn,Zn,ti,ei,ni,ii,ri,oi,ai={};function si(){return En||(En=1,ai.f=Object.getOwnPropertySymbols),ai}function li(){if(Nn)return jn;Nn=1;var t=At(),e=St(),n=Rn(),i=si(),r=je(),o=e([].concat);return jn=t(\"Reflect\",\"ownKeys\")||function(t){var e=n.f(r(t)),a=i.f;return a?o(e,a(t)):e}}function ci(){if(Ln)return Fn;Ln=1;var t=ve(),e=li(),n=Oe(),i=Ne();return Fn=function(r,o,a){for(var s=e(o),l=i.f,c=n.f,u=0;u<s.length;u++){var h=s[u];t(r,h)||a&&t(a,h)||l(r,h,c(o,h))}}}function ui(){if(_n)return Dn;_n=1;var t=P(),e=Pt(),n=/#|\\.prototype\\./,i=function(n,i){var l=o[r(n)];return l===s||l!==a&&(e(i)?t(i):!!i)},r=i.normalize=function(t){return String(t).replace(n,\".\").toLowerCase()},o=i.data={},a=i.NATIVE=\"N\",s=i.POLYFILL=\"P\";return Dn=i}function hi(){if(Bn)return Vn;Bn=1;var t=b(),e=Oe().f,n=Fe(),i=on(),r=fe(),o=ci(),a=ui();return Vn=function(s,l){var c,u,h,f,d,p=s.target,g=s.global,v=s.stat;if(c=g?t:v?t[p]||r(p,{}):t[p]&&t[p].prototype)for(u in l){if(f=l[u],h=s.dontCallGetSet?(d=e(c,u))&&d.value:c[u],!a(g?u:p+(v?\".\":\"#\")+u,s.forced)&&void 0!==h){if(typeof f==typeof h)continue;o(f,h)}(s.sham||h&&h.sham)&&n(f,\"sham\",!0),i(c,u,f,s)}}}function fi(){if(Mn)return Hn;Mn=1;var t=xt();return Hn=Array.isArray||function(e){return\"Array\"===t(e)}}function di(){if(zn)return Un;zn=1;var t=TypeError;return Un=function(e){if(e>9007199254740991)throw t(\"Maximum allowed index exceeded\");return e}}function pi(){if(Wn)return qn;Wn=1;var t=I(),e=Ne(),n=wt();return qn=function(i,r,o){t?e.f(i,r,n(0,o)):i[r]=o}}function gi(){if(Kn)return Gn;Kn=1;var t={};return t[me()(\"toStringTag\")]=\"z\",Gn=\"[object z]\"===String(t)}function vi(){if(Jn)return Yn;Jn=1;var t=gi(),e=Pt(),n=xt(),i=me()(\"toStringTag\"),r=Object,o=\"Arguments\"===n(function(){return arguments}());return Yn=t?n:function(t){var a,s,l;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(s=function(t,e){try{return t[e]}catch(t){}}(a=r(t),i))?s:o?n(a):\"Object\"===(l=n(a))&&e(a.callee)?\"Arguments\":l}}function bi(){if(Xn)return Qn;Xn=1;var t=St(),e=P(),n=Pt(),i=vi(),r=At(),o=Ze(),a=function(){},s=r(\"Reflect\",\"construct\"),l=/^\\s*(?:class|function)\\b/,c=t(l.exec),u=!l.test(a),h=function(t){if(!n(t))return!1;try{return s(a,[],t),!0}catch(t){return!1}},f=function(t){if(!n(t))return!1;switch(i(t)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return u||!!c(l,o(t))}catch(t){return!0}};return f.sham=!0,Qn=!s||e((function(){var t;return h(h.call)||!h(Object)||!h((function(){t=!0}))||t}))?f:h}function mi(){if(ti)return Zn;ti=1;var t=fi(),e=bi(),n=It(),i=me()(\"species\"),r=Array;return Zn=function(o){var a;return t(o)&&(a=o.constructor,(e(a)&&(a===r||t(a.prototype))||n(a)&&null===(a=a[i]))&&(a=void 0)),void 0===a?r:a}}function yi(){if(ni)return ei;ni=1;var t=mi();return ei=function(e,n){return new(t(e))(0===n?0:n)}}function wi(){if(ri)return ii;ri=1;var t=P(),e=me(),n=Et(),i=e(\"species\");return ii=function(e){return n>=51||!t((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}}!function(){if(oi)return v;oi=1;var t=hi(),e=P(),n=fi(),i=It(),r=ge(),o=Pn(),a=di(),s=pi(),l=yi(),c=wi(),u=me(),h=Et(),f=u(\"isConcatSpreadable\"),d=h>=51||!e((function(){var t=[];return t[f]=!1,t.concat()[0]!==t})),p=function(t){if(!i(t))return!1;var e=t[f];return void 0!==e?!!e:n(t)};t({target:\"Array\",proto:!0,arity:1,forced:!d||!c(\"concat\")},{concat:function(t){var e,n,i,c,u,h=r(this),f=l(h,0),d=0;for(e=-1,i=arguments.length;e<i;e++)if(p(u=-1===e?h:arguments[e]))for(c=o(u),a(d+c),n=0;n<c;n++,d++)n in u&&s(f,d,u[n]);else a(d+1),s(f,d++,u);return f.length=d,f}})}();var Si,xi,Oi,ki,Ti,Ci,Pi,Ii={};function Ai(){if(xi)return Si;xi=1;var t=xt(),e=St();return Si=function(n){if(\"Function\"===t(n))return e(n)}}function $i(){if(ki)return Oi;ki=1;var t=Ai(),e=Dt(),n=A(),i=t(t.bind);return Oi=function(t,r){return e(t),void 0===r?t:n?i(t,r):function(){return t.apply(r,arguments)}},Oi}function Ri(){if(Ci)return Ti;Ci=1;var t=$i(),e=St(),n=Ot(),i=ge(),r=Pn(),o=yi(),a=e([].push),s=function(e){var s=1===e,l=2===e,c=3===e,u=4===e,h=6===e,f=7===e,d=5===e||h;return function(p,g,v,b){for(var m,y,w=i(p),S=n(w),x=r(S),O=t(g,v),k=0,T=b||o,C=s?T(p,x):l||f?T(p,0):void 0;x>k;k++)if((d||k in S)&&(y=O(m=S[k],k,w),e))if(s)C[k]=y;else if(y)switch(e){case 3:return!0;case 5:return m;case 6:return k;case 2:a(C,m)}else switch(e){case 4:return!1;case 7:a(C,m)}return h?-1:c||u?u:C}};return Ti={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}}!function(){if(Pi)return Ii;Pi=1;var t=hi(),e=Ri().filter;t({target:\"Array\",proto:!0,forced:!wi()(\"filter\")},{filter:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})}();var Ei,ji,Ni,Fi,Li,Di,_i,Vi,Bi,Hi,Mi={},Ui={};function zi(){if(ji)return Ei;ji=1;var t=An(),e=$n();return Ei=Object.keys||function(n){return t(n,e)}}function qi(){if(Li)return Fi;Li=1;var t=At();return Fi=t(\"document\",\"documentElement\")}function Wi(){if(_i)return Di;_i=1;var t,e=je(),n=function(){if(Ni)return Ui;Ni=1;var t=I(),e=Ee(),n=Ne(),i=je(),r=Ct(),o=zi();return Ui.f=t&&!e?Object.defineProperties:function(t,e){i(t);for(var a,s=r(e),l=o(e),c=l.length,u=0;c>u;)n.f(t,a=l[u++],s[a]);return t},Ui}(),i=$n(),r=en(),o=qi(),a=Se(),s=tn(),l=\"prototype\",c=\"script\",u=s(\"IE_PROTO\"),h=function(){},f=function(t){return\"<\"+c+\">\"+t+\"</\"+c+\">\"},d=function(t){t.write(f(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},p=function(){try{t=new ActiveXObject(\"htmlfile\")}catch(t){}var e,n,r;p=\"undefined\"!=typeof document?document.domain&&t?d(t):(n=a(\"iframe\"),r=\"java\"+c+\":\",n.style.display=\"none\",o.appendChild(n),n.src=String(r),(e=n.contentWindow.document).open(),e.write(f(\"document.F=Object\")),e.close(),e.F):d(t);for(var s=i.length;s--;)delete p[l][i[s]];return p()};return r[u]=!0,Di=Object.create||function(t,i){var r;return null!==t?(h[l]=e(t),r=new h,h[l]=null,r[u]=t):r=p(),void 0===i?r:n.f(r,i)}}function Gi(){if(Bi)return Vi;Bi=1;var t=me(),e=Wi(),n=Ne().f,i=t(\"unscopables\"),r=Array.prototype;return void 0===r[i]&&n(r,i,{configurable:!0,value:e(null)}),Vi=function(t){r[i][t]=!0}}!function(){if(Hi)return Mi;Hi=1;var t=hi(),e=Ri().find,n=Gi(),i=\"find\",r=!0;i in[]&&Array(1)[i]((function(){r=!1})),t({target:\"Array\",proto:!0,forced:r},{find:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),n(i)}();var Ki,Yi={};!function(){if(Ki)return Yi;Ki=1;var t=hi(),e=Ri().findIndex,n=Gi(),i=\"findIndex\",r=!0;i in[]&&Array(1)[i]((function(){r=!1})),t({target:\"Array\",proto:!0,forced:r},{findIndex:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),n(i)}();var Ji,Qi={};!function(){if(Ji)return Qi;Ji=1;var t=hi(),e=In().includes,n=P(),i=Gi();t({target:\"Array\",proto:!0,forced:n((function(){return!Array(1).includes()}))},{includes:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),i(\"includes\")}();var Xi,Zi,tr,er,nr,ir,rr,or,ar,sr,lr,cr,ur,hr,fr,dr,pr,gr,vr,br,mr,yr,wr,Sr,xr,Or,kr,Tr,Cr,Pr={};function Ir(){if(Zi)return Xi;Zi=1;var t=P();return Xi=function(e,n){var i=[][e];return!!i&&t((function(){i.call(null,n||function(){return 1},1)}))}}function Ar(){return nr?er:(nr=1,er={})}function $r(){if(rr)return ir;rr=1;var t=P();return ir=!t((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))}function Rr(){if(ar)return or;ar=1;var t=ve(),e=Pt(),n=ge(),i=tn(),r=$r(),o=i(\"IE_PROTO\"),a=Object,s=a.prototype;return or=r?a.getPrototypeOf:function(i){var r=n(i);if(t(r,o))return r[o];var l=r.constructor;return e(l)&&r instanceof l?l.prototype:r instanceof a?s:null}}function Er(){if(lr)return sr;lr=1;var t,e,n,i=P(),r=Pt(),o=It(),a=Wi(),s=Rr(),l=on(),c=me(),u=he(),h=c(\"iterator\"),f=!1;return[].keys&&(\"next\"in(n=[].keys())?(e=s(s(n)))!==Object.prototype&&(t=e):f=!0),!o(t)||i((function(){var e={};return t[h].call(e)!==e}))?t={}:u&&(t=a(t)),r(t[h])||l(t,h,(function(){return this})),sr={IteratorPrototype:t,BUGGY_SAFARI_ITERATORS:f}}function jr(){if(ur)return cr;ur=1;var t=Ne().f,e=ve(),n=me()(\"toStringTag\");return cr=function(i,r,o){i&&!o&&(i=i.prototype),i&&!e(i,n)&&t(i,n,{configurable:!0,value:r})}}function Nr(){if(fr)return hr;fr=1;var t=Er().IteratorPrototype,e=Wi(),n=wt(),i=jr(),r=Ar(),o=function(){return this};return hr=function(a,s,l,c){var u=s+\" Iterator\";return a.prototype=e(t,{next:n(+!c,l)}),i(a,u,!1,!0),r[u]=o,a}}function Fr(){if(vr)return gr;vr=1;var t=It();return gr=function(e){return t(e)||null===e}}function Lr(){if(mr)return br;mr=1;var t=Fr(),e=String,n=TypeError;return br=function(i){if(t(i))return i;throw new n(\"Can't set \"+e(i)+\" as a prototype\")}}function Dr(){if(wr)return yr;wr=1;var t=function(){if(pr)return dr;pr=1;var t=St(),e=Dt();return dr=function(n,i,r){try{return t(e(Object.getOwnPropertyDescriptor(n,i)[r]))}catch(t){}}}(),e=It(),n=Tt(),i=Lr();return yr=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var r,o=!1,a={};try{(r=t(Object.prototype,\"__proto__\",\"set\"))(a,[]),o=a instanceof Array}catch(t){}return function(t,a){return n(t),i(a),e(t)?(o?r(t,a):t.__proto__=a,t):t}}():void 0)}function _r(){if(xr)return Sr;xr=1;var t=hi(),e=$(),n=he(),i=Xe(),r=Pt(),o=Nr(),a=Rr(),s=Dr(),l=jr(),c=Fe(),u=on(),h=me(),f=Ar(),d=Er(),p=i.PROPER,g=i.CONFIGURABLE,v=d.IteratorPrototype,b=d.BUGGY_SAFARI_ITERATORS,m=h(\"iterator\"),y=\"keys\",w=\"values\",S=\"entries\",x=function(){return this};return Sr=function(i,h,d,O,k,T,C){o(d,h,O);var P,I,A,$=function(t){if(t===k&&F)return F;if(!b&&t&&t in j)return j[t];switch(t){case y:case w:case S:return function(){return new d(this,t)}}return function(){return new d(this)}},R=h+\" Iterator\",E=!1,j=i.prototype,N=j[m]||j[\"@@iterator\"]||k&&j[k],F=!b&&N||$(k),L=\"Array\"===h&&j.entries||N;if(L&&(P=a(L.call(new i)))!==Object.prototype&&P.next&&(n||a(P)===v||(s?s(P,v):r(P[m])||u(P,m,x)),l(P,R,!0,!0),n&&(f[R]=x)),p&&k===w&&N&&N.name!==w&&(!n&&g?c(j,\"name\",w):(E=!0,F=function(){return e(N,this)})),k)if(I={values:$(w),keys:T?F:$(y),entries:$(S)},C)for(A in I)(b||E||!(A in j))&&u(j,A,I[A]);else t({target:h,proto:!0,forced:b||E},I);return n&&!C||j[m]===F||u(j,m,F,{name:k}),f[h]=F,I}}function Vr(){return kr?Or:(kr=1,Or=function(t,e){return{value:t,done:e}})}function Br(){if(Cr)return Tr;Cr=1;var t=Ct(),e=Gi(),n=Ar(),i=nn(),r=Ne().f,o=_r(),a=Vr(),s=he(),l=I(),c=\"Array Iterator\",u=i.set,h=i.getterFor(c);Tr=o(Array,\"Array\",(function(e,n){u(this,{type:c,target:t(e),index:0,kind:n})}),(function(){var t=h(this),e=t.target,n=t.index++;if(!e||n>=e.length)return t.target=null,a(void 0,!0);switch(t.kind){case\"keys\":return a(n,!1);case\"values\":return a(e[n],!1)}return a([n,e[n]],!1)}),\"values\");var f=n.Arguments=n.Array;if(e(\"keys\"),e(\"values\"),e(\"entries\"),!s&&l&&\"values\"!==f.name)try{r(f,\"name\",{value:\"values\"})}catch(t){}return Tr}!function(){if(tr)return Pr;tr=1;var t=hi(),e=Ai(),n=In().indexOf,i=Ir(),r=e([].indexOf),o=!!r&&1/r([1],1,-0)<0;t({target:\"Array\",proto:!0,forced:o||!i(\"indexOf\")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return o?r(this,t,e)||0:n(this,t,e)}})}(),Br();var Hr,Mr={};!function(){if(Hr)return Mr;Hr=1;var t=hi(),e=Ri().map;t({target:\"Array\",proto:!0,forced:!wi()(\"map\")},{map:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})}();var Ur,zr,qr,Wr={};function Gr(){if(zr)return Ur;zr=1;var t=St();return Ur=t([].slice)}!function(){if(qr)return Wr;qr=1;var t=hi(),e=fi(),n=bi(),i=It(),r=Tn(),o=Pn(),a=Ct(),s=pi(),l=me(),c=wi(),u=Gr(),h=c(\"slice\"),f=l(\"species\"),d=Array,p=Math.max;t({target:\"Array\",proto:!0,forced:!h},{slice:function(t,l){var c,h,g,v=a(this),b=o(v),m=r(t,b),y=r(void 0===l?b:l,b);if(e(v)&&(c=v.constructor,(n(c)&&(c===d||e(c.prototype))||i(c)&&null===(c=c[f]))&&(c=void 0),c===d||void 0===c))return u(v,m,y);for(h=new(void 0===c?d:c)(p(y-m,0)),g=0;m<y;m++,g++)m in v&&s(h,g,v[m]);return h.length=g,h}})}();var Kr,Yr,Jr,Qr,Xr,Zr,to,eo,no,io,ro,oo,ao,so={};function lo(){if(Yr)return Kr;Yr=1;var t=Lt(),e=TypeError;return Kr=function(n,i){if(!delete n[i])throw new e(\"Cannot delete property \"+t(i)+\" of \"+t(n))}}function co(){if(Qr)return Jr;Qr=1;var t=vi(),e=String;return Jr=function(n){if(\"Symbol\"===t(n))throw new TypeError(\"Cannot convert a Symbol value to a string\");return e(n)}}function uo(){if(Zr)return Xr;Zr=1;var t=Gr(),e=Math.floor,n=function(i,r){var o=i.length;if(o<8)for(var a,s,l=1;l<o;){for(s=l,a=i[l];s&&r(i[s-1],a)>0;)i[s]=i[--s];s!==l++&&(i[s]=a)}else for(var c=e(o/2),u=n(t(i,0,c),r),h=n(t(i,c),r),f=u.length,d=h.length,p=0,g=0;p<f||g<d;)i[p+g]=p<f&&g<d?r(u[p],h[g])<=0?u[p++]:h[g++]:p<f?u[p++]:h[g++];return i};return Xr=n}!function(){if(ao)return so;ao=1;var t=hi(),e=St(),n=Dt(),i=ge(),r=Pn(),o=lo(),a=co(),s=P(),l=uo(),c=Ir(),u=function(){if(eo)return to;eo=1;var t=Rt().match(/firefox\\/(\\d+)/i);return to=!!t&&+t[1]}(),h=function(){if(io)return no;io=1;var t=Rt();return no=/MSIE|Trident/.test(t)}(),f=Et(),d=function(){if(oo)return ro;oo=1;var t=Rt().match(/AppleWebKit\\/(\\d+)\\./);return ro=!!t&&+t[1]}(),p=[],g=e(p.sort),v=e(p.push),b=s((function(){p.sort(void 0)})),m=s((function(){p.sort(null)})),y=c(\"sort\"),w=!s((function(){if(f)return f<70;if(!(u&&u>3)){if(h)return!0;if(d)return d<603;var t,e,n,i,r=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(i=0;i<47;i++)p.push({k:e+i,v:n})}for(p.sort((function(t,e){return e.v-t.v})),i=0;i<p.length;i++)e=p[i].k.charAt(0),r.charAt(r.length-1)!==e&&(r+=e);return\"DGBEFHACIJK\"!==r}}));t({target:\"Array\",proto:!0,forced:b||!m||!y||!w},{sort:function(t){void 0!==t&&n(t);var e=i(this);if(w)return void 0===t?g(e):g(e,t);var s,c,u=[],h=r(e);for(c=0;c<h;c++)c in e&&v(u,e[c]);for(l(u,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:a(e)>a(n)?1:-1}}(t)),s=r(u),c=0;c<s;)e[c]=u[c++];for(;c<h;)o(e,c++);return e}})}();var ho,fo,po,go={};!function(){if(po)return go;po=1;var t=hi(),e=ge(),n=Tn(),i=kn(),r=Pn(),o=function(){if(fo)return ho;fo=1;var t=I(),e=fi(),n=TypeError,i=Object.getOwnPropertyDescriptor,r=t&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],\"length\",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();return ho=r?function(t,r){if(e(t)&&!i(t,\"length\").writable)throw new n(\"Cannot set read only .length\");return t.length=r}:function(t,e){return t.length=e}}(),a=di(),s=yi(),l=pi(),c=lo(),u=wi()(\"splice\"),h=Math.max,f=Math.min;t({target:\"Array\",proto:!0,forced:!u},{splice:function(t,u){var d,p,g,v,b,m,y=e(this),w=r(y),S=n(t,w),x=arguments.length;for(0===x?d=p=0:1===x?(d=0,p=w-S):(d=x-2,p=f(h(i(u),0),w-S)),a(w+d-p),g=s(y,p),v=0;v<p;v++)(b=S+v)in y&&l(g,v,y[b]);if(g.length=p,d<p){for(v=S;v<w-p;v++)m=v+d,(b=v+p)in y?y[m]=y[b]:c(y,m);for(v=w;v>w-p+d;v--)c(y,v-1)}else if(d>p)for(v=w-p;v>S;v--)m=v+d-1,(b=v+p-1)in y?y[m]=y[b]:c(y,m);for(v=0;v<d;v++)y[v+S]=arguments[v+2];return o(y,w-p+d),g}})}();var vo,bo,mo,yo,wo,So,xo,Oo,ko,To,Co,Po={};function Io(){if(bo)return vo;bo=1;var t=b();return vo=t}function Ao(){if(yo)return mo;yo=1;var t=Pt(),e=It(),n=Dr();return mo=function(i,r,o){var a,s;return n&&t(a=r.constructor)&&a!==o&&e(s=a.prototype)&&s!==o.prototype&&n(i,s),i}}function $o(){if(So)return wo;So=1;var t=St();return wo=t(1.1.valueOf)}function Ro(){return Oo?xo:(Oo=1,xo=\"\\t\\n\\v\\f\\r \u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\\u2028\\u2029\\ufeff\")}function Eo(){if(To)return ko;To=1;var t=St(),e=Tt(),n=co(),i=Ro(),r=t(\"\".replace),o=RegExp(\"^[\"+i+\"]+\"),a=RegExp(\"(^|[^\"+i+\"])[\"+i+\"]+$\"),s=function(t){return function(i){var s=n(e(i));return 1&t&&(s=r(s,o,\"\")),2&t&&(s=r(s,a,\"$1\")),s}};return ko={start:s(1),end:s(2),trim:s(3)}}!function(){if(Co)return Po;Co=1;var t=hi(),e=he(),n=I(),i=b(),r=Io(),o=St(),a=ui(),s=ve(),l=Ao(),c=$t(),u=Ft(),h=ye(),f=P(),d=Rn().f,p=Oe().f,g=Ne().f,v=$o(),m=Eo().trim,y=\"Number\",w=i[y],S=r[y],x=w.prototype,O=i.TypeError,k=o(\"\".slice),T=o(\"\".charCodeAt),C=function(t){var e,n,i,r,o,a,s,l,c=h(t,\"number\");if(u(c))throw new O(\"Cannot convert a Symbol value to a number\");if(\"string\"==typeof c&&c.length>2)if(c=m(c),43===(e=T(c,0))||45===e){if(88===(n=T(c,2))||120===n)return NaN}else if(48===e){switch(T(c,1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+c}for(a=(o=k(c,2)).length,s=0;s<a;s++)if((l=T(o,s))<48||l>r)return NaN;return parseInt(o,i)}return+c},A=a(y,!w(\" 0o1\")||!w(\"0b1\")||w(\"+0x1\")),$=function(t){var e,n=arguments.length<1?0:w(function(t){var e=h(t,\"number\");return\"bigint\"==typeof e?e:C(e)}(t));return c(x,e=this)&&f((function(){v(e)}))?l(Object(n),this,$):n};$.prototype=x,A&&!e&&(x.constructor=$),t({global:!0,constructor:!0,wrap:!0,forced:A},{Number:$});var R=function(t,e){for(var i,r=n?d(e):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range\".split(\",\"),o=0;r.length>o;o++)s(e,i=r[o])&&!s(t,i)&&g(t,i,p(e,i))};e&&S&&R(r[y],S),(A||e)&&R(r[y],w)}();var jo,No,Fo,Lo={};!function(){if(Fo)return Lo;Fo=1;var t=hi(),e=function(){if(No)return jo;No=1;var t=I(),e=St(),n=$(),i=P(),r=zi(),o=si(),a=yt(),s=ge(),l=Ot(),c=Object.assign,u=Object.defineProperty,h=e([].concat);return jo=!c||i((function(){if(t&&1!==c({b:1},c(u({},\"a\",{enumerable:!0,get:function(){u(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},n={},i=Symbol(\"assign detection\"),o=\"abcdefghijklmnopqrst\";return e[i]=7,o.split(\"\").forEach((function(t){n[t]=t})),7!==c({},e)[i]||r(c({},n)).join(\"\")!==o}))?function(e,i){for(var c=s(e),u=arguments.length,f=1,d=o.f,p=a.f;u>f;)for(var g,v=l(arguments[f++]),b=d?h(r(v),d(v)):r(v),m=b.length,y=0;m>y;)g=b[y++],t&&!n(p,v,g)||(c[g]=v[g]);return c}:c,jo}();t({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==e},{assign:e})}();var Do,_o,Vo,Bo={};!function(){if(Vo)return Bo;Vo=1;var t=hi(),e=function(){if(_o)return Do;_o=1;var t=I(),e=P(),n=St(),i=Rr(),r=zi(),o=Ct(),a=n(yt().f),s=n([].push),l=t&&e((function(){var t=Object.create(null);return t[2]=2,!a(t,2)})),c=function(e){return function(n){for(var c,u=o(n),h=r(u),f=l&&null===i(u),d=h.length,p=0,g=[];d>p;)c=h[p++],t&&!(f?c in u:a(u,c))||s(g,e?[c,u[c]]:u[c]);return g}};return Do={entries:c(!0),values:c(!1)}}().entries;t({target:\"Object\",stat:!0},{entries:function(t){return e(t)}})}();var Ho,Mo={};!function(){if(Ho)return Mo;Ho=1;var t=hi(),e=ge(),n=zi();t({target:\"Object\",stat:!0,forced:P()((function(){n(1)}))},{keys:function(t){return n(e(t))}})}();var Uo,zo,qo,Wo={};!function(){if(qo)return Wo;qo=1;var t=gi(),e=on(),n=function(){if(zo)return Uo;zo=1;var t=gi(),e=vi();return Uo=t?{}.toString:function(){return\"[object \"+e(this)+\"]\"}}();t||e(Object.prototype,\"toString\",n,{unsafe:!0})}();var Go,Ko,Yo,Jo,Qo,Xo,Zo,ta,ea,na,ia,ra,oa,aa,sa,la,ca,ua,ha,fa,da,pa={};function ga(){if(Ko)return Go;Ko=1;var t=It(),e=xt(),n=me()(\"match\");return Go=function(i){var r;return t(i)&&(void 0!==(r=i[n])?!!r:\"RegExp\"===e(i))}}function va(){if(Xo)return Qo;Xo=1;var t=je();return Qo=function(){var e=t(this),n=\"\";return e.hasIndices&&(n+=\"d\"),e.global&&(n+=\"g\"),e.ignoreCase&&(n+=\"i\"),e.multiline&&(n+=\"m\"),e.dotAll&&(n+=\"s\"),e.unicode&&(n+=\"u\"),e.unicodeSets&&(n+=\"v\"),e.sticky&&(n+=\"y\"),n}}function ba(){if(ta)return Zo;ta=1;var t=$(),e=ve(),n=$t(),i=function(){if(Jo)return Yo;Jo=1;var t=b(),e=P(),n=t.RegExp,i=!e((function(){var t=!0;try{n(\".\",\"d\")}catch(e){t=!1}var e={},i=\"\",r=t?\"dgimsy\":\"gimsy\",o=function(t,n){Object.defineProperty(e,t,{get:function(){return i+=n,!0}})},a={dotAll:\"s\",global:\"g\",ignoreCase:\"i\",multiline:\"m\",sticky:\"y\"};for(var s in t&&(a.hasIndices=\"d\"),a)o(s,a[s]);return Object.getOwnPropertyDescriptor(n.prototype,\"flags\").get.call(e)!==r||i!==r}));return Yo={correct:i}}(),r=va(),o=RegExp.prototype;return Zo=i.correct?function(t){return t.flags}:function(a){return i.correct||!n(o,a)||e(a,\"flags\")?a.flags:t(r,a)}}function ma(){if(na)return ea;na=1;var t=P(),e=b().RegExp,n=t((function(){var t=e(\"a\",\"y\");return t.lastIndex=2,null!==t.exec(\"abcd\")})),i=n||t((function(){return!e(\"a\",\"y\").sticky})),r=n||t((function(){var t=e(\"^r\",\"gy\");return t.lastIndex=2,null!==t.exec(\"str\")}));return ea={BROKEN_CARET:r,MISSED_STICKY:i,UNSUPPORTED_Y:n}}function ya(){if(ra)return ia;ra=1;var t=Ne().f;return ia=function(e,n,i){i in e||t(e,i,{configurable:!0,get:function(){return n[i]},set:function(t){n[i]=t}})}}function wa(){if(aa)return oa;aa=1;var t=rn(),e=Ne();return oa=function(n,i,r){return r.get&&t(r.get,i,{getter:!0}),r.set&&t(r.set,i,{setter:!0}),e.f(n,i,r)}}function Sa(){if(la)return sa;la=1;var t=At(),e=wa(),n=me(),i=I(),r=n(\"species\");return sa=function(n){var o=t(n);i&&o&&!o[r]&&e(o,r,{configurable:!0,get:function(){return this}})}}function xa(){if(ua)return ca;ua=1;var t=P(),e=b().RegExp;return ca=t((function(){var t=e(\".\",\"s\");return!(t.dotAll&&t.test(\"\\n\")&&\"s\"===t.flags)}))}function Oa(){if(fa)return ha;fa=1;var t=P(),e=b().RegExp;return ha=t((function(){var t=e(\"(?<a>b)\",\"g\");return\"b\"!==t.exec(\"b\").groups.a||\"bc\"!==\"b\".replace(t,\"$<a>c\")}))}!function(){if(da)return pa;da=1;var t=I(),e=b(),n=St(),i=ui(),r=Ao(),o=Fe(),a=Wi(),s=Rn().f,l=$t(),c=ga(),u=co(),h=ba(),f=ma(),d=ya(),p=on(),g=P(),v=ve(),m=nn().enforce,y=Sa(),w=me(),S=xa(),x=Oa(),O=w(\"match\"),k=e.RegExp,T=k.prototype,C=e.SyntaxError,A=n(T.exec),$=n(\"\".charAt),R=n(\"\".replace),E=n(\"\".indexOf),j=n(\"\".slice),N=/^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/,F=/a/g,L=/a/g,D=new k(F)!==F,_=f.MISSED_STICKY,V=f.UNSUPPORTED_Y,B=t&&(!D||_||S||x||g((function(){return L[O]=!1,k(F)!==F||k(L)===L||\"/a/i\"!==String(k(F,\"i\"))})));if(i(\"RegExp\",B)){for(var H=function(t,e){var n,i,s,f,d,p,g=l(T,this),b=c(t),y=void 0===e,w=[],O=t;if(!g&&b&&y&&t.constructor===H)return t;if((b||l(T,t))&&(t=t.source,y&&(e=h(O))),t=void 0===t?\"\":u(t),e=void 0===e?\"\":u(e),O=t,S&&\"dotAll\"in F&&(i=!!e&&E(e,\"s\")>-1)&&(e=R(e,/s/g,\"\")),n=e,_&&\"sticky\"in F&&(s=!!e&&E(e,\"y\")>-1)&&V&&(e=R(e,/y/g,\"\")),x&&(f=function(t){for(var e,n=t.length,i=0,r=\"\",o=[],s=a(null),l=!1,c=!1,u=0,h=\"\";i<=n;i++){if(\"\\\\\"===(e=$(t,i)))e+=$(t,++i);else if(\"]\"===e)l=!1;else if(!l)switch(!0){case\"[\"===e:l=!0;break;case\"(\"===e:if(r+=e,\"?:\"===j(t,i+1,i+3))continue;A(N,j(t,i+1))&&(i+=2,c=!0),u++;continue;case\">\"===e&&c:if(\"\"===h||v(s,h))throw new C(\"Invalid capture group name\");s[h]=!0,o[o.length]=[h,u],c=!1,h=\"\";continue}c?h+=e:r+=e}return[r,o]}(t),t=f[0],w=f[1]),d=r(k(t,e),g?this:T,H),(i||s||w.length)&&(p=m(d),i&&(p.dotAll=!0,p.raw=H(function(t){for(var e,n=t.length,i=0,r=\"\",o=!1;i<=n;i++)\"\\\\\"!==(e=$(t,i))?o||\".\"!==e?(\"[\"===e?o=!0:\"]\"===e&&(o=!1),r+=e):r+=\"[\\\\s\\\\S]\":r+=e+$(t,++i);return r}(t),n)),s&&(p.sticky=!0),w.length&&(p.groups=w)),t!==O)try{o(d,\"source\",\"\"===O?\"(?:)\":O)}catch(t){}return d},M=s(k),U=0;M.length>U;)d(H,k,M[U++]);T.constructor=H,H.prototype=T,p(e,\"RegExp\",H,{constructor:!0})}y(\"RegExp\")}();var ka,Ta,Ca,Pa={};function Ia(){if(Ta)return ka;Ta=1;var t,e,n=$(),i=St(),r=co(),o=va(),a=ma(),s=pe(),l=Wi(),c=nn().get,u=xa(),h=Oa(),f=s(\"native-string-replace\",String.prototype.replace),d=RegExp.prototype.exec,p=d,g=i(\"\".charAt),v=i(\"\".indexOf),b=i(\"\".replace),m=i(\"\".slice),y=(e=/b*/g,n(d,t=/a/,\"a\"),n(d,e,\"a\"),0!==t.lastIndex||0!==e.lastIndex),w=a.BROKEN_CARET,S=void 0!==/()??/.exec(\"\")[1];return(y||S||w||u||h)&&(p=function(t){var e,i,a,s,u,h,x,O=this,k=c(O),T=r(t),C=k.raw;if(C)return C.lastIndex=O.lastIndex,e=n(p,C,T),O.lastIndex=C.lastIndex,e;var P=k.groups,I=w&&O.sticky,A=n(o,O),$=O.source,R=0,E=T;if(I&&(A=b(A,\"y\",\"\"),-1===v(A,\"g\")&&(A+=\"g\"),E=m(T,O.lastIndex),O.lastIndex>0&&(!O.multiline||O.multiline&&\"\\n\"!==g(T,O.lastIndex-1))&&($=\"(?: \"+$+\")\",E=\" \"+E,R++),i=new RegExp(\"^(?:\"+$+\")\",A)),S&&(i=new RegExp(\"^\"+$+\"$(?!\\\\s)\",A)),y&&(a=O.lastIndex),s=n(d,I?i:O,E),I?s?(s.input=m(s.input,R),s[0]=m(s[0],R),s.index=O.lastIndex,O.lastIndex+=s[0].length):O.lastIndex=0:y&&s&&(O.lastIndex=O.global?s.index+s[0].length:a),S&&s&&s.length>1&&n(f,s[0],i,(function(){for(u=1;u<arguments.length-2;u++)void 0===arguments[u]&&(s[u]=void 0)})),s&&P)for(s.groups=h=l(null),u=0;u<P.length;u++)h[(x=P[u])[0]]=s[x[1]];return s}),ka=p}function Aa(){if(Ca)return Pa;Ca=1;var t=hi(),e=Ia();return t({target:\"RegExp\",proto:!0,forced:/./.exec!==e},{exec:e}),Pa}Aa();var $a,Ra={};!function(){if($a)return Ra;$a=1;var t=Xe().PROPER,e=on(),n=je(),i=co(),r=P(),o=ba(),a=\"toString\",s=RegExp.prototype,l=s[a],c=r((function(){return\"/a/b\"!==l.call({source:\"a\",flags:\"b\"})})),u=t&&l.name!==a;(c||u)&&e(s,a,(function(){var t=n(this);return\"/\"+i(t.source)+\"/\"+i(o(t))}),{unsafe:!0})}();var Ea,ja,Na,Fa,La,Da={};function _a(){if(ja)return Ea;ja=1;var t=ga(),e=TypeError;return Ea=function(n){if(t(n))throw new e(\"The method doesn't accept regular expressions\");return n}}function Va(){if(Fa)return Na;Fa=1;var t=me()(\"match\");return Na=function(e){var n=/./;try{\"/./\"[e](n)}catch(i){try{return n[t]=!1,\"/./\"[e](n)}catch(t){}}return!1}}!function(){if(La)return Da;La=1;var t=hi(),e=St(),n=_a(),i=Tt(),r=co(),o=Va(),a=e(\"\".indexOf);t({target:\"String\",proto:!0,forced:!o(\"includes\")},{includes:function(t){return!!~a(r(i(this)),r(n(t)),arguments.length>1?arguments[1]:void 0)}})}();var Ba,Ha,Ma,Ua,za,qa,Wa,Ga,Ka,Ya,Ja,Qa,Xa,Za={};function ts(){if(Ua)return Ma;Ua=1,Aa();var t=$(),e=on(),n=Ia(),i=P(),r=me(),o=Fe(),a=r(\"species\"),s=RegExp.prototype;return Ma=function(l,c,u,h){var f=r(l),d=!i((function(){var t={};return t[f]=function(){return 7},7!==\"\"[l](t)})),p=d&&!i((function(){var t=!1,e=/a/;return\"split\"===l&&((e={}).constructor={},e.constructor[a]=function(){return e},e.flags=\"\",e[f]=/./[f]),e.exec=function(){return t=!0,null},e[f](\"\"),!t}));if(!d||!p||u){var g=/./[f],v=c(f,\"\"[l],(function(e,i,r,o,a){var l=i.exec;return l===n||l===s.exec?d&&!a?{done:!0,value:t(g,i,r,o)}:{done:!0,value:t(e,r,i,o)}:{done:!1}}));e(String.prototype,l,v[0]),e(s,f,v[1])}h&&o(s[f],\"sham\",!0)}}function es(){if(qa)return za;qa=1;var t=St(),e=kn(),n=co(),i=Tt(),r=t(\"\".charAt),o=t(\"\".charCodeAt),a=t(\"\".slice),s=function(t){return function(s,l){var c,u,h=n(i(s)),f=e(l),d=h.length;return f<0||f>=d?t?\"\":void 0:(c=o(h,f))<55296||c>56319||f+1===d||(u=o(h,f+1))<56320||u>57343?t?r(h,f):c:t?a(h,f,f+2):u-56320+(c-55296<<10)+65536}};return za={codeAt:s(!1),charAt:s(!0)}}function ns(){if(Ga)return Wa;Ga=1;var t=es().charAt;return Wa=function(e,n,i){return n+(i?t(e,n).length:1)}}function is(){if(Ya)return Ka;Ya=1;var t=St(),e=ge(),n=Math.floor,i=t(\"\".charAt),r=t(\"\".replace),o=t(\"\".slice),a=/\\$([$&'`]|\\d{1,2}|<[^>]*>)/g,s=/\\$([$&'`]|\\d{1,2})/g;return Ka=function(t,l,c,u,h,f){var d=c+t.length,p=u.length,g=s;return void 0!==h&&(h=e(h),g=a),r(f,g,(function(e,r){var a;switch(i(r,0)){case\"$\":return\"$\";case\"&\":return t;case\"`\":return o(l,0,c);case\"'\":return o(l,d);case\"<\":a=h[o(r,1,-1)];break;default:var s=+r;if(0===s)return e;if(s>p){var f=n(s/10);return 0===f?e:f<=p?void 0===u[f-1]?i(r,1):u[f-1]+i(r,1):e}a=u[s-1]}return void 0===a?\"\":a}))}}function rs(){if(Qa)return Ja;Qa=1;var t=$(),e=je(),n=Pt(),i=xt(),r=Ia(),o=TypeError;return Ja=function(a,s){var l=a.exec;if(n(l)){var c=t(l,a,s);return null!==c&&e(c),c}if(\"RegExp\"===i(a))return t(r,a,s);throw new o(\"RegExp#exec called on incompatible receiver\")}}!function(){if(Xa)return Za;Xa=1;var t=function(){if(Ha)return Ba;Ha=1;var t=A(),e=Function.prototype,n=e.apply,i=e.call;return Ba=\"object\"==typeof Reflect&&Reflect.apply||(t?i.bind(n):function(){return i.apply(n,arguments)}),Ba}(),e=$(),n=St(),i=ts(),r=P(),o=je(),a=Pt(),s=It(),l=kn(),c=Cn(),u=co(),h=Tt(),f=ns(),d=_t(),p=is(),g=ba(),v=rs(),b=me()(\"replace\"),m=Math.max,y=Math.min,w=n([].concat),S=n([].push),x=n(\"\".indexOf),O=n(\"\".slice),k=\"$0\"===\"a\".replace(/./,\"$0\"),T=!!/./[b]&&\"\"===/./[b](\"a\",\"$0\");i(\"replace\",(function(n,i,r){var k=T?\"$\":\"$0\";return[function(t,n){var r=h(this),o=s(t)?d(t,b):void 0;return o?e(o,t,r,n):e(i,u(r),t,n)},function(e,n){var s=o(this),h=u(e);if(\"string\"==typeof n&&-1===x(n,k)&&-1===x(n,\"$<\")){var d=r(i,s,h,n);if(d.done)return d.value}var b=a(n);b||(n=u(n));var T,C=u(g(s)),P=-1!==x(C,\"g\");P&&(T=-1!==x(C,\"u\"),s.lastIndex=0);for(var I,A=[];null!==(I=v(s,h))&&(S(A,I),P);){\"\"===u(I[0])&&(s.lastIndex=f(h,c(s.lastIndex),T))}for(var $,R=\"\",E=0,j=0;j<A.length;j++){for(var N,F=u((I=A[j])[0]),L=m(y(l(I.index),h.length),0),D=[],_=1;_<I.length;_++)S(D,void 0===($=I[_])?$:String($));var V=I.groups;if(b){var B=w([F],D,L,h);void 0!==V&&S(B,V),N=u(t(n,void 0,B))}else N=p(F,h,L,D,V,n);L>=E&&(R+=O(h,E,L)+N,E=L+F.length)}return R+O(h,E)}]}),!!r((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:\"7\"},t},\"7\"!==\"\".replace(t,\"$<a>\")}))||!k||T)}();var os,as,ss,ls={};function cs(){return as?os:(as=1,os=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e})}!function(){if(ss)return ls;ss=1;var t=$(),e=ts(),n=je(),i=It(),r=Tt(),o=cs(),a=co(),s=_t(),l=rs();e(\"search\",(function(e,c,u){return[function(n){var o=r(this),l=i(n)?s(n,e):void 0;return l?t(l,n,o):new RegExp(n)[e](a(o))},function(t){var e=n(this),i=a(t),r=u(c,e,i);if(r.done)return r.value;var s=e.lastIndex;o(s,0)||(e.lastIndex=0);var h=l(e,i);return o(e.lastIndex,s)||(e.lastIndex=s),null===h?-1:h.index}]}))}();var us,hs,fs,ds,ps,gs={};function vs(){if(hs)return us;hs=1;var t=bi(),e=Lt(),n=TypeError;return us=function(i){if(t(i))return i;throw new n(e(i)+\" is not a constructor\")}}function bs(){if(ds)return fs;ds=1;var t=je(),e=vs(),n=kt(),i=me()(\"species\");return fs=function(r,o){var a,s=t(r).constructor;return void 0===s||n(a=t(s)[i])?o:e(a)}}!function(){if(ps)return gs;ps=1;var t=$(),e=St(),n=ts(),i=je(),r=It(),o=Tt(),a=bs(),s=ns(),l=Cn(),c=co(),u=_t(),h=rs(),f=ma(),d=P(),p=f.UNSUPPORTED_Y,g=Math.min,v=e([].push),b=e(\"\".slice),m=!d((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n=\"ab\".split(t);return 2!==n.length||\"a\"!==n[0]||\"b\"!==n[1]})),y=\"c\"===\"abbc\".split(/(b)*/)[1]||4!==\"test\".split(/(?:)/,-1).length||2!==\"ab\".split(/(?:ab)*/).length||4!==\".\".split(/(.?)(.?)/).length||\".\".split(/()()/).length>1||\"\".split(/.?/).length;n(\"split\",(function(e,n,f){var d=\"0\".split(void 0,0).length?function(e,i){return void 0===e&&0===i?[]:t(n,this,e,i)}:n;return[function(n,i){var a=o(this),s=r(n)?u(n,e):void 0;return s?t(s,n,a,i):t(d,c(a),n,i)},function(t,e){var r=i(this),o=c(t);if(!y){var u=f(d,r,o,e,d!==n);if(u.done)return u.value}var m=a(r,RegExp),w=r.unicode,S=(r.ignoreCase?\"i\":\"\")+(r.multiline?\"m\":\"\")+(r.unicode?\"u\":\"\")+(p?\"g\":\"y\"),x=new m(p?\"^(?:\"+r.source+\")\":r,S),O=void 0===e?4294967295:e>>>0;if(0===O)return[];if(0===o.length)return null===h(x,o)?[o]:[];for(var k=0,T=0,C=[];T<o.length;){x.lastIndex=p?0:T;var P,I=h(x,p?b(o,T):o);if(null===I||(P=g(l(x.lastIndex+(p?T:0)),o.length))===k)T=s(o,T,w);else{if(v(C,b(o,k,T)),C.length===O)return C;for(var A=1;A<=I.length-1;A++)if(v(C,I[A]),C.length===O)return C;T=k=P}}return v(C,b(o,k)),C}]}),y||!m,p)}();var ms,ys,ws,Ss={};!function(){if(ws)return Ss;ws=1;var t=hi(),e=Eo().trim,n=function(){if(ys)return ms;ys=1;var t=Xe().PROPER,e=P(),n=Ro();return ms=function(i){return e((function(){return!!n[i]()||\"\u200B\u0085\u180E\"!==\"\u200B\u0085\u180E\"[i]()||t&&n[i].name!==i}))}}();t({target:\"String\",proto:!0,forced:n(\"trim\")},{trim:function(){return e(this)}})}();var xs,Os,ks,Ts,Cs,Ps,Is,As={};function $s(){return Os?xs:(Os=1,xs={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0})}function Rs(){if(Ts)return ks;Ts=1;var t=Se()(\"span\").classList,e=t&&t.constructor&&t.constructor.prototype;return ks=e===Object.prototype?void 0:e}!function(){if(Is)return As;Is=1;var t=b(),e=$s(),n=Rs(),i=function(){if(Ps)return Cs;Ps=1;var t=Ri().forEach,e=Ir()(\"forEach\");return Cs=e?[].forEach:function(e){return t(this,e,arguments.length>1?arguments[1]:void 0)},Cs}(),r=Fe(),o=function(t){if(t&&t.forEach!==i)try{r(t,\"forEach\",i)}catch(e){t.forEach=i}};for(var a in e)e[a]&&o(t[a]&&t[a].prototype);o(n)}();var Es,js={};!function(){if(Es)return js;Es=1;var t=b(),e=$s(),n=Rs(),i=Br(),r=Fe(),o=jr(),a=me()(\"iterator\"),s=i.values,l=function(t,n){if(t){if(t[a]!==s)try{r(t,a,s)}catch(e){t[a]=s}if(o(t,n,!0),e[n])for(var l in i)if(t[l]!==i[l])try{r(t,l,i[l])}catch(e){t[l]=i[l]}}};for(var c in e)l(t[c]&&t[c].prototype,c);l(n,\"DOMTokenList\")}();var Ns,Fs={};!function(){if(Ns)return Fs;Ns=1;var t=hi(),e=P(),n=ge(),i=Rr(),r=$r();t({target:\"Object\",stat:!0,forced:e((function(){i(1)})),sham:!r},{getPrototypeOf:function(t){return i(n(t))}})}();var Ls,Ds={};!function(){if(Ls)return Ds;Ls=1;var t,e=hi(),n=Ai(),i=Oe().f,r=Cn(),o=co(),a=_a(),s=Tt(),l=Va(),c=he(),u=n(\"\".slice),h=Math.min,f=l(\"endsWith\");e({target:\"String\",proto:!0,forced:!!(c||f||(t=i(String.prototype,\"endsWith\"),!t||t.writable))&&!f},{endsWith:function(t){var e=o(s(this));a(t);var n=arguments.length>1?arguments[1]:void 0,i=e.length,l=void 0===n?i:h(r(n),i),c=o(t);return u(e,l-c.length,l)===c}})}();var _s,Vs={};!function(){if(_s)return Vs;_s=1;var t=es().charAt,e=co(),n=nn(),i=_r(),r=Vr(),o=\"String Iterator\",a=n.set,s=n.getterFor(o);i(String,\"String\",(function(t){a(this,{type:o,string:e(t),index:0})}),(function(){var e,n=s(this),i=n.string,o=n.index;return o>=i.length?r(void 0,!0):(e=t(i,o),n.index+=e.length,r(e,!1))}))}();var Bs,Hs={};!function(){if(Bs)return Hs;Bs=1;var t=$(),e=St(),n=ts(),i=je(),r=It(),o=Cn(),a=co(),s=Tt(),l=_t(),c=ns(),u=ba(),h=rs(),f=e(\"\".indexOf);n(\"match\",(function(e,n,d){return[function(n){var i=s(this),o=r(n)?l(n,e):void 0;return o?t(o,n,i):new RegExp(n)[e](a(i))},function(t){var e=i(this),r=a(t),s=d(n,e,r);if(s.done)return s.value;var l=a(u(e));if(-1===f(l,\"g\"))return h(e,r);var p=-1!==f(l,\"u\");e.lastIndex=0;for(var g,v=[],b=0;null!==(g=h(e,r));){var m=a(g[0]);v[b]=m,\"\"===m&&(e.lastIndex=c(r,o(e.lastIndex),p)),b++}return 0===b?null:v}]}))}();var Ms,Us={};!function(){if(Ms)return Us;Ms=1;var t,e=hi(),n=Ai(),i=Oe().f,r=Cn(),o=co(),a=_a(),s=Tt(),l=Va(),c=he(),u=n(\"\".slice),h=Math.min,f=l(\"startsWith\");e({target:\"String\",proto:!0,forced:!!(c||f||(t=i(String.prototype,\"startsWith\"),!t||t.writable))&&!f},{startsWith:function(t){var e=o(s(this));a(t);var n=r(h(arguments.length>1?arguments[1]:void 0,e.length)),i=o(t);return u(e,n,n+i.length)===i}})}();var zs,qs,Ws,Gs,Ks,Ys,Js,Qs,Xs,Zs,tl,el,nl,il,rl,ol,al,sl,ll={};function cl(){if(Ws)return qs;Ws=1;var t=b(),e=I(),n=Object.getOwnPropertyDescriptor;return qs=function(i){if(!e)return t[i];var r=n(t,i);return r&&r.value}}function ul(){if(Js)return Ys;Js=1;var t=on();return Ys=function(e,n,i){for(var r in n)t(e,r,n[r],i);return e}}function hl(){if(Xs)return Qs;Xs=1;var t=$t(),e=TypeError;return Qs=function(n,i){if(t(i,n))return n;throw new e(\"Incorrect invocation\")}}function fl(){if(tl)return Zs;tl=1;var t=vi(),e=_t(),n=kt(),i=Ar(),r=me()(\"iterator\");return Zs=function(o){if(!n(o))return e(o,r)||e(o,\"@@iterator\")||i[t(o)]}}function dl(){if(nl)return el;nl=1;var t=$(),e=Dt(),n=je(),i=Lt(),r=fl(),o=TypeError;return el=function(a,s){var l=arguments.length<2?r(a):s;if(e(l))return n(t(l,a));throw new o(i(a)+\" is not iterable\")},el}function pl(){if(rl)return il;rl=1;var t=TypeError;return il=function(e,n){if(e<n)throw new t(\"Not enough arguments\");return e}}function gl(){if(al)return ol;al=1,Br(),function(){if(zs)return ll;zs=1;var t=hi(),e=St(),n=Tn(),i=RangeError,r=String.fromCharCode,o=String.fromCodePoint,a=e([].join);t({target:\"String\",stat:!0,arity:1,forced:!!o&&1!==o.length},{fromCodePoint:function(t){for(var e,o=[],s=arguments.length,l=0;s>l;){if(e=+arguments[l++],n(e,1114111)!==e)throw new i(e+\" is not a valid code point\");o[l]=e<65536?r(e):r(55296+((e-=65536)>>10),e%1024+56320)}return a(o,\"\")}})}();var t=hi(),e=b(),n=cl(),i=At(),r=$(),o=St(),a=I(),s=function(){if(Ks)return Gs;Ks=1;var t=P(),e=me(),n=I(),i=he(),r=e(\"iterator\");return Gs=!t((function(){var t=new URL(\"b?a=1&b=2&c=3\",\"https://a\"),e=t.searchParams,o=new URLSearchParams(\"a=1&a=2&b=3\"),a=\"\";return t.pathname=\"c%20d\",e.forEach((function(t,n){e.delete(\"b\"),a+=n+t})),o.delete(\"a\",2),o.delete(\"b\",void 0),i&&(!t.toJSON||!o.has(\"a\",1)||o.has(\"a\",2)||!o.has(\"a\",void 0)||o.has(\"b\"))||!e.size&&(i||!n)||!e.sort||\"https://a/c%20d?a=1&c=3\"!==t.href||\"3\"!==e.get(\"c\")||\"a=1\"!==String(new URLSearchParams(\"?a=1\"))||!e[r]||\"a\"!==new URL(\"https://a@b\").username||\"b\"!==new URLSearchParams(new URLSearchParams(\"a=b\")).get(\"a\")||\"xn--e1aybc\"!==new URL(\"https://\u0442\u0435\u0441\u0442\").host||\"#%D0%B1\"!==new URL(\"https://a#\u0431\").hash||\"a1c3\"!==a||\"x\"!==new URL(\"https://x\",void 0).host}))}(),l=on(),c=wa(),u=ul(),h=jr(),f=Nr(),d=nn(),p=hl(),g=Pt(),v=ve(),m=$i(),y=vi(),w=je(),S=It(),x=co(),O=Wi(),k=wt(),T=dl(),C=fl(),A=Vr(),R=pl(),E=me(),j=uo(),N=E(\"iterator\"),F=\"URLSearchParams\",L=F+\"Iterator\",D=d.set,_=d.getterFor(F),V=d.getterFor(L),B=n(\"fetch\"),H=n(\"Request\"),M=n(\"Headers\"),U=H&&H.prototype,z=M&&M.prototype,q=e.TypeError,W=e.encodeURIComponent,G=String.fromCharCode,K=i(\"String\",\"fromCodePoint\"),Y=parseInt,J=o(\"\".charAt),Q=o([].join),X=o([].push),Z=o(\"\".replace),tt=o([].shift),et=o([].splice),nt=o(\"\".split),it=o(\"\".slice),rt=o(/./.exec),ot=/\\+/g,at=/^[0-9a-f]+$/i,st=function(t,e){var n=it(t,e,e+2);return rt(at,n)?Y(n,16):NaN},lt=function(t){for(var e=0,n=128;n>0&&t&n;n>>=1)e++;return e},ct=function(t){var e=null;switch(t.length){case 1:e=t[0];break;case 2:e=(31&t[0])<<6|63&t[1];break;case 3:e=(15&t[0])<<12|(63&t[1])<<6|63&t[2];break;case 4:e=(7&t[0])<<18|(63&t[1])<<12|(63&t[2])<<6|63&t[3]}return e>1114111?null:e},ut=function(t){for(var e=(t=Z(t,ot,\" \")).length,n=\"\",i=0;i<e;){var r=J(t,i);if(\"%\"===r){if(\"%\"===J(t,i+1)||i+3>e){n+=\"%\",i++;continue}var o=st(t,i+1);if(o!=o){n+=r,i++;continue}i+=2;var a=lt(o);if(0===a)r=G(o);else{if(1===a||a>4){n+=\"\uFFFD\",i++;continue}for(var s=[o],l=1;l<a&&!(++i+3>e||\"%\"!==J(t,i));){var c=st(t,i+1);if(c!=c){i+=3;break}if(c>191||c<128)break;X(s,c),i+=2,l++}if(s.length!==a){n+=\"\uFFFD\";continue}var u=ct(s);null===u?n+=\"\uFFFD\":r=K(u)}}n+=r,i++}return n},ht=/[!'()~]|%20/g,ft={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\"},dt=function(t){return ft[t]},pt=function(t){return Z(W(t),ht,dt)},gt=f((function(t,e){D(this,{type:L,target:_(t).entries,index:0,kind:e})}),F,(function(){var t=V(this),e=t.target,n=t.index++;if(!e||n>=e.length)return t.target=null,A(void 0,!0);var i=e[n];switch(t.kind){case\"keys\":return A(i.key,!1);case\"values\":return A(i.value,!1)}return A([i.key,i.value],!1)}),!0),vt=function(t){this.entries=[],this.url=null,void 0!==t&&(S(t)?this.parseObject(t):this.parseQuery(\"string\"==typeof t?\"?\"===J(t,0)?it(t,1):t:x(t)))};vt.prototype={type:F,bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,n,i,o,a,s,l,c=this.entries,u=C(t);if(u)for(n=(e=T(t,u)).next;!(i=r(n,e)).done;){if(a=(o=T(w(i.value))).next,(s=r(a,o)).done||(l=r(a,o)).done||!r(a,o).done)throw new q(\"Expected sequence with length 2\");X(c,{key:x(s.value),value:x(l.value)})}else for(var h in t)v(t,h)&&X(c,{key:h,value:x(t[h])})},parseQuery:function(t){if(t)for(var e,n,i=this.entries,r=nt(t,\"&\"),o=0;o<r.length;)(e=r[o++]).length&&(n=nt(e,\"=\"),X(i,{key:ut(tt(n)),value:ut(Q(n,\"=\"))}))},serialize:function(){for(var t,e=this.entries,n=[],i=0;i<e.length;)t=e[i++],X(n,pt(t.key)+\"=\"+pt(t.value));return Q(n,\"&\")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var bt=function(){p(this,mt);var t=D(this,new vt(arguments.length>0?arguments[0]:void 0));a||(this.size=t.entries.length)},mt=bt.prototype;if(u(mt,{append:function(t,e){var n=_(this);R(arguments.length,2),X(n.entries,{key:x(t),value:x(e)}),a||this.length++,n.updateURL()},delete:function(t){for(var e=_(this),n=R(arguments.length,1),i=e.entries,r=x(t),o=n<2?void 0:arguments[1],s=void 0===o?o:x(o),l=0;l<i.length;){var c=i[l];if(c.key!==r||void 0!==s&&c.value!==s)l++;else if(et(i,l,1),void 0!==s)break}a||(this.size=i.length),e.updateURL()},get:function(t){var e=_(this).entries;R(arguments.length,1);for(var n=x(t),i=0;i<e.length;i++)if(e[i].key===n)return e[i].value;return null},getAll:function(t){var e=_(this).entries;R(arguments.length,1);for(var n=x(t),i=[],r=0;r<e.length;r++)e[r].key===n&&X(i,e[r].value);return i},has:function(t){for(var e=_(this).entries,n=R(arguments.length,1),i=x(t),r=n<2?void 0:arguments[1],o=void 0===r?r:x(r),a=0;a<e.length;){var s=e[a++];if(s.key===i&&(void 0===o||s.value===o))return!0}return!1},set:function(t,e){var n=_(this);R(arguments.length,1);for(var i,r=n.entries,o=!1,s=x(t),l=x(e),c=0;c<r.length;c++)(i=r[c]).key===s&&(o?et(r,c--,1):(o=!0,i.value=l));o||X(r,{key:s,value:l}),a||(this.size=r.length),n.updateURL()},sort:function(){var t=_(this);j(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=_(this).entries,i=m(t,arguments.length>1?arguments[1]:void 0),r=0;r<n.length;)i((e=n[r++]).value,e.key,this)},keys:function(){return new gt(this,\"keys\")},values:function(){return new gt(this,\"values\")},entries:function(){return new gt(this,\"entries\")}},{enumerable:!0}),l(mt,N,mt.entries,{name:\"entries\"}),l(mt,\"toString\",(function(){return _(this).serialize()}),{enumerable:!0}),a&&c(mt,\"size\",{get:function(){return _(this).entries.length},configurable:!0,enumerable:!0}),h(bt,F),t({global:!0,constructor:!0,forced:!s},{URLSearchParams:bt}),!s&&g(M)){var yt=o(z.has),xt=o(z.set),Ot=function(t){if(S(t)){var e,n=t.body;if(y(n)===F)return e=t.headers?new M(t.headers):new M,yt(e,\"content-type\")||xt(e,\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"),O(t,{body:k(0,x(n)),headers:k(0,e)})}return t};if(g(B)&&t({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(t){return B(t,arguments.length>1?Ot(arguments[1]):{})}}),g(H)){var kt=function(t){return p(this,U),new H(t,arguments.length>1?Ot(arguments[1]):{})};U.constructor=kt,kt.prototype=U,t({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:kt})}}return ol={URLSearchParams:bt,getState:_}}sl||(sl=1,gl());var vl={getBootstrapVersion:function(){var e,n,i=5;if(\"undefined\"!=typeof window&&null!==(e=window.bootstrap)&&void 0!==e&&null!==(e=e.Tooltip)&&void 0!==e&&e.VERSION){var r=window.bootstrap.Tooltip.VERSION;void 0!==r&&(i=parseInt(r,10))}else if(void 0!==t&&null!==(n=t.fn)&&void 0!==n&&null!==(n=n.dropdown)&&void 0!==n&&null!==(n=n.Constructor)&&void 0!==n&&n.VERSION){var o=t.fn.dropdown.Constructor.VERSION;void 0!==o&&(i=parseInt(o,10))}return i},getIconsPrefix:function(t){return{bootstrap3:\"glyphicon\",bootstrap4:\"fa\",bootstrap5:\"bi\",\"bootstrap-table\":\"icon\",bulma:\"fa\",foundation:\"fa\",materialize:\"material-icons\",semantic:\"fa\"}[t]||\"fa\"},getIcons:function(t,e){return t[e]||{}},assignIcons:function(t,e,n){for(var i=0,r=Object.keys(t);i<r.length;i++){var o=r[i];t[o][e]=n[o]}},getSearchInput:function(e){return\"string\"==typeof e.options.searchSelector?t(e.options.searchSelector):e.$toolbar.find(\".search input\")},extend:function(){for(var t=this,e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];var r,o=n[0]||{},a=1,s=!1;for(\"boolean\"==typeof o&&(s=o,o=n[a]||{},a++),\"object\"!==h(o)&&\"function\"!=typeof o&&(o={});a<n.length;a++){var l=n[a];if(null!=l)for(var c in l){var u=l[c];if(\"__proto__\"!==c&&o!==u){var f=Array.isArray(u);if(s&&u&&(this.isObject(u)||f)){var d=o[c];if(f&&Array.isArray(d)&&d.every((function(e){return!t.isObject(e)&&!Array.isArray(e)}))){o[c]=u;continue}r=f&&!Array.isArray(d)?[]:f||this.isObject(d)?d:{},o[c]=this.extend(s,r,u)}else void 0!==u&&(o[c]=u)}}}return o},sprintf:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];var r=!0,o=0,a=t.replace(/%s/g,(function(){var t=n[o++];return void 0===t?(r=!1,\"\"):t}));return r?a:\"\"},isObject:function(t){if(\"object\"!==h(t)||null===t)return!1;for(var e=t;null!==Object.getPrototypeOf(e);)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e},isEmptyObject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return 0===Object.entries(t).length&&t.constructor===Object},isNumeric:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},getFieldTitle:function(t,e){var n,i=r(t);try{for(i.s();!(n=i.n()).done;){var o=n.value;if(o.field===e)return o.title}}catch(t){i.e(t)}finally{i.f()}return\"\"},setFieldIndex:function(t){var e,n=0,i=[],o=r(t[0]);try{for(o.s();!(e=o.n()).done;){n+=+e.value.colspan||1}}catch(t){o.e(t)}finally{o.f()}for(var a=0;a<t.length;a++){i[a]=[];for(var s=0;s<n;s++)i[a][s]=!1}for(var l=0;l<t.length;l++){var c,u=r(t[l]);try{for(u.s();!(c=u.n()).done;){var h=c.value,f=+h.rowspan||1,d=+h.colspan||1,p=i[l].indexOf(!1);h.colspanIndex=p,1===d?(h.fieldIndex=p,void 0===h.field&&(h.field=p)):h.colspanGroup=+h.colspan;for(var g=0;g<f;g++)for(var v=0;v<d;v++)i[l+g][p+v]=!0}}catch(t){u.e(t)}finally{u.f()}}},normalizeAccent:function(t){return\"string\"!=typeof t?t:t.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g,\"\")},updateFieldGroup:function(t,e){var n,i,o=(n=[]).concat.apply(n,c(t)),a=r(t);try{for(a.s();!(i=a.n()).done;){var s,l=r(i.value);try{for(l.s();!(s=l.n()).done;){var u=s.value;if(u.colspanGroup>1){for(var h=0,f=function(t){var e=o.filter((function(e){return e.fieldIndex===t})),n=e[e.length-1];if(e.length>1)for(var i=0;i<e.length-1;i++)e[i].visible=n.visible;n.visible&&h++},d=u.colspanIndex;d<u.colspanIndex+u.colspanGroup;d++)f(d);u.colspan=h,u.visible=h>0}}}catch(t){l.e(t)}finally{l.f()}}}catch(t){a.e(t)}finally{a.f()}if(!(t.length<2)){var p,g=r(e);try{var v=function(){var t=p.value,e=o.filter((function(e){return e.fieldIndex===t.fieldIndex}));if(e.length>1){var n,i=r(e);try{for(i.s();!(n=i.n()).done;){n.value.visible=t.visible}}catch(t){i.e(t)}finally{i.f()}}};for(g.s();!(p=g.n()).done;)v()}catch(t){g.e(t)}finally{g.f()}}},getScrollBarWidth:function(){if(void 0===this.cachedWidth){var e=t(\"<div/>\").addClass(\"fixed-table-scroll-inner\"),n=t(\"<div/>\").addClass(\"fixed-table-scroll-outer\");n.append(e),t(\"body\").append(n);var i=e[0].offsetWidth;n.css(\"overflow\",\"scroll\");var r=e[0].offsetWidth;i===r&&(r=n[0].clientWidth),n.remove(),this.cachedWidth=i-r}return this.cachedWidth},calculateObjectValue:function(t,e,n,i){var o=e;if(\"string\"==typeof e){var a=e.split(\".\");if(a.length>1){o=window;var s,l=r(a);try{for(l.s();!(s=l.n()).done;){o=o[s.value]}}catch(t){l.e(t)}finally{l.f()}}else o=window[e]}return null!==o&&\"object\"===h(o)?o:\"function\"==typeof o?o.apply(t,n||[]):!o&&\"string\"==typeof e&&n&&this.sprintf.apply(this,[e].concat(c(n)))?this.sprintf.apply(this,[e].concat(c(n))):i},compareObjects:function(t,e,n){var i=Object.keys(t),r=Object.keys(e);if(n&&i.length!==r.length)return!1;for(var o=0,a=i;o<a.length;o++){var s=a[o];if(r.includes(s)&&t[s]!==e[s])return!1}return!0},regexCompare:function(t,e){try{var n=e.match(/^\\/(.*?)\\/([gim]*)$/);if(-1!==t.toString().search(n?new RegExp(n[1],n[2]):new RegExp(e,\"gim\")))return!0}catch(t){return console.error(t),!1}return!1},escapeApostrophe:function(t){return t.toString().replace(/'/g,\"&#39;\")},escapeHTML:function(t){return t?t.toString().replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\"):t},unescapeHTML:function(t){return\"string\"==typeof t&&t?t.toString().replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&quot;/g,'\"').replace(/&#39;/g,\"'\").replace(/&amp;/g,\"&\"):t},removeHTML:function(t){return t?t.toString().replace(/(<([^>]+)>)/gi,\"\").replace(/&[#A-Za-z0-9]+;/gi,\"\").trim():t},getRealDataAttr:function(t){for(var e=0,n=Object.entries(t);e<n.length;e++){var i=l(n[e],2),r=i[0],o=i[1],a=r.split(/(?=[A-Z])/).join(\"-\").toLowerCase();a!==r&&(t[a]=o,delete t[r])}return t},getItemField:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,o=t;if(void 0!==i&&(n=i),\"string\"!=typeof e||t.hasOwnProperty(e))return n?this.escapeHTML(t[e]):t[e];var a,s=r(e.split(\".\"));try{for(s.s();!(a=s.n()).done;){var l=a.value;o=o&&o[l]}}catch(t){s.e(t)}finally{s.f()}return n?this.escapeHTML(o):o},isIEBrowser:function(){return navigator.userAgent.includes(\"MSIE \")||/Trident.*rv:11\\./.test(navigator.userAgent)},findIndex:function(t,e){var n,i=r(t);try{for(i.s();!(n=i.n()).done;){var o=n.value;if(JSON.stringify(o)===JSON.stringify(e))return t.indexOf(o)}}catch(t){i.e(t)}finally{i.f()}return-1},trToData:function(e,n){var i=this,r=[],o=[];return n.each((function(n,a){var s=t(a),l={};l._id=s.attr(\"id\"),l._class=s.attr(\"class\"),l._data=i.getRealDataAttr(s.data()),l._style=s.attr(\"style\"),s.find(\">td,>th\").each((function(r,a){for(var s=t(a),c=+s.attr(\"colspan\")||1,u=+s.attr(\"rowspan\")||1,h=r;o[n]&&o[n][h];h++);for(var f=h;f<h+c;f++)for(var d=n;d<n+u;d++)o[d]||(o[d]=[]),o[d][f]=!0;var p=e[h].field;l[p]=i.escapeApostrophe(s.html().trim()),l[\"_\".concat(p,\"_id\")]=s.attr(\"id\"),l[\"_\".concat(p,\"_class\")]=s.attr(\"class\"),l[\"_\".concat(p,\"_rowspan\")]=s.attr(\"rowspan\"),l[\"_\".concat(p,\"_colspan\")]=s.attr(\"colspan\"),l[\"_\".concat(p,\"_title\")]=s.attr(\"title\"),l[\"_\".concat(p,\"_data\")]=i.getRealDataAttr(s.data()),l[\"_\".concat(p,\"_style\")]=s.attr(\"style\")})),r.push(l)})),r},sort:function(t,e,n,i,r,o){if(null==t&&(t=\"\"),null==e&&(e=\"\"),i.sortStable&&t===e&&(t=r,e=o),this.isNumeric(t)&&this.isNumeric(e))return(t=parseFloat(t))<(e=parseFloat(e))?-1*n:t>e?n:0;if(i.sortEmptyLast){if(\"\"===t)return 1;if(\"\"===e)return-1}return t===e?0:(\"string\"!=typeof t&&(t=t.toString()),-1===t.localeCompare(e)?-1*n:n)},getEventName:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return e=e||\"\".concat(+new Date).concat(~~(1e6*Math.random())),\"\".concat(t,\"-\").concat(e)},hasDetailViewIcon:function(t){return t.detailView&&t.detailViewIcon&&!t.cardView},getDetailViewIndexOffset:function(t){return this.hasDetailViewIcon(t)&&\"right\"!==t.detailViewAlign?1:0},checkAutoMergeCells:function(t){var e,n=r(t);try{for(n.s();!(e=n.n()).done;)for(var i=e.value,o=0,a=Object.keys(i);o<a.length;o++){var s=a[o];if(s.startsWith(\"_\")&&(s.endsWith(\"_rowspan\")||s.endsWith(\"_colspan\")))return!0}}catch(t){n.e(t)}finally{n.f()}return!1},deepCopy:function(t){return void 0===t?t:this.extend(!0,Array.isArray(t)?[]:{},t)},debounce:function(t,e,n){var i;return function(){var r=this,o=arguments,a=n&&!i;clearTimeout(i),i=setTimeout((function(){i=null,n||t.apply(r,o)}),e),a&&t.apply(r,o)}},replaceSearchMark:function(t,e){var n=t instanceof Element,i=n?t:document.createElement(\"div\"),o=new RegExp(e,\"gim\"),a=function(t,e){for(var n,i=[],r=0;null!==(n=e.exec(t));){r!==n.index&&i.push(document.createTextNode(t.substring(r,n.index)));var o=document.createElement(\"mark\");o.innerText=n[0],i.push(o),r=n.index+n[0].length}if(i.length)return r!==t.length&&i.push(document.createTextNode(t.substring(r))),i},s=function(t){for(var e=0;e<t.childNodes.length;e++){var n=t.childNodes[e];if(n.nodeType===document.TEXT_NODE){var i=a(n.data,o);if(i){var l,c=r(i);try{for(c.s();!(l=c.n()).done;){var u=l.value;t.insertBefore(u,n)}}catch(t){c.e(t)}finally{c.f()}t.removeChild(n),e+=i.length-1}}n.nodeType===document.ELEMENT_NODE&&s(n)}};return n||(i.innerHTML=t),s(i),n?i:i.innerHTML},classToString:function(t){var e=this;return\"string\"==typeof t?t:Array.isArray(t)?t.map((function(t){return e.classToString(t)})).filter((function(t){return t})).join(\" \"):t&&\"object\"===h(t)?Object.entries(t).map((function(t){var e=l(t,2),n=e[0];return e[1]?n:\"\"})).filter((function(t){return t})).join(\" \"):\"\"},parseStyle:function(t,e){if(!e)return t;var n=/\\s*!important\\s*$/i,i=function(t){return\"string\"==typeof t&&n.test(t)?{value:t.replace(n,\"\"),priority:\"important\"}:{value:t,priority:\"\"}};if(\"string\"==typeof e)e.split(\";\").forEach((function(e){var n=e.indexOf(\":\");if(n>0){var r=e.substring(0,n).trim(),o=e.substring(n+1).trim(),a=i(o),s=a.value,l=a.priority;t.style.setProperty(r,s,l)}}));else if(Array.isArray(e)){var o,a=r(e);try{for(a.s();!(o=a.n()).done;){var s=o.value;this.parseStyle(t,s)}}catch(t){a.e(t)}finally{a.f()}}else if(\"object\"===h(e))for(var c=0,u=Object.entries(e);c<u.length;c++){var f=l(u[c],2),d=f[0],p=f[1],g=i(p),v=g.value,b=g.priority;t.style.setProperty(d,v,b)}return t},h:function(t,e,n){var i=t instanceof HTMLElement?t:document.createElement(t),r=e||{},o=n||[];\"A\"===i.tagName&&(i.href=\"javascript:\");for(var a=0,s=Object.entries(r);a<s.length;a++){var u=l(s[a],2),h=u[0],f=u[1];if(void 0!==f)if([\"text\",\"innerText\"].includes(h))i.innerText=f;else if([\"html\",\"innerHTML\"].includes(h))i.innerHTML=f;else if(\"children\"===h)o.push.apply(o,c(f));else if(\"class\"===h)i.setAttribute(\"class\",this.classToString(f));else if(\"style\"===h)\"string\"==typeof f?i.setAttribute(\"style\",f):this.parseStyle(i,f);else if(h.startsWith(\"@\")||h.startsWith(\"on\")){var d=h.startsWith(\"@\")?h.substring(1):h.substring(2).toLowerCase(),p=Array.isArray(f)?f:[f];i.addEventListener.apply(i,[d].concat(c(p)))}else h.startsWith(\".\")?i[h.substring(1)]=f:i.setAttribute(h,f)}return o.length&&i.append.apply(i,c(o)),i},htmlToNodes:function(e){if(e instanceof t)return e.get();if(e instanceof Node)return[e];\"string\"!=typeof e&&(e=new String(e).toString());var n=document.createElement(\"div\");return n.innerHTML=e,n.childNodes},addQueryToUrl:function(t,e){for(var n=t.split(\"#\"),i=l(n[0].split(\"?\"),2),r=i[0],o=i[1],a=new URLSearchParams(o),s=0,c=Object.entries(e);s<c.length;s++){var u=l(c[s],2),h=u[0],f=u[1];a.set(h,f)}return\"\".concat(r,\"?\").concat(a.toString(),\"#\").concat(n.slice(1).join(\"#\"))}},bl=vl.getBootstrapVersion(),ml={3:{classes:{buttonActive:\"active\",buttons:\"default\",buttonsDropdown:\"btn-group\",buttonsGroup:\"btn-group\",buttonsPrefix:\"btn\",dropdownActive:\"active\",dropup:\"dropup\",input:\"form-control\",inputGroup:\"input-group\",inputPrefix:\"input-\",paginationActive:\"active\",paginationDropdown:\"btn-group dropdown\",pull:\"pull\",select:\"form-control\"},html:{dropdownCaret:'<span class=\"caret\"></span>',icon:'<i class=\"%s %s\"></i>',inputGroup:'<div class=\"input-group\">%s<span class=\"input-group-btn\">%s</span></div>',pageDropdown:['<ul class=\"dropdown-menu\" role=\"menu\">',\"</ul>\"],pageDropdownItem:'<li role=\"menuitem\" class=\"%s\"><a href=\"#\">%s</a></li>',pagination:['<ul class=\"pagination%s\">',\"</ul>\"],paginationItem:'<li class=\"page-item%s\"><a class=\"page-link\" aria-label=\"%s\" href=\"javascript:void(0)\">%s</a></li>',searchButton:'<button class=\"%s\" type=\"button\" name=\"search\" title=\"%s\">%s %s</button>',searchClearButton:'<button class=\"%s\" type=\"button\" name=\"clearSearch\" title=\"%s\">%s %s</button>',searchInput:'<input class=\"%s%s\" type=\"text\" placeholder=\"%s\">',toolbarDropdown:['<ul class=\"dropdown-menu\" role=\"menu\">',\"</ul>\"],toolbarDropdownItem:'<li class=\"dropdown-item-marker\" role=\"menuitem\"><label>%s</label></li>',toolbarDropdownSeparator:'<li class=\"divider\"></li>'}},4:{classes:{buttonActive:\"active\",buttons:\"secondary\",buttonsDropdown:\"btn-group\",buttonsGroup:\"btn-group\",buttonsPrefix:\"btn\",dropdownActive:\"active\",dropup:\"dropup\",input:\"form-control\",inputGroup:\"btn-group\",inputPrefix:\"form-control-\",paginationActive:\"active\",paginationDropdown:\"btn-group dropdown\",pull:\"float\",select:\"form-control\"},html:{dropdownCaret:'<span class=\"caret\"></span>',icon:'<i class=\"%s %s\"></i>',inputGroup:'<div class=\"input-group\">%s<div class=\"input-group-append\">%s</div></div>',pageDropdown:['<div class=\"dropdown-menu\">',\"</div>\"],pageDropdownItem:'<a class=\"dropdown-item %s\" href=\"#\">%s</a>',pagination:['<ul class=\"pagination%s\">',\"</ul>\"],paginationItem:'<li class=\"page-item%s\"><a class=\"page-link\" aria-label=\"%s\" href=\"javascript:void(0)\">%s</a></li>',searchButton:'<button class=\"%s\" type=\"button\" name=\"search\" title=\"%s\">%s %s</button>',searchClearButton:'<button class=\"%s\" type=\"button\" name=\"clearSearch\" title=\"%s\">%s %s</button>',searchInput:'<input class=\"%s%s\" type=\"text\" placeholder=\"%s\">',toolbarDropdown:['<div class=\"dropdown-menu dropdown-menu-right\">',\"</div>\"],toolbarDropdownItem:'<label class=\"dropdown-item dropdown-item-marker\">%s</label>',toolbarDropdownSeparator:'<div class=\"dropdown-divider\"></div>'}},5:{classes:{buttonActive:\"active\",buttons:\"secondary\",buttonsDropdown:\"btn-group\",buttonsGroup:\"btn-group\",buttonsPrefix:\"btn\",dropdownActive:\"active\",dropup:\"dropup\",input:\"form-control\",inputGroup:\"btn-group\",inputPrefix:\"form-control-\",paginationActive:\"active\",paginationDropdown:\"btn-group dropdown\",pull:\"float\",select:\"form-select\"},html:{dataToggle:\"data-bs-toggle\",dropdownCaret:'<span class=\"caret\"></span>',icon:'<i class=\"%s %s\"></i>',inputGroup:'<div class=\"input-group\">%s%s</div>',pageDropdown:['<div class=\"dropdown-menu\">',\"</div>\"],pageDropdownItem:'<a class=\"dropdown-item %s\" href=\"#\">%s</a>',pagination:['<ul class=\"pagination%s\">',\"</ul>\"],paginationItem:'<li class=\"page-item%s\"><a class=\"page-link\" aria-label=\"%s\" href=\"javascript:void(0)\">%s</a></li>',searchButton:'<button class=\"%s\" type=\"button\" name=\"search\" title=\"%s\">%s %s</button>',searchClearButton:'<button class=\"%s\" type=\"button\" name=\"clearSearch\" title=\"%s\">%s %s</button>',searchInput:'<input class=\"%s%s\" type=\"text\" placeholder=\"%s\">',toolbarDropdown:['<div class=\"dropdown-menu dropdown-menu-end\">',\"</div>\"],toolbarDropdownItem:'<label class=\"dropdown-item dropdown-item-marker\">%s</label>',toolbarDropdownSeparator:'<div class=\"dropdown-divider\"></div>'}}}[bl],yl={ajax:void 0,ajaxOptions:{},buttons:{},buttonsAlign:\"right\",buttonsAttributeTitle:\"title\",buttonsClass:ml.classes.buttons,buttonsOrder:[\"paginationSwitch\",\"refresh\",\"toggle\",\"fullscreen\",\"columns\"],buttonsPrefix:ml.classes.buttonsPrefix,buttonsToolbar:void 0,cache:!0,cardView:!1,checkboxHeader:!0,classes:\"table table-bordered table-hover\",clickToSelect:!1,columns:[[]],contentType:\"application/json\",customSearch:void 0,customSort:void 0,data:[],dataField:\"rows\",dataType:\"json\",detailFilter:function(t,e){return!0},detailFormatter:function(t,e){return\"\"},detailView:!1,detailViewAlign:\"left\",detailViewByClick:!1,detailViewIcon:!0,escape:!1,escapeTitle:!0,filterOptions:{filterAlgorithm:\"and\"},fixedScroll:!1,footerField:\"footer\",footerStyle:function(t){return{}},headerStyle:function(t){return{}},height:void 0,icons:{},iconSize:void 0,iconsPrefix:void 0,idField:void 0,ignoreClickToSelectOn:function(t){var e=t.tagName;return[\"A\",\"BUTTON\"].includes(e)},loadingFontSize:\"auto\",loadingTemplate:function(t){return'<span class=\"loading-wrap\">\\n    <span class=\"loading-text\">'.concat(t,'</span>\\n    <span class=\"animation-wrap\"><span class=\"animation-dot\"></span></span>\\n    </span>\\n  ')},locale:void 0,maintainMetaData:!1,method:\"get\",minimumCountColumns:1,multipleSelectRow:!1,pageList:[10,25,50,100],pageNumber:1,pageSize:10,pagination:!1,paginationDetailHAlign:\"left\",paginationHAlign:\"right\",paginationLoadMore:!1,paginationLoop:!0,paginationNextText:\"&rsaquo;\",paginationPagesBySide:1,paginationParts:[\"pageInfo\",\"pageSize\",\"pageList\"],paginationPreText:\"&lsaquo;\",paginationSuccessivelySize:5,paginationUseIntermediate:!1,paginationVAlign:\"bottom\",queryParams:function(t){return t},queryParamsType:\"limit\",regexSearch:!1,rememberOrder:!1,responseHandler:function(t){return t},rowAttributes:function(t,e){return{}},rowStyle:function(t,e){return{}},search:!1,searchable:!1,searchAccentNeutralise:!1,searchAlign:\"right\",searchHighlight:!1,searchOnEnterKey:!1,searchSelector:!1,searchText:\"\",searchTimeOut:500,selectItemName:\"btSelectItem\",serverSort:!0,showButtonIcons:!0,showButtonText:!1,showColumns:!1,showColumnsSearch:!1,showColumnsToggleAll:!1,showExtendedPagination:!1,showFooter:!1,showFullscreen:!1,showHeader:!0,showPaginationSwitch:!1,showRefresh:!1,showSearchButton:!1,showSearchClearButton:!1,showToggle:!1,sidePagination:\"client\",silentSort:!0,singleSelect:!1,smartDisplay:!0,sortable:!0,sortClass:void 0,sortEmptyLast:!1,sortName:void 0,sortOrder:void 0,sortReset:!1,sortResetPage:!1,sortStable:!1,strictSearch:!1,theadClasses:\"\",toolbar:void 0,toolbarAlign:\"left\",totalField:\"total\",totalNotFiltered:0,totalNotFilteredField:\"totalNotFiltered\",totalRows:0,trimOnSearch:!0,undefinedText:\"-\",uniqueId:void 0,url:void 0,virtualScroll:!1,virtualScrollItemHeight:void 0,visibleSearch:!1,onAll:function(t,e){return!1},onCheck:function(t){return!1},onCheckAll:function(t){return!1},onCheckSome:function(t){return!1},onClickCell:function(t,e,n,i){return!1},onClickRow:function(t,e){return!1},onCollapseRow:function(t,e){return!1},onColumnSwitch:function(t,e){return!1},onColumnSwitchAll:function(t){return!1},onDblClickCell:function(t,e,n,i){return!1},onDblClickRow:function(t,e){return!1},onExpandRow:function(t,e,n){return!1},onLoadError:function(t){return!1},onLoadSuccess:function(t){return!1},onPageChange:function(t,e){return!1},onPostBody:function(){return!1},onPostFooter:function(){return!1},onPostHeader:function(){return!1},onPreBody:function(t){return!1},onRefresh:function(t){return!1},onRefreshOptions:function(t){return!1},onResetView:function(){return!1},onScrollBody:function(){return!1},onSearch:function(t){return!1},onSort:function(t,e){return!1},onToggle:function(t){return!1},onTogglePagination:function(t){return!1},onUncheck:function(t){return!1},onUncheckAll:function(t){return!1},onUncheckSome:function(t){return!1},onVirtualScroll:function(t,e){return!1}},wl={formatAllRows:function(){return\"All\"},formatClearSearch:function(){return\"Clear Search\"},formatColumns:function(){return\"Columns\"},formatColumnsToggleAll:function(){return\"Toggle all\"},formatDetailPagination:function(t){return\"Showing \".concat(t,\" rows\")},formatFullscreen:function(){return\"Fullscreen\"},formatLoadingMessage:function(){return\"Loading, please wait\"},formatNoMatches:function(){return\"No matching records found\"},formatPaginationSwitch:function(){return\"Hide/Show pagination\"},formatPaginationSwitchDown:function(){return\"Show pagination\"},formatPaginationSwitchUp:function(){return\"Hide pagination\"},formatRecordsPerPage:function(t){return\"\".concat(t,\" rows per page\")},formatRefresh:function(){return\"Refresh\"},formatSearch:function(){return\"Search\"},formatShowingRows:function(t,e,n,i){return void 0!==i&&i>0&&i>n?\"Showing \".concat(t,\" to \").concat(e,\" of \").concat(n,\" rows (filtered from \").concat(i,\" total rows)\"):\"Showing \".concat(t,\" to \").concat(e,\" of \").concat(n,\" rows\")},formatSRPaginationNextText:function(){return\"next page\"},formatSRPaginationPageText:function(t){return\"to page \".concat(t)},formatSRPaginationPreText:function(){return\"previous page\"},formatToggleOff:function(){return\"Hide card view\"},formatToggleOn:function(){return\"Show card view\"}},Sl={align:void 0,cardVisible:!0,cellStyle:void 0,checkbox:!1,checkboxEnabled:!0,class:void 0,clickToSelect:!0,colspan:void 0,detailFormatter:void 0,escape:void 0,events:void 0,falign:void 0,field:void 0,footerFormatter:void 0,footerStyle:void 0,formatter:void 0,halign:void 0,order:\"asc\",radio:!1,rowspan:void 0,searchable:!0,searchFormatter:!0,searchHighlightFormatter:!1,showSelectTitle:!1,sortable:!1,sorter:void 0,sortName:void 0,switchable:!0,switchableLabel:void 0,title:void 0,titleTooltip:void 0,valign:void 0,visible:!0,width:void 0,widthUnit:\"px\"};Object.assign(yl,wl);var xl={COLUMN_DEFAULTS:Sl,CONSTANTS:ml,DEFAULTS:yl,EVENTS:{\"all.bs.table\":\"onAll\",\"check-all.bs.table\":\"onCheckAll\",\"check-some.bs.table\":\"onCheckSome\",\"check.bs.table\":\"onCheck\",\"click-cell.bs.table\":\"onClickCell\",\"click-row.bs.table\":\"onClickRow\",\"collapse-row.bs.table\":\"onCollapseRow\",\"column-switch-all.bs.table\":\"onColumnSwitchAll\",\"column-switch.bs.table\":\"onColumnSwitch\",\"dbl-click-cell.bs.table\":\"onDblClickCell\",\"dbl-click-row.bs.table\":\"onDblClickRow\",\"expand-row.bs.table\":\"onExpandRow\",\"load-error.bs.table\":\"onLoadError\",\"load-success.bs.table\":\"onLoadSuccess\",\"page-change.bs.table\":\"onPageChange\",\"post-body.bs.table\":\"onPostBody\",\"post-footer.bs.table\":\"onPostFooter\",\"post-header.bs.table\":\"onPostHeader\",\"pre-body.bs.table\":\"onPreBody\",\"refresh-options.bs.table\":\"onRefreshOptions\",\"refresh.bs.table\":\"onRefresh\",\"reset-view.bs.table\":\"onResetView\",\"scroll-body.bs.table\":\"onScrollBody\",\"search.bs.table\":\"onSearch\",\"sort.bs.table\":\"onSort\",\"toggle-pagination.bs.table\":\"onTogglePagination\",\"toggle.bs.table\":\"onToggle\",\"uncheck-all.bs.table\":\"onUncheckAll\",\"uncheck-some.bs.table\":\"onUncheckSome\",\"uncheck.bs.table\":\"onUncheck\",\"virtual-scroll.bs.table\":\"onVirtualScroll\"},ICONS:{glyphicon:{clearSearch:\"glyphicon-trash\",columns:\"glyphicon-th icon-th\",detailClose:\"glyphicon-minus icon-minus\",detailOpen:\"glyphicon-plus icon-plus\",fullscreen:\"glyphicon-fullscreen\",paginationSwitchDown:\"glyphicon-collapse-down icon-chevron-down\",paginationSwitchUp:\"glyphicon-collapse-up icon-chevron-up\",refresh:\"glyphicon-refresh icon-refresh\",search:\"glyphicon-search\",toggleOff:\"glyphicon-list-alt icon-list-alt\",toggleOn:\"glyphicon-list-alt icon-list-alt\"},fa:{clearSearch:\"fa-trash\",columns:\"fa-th-list\",detailClose:\"fa-minus\",detailOpen:\"fa-plus\",fullscreen:\"fa-arrows-alt\",paginationSwitchDown:\"fa-caret-square-down\",paginationSwitchUp:\"fa-caret-square-up\",refresh:\"fa-sync\",search:\"fa-search\",toggleOff:\"fa-toggle-off\",toggleOn:\"fa-toggle-on\"},bi:{clearSearch:\"bi-trash\",columns:\"bi-list-ul\",detailClose:\"bi-dash\",detailOpen:\"bi-plus\",fullscreen:\"bi-arrows-move\",paginationSwitchDown:\"bi-caret-down-square\",paginationSwitchUp:\"bi-caret-up-square\",refresh:\"bi-arrow-clockwise\",search:\"bi-search\",toggleOff:\"bi-toggle-off\",toggleOn:\"bi-toggle-on\"},icon:{clearSearch:\"icon-trash-2\",columns:\"icon-list\",detailClose:\"icon-minus\",detailOpen:\"icon-plus\",fullscreen:\"icon-maximize\",paginationSwitchDown:\"icon-arrow-up-circle\",paginationSwitchUp:\"icon-arrow-down-circle\",refresh:\"icon-refresh-cw\",search:\"icon-search\",toggleOff:\"icon-toggle-right\",toggleOn:\"icon-toggle-right\"},\"material-icons\":{clearSearch:\"delete\",columns:\"view_list\",detailClose:\"remove\",detailOpen:\"add\",fullscreen:\"fullscreen\",paginationSwitchDown:\"grid_on\",paginationSwitchUp:\"grid_off\",refresh:\"refresh\",search:\"search\",sort:\"sort\",toggleOff:\"tablet\",toggleOn:\"tablet_android\"}},LOCALES:{en:wl,\"en-US\":wl},METHODS:[\"getOptions\",\"refreshOptions\",\"getData\",\"getFooterData\",\"getSelections\",\"load\",\"append\",\"prepend\",\"remove\",\"removeAll\",\"insertRow\",\"updateRow\",\"getRowByUniqueId\",\"updateByUniqueId\",\"removeByUniqueId\",\"updateCell\",\"updateCellByUniqueId\",\"showRow\",\"hideRow\",\"getHiddenRows\",\"showColumn\",\"hideColumn\",\"getVisibleColumns\",\"getHiddenColumns\",\"showAllColumns\",\"hideAllColumns\",\"mergeCells\",\"checkAll\",\"uncheckAll\",\"checkInvert\",\"check\",\"uncheck\",\"checkBy\",\"uncheckBy\",\"refresh\",\"destroy\",\"resetView\",\"showLoading\",\"hideLoading\",\"togglePagination\",\"toggleFullscreen\",\"toggleView\",\"resetSearch\",\"filterBy\",\"sortBy\",\"sortReset\",\"scrollTo\",\"getScrollPosition\",\"selectPage\",\"prevPage\",\"nextPage\",\"toggleDetailView\",\"expandRow\",\"collapseRow\",\"expandRowByUniqueId\",\"collapseRowByUniqueId\",\"expandAllRows\",\"collapseAllRows\",\"updateColumnTitle\",\"updateFormatText\"],THEME:\"bootstrap\".concat(bl),VERSION:\"1.25.0\"},Ol=function(){return i((function t(e){var i=this;n(this,t),this.rows=e.rows,this.scrollEl=e.scrollEl,this.contentEl=e.contentEl,this.callback=e.callback,this.itemHeight=e.itemHeight,this.cache={},this.scrollTop=this.scrollEl.scrollTop,this.initDOM(this.rows,e.fixedScroll),this.scrollEl.scrollTop=this.scrollTop,this.lastCluster=0;var r=function(){i.lastCluster!==(i.lastCluster=i.getNum())&&(i.initDOM(i.rows),i.callback(i.startIndex,i.endIndex))};this.scrollEl.addEventListener(\"scroll\",r,!1),this.destroy=function(){i.contentEl.innerHtml=\"\",i.scrollEl.removeEventListener(\"scroll\",r,!1)}}),[{key:\"initDOM\",value:function(t,e){void 0===this.clusterHeight?(this.cache.scrollTop=this.scrollEl.scrollTop,this.cache.data=this.contentEl.innerHTML=t[0]+t[0]+t[0],this.getRowsHeight(t)):0===this.blockHeight&&this.getRowsHeight(t);var n=this.initData(t,this.getNum(e)),i=n.rows.join(\"\"),r=this.checkChanges(\"data\",i),o=this.checkChanges(\"top\",n.topOffset),a=this.checkChanges(\"bottom\",n.bottomOffset),s=[];r&&o?(n.topOffset&&s.push(this.getExtra(\"top\",n.topOffset)),s.push(i),n.bottomOffset&&s.push(this.getExtra(\"bottom\",n.bottomOffset)),this.startIndex=n.start,this.endIndex=n.end,this.contentEl.innerHTML=s.join(\"\"),e&&(this.contentEl.scrollTop=this.cache.scrollTop)):a&&(this.contentEl.lastChild.style.height=\"\".concat(n.bottomOffset,\"px\"))}},{key:\"getRowsHeight\",value:function(){if(void 0===this.itemHeight||0===this.itemHeight){var t=this.contentEl.children,e=t[Math.floor(t.length/2)];this.itemHeight=e.offsetHeight}this.blockHeight=50*this.itemHeight,this.clusterRows=200,this.clusterHeight=4*this.blockHeight}},{key:\"getNum\",value:function(t){return this.scrollTop=t?this.cache.scrollTop:this.scrollEl.scrollTop,Math.floor(this.scrollTop/(this.clusterHeight-this.blockHeight))||0}},{key:\"initData\",value:function(t,e){if(t.length<50)return{topOffset:0,bottomOffset:0,rowsAbove:0,rows:t};var n=Math.max((this.clusterRows-50)*e,0),i=n+this.clusterRows,r=Math.max(n*this.itemHeight,0),o=Math.max((t.length-i)*this.itemHeight,0),a=[],s=n;r<1&&s++;for(var l=n;l<i;l++)t[l]&&a.push(t[l]);return{start:n,end:i,topOffset:r,bottomOffset:o,rowsAbove:s,rows:a}}},{key:\"checkChanges\",value:function(t,e){var n=e!==this.cache[t];return this.cache[t]=e,n}},{key:\"getExtra\",value:function(t,e){var n=document.createElement(\"tr\");return n.className=\"virtual-scroll-\".concat(t),e&&(n.style.height=\"\".concat(e,\"px\")),n.outerHTML}}])}(),kl=function(){function e(i,r){n(this,e),this.options=r,this.$el=t(i),this.$el_=this.$el.clone(),this.timeoutId_=0,this.timeoutFooter_=0}return i(e,[{key:\"init\",value:function(){this.initConstants(),this.initLocale(),this.initContainer(),this.initTable(),this.initHeader(),this.initData(),this.initHiddenRows(),this.initToolbar(),this.initPagination(),this.initBody(),this.initSearchText(),this.initServer()}},{key:\"initConstants\",value:function(){var e=this.options;this.constants=xl.CONSTANTS,this.constants.theme=t.fn.bootstrapTable.theme,this.constants.dataToggle=this.constants.html.dataToggle||\"data-toggle\";var n=vl.getIconsPrefix(t.fn.bootstrapTable.theme);\"string\"==typeof e.icons&&(e.icons=vl.calculateObjectValue(null,e.icons)),e.iconsPrefix=e.iconsPrefix||t.fn.bootstrapTable.defaults.iconsPrefix||n,e.icons=Object.assign(vl.getIcons(xl.ICONS,e.iconsPrefix),t.fn.bootstrapTable.defaults.icons,e.icons);var i=e.buttonsPrefix?\"\".concat(e.buttonsPrefix,\"-\"):\"\";this.constants.buttonsClass=[e.buttonsPrefix,i+e.buttonsClass,vl.sprintf(\"\".concat(i,\"%s\"),e.iconSize)].join(\" \").trim(),this.buttons=vl.calculateObjectValue(this,e.buttons,[],{}),\"object\"!==h(this.buttons)&&(this.buttons={})}},{key:\"initLocale\",value:function(){if(this.options.locale){var n=t.fn.bootstrapTable.locales,i=this.options.locale.split(/-|_/);i[0]=i[0].toLowerCase(),i[1]&&(i[1]=i[1].toUpperCase());var r={};n[this.options.locale]?r=n[this.options.locale]:n[i.join(\"-\")]?r=n[i.join(\"-\")]:n[i[0]]&&(r=n[i[0]]),this._defaultLocales=this._defaultLocales||{};for(var o=0,a=Object.entries(r);o<a.length;o++){var s=l(a[o],2),c=s[0],u=s[1],h=this._defaultLocales.hasOwnProperty(c)?this._defaultLocales[c]:e.DEFAULTS[c];this.options[c]===h&&(this.options[c]=u,this._defaultLocales[c]=u)}}}},{key:\"initContainer\",value:function(){var e=[\"top\",\"both\"].includes(this.options.paginationVAlign)?'<div class=\"fixed-table-pagination clearfix\"></div>':\"\",n=[\"bottom\",\"both\"].includes(this.options.paginationVAlign)?'<div class=\"fixed-table-pagination\"></div>':\"\",i=vl.calculateObjectValue(this.options,this.options.loadingTemplate,[this.options.formatLoadingMessage()]);this.$container=t('\\n      <div class=\"bootstrap-table '.concat(this.constants.theme,'\">\\n      <div class=\"fixed-table-toolbar\"></div>\\n      ').concat(e,'\\n      <div class=\"fixed-table-container\">\\n      <div class=\"fixed-table-header\"><table></table></div>\\n      <div class=\"fixed-table-body\">\\n      <div class=\"fixed-table-loading\">\\n      ').concat(i,'\\n      </div>\\n      </div>\\n      <div class=\"fixed-table-footer\"></div>\\n      </div>\\n      ').concat(n,\"\\n      </div>\\n    \")),this.$container.insertAfter(this.$el),this.$tableContainer=this.$container.find(\".fixed-table-container\"),this.$tableHeader=this.$container.find(\".fixed-table-header\"),this.$tableBody=this.$container.find(\".fixed-table-body\"),this.$tableLoading=this.$container.find(\".fixed-table-loading\"),this.$tableFooter=this.$el.find(\"tfoot\"),this.options.buttonsToolbar?this.$toolbar=t(\"body\").find(this.options.buttonsToolbar):this.$toolbar=this.$container.find(\".fixed-table-toolbar\"),this.$pagination=this.$container.find(\".fixed-table-pagination\"),this.$tableBody.append(this.$el),this.$container.after('<div class=\"clearfix\"></div>'),this.$el.addClass(this.options.classes),this.$tableLoading.addClass(this.options.classes),this.options.height&&(this.$tableContainer.addClass(\"fixed-height\"),this.options.showFooter&&this.$tableContainer.addClass(\"has-footer\"),this.options.classes.split(\" \").includes(\"table-bordered\")&&(this.$tableBody.append('<div class=\"fixed-table-border\"></div>'),this.$tableBorder=this.$tableBody.find(\".fixed-table-border\"),this.$tableLoading.addClass(\"fixed-table-border\")),this.$tableFooter=this.$container.find(\".fixed-table-footer\"))}},{key:\"initTable\",value:function(){var n=this,i=[];if(this.$header=this.$el.find(\">thead\"),this.$header.length?this.options.theadClasses&&this.$header.addClass(this.options.theadClasses):this.$header=t('<thead class=\"'.concat(this.options.theadClasses,'\"></thead>')).appendTo(this.$el),this._headerTrClasses=[],this._headerTrStyles=[],this.$header.find(\"tr\").each((function(e,r){var o=t(r),a=[];o.find(\"th\").each((function(e,n){var i=t(n);void 0!==i.data(\"field\")&&i.data(\"field\",\"\".concat(i.data(\"field\")));var r=Object.assign({},i.data());for(var o in r)t.fn.bootstrapTable.columnDefaults.hasOwnProperty(o)&&delete r[o];a.push(vl.extend({},{_data:vl.getRealDataAttr(r),title:i.html(),class:i.attr(\"class\"),titleTooltip:i.attr(\"title\"),rowspan:i.attr(\"rowspan\")?+i.attr(\"rowspan\"):void 0,colspan:i.attr(\"colspan\")?+i.attr(\"colspan\"):void 0,scope:i.attr(\"scope\")?i.attr(\"scope\"):void 0},i.data()))})),i.push(a),o.attr(\"class\")&&n._headerTrClasses.push(o.attr(\"class\")),o.attr(\"style\")&&n._headerTrStyles.push(o.attr(\"style\"))})),Array.isArray(this.options.columns[0])||(this.options.columns=[this.options.columns]),this.options.columns=vl.extend(!0,[],i,this.options.columns),this.columns=[],this.fieldsColumnsIndex=[],!1!==this.optionsColumnsChanged&&vl.setFieldIndex(this.options.columns),this.options.columns.forEach((function(t,i){t.forEach((function(t,r){var o=vl.extend({},e.COLUMN_DEFAULTS,t,{passed:t});void 0!==o.fieldIndex&&(n.columns[o.fieldIndex]=o,n.fieldsColumnsIndex[o.field]=o.fieldIndex),n.options.columns[i][r]=o}))})),!this.options.data.length){var r=vl.trToData(this.columns,this.$el.find(\">tbody>tr\"));r.length&&(this.options.data=r,this.fromHtml=!0)}this.options.pagination&&\"server\"!==this.options.sidePagination||(this.footerData=vl.trToData(this.columns,this.$el.find(\">tfoot>tr\"))),this.footerData&&this.$el.find(\"tfoot\").html(\"<tr></tr>\"),!this.options.showFooter||this.options.cardView?this.$tableFooter.hide():this.$tableFooter.show()}},{key:\"initHeader\",value:function(){var e=this,n={},i=[];this.header={fields:[],styles:[],classes:[],formatters:[],detailFormatters:[],events:[],sorters:[],sortNames:[],cellStyles:[],searchables:[]},vl.updateFieldGroup(this.options.columns,this.columns),this.options.columns.forEach((function(t,r){var o=[];o.push(\"<tr\".concat(vl.sprintf(' class=\"%s\"',e._headerTrClasses[r]),\" \").concat(vl.sprintf(' style=\"%s\"',e._headerTrStyles[r]),\">\"));var a=\"\";if(0===r&&vl.hasDetailViewIcon(e.options)){var s=e.options.columns.length>1?' rowspan=\"'.concat(e.options.columns.length,'\"'):\"\";a='<th class=\"detail\"'.concat(s,'>\\n          <div class=\"fht-cell\"></div>\\n          </th>')}a&&\"right\"!==e.options.detailViewAlign&&o.push(a),t.forEach((function(t,i){var a=vl.sprintf(' class=\"%s\"',t.class),s=t.widthUnit,c=parseFloat(t.width),u=t.halign?t.halign:t.align,f=vl.sprintf(\"text-align: %s; \",u),d=vl.sprintf(\"text-align: %s; \",t.align),p=vl.sprintf(\"vertical-align: %s; \",t.valign);if(p+=vl.sprintf(\"width: %s; \",!t.checkbox&&!t.radio||c?c?c+s:void 0:t.showSelectTitle?void 0:\"36px\"),void 0!==t.fieldIndex||t.visible){var g=vl.calculateObjectValue(null,e.options.headerStyle,[t]),v=[],b=[],m=\"\";if(g&&g.css)for(var y=0,w=Object.entries(g.css);y<w.length;y++){var S=l(w[y],2),x=S[0],O=S[1];v.push(\"\".concat(x,\": \").concat(O))}if(g&&g.classes&&(m=vl.sprintf(' class=\"%s\"',t.class?[t.class,g.classes].join(\" \"):g.classes)),void 0!==t.fieldIndex){if(e.header.fields[t.fieldIndex]=t.field,e.header.styles[t.fieldIndex]=d+p,e.header.classes[t.fieldIndex]=t.class,e.header.formatters[t.fieldIndex]=t.formatter,e.header.detailFormatters[t.fieldIndex]=t.detailFormatter,e.header.events[t.fieldIndex]=t.events,e.header.sorters[t.fieldIndex]=t.sorter,e.header.sortNames[t.fieldIndex]=t.sortName,e.header.cellStyles[t.fieldIndex]=t.cellStyle,e.header.searchables[t.fieldIndex]=t.searchable,!t.visible)return;if(e.options.cardView&&!t.cardVisible)return;n[t.field]=t}if(Object.keys(t._data||{}).length>0)for(var k=0,T=Object.entries(t._data);k<T.length;k++){var C=l(T[k],2),P=C[0],I=C[1];b.push(\"data-\".concat(P,\"='\").concat(\"object\"===h(I)?JSON.stringify(I):I,\"'\"))}o.push(\"<th\".concat(vl.sprintf(' title=\"%s\"',t.titleTooltip)),t.checkbox||t.radio?vl.sprintf(' class=\"bs-checkbox %s\"',t.class||\"\"):m||a,vl.sprintf(' style=\"%s\"',f+p+v.join(\"; \")||void 0),vl.sprintf(' rowspan=\"%s\"',t.rowspan),vl.sprintf(' colspan=\"%s\"',t.colspan),vl.sprintf(' scope=\"%s\"',t.scope),vl.sprintf(' data-field=\"%s\"',t.field),0===i&&r>0?\" data-not-first-th\":\"\",b.length>0?b.join(\" \"):\"\",\">\"),o.push(vl.sprintf('<div class=\"th-inner %s\">',e.options.sortable&&t.sortable?\"sortable\".concat(\"center\"===u?\" sortable-center\":\"\",\" both\"):\"\"));var A=e.options.escape&&e.options.escapeTitle?vl.escapeHTML(t.title):t.title,$=A;t.checkbox&&(A=\"\",!e.options.singleSelect&&e.options.checkboxHeader&&(A='<label><input name=\"btSelectAll\" type=\"checkbox\" /><span></span></label>'),e.header.stateField=t.field),t.radio&&(A=\"\",e.header.stateField=t.field),!A&&t.showSelectTitle&&(A+=$),o.push(A),o.push(\"</div>\"),o.push('<div class=\"fht-cell\"></div>'),o.push(\"</div>\"),o.push(\"</th>\")}})),a&&\"right\"===e.options.detailViewAlign&&o.push(a),o.push(\"</tr>\"),o.length>3&&i.push(o.join(\"\"))})),this.$header.html(i.join(\"\")),this.$header.find(\"th[data-field]\").each((function(e,i){t(i).data(n[t(i).data(\"field\")])})),this.$container.off(\"click\",\".th-inner\").on(\"click\",\".th-inner\",(function(n){var i=t(n.currentTarget);if(e.options.detailView&&!i.parent().hasClass(\"bs-checkbox\")&&i.closest(\".bootstrap-table\")[0]!==e.$container[0])return!1;e.options.sortable&&i.parent().data().sortable&&e.onSort(n)}));var r=vl.getEventName(\"resize.bootstrap-table\",this.$el.attr(\"id\"));t(window).off(r),!this.options.showHeader||this.options.cardView?(this.$header.hide(),this.$tableHeader.hide(),this.$tableLoading.css(\"top\",0)):(this.$header.show(),this.$tableHeader.show(),this.$tableLoading.css(\"top\",this.$header.outerHeight()+1),this.getCaret(),t(window).on(r,(function(){return e.resetView()}))),this.$selectAll=this.$header.find('[name=\"btSelectAll\"]'),this.$selectAll.off(\"click\").on(\"click\",(function(n){n.stopPropagation();var i=t(n.currentTarget).prop(\"checked\");e[i?\"checkAll\":\"uncheckAll\"](),e.updateSelected()}))}},{key:\"initData\",value:function(t,e){\"append\"===e?this.options.data=this.options.data.concat(t):\"prepend\"===e?this.options.data=[].concat(t).concat(this.options.data):(t=t||vl.deepCopy(this.options.data),this.options.data=Array.isArray(t)?t:t[this.options.dataField]),this.data=c(this.options.data),this.options.sortReset&&(this.unsortedData=c(this.data)),\"server\"!==this.options.sidePagination&&this.initSort()}},{key:\"initSort\",value:function(){var t=this,e=this.options.sortName,n=\"desc\"===this.options.sortOrder?-1:1,i=this.header.fields.indexOf(this.options.sortName),r=0;-1!==i?(this.options.sortStable&&this.data.forEach((function(t,e){t.hasOwnProperty(\"_position\")||(t._position=e)})),this.options.customSort?vl.calculateObjectValue(this.options,this.options.customSort,[this.options.sortName,this.options.sortOrder,this.data]):this.data.sort((function(r,o){t.header.sortNames[i]&&(e=t.header.sortNames[i]);var a=vl.getItemField(r,e,t.options.escape),s=vl.getItemField(o,e,t.options.escape),l=vl.calculateObjectValue(t.header,t.header.sorters[i],[a,s,r,o]);return void 0!==l?t.options.sortStable&&0===l?n*(r._position-o._position):n*l:vl.sort(a,s,n,t.options,r._position,o._position)})),void 0!==this.options.sortClass&&(clearTimeout(r),r=setTimeout((function(){t.$el.removeClass(t.options.sortClass);var e=t.$header.find('[data-field=\"'.concat(t.options.sortName,'\"]')).index();t.$el.find(\"tr td:nth-child(\".concat(e+1,\")\")).addClass(t.options.sortClass)}),250))):this.options.sortReset&&(this.data=c(this.unsortedData))}},{key:\"sortReset\",value:function(){this.options.sortName=void 0,this.options.sortOrder=void 0,this._sort()}},{key:\"sortBy\",value:function(t){this.options.sortName=t.field,this.options.sortOrder=t.hasOwnProperty(\"sortOrder\")?t.sortOrder:\"asc\",this._sort()}},{key:\"onSort\",value:function(e){var n=e.type,i=e.currentTarget,r=\"keypress\"===n?t(i):t(i).parent(),o=this.$header.find(\"th\").eq(r.index());if(this.$header.add(this.$header_).find(\"span.order\").remove(),this.options.sortName===r.data(\"field\")){var a=this.options.sortOrder,s=this.columns[this.fieldsColumnsIndex[r.data(\"field\")]].sortOrder||this.columns[this.fieldsColumnsIndex[r.data(\"field\")]].order;void 0===a?this.options.sortOrder=\"asc\":\"asc\"===a?this.options.sortOrder=this.options.sortReset?\"asc\"===s?\"desc\":void 0:\"desc\":\"desc\"===this.options.sortOrder&&(this.options.sortOrder=this.options.sortReset?\"desc\"===s?\"asc\":void 0:\"asc\"),void 0===this.options.sortOrder&&(this.options.sortName=void 0)}else this.options.sortName=r.data(\"field\"),this.options.rememberOrder?this.options.sortOrder=\"asc\"===r.data(\"order\")?\"desc\":\"asc\":this.options.sortOrder=this.columns[this.fieldsColumnsIndex[r.data(\"field\")]].sortOrder||this.columns[this.fieldsColumnsIndex[r.data(\"field\")]].order;r.add(o).data(\"order\",this.options.sortOrder),this.getCaret(),this._sort()}},{key:\"_sort\",value:function(){if(\"server\"===this.options.sidePagination&&this.options.serverSort)return this.options.pageNumber=1,this.trigger(\"sort\",this.options.sortName,this.options.sortOrder),void this.initServer(this.options.silentSort);this.options.pagination&&this.options.sortResetPage&&(this.options.pageNumber=1,this.initPagination()),this.trigger(\"sort\",this.options.sortName,this.options.sortOrder),this.initSort(),this.initBody()}},{key:\"initToolbar\",value:function(){var e,n=this,i=this.options,o=[],a=0,s=0;this.$toolbar.find(\".bs-bars\").children().length&&t(\"body\").append(t(i.toolbar)),this.$toolbar.html(\"\"),\"string\"!=typeof i.toolbar&&\"object\"!==h(i.toolbar)||t(vl.sprintf('<div class=\"bs-bars %s-%s\"></div>',this.constants.classes.pull,i.toolbarAlign)).appendTo(this.$toolbar).append(t(i.toolbar)),o=['<div class=\"'.concat([\"columns\",\"columns-\".concat(i.buttonsAlign),this.constants.classes.buttonsGroup,\"\".concat(this.constants.classes.pull,\"-\").concat(i.buttonsAlign)].join(\" \"),'\">')],\"string\"==typeof i.buttonsOrder&&(i.buttonsOrder=i.buttonsOrder.replace(/\\[|\\]| |'/g,\"\").split(\",\")),this.buttons=Object.assign(this.buttons,{paginationSwitch:{text:i.pagination?i.formatPaginationSwitchUp():i.formatPaginationSwitchDown(),icon:i.pagination?i.icons.paginationSwitchDown:i.icons.paginationSwitchUp,render:!1,event:this.togglePagination,attributes:{\"aria-label\":i.formatPaginationSwitch(),title:i.formatPaginationSwitch()}},refresh:{text:i.formatRefresh(),icon:i.icons.refresh,render:!1,event:this.refresh,attributes:{\"aria-label\":i.formatRefresh(),title:i.formatRefresh()}},toggle:{text:i.formatToggleOn(),icon:i.icons.toggleOff,render:!1,event:this.toggleView,attributes:{\"aria-label\":i.formatToggleOn(),title:i.formatToggleOn()}},fullscreen:{text:i.formatFullscreen(),icon:i.icons.fullscreen,render:!1,event:this.toggleFullscreen,attributes:{\"aria-label\":i.formatFullscreen(),title:i.formatFullscreen()}},columns:{render:!1,html:function(){var t=[];if(t.push('<div class=\"keep-open '.concat(n.constants.classes.buttonsDropdown,'\">\\n            <button class=\"').concat(n.constants.buttonsClass,' dropdown-toggle\" type=\"button\" ').concat(n.constants.dataToggle,'=\"dropdown\"\\n            aria-label=\"').concat(i.formatColumns(),'\" ').concat(i.buttonsAttributeTitle,'=\"').concat(i.formatColumns(),'\">\\n            ').concat(i.showButtonIcons?vl.sprintf(n.constants.html.icon,i.iconsPrefix,i.icons.columns):\"\",\"\\n            \").concat(i.showButtonText?i.formatColumns():\"\",\"\\n            \").concat(n.constants.html.dropdownCaret,\"\\n            </button>\\n            \").concat(n.constants.html.toolbarDropdown[0])),i.showColumnsSearch&&(t.push(vl.sprintf(n.constants.html.toolbarDropdownItem,vl.sprintf('<input type=\"text\" class=\"%s\" name=\"columnsSearch\" placeholder=\"%s\" autocomplete=\"off\">',n.constants.classes.input,i.formatSearch()))),t.push(n.constants.html.toolbarDropdownSeparator)),i.showColumnsToggleAll){var e=n.getVisibleColumns().length===n.columns.filter((function(t){return!n.isSelectionColumn(t)})).length;t.push(vl.sprintf(n.constants.html.toolbarDropdownItem,vl.sprintf('<input type=\"checkbox\" class=\"toggle-all\" %s> <span>%s</span>',e?'checked=\"checked\"':\"\",i.formatColumnsToggleAll()))),t.push(n.constants.html.toolbarDropdownSeparator)}var r=0;return n.columns.forEach((function(t){t.visible&&r++})),n.columns.forEach((function(e,o){if(!n.isSelectionColumn(e)&&(!i.cardView||e.cardVisible)){var a=e.visible?' checked=\"checked\"':\"\",l=r<=i.minimumCountColumns&&a?' disabled=\"disabled\"':\"\";e.switchable&&(t.push(vl.sprintf(n.constants.html.toolbarDropdownItem,vl.sprintf('<input type=\"checkbox\" data-field=\"%s\" value=\"%s\"%s%s> <span>%s</span>',e.field,o,a,l,e.switchableLabel||e.title))),s++)}})),t.push(n.constants.html.toolbarDropdown[1],\"</div>\"),t.join(\"\")}}});for(var c={},u=0,f=Object.entries(this.buttons);u<f.length;u++){var d=l(f[u],2),p=d[0],g=d[1],v=void 0;if(g.hasOwnProperty(\"html\"))\"function\"==typeof g.html?v=g.html():\"string\"==typeof g.html&&(v=g.html);else{var b=this.constants.buttonsClass;if(g.hasOwnProperty(\"attributes\")&&g.attributes.class&&(b+=\" \".concat(g.attributes.class)),v='<button class=\"'.concat(b,'\" type=\"button\" name=\"').concat(p,'\"'),g.hasOwnProperty(\"attributes\"))for(var m=0,y=Object.entries(g.attributes);m<y.length;m++){var w=l(y[m],2),S=w[0],x=w[1];if(\"class\"!==S){var O=\"title\"===S?this.options.buttonsAttributeTitle:S;v+=\" \".concat(O,'=\"').concat(x,'\"')}}v+=\">\",i.showButtonIcons&&g.hasOwnProperty(\"icon\")&&(v+=\"\".concat(vl.sprintf(this.constants.html.icon,i.iconsPrefix,g.icon),\" \")),i.showButtonText&&g.hasOwnProperty(\"text\")&&(v+=g.text),v+=\"</button>\"}c[p]=v;var k=\"show\".concat(p.charAt(0).toUpperCase()).concat(p.substring(1)),T=i[k];!(!g.hasOwnProperty(\"render\")||g.hasOwnProperty(\"render\")&&g.render)||void 0!==T&&!0!==T||(i[k]=!0),i.buttonsOrder.includes(p)||i.buttonsOrder.push(p)}var C,P=r(i.buttonsOrder);try{for(P.s();!(C=P.n()).done;){var I=C.value;i[\"show\".concat(I.charAt(0).toUpperCase()).concat(I.substring(1))]&&o.push(c[I])}}catch(t){P.e(t)}finally{P.f()}o.push(\"</div>\"),(this.showToolbar||o.length>2)&&this.$toolbar.append(o.join(\"\"));for(var A=function(){var t=l(R[$],2),e=t[0],i=t[1];if(i.hasOwnProperty(\"event\")){if(\"function\"==typeof i.event||\"string\"==typeof i.event){var r=\"string\"==typeof i.event?window[i.event]:i.event;return n.$toolbar.find('button[name=\"'.concat(e,'\"]')).off(\"click\").on(\"click\",(function(){return r.call(n)})),1}for(var o=function(){var t=l(s[a],2),i=t[0],r=t[1],o=\"string\"==typeof r?window[r]:r;n.$toolbar.find('button[name=\"'.concat(e,'\"]')).off(i).on(i,(function(){return o.call(n)}))},a=0,s=Object.entries(i.event);a<s.length;a++)o()}},$=0,R=Object.entries(this.buttons);$<R.length;$++)A();if(i.showColumns){var E=(e=this.$toolbar.find(\".keep-open\")).find('input[type=\"checkbox\"]:not(\".toggle-all\")'),j=e.find('input[type=\"checkbox\"].toggle-all');if(s<=i.minimumCountColumns&&e.find(\"input\").prop(\"disabled\",!0),e.find(\"li, label\").off(\"click\").on(\"click\",(function(t){t.stopImmediatePropagation()})),E.off(\"click\").on(\"click\",(function(e){var i=e.currentTarget,r=t(i);n._toggleColumn(r.val(),r.prop(\"checked\"),!1),n.trigger(\"column-switch\",r.data(\"field\"),r.prop(\"checked\")),j.prop(\"checked\",E.filter(\":checked\").length===n.columns.filter((function(t){return!n.isSelectionColumn(t)})).length)})),j.off(\"click\").on(\"click\",(function(e){var i=e.currentTarget;n._toggleAllColumns(t(i).prop(\"checked\")),n.trigger(\"column-switch-all\",t(i).prop(\"checked\"))})),i.showColumnsSearch){var N=e.find('[name=\"columnsSearch\"]'),F=e.find(\".dropdown-item-marker\");N.on(\"keyup paste change\",(function(e){var n=e.currentTarget,i=t(n).val().toLowerCase();F.show(),E.each((function(e,n){var r=t(n).parents(\".dropdown-item-marker\");r.text().toLowerCase().includes(i)||r.hide()}))}))}}var L=function(t){var e=t.is(\"select\")?\"change\":\"keyup drop blur mouseup\";t.off(e).on(e,(function(t){i.searchOnEnterKey&&13!==t.keyCode||[37,38,39,40].includes(t.keyCode)||(clearTimeout(a),a=setTimeout((function(){n.onSearch({currentTarget:t.currentTarget})}),i.searchTimeOut))}))};if((i.search||this.showSearchClearButton)&&\"string\"!=typeof i.searchSelector){o=[];var D=vl.sprintf(this.constants.html.searchButton,this.constants.buttonsClass,i.formatSearch(),i.showButtonIcons?vl.sprintf(this.constants.html.icon,i.iconsPrefix,i.icons.search):\"\",i.showButtonText?i.formatSearch():\"\"),_=vl.sprintf(this.constants.html.searchClearButton,this.constants.buttonsClass,i.formatClearSearch(),i.showButtonIcons?vl.sprintf(this.constants.html.icon,i.iconsPrefix,i.icons.clearSearch):\"\",i.showButtonText?i.formatClearSearch():\"\"),V='<input class=\"'.concat(this.constants.classes.input,\"\\n        \").concat(vl.sprintf(\" %s%s\",this.constants.classes.inputPrefix,i.iconSize),'\\n        search-input\" type=\"search\" aria-label=\"').concat(i.formatSearch(),'\" placeholder=\"').concat(i.formatSearch(),'\" autocomplete=\"off\">'),B=V;if(i.showSearchButton||i.showSearchClearButton){var H=(i.showSearchButton?D:\"\")+(i.showSearchClearButton?_:\"\");B=i.search?vl.sprintf(this.constants.html.inputGroup,V,H):H}o.push(vl.sprintf('\\n        <div class=\"'.concat(this.constants.classes.pull,\"-\").concat(i.searchAlign,\" search \").concat(this.constants.classes.inputGroup,'\">\\n          %s\\n        </div>\\n      '),B)),this.$toolbar.append(o.join(\"\"));var M=vl.getSearchInput(this);i.showSearchButton?(this.$toolbar.find(\".search button[name=search]\").off(\"click\").on(\"click\",(function(){clearTimeout(a),a=setTimeout((function(){n.onSearch({currentTarget:M})}),i.searchTimeOut)})),i.searchOnEnterKey&&L(M)):L(M),i.showSearchClearButton&&this.$toolbar.find(\".search button[name=clearSearch]\").click((function(){n.resetSearch()}))}else\"string\"==typeof i.searchSelector&&L(vl.getSearchInput(this))}},{key:\"onSearch\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.currentTarget,i=e.firedByInitSearchText,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0!==n&&t(n).length&&r){var o=t(n).val().trim();if(this.options.trimOnSearch&&t(n).val()!==o&&t(n).val(o),this.searchText===o)return;var a=vl.getSearchInput(this),s=n instanceof jQuery?n:t(n);(s.is(a)||s.hasClass(\"search-input\"))&&(this.searchText=o,this.options.searchText=o)}i||(this.options.pageNumber=1),this.initSearch(),i?\"client\"===this.options.sidePagination&&this.updatePagination():this.updatePagination(),this.trigger(\"search\",this.searchText)}},{key:\"initSearch\",value:function(){var e=this;if(this.filterOptions=this.filterOptions||this.options.filterOptions,\"server\"!==this.options.sidePagination){if(this.options.customSearch)return this.data=vl.calculateObjectValue(this.options,this.options.customSearch,[this.options.data,this.searchText,this.filterColumns]),this.options.sortReset&&(this.unsortedData=c(this.data)),void this.initSort();var n=this.searchText&&(this.fromHtml?vl.escapeHTML(this.searchText):this.searchText),i=n?n.toLowerCase():\"\",r=vl.isEmptyObject(this.filterColumns)?null:this.filterColumns;this.options.searchAccentNeutralise&&(i=vl.normalizeAccent(i)),\"function\"==typeof this.filterOptions.filterAlgorithm?this.data=this.options.data.filter((function(t){return e.filterOptions.filterAlgorithm.apply(null,[t,r])})):\"string\"==typeof this.filterOptions.filterAlgorithm&&(this.data=r?this.options.data.filter((function(t){var n=e.filterOptions.filterAlgorithm;if(\"and\"===n){for(var i in r)if(Array.isArray(r[i])&&!r[i].includes(t[i])||!Array.isArray(r[i])&&t[i]!==r[i])return!1}else if(\"or\"===n){var o=!1;for(var a in r)(Array.isArray(r[a])&&r[a].includes(t[a])||!Array.isArray(r[a])&&t[a]===r[a])&&(o=!0);return o}return!0})):c(this.options.data));var o=this.getVisibleFields();this.data=i?this.data.filter((function(r,a){for(var s=0;s<e.header.fields.length;s++)if(e.header.searchables[s]&&(!e.options.visibleSearch||-1!==o.indexOf(e.header.fields[s]))){var l=vl.isNumeric(e.header.fields[s])?parseInt(e.header.fields[s],10):e.header.fields[s],c=e.columns[e.fieldsColumnsIndex[l]],u=void 0;if(\"string\"!=typeof l||r.hasOwnProperty(l))u=r[l];else{u=r;for(var h=l.split(\".\"),f=0;f<h.length;f++){if(null===u[h[f]]||void 0===u[h[f]]){u=null;break}u=u[h[f]]}}if(e.options.searchAccentNeutralise&&(u=vl.normalizeAccent(u)),c&&c.searchFormatter&&(u=vl.calculateObjectValue(c,e.header.formatters[s],[u,r,a,c.field],u),e.header.formatters[s]&&\"number\"!=typeof u&&(u=t(\"<div>\").html(u).text())),\"string\"==typeof u||\"number\"==typeof u)if(e.options.strictSearch){if(\"\".concat(u).toLowerCase()===i)return!0}else if(e.options.regexSearch){if(vl.regexCompare(u,n))return!0}else{var d=/(?:(<=|=>|=<|>=|>|<)(?:\\s+)?(-?\\d+)?|(-?\\d+)?(\\s+)?(<=|=>|=<|>=|>|<))/gm.exec(e.searchText),p=!1;if(d){var g=d[1]||\"\".concat(d[5],\"l\"),v=d[2]||d[3],b=parseInt(u,10),m=parseInt(v,10);switch(g){case\">\":case\"<l\":p=b>m;break;case\"<\":case\">l\":p=b<m;break;case\"<=\":case\"=<\":case\">=l\":case\"=>l\":p=b<=m;break;case\">=\":case\"=>\":case\"<=l\":case\"=<l\":p=b>=m}}if(p||\"\".concat(u).toLowerCase().includes(i))return!0}}return!1})):this.data,this.options.sortReset&&(this.unsortedData=c(this.data)),this.initSort()}}},{key:\"initPagination\",value:function(){var t=this,e=this.options;if(e.pagination){this.$pagination.show();var n,i,r,o,a,s,l,c=[],u=!1,h=this.getData({includeHiddenRows:!1}),f=e.pageList;if(\"string\"==typeof f&&(f=f.replace(/\\[|\\]| /g,\"\").toLowerCase().split(\",\")),f=f.map((function(t){return\"string\"==typeof t?t.toLowerCase()===e.formatAllRows().toLowerCase()||[\"all\",\"unlimited\"].includes(t.toLowerCase())?e.formatAllRows():+t:t})),this.paginationParts=e.paginationParts,\"string\"==typeof this.paginationParts&&(this.paginationParts=this.paginationParts.replace(/\\[|\\]| |'/g,\"\").split(\",\")),\"server\"!==e.sidePagination&&(e.totalRows=h.length),this.totalPages=0,e.totalRows&&(e.pageSize===e.formatAllRows()&&(e.pageSize=e.totalRows,u=!0),this.totalPages=1+~~((e.totalRows-1)/e.pageSize),e.totalPages=this.totalPages),this.totalPages>0&&e.pageNumber>this.totalPages&&(e.pageNumber=this.totalPages),this.pageFrom=(e.pageNumber-1)*e.pageSize+1,this.pageTo=e.pageNumber*e.pageSize,this.pageTo>e.totalRows&&(this.pageTo=e.totalRows),this.options.pagination&&\"server\"!==this.options.sidePagination&&(this.options.totalNotFiltered=this.options.data.length),this.options.showExtendedPagination||(this.options.totalNotFiltered=void 0),(this.paginationParts.includes(\"pageInfo\")||this.paginationParts.includes(\"pageInfoShort\")||this.paginationParts.includes(\"pageSize\"))&&c.push('<div class=\"'.concat(this.constants.classes.pull,\"-\").concat(e.paginationDetailHAlign,' pagination-detail\">')),this.paginationParts.includes(\"pageInfo\")||this.paginationParts.includes(\"pageInfoShort\")){var d=this.options.totalRows;\"client\"===this.options.sidePagination&&this.options.paginationLoadMore&&!this._paginationLoaded&&this.totalPages>1&&(d+=\" +\");var p=this.paginationParts.includes(\"pageInfoShort\")?e.formatDetailPagination(d):e.formatShowingRows(this.pageFrom,this.pageTo,d,e.totalNotFiltered);c.push('<span class=\"pagination-info\">\\n      '.concat(p,\"\\n      </span>\"))}if(this.paginationParts.includes(\"pageSize\")){c.push('<div class=\"page-list\">');var g=['<div class=\"'.concat(this.constants.classes.paginationDropdown,'\">\\n        <button class=\"').concat(this.constants.buttonsClass,' dropdown-toggle\" type=\"button\" ').concat(this.constants.dataToggle,'=\"dropdown\">\\n        <span class=\"page-size\">\\n        ').concat(u?e.formatAllRows():e.pageSize,\"\\n        </span>\\n        \").concat(this.constants.html.dropdownCaret,\"\\n        </button>\\n        \").concat(this.constants.html.pageDropdown[0])];f.forEach((function(n,i){var r;(!e.smartDisplay||0===i||f[i-1]<e.totalRows||n===e.formatAllRows())&&(r=u?n===e.formatAllRows()?t.constants.classes.dropdownActive:\"\":n===e.pageSize?t.constants.classes.dropdownActive:\"\",g.push(vl.sprintf(t.constants.html.pageDropdownItem,r,n)))})),g.push(\"\".concat(this.constants.html.pageDropdown[1],\"</div>\")),c.push(e.formatRecordsPerPage(g.join(\"\")))}if((this.paginationParts.includes(\"pageInfo\")||this.paginationParts.includes(\"pageInfoShort\")||this.paginationParts.includes(\"pageSize\"))&&c.push(\"</div></div>\"),this.paginationParts.includes(\"pageList\")){c.push('<div class=\"'.concat(this.constants.classes.pull,\"-\").concat(e.paginationHAlign,' pagination\">'),vl.sprintf(this.constants.html.pagination[0],vl.sprintf(\" pagination-%s\",e.iconSize)),vl.sprintf(this.constants.html.paginationItem,\" page-pre\",e.formatSRPaginationPreText(),e.paginationPreText)),this.totalPages<e.paginationSuccessivelySize?(i=1,r=this.totalPages):r=(i=e.pageNumber-e.paginationPagesBySide)+2*e.paginationPagesBySide,e.pageNumber<e.paginationSuccessivelySize-1&&(r=e.paginationSuccessivelySize),e.paginationSuccessivelySize>this.totalPages-i&&(i=i-(e.paginationSuccessivelySize-(this.totalPages-i))+1),i<1&&(i=1),r>this.totalPages&&(r=this.totalPages);var v=Math.round(e.paginationPagesBySide/2),b=function(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return vl.sprintf(t.constants.html.paginationItem,i+(n===e.pageNumber?\" \".concat(t.constants.classes.paginationActive):\"\"),e.formatSRPaginationPageText(n),n)};if(i>1){var m=e.paginationPagesBySide;for(m>=i&&(m=i-1),n=1;n<=m;n++)c.push(b(n));i-1===m+1?(n=i-1,c.push(b(n))):i-1>m&&(i-2*e.paginationPagesBySide>e.paginationPagesBySide&&e.paginationUseIntermediate?(n=Math.round((i-v)/2+v),c.push(b(n,\" page-intermediate\"))):c.push(vl.sprintf(this.constants.html.paginationItem,\" page-first-separator disabled\",\"\",\"...\")))}for(n=i;n<=r;n++)c.push(b(n));if(this.totalPages>r){var y=this.totalPages-(e.paginationPagesBySide-1);for(r>=y&&(y=r+1),r+1===y-1?(n=r+1,c.push(b(n))):y>r+1&&(this.totalPages-r>2*e.paginationPagesBySide&&e.paginationUseIntermediate?(n=Math.round((this.totalPages-v-r)/2+r),c.push(b(n,\" page-intermediate\"))):c.push(vl.sprintf(this.constants.html.paginationItem,\" page-last-separator disabled\",\"\",\"...\"))),n=y;n<=this.totalPages;n++)c.push(b(n))}c.push(vl.sprintf(this.constants.html.paginationItem,\" page-next\",e.formatSRPaginationNextText(),e.paginationNextText)),c.push(this.constants.html.pagination[1],\"</div>\")}this.$pagination.html(c.join(\"\"));var w=[\"bottom\",\"both\"].includes(e.paginationVAlign)?\" \".concat(this.constants.classes.dropup):\"\";this.$pagination.last().find(\".page-list > div\").addClass(w),e.onlyInfoPagination||(o=this.$pagination.find(\".page-list a\"),a=this.$pagination.find(\".page-pre\"),s=this.$pagination.find(\".page-next\"),l=this.$pagination.find(\".page-item\").not(\".page-next, .page-pre, .page-last-separator, .page-first-separator\"),this.totalPages<=1&&this.$pagination.find(\"div.pagination\").hide(),e.smartDisplay&&(f.length<2||e.totalRows<=f[0])&&this.$pagination.find(\"div.page-list\").hide(),this.$pagination[this.getData().length?\"show\":\"hide\"](),e.paginationLoop||(1===e.pageNumber&&a.addClass(\"disabled\"),e.pageNumber===this.totalPages&&s.addClass(\"disabled\")),u&&(e.pageSize=e.formatAllRows()),o.off(\"click\").on(\"click\",(function(e){return t.onPageListChange(e)})),a.off(\"click\").on(\"click\",(function(e){return t.onPagePre(e)})),s.off(\"click\").on(\"click\",(function(e){return t.onPageNext(e)})),l.off(\"click\").on(\"click\",(function(e){return t.onPageNumber(e)})))}else this.$pagination.hide()}},{key:\"updatePagination\",value:function(e){e&&t(e.currentTarget).hasClass(\"disabled\")||(this.options.maintainMetaData||this.resetRows(),this.initPagination(),this.trigger(\"page-change\",this.options.pageNumber,this.options.pageSize),\"server\"===this.options.sidePagination||\"client\"===this.options.sidePagination&&this.options.paginationLoadMore&&!this._paginationLoaded&&this.options.pageNumber===this.totalPages?this.initServer():this.initBody())}},{key:\"onPageListChange\",value:function(e){e.preventDefault();var n=t(e.currentTarget);return n.parent().addClass(this.constants.classes.dropdownActive).siblings().removeClass(this.constants.classes.dropdownActive),this.options.pageSize=n.text().toUpperCase()===this.options.formatAllRows().toUpperCase()?this.options.formatAllRows():+n.text(),this.$toolbar.find(\".page-size\").text(this.options.pageSize),this.updatePagination(e),!1}},{key:\"onPagePre\",value:function(e){if(!t(e.target).hasClass(\"disabled\"))return e.preventDefault(),this.options.pageNumber-1==0?this.options.pageNumber=this.options.totalPages:this.options.pageNumber--,this.updatePagination(e),!1}},{key:\"onPageNext\",value:function(e){if(!t(e.target).hasClass(\"disabled\"))return e.preventDefault(),this.options.pageNumber+1>this.options.totalPages?this.options.pageNumber=1:this.options.pageNumber++,this.updatePagination(e),!1}},{key:\"onPageNumber\",value:function(e){if(e.preventDefault(),this.options.pageNumber!==+t(e.currentTarget).text())return this.options.pageNumber=+t(e.currentTarget).text(),this.updatePagination(e),!1}},{key:\"initRow\",value:function(e,n,i,r){var o=this;if(!(vl.findIndex(this.hiddenRows,e)>-1)){var a=vl.calculateObjectValue(this.options,this.options.rowStyle,[e,n],{}),u=vl.calculateObjectValue(this.options,this.options.rowAttributes,[e,n],{}),f={};if(e._data&&!vl.isEmptyObject(e._data))for(var d=0,p=Object.entries(e._data);d<p.length;d++){var g=l(p[d],2),v=g[0],b=g[1];if(\"index\"===v)return;f[\"data-\".concat(v)]=\"object\"===h(b)?JSON.stringify(b):b}var m=vl.h(\"tr\",s(s({id:Array.isArray(e)?void 0:e._id,class:a&&a.classes||(Array.isArray(e)?void 0:e._class),style:a&&a.css||(Array.isArray(e)?void 0:e._style),\"data-index\":n,\"data-uniqueid\":vl.getItemField(e,this.options.uniqueId,!1),\"data-has-detail-view\":this.options.detailView&&vl.calculateObjectValue(null,this.options.detailFilter,[n,e])?\"true\":void 0},u),f)),y=[],w=\"\";vl.hasDetailViewIcon(this.options)&&(w=vl.h(\"td\"),vl.calculateObjectValue(null,this.options.detailFilter,[n,e])&&w.append(vl.h(\"a\",{class:\"detail-icon\",href:\"#\",html:vl.sprintf(this.constants.html.icon,this.options.iconsPrefix,this.options.icons.detailOpen)}))),w&&\"right\"!==this.options.detailViewAlign&&y.push(w);var S=this.header.fields.map((function(i,r){var a=o.columns[r],s=vl.getItemField(e,i,o.options.escape,a.escape),u=\"\",h={class:o.header.classes[r]?[o.header.classes[r]]:[],style:o.header.styles[r]?[o.header.styles[r]]:[]},f=\"card-view card-view-field-\".concat(i);if((!o.fromHtml&&!o.autoMergeCells||void 0!==s||a.checkbox||a.radio)&&a.visible&&(!o.options.cardView||a.cardVisible)){for(var d=0,p=[\"class\",\"style\",\"id\",\"rowspan\",\"colspan\",\"title\"];d<p.length;d++){var g=p[d],v=e[\"_\".concat(i,\"_\").concat(g)];v&&(h[g]?h[g].push(v):h[g]=v)}var b=vl.calculateObjectValue(o.header,o.header.cellStyles[r],[s,e,n,i],{});if(b.classes&&h.class.push(b.classes),b.css&&h.style.push(b.css),u=vl.calculateObjectValue(a,o.header.formatters[r],[s,e,n,i],s),a.checkbox||a.radio||(u=null==u?o.options.undefinedText:u),a.searchable&&o.searchText&&o.options.searchHighlight&&!a.checkbox&&!a.radio){var m=o.searchText.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\");if(o.options.searchAccentNeutralise&&\"string\"==typeof u){var y=new RegExp(\"\".concat(vl.normalizeAccent(m)),\"gmi\").exec(vl.normalizeAccent(u));y&&(m=u.substring(y.index,y.index+m.length))}var w=vl.replaceSearchMark(u,m);u=vl.calculateObjectValue(a,a.searchHighlightFormatter,[u,o.searchText],w)}if(e[\"_\".concat(i,\"_data\")]&&!vl.isEmptyObject(e[\"_\".concat(i,\"_data\")]))for(var S=0,x=Object.entries(e[\"_\".concat(i,\"_data\")]);S<x.length;S++){var O=l(x[S],2),k=O[0],T=O[1];if(\"index\"===k)return;h[\"data-\".concat(k)]=T}if(a.checkbox||a.radio){var C=a.checkbox?\"checkbox\":\"radio\",P=vl.isObject(u)&&u.hasOwnProperty(\"checked\")?u.checked:(!0===u||s)&&!1!==u,I=!a.checkboxEnabled||u&&u.disabled,A=o.header.formatters[r]&&(\"string\"==typeof u||u instanceof Node||u instanceof t)?vl.htmlToNodes(u):[];return e[o.header.stateField]=!0===u||!!s||u&&u.checked,vl.h(o.options.cardView?\"div\":\"td\",{class:[o.options.cardView?f:\"bs-checkbox\",a.class],style:o.options.cardView?void 0:h.style},[vl.h(\"label\",{},[vl.h(\"input\",{\"data-index\":n,name:o.options.selectItemName,type:C,value:e[o.options.idField],checked:P?\"checked\":void 0,disabled:I?\"disabled\":void 0}),vl.h(\"span\")])].concat(c(A)))}if(o.options.cardView){if(o.options.smartDisplay&&\"\"===u)return vl.h(\"div\",{class:f});var $=o.options.showHeader?vl.h(\"span\",{class:[\"card-view-title\",b.classes],style:h.style,html:vl.getFieldTitle(o.columns,i)}):\"\";return vl.h(\"div\",{class:f},[$,vl.h(\"span\",{class:[\"card-view-value\",b.classes],style:h.style},c(vl.htmlToNodes(u)))])}return vl.h(\"td\",h,c(vl.htmlToNodes(u)))}})).filter((function(t){return t}));return y.push.apply(y,c(S)),w&&\"right\"===this.options.detailViewAlign&&y.push(w),this.options.cardView?m.append(vl.h(\"td\",{colspan:this.header.fields.length},[vl.h(\"div\",{class:\"card-views\"},y)])):m.append.apply(m,y),m}}},{key:\"initBody\",value:function(e,n){var i=this,r=this.getData();this.trigger(\"pre-body\",r),this.$body=this.$el.find(\">tbody\"),this.$body.length||(this.$body=t(\"<tbody></tbody>\").appendTo(this.$el)),this.options.pagination&&\"server\"!==this.options.sidePagination||(this.pageFrom=1,this.pageTo=r.length);var o=[],a=t(document.createDocumentFragment()),s=!1,l=[];this.autoMergeCells=vl.checkAutoMergeCells(r.slice(this.pageFrom-1,this.pageTo));for(var c=this.pageFrom-1;c<this.pageTo;c++){var u=r[c],h=this.initRow(u,c,r,a);if(s=s||!!h,h&&h instanceof Node){var f=this.options.uniqueId,d=[h];if(f&&u.hasOwnProperty(f)){var p=u[f],g=this.$body.find(vl.sprintf('> tr[data-uniqueid=\"%s\"][data-has-detail-view]',p)).next();g.is(\"tr.detail-view\")&&(l.push(c),n&&p===n||d.push(g[0]))}this.options.virtualScroll?o.push(t(\"<div>\").html(d).html()):a.append(d)}}this.$el.removeAttr(\"role\"),s?this.options.virtualScroll?(this.virtualScroll&&this.virtualScroll.destroy(),this.virtualScroll=new Ol({rows:o,fixedScroll:e,scrollEl:this.$tableBody[0],contentEl:this.$body[0],itemHeight:this.options.virtualScrollItemHeight,callback:function(t,e){i.fitHeader(),i.initBodyEvent(),i.trigger(\"virtual-scroll\",t,e)}})):this.$body.html(a):(this.$body.html('<tr class=\"no-records-found\">'.concat(vl.sprintf('<td colspan=\"%s\">%s</td>',this.getVisibleFields().length+vl.getDetailViewIndexOffset(this.options),this.options.formatNoMatches()),\"</tr>\")),this.$el.attr(\"role\",\"presentation\")),l.forEach((function(t){i.expandRow(t)})),e||this.scrollTo(0),this.initBodyEvent(),this.initFooter(),this.resetView(),this.updateSelected(),\"server\"!==this.options.sidePagination&&(this.options.totalRows=r.length),this.trigger(\"post-body\",r)}},{key:\"initBodyEvent\",value:function(){var e=this;this.$body.find(\"> tr[data-index] > td\").off(\"click dblclick\").on(\"click dblclick\",(function(n){var i=t(n.currentTarget);if(!(i.find(\".detail-icon\").length||i.index()-vl.getDetailViewIndexOffset(e.options)<0)){var r=i.parent(),o=t(n.target).parents(\".card-views\").children(),a=t(n.target).parents(\".card-view\"),s=r.data(\"index\"),l=e.data[s],c=e.options.cardView?o.index(a):i[0].cellIndex,u=e.getVisibleFields()[c-vl.getDetailViewIndexOffset(e.options)],h=e.columns[e.fieldsColumnsIndex[u]],f=vl.getItemField(l,u,e.options.escape,h.escape);if(e.trigger(\"click\"===n.type?\"click-cell\":\"dbl-click-cell\",u,f,l,i),e.trigger(\"click\"===n.type?\"click-row\":\"dbl-click-row\",l,r,u),\"click\"===n.type&&e.options.clickToSelect&&h.clickToSelect&&!vl.calculateObjectValue(e.options,e.options.ignoreClickToSelectOn,[n.target])){var d=r.find(vl.sprintf('[name=\"%s\"]',e.options.selectItemName));d.length&&d[0].click()}\"click\"===n.type&&e.options.detailViewByClick&&e.toggleDetailView(s,e.header.detailFormatters[e.fieldsColumnsIndex[u]])}})).off(\"mousedown\").on(\"mousedown\",(function(t){e.multipleSelectRowCtrlKey=t.ctrlKey||t.metaKey,e.multipleSelectRowShiftKey=t.shiftKey})),this.$body.find(\"> tr[data-index] > td > .detail-icon\").off(\"click\").on(\"click\",(function(n){return n.preventDefault(),e.toggleDetailView(t(n.currentTarget).parent().parent().data(\"index\")),!1})),this.$selectItem=this.$body.find(vl.sprintf('[name=\"%s\"]',this.options.selectItemName)),this.$selectItem.off(\"click\").on(\"click\",(function(n){n.stopImmediatePropagation();var i=t(n.currentTarget);e._toggleCheck(i.prop(\"checked\"),i.data(\"index\"))})),this.header.events.forEach((function(n,i){var r=n;if(r){if(\"string\"==typeof r&&(r=vl.calculateObjectValue(null,r)),!r)throw new Error(\"Unknown event in the scope: \".concat(n));var o=e.header.fields[i],a=e.getVisibleFields().indexOf(o);if(-1!==a){a+=vl.getDetailViewIndexOffset(e.options);var s=function(n){if(!r.hasOwnProperty(n))return 1;var i=r[n];e.$body.find(\">tr:not(.no-records-found)\").each((function(r,s){var l=t(s),c=l.find(e.options.cardView?\".card-views>.card-view\":\">td\").eq(a),u=n.indexOf(\" \"),h=n.substring(0,u),f=n.substring(u+1);c.find(f).off(h).on(h,(function(t){var n=l.data(\"index\"),r=e.data[n],a=r[o];i.apply(e,[t,a,r,n])}))}))};for(var l in r)s(l)}}}))}},{key:\"initServer\",value:function(e,n){var i=this,o={},a=this.header.fields.indexOf(this.options.sortName),s={searchText:this.searchText,sortName:this.options.sortName,sortOrder:this.options.sortOrder};if(this.header.sortNames[a]&&(s.sortName=this.header.sortNames[a]),this.options.pagination&&\"server\"===this.options.sidePagination&&(s.pageSize=this.options.pageSize===this.options.formatAllRows()?this.options.totalRows:this.options.pageSize,s.pageNumber=this.options.pageNumber),this.options.url||this.options.ajax){if(\"limit\"===this.options.queryParamsType&&(s={search:s.searchText,sort:s.sortName,order:s.sortOrder},this.options.pagination&&\"server\"===this.options.sidePagination&&(s.offset=this.options.pageSize===this.options.formatAllRows()?0:this.options.pageSize*(this.options.pageNumber-1),s.limit=this.options.pageSize,0!==s.limit&&this.options.pageSize!==this.options.formatAllRows()||delete s.limit)),this.options.search&&\"server\"===this.options.sidePagination&&this.options.searchable&&this.columns.filter((function(t){return t.searchable})).length){s.searchable=[];var l,c=r(this.columns);try{for(c.s();!(l=c.n()).done;){var u=l.value;!u.checkbox&&u.searchable&&(this.options.visibleSearch&&u.visible||!this.options.visibleSearch)&&s.searchable.push(u.field)}}catch(t){c.e(t)}finally{c.f()}}if(vl.isEmptyObject(this.filterColumnsPartial)||(s.filter=JSON.stringify(this.filterColumnsPartial,null)),vl.extend(s,n||{}),!1!==(o=vl.calculateObjectValue(this.options,this.options.queryParams,[s],o))){e||this.showLoading();var h=vl.extend({},vl.calculateObjectValue(null,this.options.ajaxOptions),{type:this.options.method,url:this.options.url,data:\"application/json\"===this.options.contentType&&\"post\"===this.options.method?JSON.stringify(o):o,cache:this.options.cache,contentType:this.options.contentType,dataType:this.options.dataType,success:function(t,n,r){var o=vl.calculateObjectValue(i.options,i.options.responseHandler,[t,r],t);\"client\"===i.options.sidePagination&&i.options.paginationLoadMore&&(i._paginationLoaded=i.data.length===o.length),i.load(o),i.trigger(\"load-success\",o,r&&r.status,r),e||i.hideLoading(),\"server\"===i.options.sidePagination&&i.options.pageNumber>1&&o[i.options.totalField]>0&&!o[i.options.dataField].length&&i.updatePagination()},error:function(t){if(t&&0===t.status&&i._xhrAbort)i._xhrAbort=!1;else{var n=[];\"server\"===i.options.sidePagination&&((n={})[i.options.totalField]=0,n[i.options.dataField]=[]),i.load(n),i.trigger(\"load-error\",t&&t.status,t),e||i.hideLoading()}}});return this.options.ajax?vl.calculateObjectValue(this,this.options.ajax,[h],null):(this._xhr&&4!==this._xhr.readyState&&(this._xhrAbort=!0,this._xhr.abort()),this._xhr=t.ajax(h)),o}}}},{key:\"initSearchText\",value:function(){if(this.options.search&&(this.searchText=\"\",\"\"!==this.options.searchText)){var t=vl.getSearchInput(this);t.val(this.options.searchText),this.onSearch({currentTarget:t,firedByInitSearchText:!0})}}},{key:\"getCaret\",value:function(){var e=this.options,n=e.sortName,i=e.sortOrder,r=\"asc\"===i?\"ascending\":\"descending\";this.$header.find(\"th\").each((function(e,o){var a=t(o).data(\"field\")===n;t(o).attr(\"aria-sort\",a?r:null).find(\".sortable\").removeClass(\"desc asc\").addClass(a?i:\"both\")}))}},{key:\"updateSelected\",value:function(){var e=this.$selectItem.filter(\":enabled\").length&&this.$selectItem.filter(\":enabled\").length===this.$selectItem.filter(\":enabled\").filter(\":checked\").length;this.$selectAll.add(this.$selectAll_).prop(\"checked\",e),this.$selectItem.each((function(e,n){t(n).closest(\"tr\")[t(n).prop(\"checked\")?\"addClass\":\"removeClass\"](\"selected\")}))}},{key:\"updateRows\",value:function(){var e=this;this.$selectItem.each((function(n,i){e.data[t(i).data(\"index\")][e.header.stateField]=t(i).prop(\"checked\")}))}},{key:\"resetRows\",value:function(){if(this.data.length&&(this.$selectAll.prop(\"checked\",!1),this.$selectItem.prop(\"checked\",!1)),this.header.stateField){var t,e=r(this.data);try{for(e.s();!(t=e.n()).done;){t.value[this.header.stateField]=!1}}catch(t){e.e(t)}finally{e.f()}}this.initHiddenRows()}},{key:\"trigger\",value:function(n){for(var i,r,o=\"\".concat(n,\".bs.table\"),a=arguments.length,s=new Array(a>1?a-1:0),l=1;l<a;l++)s[l-1]=arguments[l];(i=this.options)[e.EVENTS[o]].apply(i,[].concat(s,[this])),this.$el.trigger(t.Event(o,{sender:this}),s),(r=this.options).onAll.apply(r,[o].concat([].concat(s,[this]))),this.$el.trigger(t.Event(\"all.bs.table\",{sender:this}),[o,s])}},{key:\"resetHeader\",value:function(){var t=this;clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout((function(){return t.fitHeader()}),this.$el.is(\":hidden\")?100:0)}},{key:\"fitHeader\",value:function(){var e=this;if(this.$el.is(\":hidden\"))this.timeoutId_=setTimeout((function(){return e.fitHeader()}),100);else{var n=this.$tableBody.get(0),i=this.hasScrollBar&&n.scrollHeight>n.clientHeight+this.$header.outerHeight()?vl.getScrollBarWidth():0;this.$el.css(\"margin-top\",-this.$header.outerHeight());var r=this.$tableHeader.find(\":focus\");if(r.length>0){var o=r.parents(\"th\");if(o.length>0){var a=o.attr(\"data-field\");if(void 0!==a){var s=this.$header.find(\"[data-field='\".concat(a,\"']\"));s.length>0&&s.find(\":input\").addClass(\"focus-temp\")}}}this.$header_=this.$header.clone(!0,!0),this.$selectAll_=this.$header_.find('[name=\"btSelectAll\"]');var l=this.$el.find(\"caption\"),c=this.$tableHeader.css(\"margin-right\",i).find(\"table\").css(\"width\",this.$el.outerWidth()).html(\"\").attr(\"class\",this.$el.attr(\"class\"));l.length>0&&c.append(l.clone(!0,!0)),c.append(this.$header_),this.$tableLoading.css(\"width\",this.$el.outerWidth());var u=t(\".focus-temp:visible:eq(0)\");u.length>0&&(u.focus(),this.$header.find(\".focus-temp\").removeClass(\"focus-temp\")),this.$header.find(\"th[data-field]\").each((function(n,i){e.$header_.find(vl.sprintf('th[data-field=\"%s\"]',t(i).data(\"field\"))).data(t(i).data())}));for(var h=this.getVisibleFields(),f=this.$header_.find(\"th\"),d=this.$body.find(\">tr:not(.no-records-found,.virtual-scroll-top)\").eq(0);d.length&&d.find('>td[colspan]:not([colspan=\"1\"])').length;)d=d.next();var p=d.find(\"> *\").length;d.find(\"> *\").each((function(n,i){var r=t(i);if(vl.hasDetailViewIcon(e.options)&&(0===n&&\"right\"!==e.options.detailViewAlign||n===p-1&&\"right\"===e.options.detailViewAlign)){var o=f.filter(\".detail\"),a=o.innerWidth()-o.find(\".fht-cell\").width();o.find(\".fht-cell\").width(r.innerWidth()-a)}else{var s=n-vl.getDetailViewIndexOffset(e.options),l=e.$header_.find(vl.sprintf('th[data-field=\"%s\"]',h[s]));l.length>1&&(l=t(f[r[0].cellIndex]));var c=l.innerWidth()-l.find(\".fht-cell\").width();l.find(\".fht-cell\").width(r.innerWidth()-c)}})),this.horizontalScroll(),this.trigger(\"post-header\")}}},{key:\"initFooter\",value:function(){if(this.options.showFooter&&!this.options.cardView){var t=this.getData(),e=[],n=\"\";vl.hasDetailViewIcon(this.options)&&(n=vl.h(\"th\",{class:\"detail\"},[vl.h(\"div\",{class:\"th-inner\"}),vl.h(\"div\",{class:\"fht-cell\"})])),n&&\"right\"!==this.options.detailViewAlign&&e.push(n);var i,o=r(this.columns);try{for(o.s();!(i=o.n()).done;){var a=i.value,l=this.footerData&&this.footerData.length>0;if(a.visible&&(!l||a.field in this.footerData[0])){if(this.options.cardView&&!a.cardVisible)return;var u=vl.calculateObjectValue(null,a.footerStyle||this.options.footerStyle,[a]),h=u&&u.css||{},f=l&&this.footerData[0][\"_\".concat(a.field,\"_colspan\")]||0,d=l&&this.footerData[0][a.field]||\"\";d=vl.calculateObjectValue(a,a.footerFormatter,[t,d],d),e.push(vl.h(\"th\",{class:[a.class,u&&u.classes],style:s({\"text-align\":a.falign?a.falign:a.align,\"vertical-align\":a.valign},h),colspan:f||void 0},[vl.h(\"div\",{class:\"th-inner\"},c(vl.htmlToNodes(d))),vl.h(\"div\",{class:\"fht-cell\"})]))}}}catch(t){o.e(t)}finally{o.f()}n&&\"right\"===this.options.detailViewAlign&&e.push(n),this.options.height||this.$tableFooter.length||(this.$el.append(\"<tfoot><tr></tr></tfoot>\"),this.$tableFooter=this.$el.find(\"tfoot\")),this.$tableFooter.find(\"tr\").length||this.$tableFooter.html(\"<table><thead><tr></tr></thead></table>\"),this.$tableFooter.find(\"tr\").html(e),this.trigger(\"post-footer\",this.$tableFooter)}}},{key:\"fitFooter\",value:function(){var e=this;if(this.$el.is(\":hidden\"))setTimeout((function(){return e.fitFooter()}),100);else{var n=this.$tableBody.get(0),i=this.hasScrollBar&&n.scrollHeight>n.clientHeight+this.$header.outerHeight()?vl.getScrollBarWidth():0;this.$tableFooter.css(\"margin-right\",i).find(\"table\").css(\"width\",this.$el.outerWidth()).attr(\"class\",this.$el.attr(\"class\"));var r=this.$tableFooter.find(\"th\"),o=this.$body.find(\">tr:first-child:not(.no-records-found)\");for(r.find(\".fht-cell\").width(\"auto\");o.length&&o.find('>td[colspan]:not([colspan=\"1\"])').length;)o=o.next();var a=o.find(\"> *\").length;o.find(\"> *\").each((function(n,i){var o=t(i);if(vl.hasDetailViewIcon(e.options)&&(0===n&&\"left\"===e.options.detailViewAlign||n===a-1&&\"right\"===e.options.detailViewAlign)){var s=r.filter(\".detail\"),l=s.innerWidth()-s.find(\".fht-cell\").width();s.find(\".fht-cell\").width(o.innerWidth()-l)}else{var c=r.eq(n),u=c.innerWidth()-c.find(\".fht-cell\").width();c.find(\".fht-cell\").width(o.innerWidth()-u)}})),this.horizontalScroll()}}},{key:\"horizontalScroll\",value:function(){var t=this;this.$tableBody.off(\"scroll\").on(\"scroll\",(function(){var e=t.$tableBody.scrollLeft();t.options.showHeader&&t.options.height&&t.$tableHeader.scrollLeft(e),t.options.showFooter&&!t.options.cardView&&t.$tableFooter.scrollLeft(e),t.trigger(\"scroll-body\",t.$tableBody)}))}},{key:\"getVisibleFields\",value:function(){var t,e=[],n=r(this.header.fields);try{for(n.s();!(t=n.n()).done;){var i=t.value,o=this.columns[this.fieldsColumnsIndex[i]];o&&o.visible&&(!this.options.cardView||o.cardVisible)&&e.push(i)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"initHiddenRows\",value:function(){this.hiddenRows=[]}},{key:\"getOptions\",value:function(){var t=vl.extend({},this.options);return delete t.data,vl.extend(!0,{},t)}},{key:\"refreshOptions\",value:function(t){vl.compareObjects(this.options,t,!0)||(this.optionsColumnsChanged=!!t.columns,this.options=vl.extend(this.options,t),this.trigger(\"refresh-options\",this.options),this.destroy(),this.init())}},{key:\"getData\",value:function(t){var e=this,n=this.options.data;if(!(this.searchText||this.options.customSearch||void 0!==this.options.sortName||this.enableCustomSort)&&vl.isEmptyObject(this.filterColumns)&&\"function\"!=typeof this.options.filterOptions.filterAlgorithm&&vl.isEmptyObject(this.filterColumnsPartial)||t&&t.unfiltered||(n=this.data),t&&!t.includeHiddenRows){var i=this.getHiddenRows();n=n.filter((function(t){return-1===vl.findIndex(i,t)}))}return t&&t.useCurrentPage&&(n=n.slice(this.pageFrom-1,this.pageTo)),t&&t.formatted?n.map((function(t){for(var n={},i=0,r=Object.entries(t);i<r.length;i++){var o=l(r[i],2),a=o[0],s=o[1],c=e.columns[e.fieldsColumnsIndex[a]];c&&(n[a]=vl.calculateObjectValue(c,e.header.formatters[c.fieldIndex],[s,t,t.index,c.field],s))}return n})):n}},{key:\"getFooterData\",value:function(){var t;return null!==(t=this.footerData)&&void 0!==t?t:[]}},{key:\"getSelections\",value:function(){var t=this;return(this.options.maintainMetaData?this.options.data:this.data).filter((function(e){return!0===e[t.header.stateField]}))}},{key:\"load\",value:function(t){var e,n=t;this.options.pagination&&\"server\"===this.options.sidePagination&&(this.options.totalRows=n[this.options.totalField],this.options.totalNotFiltered=n[this.options.totalNotFilteredField],this.footerData=n[this.options.footerField]?[n[this.options.footerField]]:void 0),e=this.options.fixedScroll||n.fixedScroll,n=Array.isArray(n)?n:n[this.options.dataField],this.initData(n),this.initSearch(),this.initPagination(),this.initBody(e)}},{key:\"append\",value:function(t){this.initData(t,\"append\"),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)}},{key:\"prepend\",value:function(t){this.initData(t,\"prepend\"),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)}},{key:\"remove\",value:function(t){for(var e=0,n=this.options.data.length-1;n>=0;n--){var i=this.options.data[n],r=vl.getItemField(i,t.field,this.options.escape,i.escape);void 0===r&&\"$index\"!==t.field||(!i.hasOwnProperty(t.field)&&\"$index\"===t.field&&t.values.includes(n)||t.values.includes(r))&&(e++,this.options.data.splice(n,1))}e&&(\"server\"===this.options.sidePagination&&(this.options.totalRows-=e,this.data=c(this.options.data)),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0))}},{key:\"removeAll\",value:function(){this.options.data.length>0&&(this.data.splice(0,this.data.length),this.options.data.splice(0,this.options.data.length),this.initSearch(),this.initPagination(),this.initBody(!0))}},{key:\"insertRow\",value:function(t){if(t.hasOwnProperty(\"index\")&&t.hasOwnProperty(\"row\")){var e=this.data[t.index],n=this.options.data.indexOf(e);-1!==n?(this.data.splice(t.index,0,t.row),this.options.data.splice(n,0,t.row),this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)):this.append([t.row])}}},{key:\"updateRow\",value:function(t){var e,n=r(Array.isArray(t)?t:[t]);try{for(n.s();!(e=n.n()).done;){var i=e.value;if(i.hasOwnProperty(\"index\")&&i.hasOwnProperty(\"row\")){var o=this.data[i.index],a=this.options.data.indexOf(o);i.hasOwnProperty(\"replace\")&&i.replace?(this.data[i.index]=i.row,this.options.data[a]=i.row):(vl.extend(this.data[i.index],i.row),vl.extend(this.options.data[a],i.row))}}}catch(t){n.e(t)}finally{n.f()}this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0)}},{key:\"getRowByUniqueId\",value:function(t){var e,n,i=this.options.uniqueId,r=t,o=null;for(e=this.options.data.length-1;e>=0;e--){n=this.options.data[e];var a=vl.getItemField(n,i,this.options.escape,n.escape);if(void 0!==a&&(\"string\"==typeof a?r=t.toString():\"number\"==typeof a&&(Number(a)===a&&a%1==0?r=parseInt(t,10):a===Number(a)&&0!==a&&(r=parseFloat(t))),a===r)){o=n;break}}return o}},{key:\"updateByUniqueId\",value:function(t){var e,n=null,i=r(Array.isArray(t)?t:[t]);try{for(i.s();!(e=i.n()).done;){var o=e.value;if(o.hasOwnProperty(\"id\")&&o.hasOwnProperty(\"row\")){var a=this.options.data.indexOf(this.getRowByUniqueId(o.id));-1!==a&&(o.hasOwnProperty(\"replace\")&&o.replace?this.options.data[a]=o.row:vl.extend(this.options.data[a],o.row),n=o.id)}}}catch(t){i.e(t)}finally{i.f()}this.initSearch(),this.initPagination(),this.initSort(),this.initBody(!0,n)}},{key:\"removeByUniqueId\",value:function(t){var e=this.options.data.length,n=this.getRowByUniqueId(t);n&&this.options.data.splice(this.options.data.indexOf(n),1),e!==this.options.data.length&&(\"server\"===this.options.sidePagination&&(this.options.totalRows-=1,this.data=c(this.options.data)),this.initSearch(),this.initPagination(),this.initBody(!0))}},{key:\"_updateCellOnly\",value:function(e,n){if(-1!==n){var i=this.initRow(this.data[n],n),r=this.getVisibleFields().indexOf(e);-1!==r&&(r+=vl.getDetailViewIndexOffset(this.options),this.$body.find(\">tr[data-index=\".concat(n,\"]\")).find(\">td:eq(\".concat(r,\")\")).replaceWith(t(i).find(\">td:eq(\".concat(r,\")\"))),this.initBodyEvent(),this.initFooter(),this.resetView(),this.updateSelected())}}},{key:\"updateCell\",value:function(t){if(t.hasOwnProperty(\"index\")&&t.hasOwnProperty(\"field\")&&t.hasOwnProperty(\"value\")){var e=this.data[t.index],n=this.options.data.indexOf(e);this.data[t.index][t.field]=t.value,this.options.data[n][t.field]=t.value,!1!==t.reinit?(this.initSort(),this.initBody(!0)):this._updateCellOnly(t.field,t.index)}}},{key:\"updateCellByUniqueId\",value:function(t){var e=this;(Array.isArray(t)?t:[t]).forEach((function(t){var n=t.id,i=t.field,r=t.value,o=e.getRowByUniqueId(n),a=e.data.indexOf(o),s=e.options.data.indexOf(o);o&&-1!==a&&(e.data[a][i]=r,e.options.data[s][i]=r)})),!1!==t.reinit?(this.initSort(),this.initBody(!0)):this._updateCellOnly(t.field,this.data.indexOf(this.getRowByUniqueId(t.id)))}},{key:\"showRow\",value:function(t){this._toggleRow(t,!0)}},{key:\"hideRow\",value:function(t){this._toggleRow(t,!1)}},{key:\"_toggleRow\",value:function(t,e){var n;if(t.hasOwnProperty(\"index\")?n=this.getData()[t.index]:t.hasOwnProperty(\"uniqueId\")&&(n=this.getRowByUniqueId(t.uniqueId)),n){var i=vl.findIndex(this.hiddenRows,n);e||-1!==i?e&&i>-1&&this.hiddenRows.splice(i,1):this.hiddenRows.push(n),this.initBody(!0),this.initPagination()}}},{key:\"getHiddenRows\",value:function(t){if(t)return this.initHiddenRows(),this.initBody(!0),void this.initPagination();var e,n=[],i=r(this.getData());try{for(i.s();!(e=i.n()).done;){var o=e.value;this.hiddenRows.includes(o)&&n.push(o)}}catch(t){i.e(t)}finally{i.f()}return this.hiddenRows=n,n}},{key:\"showColumn\",value:function(t){var e=this;(Array.isArray(t)?t:[t]).forEach((function(t){e._toggleColumn(e.fieldsColumnsIndex[t],!0,!0)}))}},{key:\"hideColumn\",value:function(t){var e=this;(Array.isArray(t)?t:[t]).forEach((function(t){e._toggleColumn(e.fieldsColumnsIndex[t],!1,!0)}))}},{key:\"_toggleColumn\",value:function(t,e,n){if(void 0!==t&&this.columns[t].visible!==e&&(this.columns[t].visible=e,this.initHeader(),this.initSearch(),this.initPagination(),this.initBody(),this.options.showColumns)){var i=this.$toolbar.find('.keep-open input:not(\".toggle-all\")').prop(\"disabled\",!1);n&&i.filter(vl.sprintf('[value=\"%s\"]',t)).prop(\"checked\",e),i.filter(\":checked\").length<=this.options.minimumCountColumns&&i.filter(\":checked\").prop(\"disabled\",!0)}}},{key:\"getVisibleColumns\",value:function(){var t=this;return this.columns.filter((function(e){return e.visible&&!t.isSelectionColumn(e)}))}},{key:\"getHiddenColumns\",value:function(){return this.columns.filter((function(t){return!t.visible}))}},{key:\"isSelectionColumn\",value:function(t){return t.radio||t.checkbox}},{key:\"showAllColumns\",value:function(){this._toggleAllColumns(!0)}},{key:\"hideAllColumns\",value:function(){this._toggleAllColumns(!1)}},{key:\"_toggleAllColumns\",value:function(e){var n,i=this,o=r(this.columns.slice().reverse());try{for(o.s();!(n=o.n()).done;){var a=n.value;if(a.switchable){if(!e&&this.options.showColumns&&this.getVisibleColumns().filter((function(t){return t.switchable})).length===this.options.minimumCountColumns)continue;a.visible=e}}}catch(t){o.e(t)}finally{o.f()}if(this.initHeader(),this.initSearch(),this.initPagination(),this.initBody(),this.options.showColumns){var s=this.$toolbar.find('.keep-open input[type=\"checkbox\"]:not(\".toggle-all\")').prop(\"disabled\",!1);e?s.prop(\"checked\",e):s.get().reverse().forEach((function(n){s.filter(\":checked\").length>i.options.minimumCountColumns&&t(n).prop(\"checked\",e)})),s.filter(\":checked\").length<=this.options.minimumCountColumns&&s.filter(\":checked\").prop(\"disabled\",!0)}}},{key:\"mergeCells\",value:function(t){var e,n,i=t.index,r=this.getVisibleFields().indexOf(t.field),o=+t.rowspan||1,a=+t.colspan||1,s=this.$body.find(\">tr[data-index]\");r+=vl.getDetailViewIndexOffset(this.options);var l=s.eq(i).find(\">td\").eq(r);if(!(i<0||r<0||i>=this.data.length)){for(e=i;e<i+o;e++)for(n=r;n<r+a;n++)s.eq(e).find(\">td\").eq(n).hide();l.attr(\"rowspan\",o).attr(\"colspan\",a).show()}}},{key:\"checkAll\",value:function(){this._toggleCheckAll(!0)}},{key:\"uncheckAll\",value:function(){this._toggleCheckAll(!1)}},{key:\"_toggleCheckAll\",value:function(t){var e=this.getSelections();this.$selectAll.add(this.$selectAll_).prop(\"checked\",t),this.$selectItem.filter(\":enabled\").prop(\"checked\",t),this.updateRows(),this.updateSelected();var n=this.getSelections();t?this.trigger(\"check-all\",n,e):this.trigger(\"uncheck-all\",n,e)}},{key:\"checkInvert\",value:function(){var e=this.$selectItem.filter(\":enabled\"),n=e.filter(\":checked\");e.each((function(e,n){t(n).prop(\"checked\",!t(n).prop(\"checked\"))})),this.updateRows(),this.updateSelected(),this.trigger(\"uncheck-some\",n),n=this.getSelections(),this.trigger(\"check-some\",n)}},{key:\"check\",value:function(t){this._toggleCheck(!0,t)}},{key:\"uncheck\",value:function(t){this._toggleCheck(!1,t)}},{key:\"_toggleCheck\",value:function(t,e){var n=this.$selectItem.filter('[data-index=\"'.concat(e,'\"]')),i=this.data[e];if(n.is(\":radio\")||this.options.singleSelect||this.options.multipleSelectRow&&!this.multipleSelectRowCtrlKey&&!this.multipleSelectRowShiftKey){var o,a=r(this.options.data);try{for(a.s();!(o=a.n()).done;){o.value[this.header.stateField]=!1}}catch(t){a.e(t)}finally{a.f()}this.$selectItem.filter(\":checked\").not(n).prop(\"checked\",!1)}if(i[this.header.stateField]=t,this.options.multipleSelectRow){if(this.multipleSelectRowShiftKey&&this.multipleSelectRowLastSelectedIndex>=0)for(var s=l(this.multipleSelectRowLastSelectedIndex<e?[this.multipleSelectRowLastSelectedIndex,e]:[e,this.multipleSelectRowLastSelectedIndex],2),c=s[0],u=s[1],h=c+1;h<u;h++)this.data[h][this.header.stateField]=!0,this.$selectItem.filter('[data-index=\"'.concat(h,'\"]')).prop(\"checked\",!0);this.multipleSelectRowCtrlKey=!1,this.multipleSelectRowShiftKey=!1,this.multipleSelectRowLastSelectedIndex=t?e:-1}n.prop(\"checked\",t),this.updateSelected(),this.trigger(t?\"check\":\"uncheck\",this.data[e],n)}},{key:\"checkBy\",value:function(t){this._toggleCheckBy(!0,t)}},{key:\"uncheckBy\",value:function(t){this._toggleCheckBy(!1,t)}},{key:\"_toggleCheckBy\",value:function(t,e){var n=this;if(e.hasOwnProperty(\"field\")&&e.hasOwnProperty(\"values\")){var i=[];this.data.forEach((function(r,o){if(!r.hasOwnProperty(e.field))return!1;if(e.values.includes(r[e.field])){var a=n.$selectItem.filter(\":enabled\").filter(vl.sprintf('[data-index=\"%s\"]',o)),s=!!e.hasOwnProperty(\"onlyCurrentPage\")&&e.onlyCurrentPage;if(!(a=t?a.not(\":checked\"):a.filter(\":checked\")).length&&s)return;a.prop(\"checked\",t),r[n.header.stateField]=t,i.push(r),n.trigger(t?\"check\":\"uncheck\",r,a)}})),this.updateSelected(),this.trigger(t?\"check-some\":\"uncheck-some\",i)}}},{key:\"refresh\",value:function(t){t&&t.url&&(this.options.url=t.url),t&&t.pageNumber&&(this.options.pageNumber=t.pageNumber),t&&t.pageSize&&(this.options.pageSize=t.pageSize),t&&t.query&&(this.options.url=vl.addQueryToUrl(this.options.url,t.query)),this.trigger(\"refresh\",this.initServer(t&&t.silent))}},{key:\"destroy\",value:function(){clearTimeout(this.timeoutId_),this.$el.insertBefore(this.$container),t(this.options.toolbar).insertBefore(this.$el),this.$container.next().remove(),this.$container.remove(),this.$el.html(this.$el_.html()).css(\"margin-top\",\"0\").attr(\"class\",this.$el_.attr(\"class\")||\"\");var e=vl.getEventName(\"resize.bootstrap-table\",this.$el.attr(\"id\"));t(window).off(e)}},{key:\"resetView\",value:function(t){var e=0;if(t&&t.height&&(this.options.height=t.height),this.$tableContainer.toggleClass(\"has-card-view\",this.options.cardView),this.options.height){var n=this.$tableBody.get(0);this.hasScrollBar=n.scrollWidth>n.clientWidth}if(!this.options.cardView&&this.options.showHeader&&this.options.height?(this.$tableHeader.show(),this.resetHeader(),e+=this.$header.outerHeight(!0)+1):(this.$tableHeader.hide(),this.trigger(\"post-header\")),!this.options.cardView&&this.options.showFooter&&(this.$tableFooter.show(),this.fitFooter(),this.options.height&&(e+=this.$tableFooter.outerHeight(!0))),this.$container.hasClass(\"fullscreen\"))this.$tableContainer.css(\"height\",\"\"),this.$tableContainer.css(\"width\",\"\");else if(this.options.height){this.$tableBorder&&(this.$tableBorder.css(\"width\",\"\"),this.$tableBorder.css(\"height\",\"\"));var i=this.$toolbar.outerHeight(!0),r=this.$pagination.outerHeight(!0),o=this.options.height-i-r,a=this.$tableBody.find(\">table\"),s=a.outerHeight();if(this.$tableContainer.css(\"height\",\"\".concat(o,\"px\")),this.$tableBorder&&a.is(\":visible\")){var l=o-s-2;this.hasScrollBar&&(l-=vl.getScrollBarWidth()),this.$tableBorder.css(\"width\",\"\".concat(a.outerWidth(),\"px\")),this.$tableBorder.css(\"height\",\"\".concat(l,\"px\"))}}this.options.cardView?(this.$el.css(\"margin-top\",\"0\"),this.$tableContainer.css(\"padding-bottom\",\"0\"),this.$tableFooter.hide()):(this.getCaret(),this.$tableContainer.css(\"padding-bottom\",\"\".concat(e,\"px\"))),this.trigger(\"reset-view\")}},{key:\"showLoading\",value:function(){this.$tableLoading.toggleClass(\"open\",!0);var t=this.options.loadingFontSize;\"auto\"===this.options.loadingFontSize&&(t=.04*this.$tableLoading.width(),t=Math.max(12,t),t=Math.min(32,t),t=\"\".concat(t,\"px\")),this.$tableLoading.find(\".loading-text\").css(\"font-size\",t)}},{key:\"hideLoading\",value:function(){this.$tableLoading.toggleClass(\"open\",!1)}},{key:\"togglePagination\",value:function(){this.options.pagination=!this.options.pagination;var t=this.options.showButtonIcons?this.options.pagination?this.options.icons.paginationSwitchDown:this.options.icons.paginationSwitchUp:\"\",e=this.options.showButtonText?this.options.pagination?this.options.formatPaginationSwitchUp():this.options.formatPaginationSwitchDown():\"\";this.$toolbar.find('button[name=\"paginationSwitch\"]').html(\"\".concat(vl.sprintf(this.constants.html.icon,this.options.iconsPrefix,t),\" \").concat(e)),this.updatePagination(),this.trigger(\"toggle-pagination\",this.options.pagination)}},{key:\"toggleFullscreen\",value:function(){this.$el.closest(\".bootstrap-table\").toggleClass(\"fullscreen\"),this.resetView()}},{key:\"toggleView\",value:function(){this.options.cardView=!this.options.cardView,this.initHeader();var t=this.options.showButtonIcons?this.options.cardView?this.options.icons.toggleOn:this.options.icons.toggleOff:\"\",e=this.options.cardView?this.options.formatToggleOff():this.options.formatToggleOn();this.$toolbar.find('button[name=\"toggle\"]').html(\"\".concat(vl.sprintf(this.constants.html.icon,this.options.iconsPrefix,t),\" \").concat(this.options.showButtonText?e:\"\")).attr(\"aria-label\",e).attr(this.options.buttonsAttributeTitle,e),this.initBody(),this.trigger(\"toggle\",this.options.cardView)}},{key:\"resetSearch\",value:function(t){var e=vl.getSearchInput(this),n=t||\"\";e.val(n),this.searchText=n,this.onSearch({currentTarget:e},!1)}},{key:\"filterBy\",value:function(t,e){this.filterOptions=vl.isEmptyObject(e)?this.options.filterOptions:vl.extend({},this.options.filterOptions,e),this.filterColumns=vl.isEmptyObject(t)?{}:t,this.options.pageNumber=1,this.initSearch(),this.updatePagination()}},{key:\"scrollTo\",value:function(e){var n={unit:\"px\",value:0};\"object\"===h(e)?n=Object.assign(n,e):\"string\"==typeof e&&\"bottom\"===e?n.value=this.$tableBody[0].scrollHeight:\"string\"!=typeof e&&\"number\"!=typeof e||(n.value=e);var i=n.value;\"rows\"===n.unit&&(i=0,this.$body.find(\"> tr:lt(\".concat(n.value,\")\")).each((function(e,n){i+=t(n).outerHeight(!0)}))),this.$tableBody.scrollTop(i)}},{key:\"getScrollPosition\",value:function(){return this.$tableBody.scrollTop()}},{key:\"selectPage\",value:function(t){t>0&&t<=this.options.totalPages&&(this.options.pageNumber=t,this.updatePagination())}},{key:\"prevPage\",value:function(){this.options.pageNumber>1&&(this.options.pageNumber--,this.updatePagination())}},{key:\"nextPage\",value:function(){this.options.pageNumber<this.options.totalPages&&(this.options.pageNumber++,this.updatePagination())}},{key:\"toggleDetailView\",value:function(t,e){this.$body.find(vl.sprintf('> tr[data-index=\"%s\"]',t)).next().is(\"tr.detail-view\")?this.collapseRow(t):this.expandRow(t,e),this.resetView()}},{key:\"expandRow\",value:function(t,e){var n=this.data[t],i=this.$body.find(vl.sprintf('> tr[data-index=\"%s\"][data-has-detail-view]',t));if(this.options.detailViewIcon&&i.find(\"a.detail-icon\").html(vl.sprintf(this.constants.html.icon,this.options.iconsPrefix,this.options.icons.detailClose)),!i.next().is(\"tr.detail-view\")){i.after(vl.sprintf('<tr class=\"detail-view\"><td colspan=\"%s\"></td></tr>',i.children(\"td\").length));var r=i.next().find(\"td\"),o=e||this.options.detailFormatter,a=vl.calculateObjectValue(this.options,o,[t,n,r],\"\");1===r.length&&r.append(a),this.trigger(\"expand-row\",t,n,r)}}},{key:\"expandRowByUniqueId\",value:function(t){var e=this.getRowByUniqueId(t);e&&this.expandRow(this.data.indexOf(e))}},{key:\"collapseRow\",value:function(t){var e=this.data[t],n=this.$body.find(vl.sprintf('> tr[data-index=\"%s\"][data-has-detail-view]',t));n.next().is(\"tr.detail-view\")&&(this.options.detailViewIcon&&n.find(\"a.detail-icon\").html(vl.sprintf(this.constants.html.icon,this.options.iconsPrefix,this.options.icons.detailOpen)),this.trigger(\"collapse-row\",t,e,n.next()),n.next().remove())}},{key:\"collapseRowByUniqueId\",value:function(t){var e=this.getRowByUniqueId(t);e&&this.collapseRow(this.data.indexOf(e))}},{key:\"expandAllRows\",value:function(){for(var e=this.$body.find(\"> tr[data-index][data-has-detail-view]\"),n=0;n<e.length;n++)this.expandRow(t(e[n]).data(\"index\"))}},{key:\"collapseAllRows\",value:function(){for(var e=this.$body.find(\"> tr[data-index][data-has-detail-view]\"),n=0;n<e.length;n++)this.collapseRow(t(e[n]).data(\"index\"))}},{key:\"updateColumnTitle\",value:function(e){e.hasOwnProperty(\"field\")&&e.hasOwnProperty(\"title\")&&(this.columns[this.fieldsColumnsIndex[e.field]].title=this.options.escape&&this.options.escapeTitle?vl.escapeHTML(e.title):e.title,this.columns[this.fieldsColumnsIndex[e.field]].visible&&(this.$header.find(\"th[data-field]\").each((function(n,i){if(t(i).data(\"field\")===e.field)return t(t(i).find(\".th-inner\")[0]).html(e.title),!1})),this.resetView()))}},{key:\"updateFormatText\",value:function(t,e){/^format/.test(t)&&this.options[t]&&(\"string\"==typeof e?this.options[t]=function(){return e}:\"function\"==typeof e&&(this.options[t]=e),this.initToolbar(),this.initPagination(),this.initBody())}}])}();return kl.VERSION=xl.VERSION,kl.DEFAULTS=xl.DEFAULTS,kl.LOCALES=xl.LOCALES,kl.COLUMN_DEFAULTS=xl.COLUMN_DEFAULTS,kl.METHODS=xl.METHODS,kl.EVENTS=xl.EVENTS,t.BootstrapTable=kl,t.fn.bootstrapTable=function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o;return this.each((function(n,r){var a=t(r).data(\"bootstrap.table\");if(\"string\"==typeof e){var s;if(!xl.METHODS.includes(e))throw new Error(\"Unknown method: \".concat(e));if(!a)return;return o=(s=a)[e].apply(s,i),void(\"destroy\"===e&&t(r).removeData(\"bootstrap.table\"))}if(a)console.warn(\"You cannot initialize the table more than once!\");else{var l=vl.extend(!0,{},kl.DEFAULTS,t(r).data(),\"object\"===h(e)&&e);a=new t.BootstrapTable(r,l),t(r).data(\"bootstrap.table\",a),a.init()}})),void 0===o?this:o},t.fn.bootstrapTable.Constructor=kl,t.fn.bootstrapTable.theme=xl.THEME,t.fn.bootstrapTable.VERSION=xl.VERSION,t.fn.bootstrapTable.icons=xl.ICONS,t.fn.bootstrapTable.defaults=kl.DEFAULTS,t.fn.bootstrapTable.columnDefaults=kl.COLUMN_DEFAULTS,t.fn.bootstrapTable.events=kl.EVENTS,t.fn.bootstrapTable.locales=kl.LOCALES,t.fn.bootstrapTable.methods=kl.METHODS,t.fn.bootstrapTable.utils=vl,t((function(){t('[data-toggle=\"table\"]').bootstrapTable()})),kl}));\n", "/**\n  * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation)\n  *\n  * @version v1.25.0\n  * @homepage https://bootstrap-table.com\n  * @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)\n  * @license MIT\n  */\n\n!function(t,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],r):r((t=\"undefined\"!=typeof globalThis?globalThis:t||self).jQuery)}(this,(function(t){\"use strict\";function r(t,r,n){return r=i(r),function(t,r){if(r&&(\"object\"==typeof r||\"function\"==typeof r))return r;if(void 0!==r)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(t,o()?Reflect.construct(r,n||[],i(t).constructor):r.apply(t,n))}function n(t,r,n){return r&&function(t,r){for(var n=0;n<r.length;n++){var e=r[n];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(t,f(e.key),e)}}(t.prototype,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t}function e(){return e=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,r,n){var e=function(t,r){for(;!{}.hasOwnProperty.call(t,r)&&null!==(t=i(t)););return t}(t,r);if(e){var o=Object.getOwnPropertyDescriptor(e,r);return o.get?o.get.call(arguments.length<3?t:n):o.value}},e.apply(null,arguments)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}function o(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(o=function(){return!!t})()}function u(t,r){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},u(t,r)}function c(t,r,n,o){var u=e(i(t.prototype),r,n);return\"function\"==typeof u?function(t){return u.apply(n,t)}:u}function f(t){var r=function(t,r){if(\"object\"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var e=n.call(t,r);if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t,\"string\");return\"symbol\"==typeof r?r:r+\"\"}var a,s,l=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{},y={};function v(){if(s)return a;s=1;var t=function(t){return t&&t.Math===Math&&t};return a=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof l&&l)||t(\"object\"==typeof a&&a)||function(){return this}()||Function(\"return this\")()}var p,h,d,b,g,m,w,O,k={};function j(){return h?p:(h=1,p=function(t){try{return!!t()}catch(t){return!0}})}function S(){if(b)return d;b=1;var t=j();return d=!t((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))}function $(){if(m)return g;m=1;var t=j();return g=!t((function(){var t=function(){}.bind();return\"function\"!=typeof t||t.hasOwnProperty(\"prototype\")}))}function P(){if(O)return w;O=1;var t=$(),r=Function.prototype.call;return w=t?r.bind(r):function(){return r.apply(r,arguments)},w}var C,E,T,H,_,x,A,B,R,F,I,L,z,M,N,q,D,X,G,W,Y,U,V,K,Q,J,Z,tt,rt,nt,et,it,ot,ut,ct,ft,at,st,lt,yt,vt,pt={};function ht(){if(C)return pt;C=1;var t={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,n=r&&!t.call({1:2},1);return pt.f=n?function(t){var n=r(this,t);return!!n&&n.enumerable}:t,pt}function dt(){return T?E:(T=1,E=function(t,r){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:r}})}function bt(){if(_)return H;_=1;var t=$(),r=Function.prototype,n=r.call,e=t&&r.bind.bind(n,n);return H=t?e:function(t){return function(){return n.apply(t,arguments)}},H}function gt(){if(A)return x;A=1;var t=bt(),r=t({}.toString),n=t(\"\".slice);return x=function(t){return n(r(t),8,-1)}}function mt(){if(R)return B;R=1;var t=bt(),r=j(),n=gt(),e=Object,i=t(\"\".split);return B=r((function(){return!e(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"===n(t)?i(t,\"\"):e(t)}:e}function wt(){return I?F:(I=1,F=function(t){return null==t})}function Ot(){if(z)return L;z=1;var t=wt(),r=TypeError;return L=function(n){if(t(n))throw new r(\"Can't call method on \"+n);return n}}function kt(){if(N)return M;N=1;var t=mt(),r=Ot();return M=function(n){return t(r(n))}}function jt(){if(D)return q;D=1;var t=\"object\"==typeof document&&document.all;return q=void 0===t&&void 0!==t?function(r){return\"function\"==typeof r||r===t}:function(t){return\"function\"==typeof t}}function St(){if(G)return X;G=1;var t=jt();return X=function(r){return\"object\"==typeof r?null!==r:t(r)}}function $t(){if(Y)return W;Y=1;var t=v(),r=jt();return W=function(n,e){return arguments.length<2?(i=t[n],r(i)?i:void 0):t[n]&&t[n][e];var i},W}function Pt(){if(Z)return J;Z=1;var t,r,n=v(),e=function(){if(Q)return K;Q=1;var t=v().navigator,r=t&&t.userAgent;return K=r?String(r):\"\"}(),i=n.process,o=n.Deno,u=i&&i.versions||o&&o.version,c=u&&u.v8;return c&&(r=(t=c.split(\".\"))[0]>0&&t[0]<4?1:+(t[0]+t[1])),!r&&e&&(!(t=e.match(/Edge\\/(\\d+)/))||t[1]>=74)&&(t=e.match(/Chrome\\/(\\d+)/))&&(r=+t[1]),J=r}function Ct(){if(rt)return tt;rt=1;var t=Pt(),r=j(),n=v().String;return tt=!!Object.getOwnPropertySymbols&&!r((function(){var r=Symbol(\"symbol detection\");return!n(r)||!(Object(r)instanceof Symbol)||!Symbol.sham&&t&&t<41}))}function Et(){if(et)return nt;et=1;var t=Ct();return nt=t&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator}function Tt(){if(ot)return it;ot=1;var t=$t(),r=jt(),n=function(){if(V)return U;V=1;var t=bt();return U=t({}.isPrototypeOf)}(),e=Et(),i=Object;return it=e?function(t){return\"symbol\"==typeof t}:function(e){var o=t(\"Symbol\");return r(o)&&n(o.prototype,i(e))}}function Ht(){if(ct)return ut;ct=1;var t=String;return ut=function(r){try{return t(r)}catch(t){return\"Object\"}}}function _t(){if(at)return ft;at=1;var t=jt(),r=Ht(),n=TypeError;return ft=function(e){if(t(e))return e;throw new n(r(e)+\" is not a function\")}}function xt(){if(lt)return st;lt=1;var t=_t(),r=wt();return st=function(n,e){var i=n[e];return r(i)?void 0:t(i)}}function At(){if(vt)return yt;vt=1;var t=P(),r=jt(),n=St(),e=TypeError;return yt=function(i,o){var u,c;if(\"string\"===o&&r(u=i.toString)&&!n(c=t(u,i)))return c;if(r(u=i.valueOf)&&!n(c=t(u,i)))return c;if(\"string\"!==o&&r(u=i.toString)&&!n(c=t(u,i)))return c;throw new e(\"Can't convert object to primitive value\")}}var Bt,Rt,Ft,It,Lt,zt,Mt,Nt,qt,Dt,Xt,Gt,Wt,Yt,Ut,Vt,Kt,Qt,Jt,Zt,tr,rr,nr,er,ir={exports:{}};function or(){if(It)return Ft;It=1;var t=v(),r=Object.defineProperty;return Ft=function(n,e){try{r(t,n,{value:e,configurable:!0,writable:!0})}catch(r){t[n]=e}return e}}function ur(){if(Lt)return ir.exports;Lt=1;var t=Rt?Bt:(Rt=1,Bt=!1),r=v(),n=or(),e=\"__core-js_shared__\",i=ir.exports=r[e]||n(e,{});return(i.versions||(i.versions=[])).push({version:\"3.44.0\",mode:t?\"pure\":\"global\",copyright:\"\u00A9 2014-2025 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.44.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"}),ir.exports}function cr(){if(Mt)return zt;Mt=1;var t=ur();return zt=function(r,n){return t[r]||(t[r]=n||{})}}function fr(){if(qt)return Nt;qt=1;var t=Ot(),r=Object;return Nt=function(n){return r(t(n))}}function ar(){if(Xt)return Dt;Xt=1;var t=bt(),r=fr(),n=t({}.hasOwnProperty);return Dt=Object.hasOwn||function(t,e){return n(r(t),e)}}function sr(){if(Wt)return Gt;Wt=1;var t=bt(),r=0,n=Math.random(),e=t(1.1.toString);return Gt=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+e(++r+n,36)}}function lr(){if(Ut)return Yt;Ut=1;var t=v(),r=cr(),n=ar(),e=sr(),i=Ct(),o=Et(),u=t.Symbol,c=r(\"wks\"),f=o?u.for||u:u&&u.withoutSetter||e;return Yt=function(t){return n(c,t)||(c[t]=i&&n(u,t)?u[t]:f(\"Symbol.\"+t)),c[t]}}function yr(){if(Kt)return Vt;Kt=1;var t=P(),r=St(),n=Tt(),e=xt(),i=At(),o=lr(),u=TypeError,c=o(\"toPrimitive\");return Vt=function(o,f){if(!r(o)||n(o))return o;var a,s=e(o,c);if(s){if(void 0===f&&(f=\"default\"),a=t(s,o,f),!r(a)||n(a))return a;throw new u(\"Can't convert object to primitive value\")}return void 0===f&&(f=\"number\"),i(o,f)}}function vr(){if(Jt)return Qt;Jt=1;var t=yr(),r=Tt();return Qt=function(n){var e=t(n,\"string\");return r(e)?e:e+\"\"}}function pr(){if(tr)return Zt;tr=1;var t=v(),r=St(),n=t.document,e=r(n)&&r(n.createElement);return Zt=function(t){return e?n.createElement(t):{}}}function hr(){if(nr)return rr;nr=1;var t=S(),r=j(),n=pr();return rr=!t&&!r((function(){return 7!==Object.defineProperty(n(\"div\"),\"a\",{get:function(){return 7}}).a}))}function dr(){if(er)return k;er=1;var t=S(),r=P(),n=ht(),e=dt(),i=kt(),o=vr(),u=ar(),c=hr(),f=Object.getOwnPropertyDescriptor;return k.f=t?f:function(t,a){if(t=i(t),a=o(a),c)try{return f(t,a)}catch(t){}if(u(t,a))return e(!r(n.f,t,a),t[a])},k}var br,gr,mr,wr,Or,kr,jr,Sr={};function $r(){if(gr)return br;gr=1;var t=S(),r=j();return br=t&&r((function(){return 42!==Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))}function Pr(){if(wr)return mr;wr=1;var t=St(),r=String,n=TypeError;return mr=function(e){if(t(e))return e;throw new n(r(e)+\" is not an object\")}}function Cr(){if(Or)return Sr;Or=1;var t=S(),r=hr(),n=$r(),e=Pr(),i=vr(),o=TypeError,u=Object.defineProperty,c=Object.getOwnPropertyDescriptor,f=\"enumerable\",a=\"configurable\",s=\"writable\";return Sr.f=t?n?function(t,r,n){if(e(t),r=i(r),e(n),\"function\"==typeof t&&\"prototype\"===r&&\"value\"in n&&s in n&&!n[s]){var o=c(t,r);o&&o[s]&&(t[r]=n.value,n={configurable:a in n?n[a]:o[a],enumerable:f in n?n[f]:o[f],writable:!1})}return u(t,r,n)}:u:function(t,n,c){if(e(t),n=i(n),e(c),r)try{return u(t,n,c)}catch(t){}if(\"get\"in c||\"set\"in c)throw new o(\"Accessors not supported\");return\"value\"in c&&(t[n]=c.value),t},Sr}function Er(){if(jr)return kr;jr=1;var t=S(),r=Cr(),n=dt();return kr=t?function(t,e,i){return r.f(t,e,n(1,i))}:function(t,r,n){return t[r]=n,t}}var Tr,Hr,_r,xr,Ar,Br,Rr,Fr,Ir,Lr,zr,Mr,Nr,qr,Dr,Xr={exports:{}};function Gr(){if(xr)return _r;xr=1;var t=bt(),r=jt(),n=ur(),e=t(Function.toString);return r(n.inspectSource)||(n.inspectSource=function(t){return e(t)}),_r=n.inspectSource}function Wr(){if(Fr)return Rr;Fr=1;var t=cr(),r=sr(),n=t(\"keys\");return Rr=function(t){return n[t]||(n[t]=r(t))}}function Yr(){return Lr?Ir:(Lr=1,Ir={})}function Ur(){if(Mr)return zr;Mr=1;var t,r,n,e=function(){if(Br)return Ar;Br=1;var t=v(),r=jt(),n=t.WeakMap;return Ar=r(n)&&/native code/.test(String(n))}(),i=v(),o=St(),u=Er(),c=ar(),f=ur(),a=Wr(),s=Yr(),l=\"Object already initialized\",y=i.TypeError,p=i.WeakMap;if(e||f.state){var h=f.state||(f.state=new p);h.get=h.get,h.has=h.has,h.set=h.set,t=function(t,r){if(h.has(t))throw new y(l);return r.facade=t,h.set(t,r),r},r=function(t){return h.get(t)||{}},n=function(t){return h.has(t)}}else{var d=a(\"state\");s[d]=!0,t=function(t,r){if(c(t,d))throw new y(l);return r.facade=t,u(t,d,r),r},r=function(t){return c(t,d)?t[d]:{}},n=function(t){return c(t,d)}}return zr={set:t,get:r,has:n,enforce:function(e){return n(e)?r(e):t(e,{})},getterFor:function(t){return function(n){var e;if(!o(n)||(e=r(n)).type!==t)throw new y(\"Incompatible receiver, \"+t+\" required\");return e}}}}function Vr(){if(Nr)return Xr.exports;Nr=1;var t=bt(),r=j(),n=jt(),e=ar(),i=S(),o=function(){if(Hr)return Tr;Hr=1;var t=S(),r=ar(),n=Function.prototype,e=t&&Object.getOwnPropertyDescriptor,i=r(n,\"name\"),o=i&&\"something\"===function(){}.name,u=i&&(!t||t&&e(n,\"name\").configurable);return Tr={EXISTS:i,PROPER:o,CONFIGURABLE:u}}().CONFIGURABLE,u=Gr(),c=Ur(),f=c.enforce,a=c.get,s=String,l=Object.defineProperty,y=t(\"\".slice),v=t(\"\".replace),p=t([].join),h=i&&!r((function(){return 8!==l((function(){}),\"length\",{value:8}).length})),d=String(String).split(\"String\"),b=Xr.exports=function(t,r,n){\"Symbol(\"===y(s(r),0,7)&&(r=\"[\"+v(s(r),/^Symbol\\(([^)]*)\\).*$/,\"$1\")+\"]\"),n&&n.getter&&(r=\"get \"+r),n&&n.setter&&(r=\"set \"+r),(!e(t,\"name\")||o&&t.name!==r)&&(i?l(t,\"name\",{value:r,configurable:!0}):t.name=r),h&&n&&e(n,\"arity\")&&t.length!==n.arity&&l(t,\"length\",{value:n.arity});try{n&&e(n,\"constructor\")&&n.constructor?i&&l(t,\"prototype\",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var u=f(t);return e(u,\"source\")||(u.source=p(d,\"string\"==typeof r?r:\"\")),t};return Function.prototype.toString=b((function(){return n(this)&&a(this).source||u(this)}),\"toString\"),Xr.exports}function Kr(){if(Dr)return qr;Dr=1;var t=jt(),r=Cr(),n=Vr(),e=or();return qr=function(i,o,u,c){c||(c={});var f=c.enumerable,a=void 0!==c.name?c.name:o;if(t(u)&&n(u,a,c),c.global)f?i[o]=u:e(o,u);else{try{c.unsafe?i[o]&&(f=!0):delete i[o]}catch(t){}f?i[o]=u:r.f(i,o,{value:u,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})}return i}}var Qr,Jr,Zr,tn,rn,nn,en,on,un,cn,fn,an,sn,ln,yn,vn,pn,hn={};function dn(){if(tn)return Zr;tn=1;var t=function(){if(Jr)return Qr;Jr=1;var t=Math.ceil,r=Math.floor;return Qr=Math.trunc||function(n){var e=+n;return(e>0?r:t)(e)}}();return Zr=function(r){var n=+r;return n!=n||0===n?0:t(n)}}function bn(){if(nn)return rn;nn=1;var t=dn(),r=Math.max,n=Math.min;return rn=function(e,i){var o=t(e);return o<0?r(o+i,0):n(o,i)}}function gn(){if(on)return en;on=1;var t=dn(),r=Math.min;return en=function(n){var e=t(n);return e>0?r(e,9007199254740991):0}}function mn(){if(cn)return un;cn=1;var t=gn();return un=function(r){return t(r.length)}}function wn(){if(ln)return sn;ln=1;var t=bt(),r=ar(),n=kt(),e=function(){if(an)return fn;an=1;var t=kt(),r=bn(),n=mn(),e=function(e){return function(i,o,u){var c=t(i),f=n(c);if(0===f)return!e&&-1;var a,s=r(u,f);if(e&&o!=o){for(;f>s;)if((a=c[s++])!=a)return!0}else for(;f>s;s++)if((e||s in c)&&c[s]===o)return e||s||0;return!e&&-1}};return fn={includes:e(!0),indexOf:e(!1)}}().indexOf,i=Yr(),o=t([].push);return sn=function(t,u){var c,f=n(t),a=0,s=[];for(c in f)!r(i,c)&&r(f,c)&&o(s,c);for(;u.length>a;)r(f,c=u[a++])&&(~e(s,c)||o(s,c));return s}}function On(){return vn?yn:(vn=1,yn=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"])}var kn,jn,Sn,$n,Pn,Cn,En,Tn,Hn,_n,xn,An,Bn,Rn,Fn,In,Ln,zn,Mn,Nn,qn,Dn,Xn,Gn,Wn,Yn,Un,Vn={};function Kn(){return kn||(kn=1,Vn.f=Object.getOwnPropertySymbols),Vn}function Qn(){if(Sn)return jn;Sn=1;var t=$t(),r=bt(),n=function(){if(pn)return hn;pn=1;var t=wn(),r=On().concat(\"length\",\"prototype\");return hn.f=Object.getOwnPropertyNames||function(n){return t(n,r)},hn}(),e=Kn(),i=Pr(),o=r([].concat);return jn=t(\"Reflect\",\"ownKeys\")||function(t){var r=n.f(i(t)),u=e.f;return u?o(r,u(t)):r}}function Jn(){if(Pn)return $n;Pn=1;var t=ar(),r=Qn(),n=dr(),e=Cr();return $n=function(i,o,u){for(var c=r(o),f=e.f,a=n.f,s=0;s<c.length;s++){var l=c[s];t(i,l)||u&&t(u,l)||f(i,l,a(o,l))}}}function Zn(){if(Hn)return Tn;Hn=1;var t=v(),r=dr().f,n=Er(),e=Kr(),i=or(),o=Jn(),u=function(){if(En)return Cn;En=1;var t=j(),r=jt(),n=/#|\\.prototype\\./,e=function(n,e){var f=o[i(n)];return f===c||f!==u&&(r(e)?t(e):!!e)},i=e.normalize=function(t){return String(t).replace(n,\".\").toLowerCase()},o=e.data={},u=e.NATIVE=\"N\",c=e.POLYFILL=\"P\";return Cn=e}();return Tn=function(c,f){var a,s,l,y,v,p=c.target,h=c.global,d=c.stat;if(a=h?t:d?t[p]||i(p,{}):t[p]&&t[p].prototype)for(s in f){if(y=f[s],l=c.dontCallGetSet?(v=r(a,s))&&v.value:a[s],!u(h?s:p+(d?\".\":\"#\")+s,c.forced)&&void 0!==l){if(typeof y==typeof l)continue;o(y,l)}(c.sham||l&&l.sham)&&n(y,\"sham\",!0),e(a,s,y,c)}}}function te(){if(Bn)return An;Bn=1;var t=function(){if(xn)return _n;xn=1;var t=gt(),r=bt();return _n=function(n){if(\"Function\"===t(n))return r(n)}}(),r=_t(),n=$(),e=t(t.bind);return An=function(t,i){return r(t),void 0===i?t:n?e(t,i):function(){return t.apply(i,arguments)}},An}function re(){if(Fn)return Rn;Fn=1;var t=gt();return Rn=Array.isArray||function(r){return\"Array\"===t(r)}}function ne(){if(Ln)return In;Ln=1;var t={};return t[lr()(\"toStringTag\")]=\"z\",In=\"[object z]\"===String(t)}function ee(){if(Mn)return zn;Mn=1;var t=ne(),r=jt(),n=gt(),e=lr()(\"toStringTag\"),i=Object,o=\"Arguments\"===n(function(){return arguments}());return zn=t?n:function(t){var u,c,f;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(c=function(t,r){try{return t[r]}catch(t){}}(u=i(t),e))?c:o?n(u):\"Object\"===(f=n(u))&&r(u.callee)?\"Arguments\":f}}function ie(){if(qn)return Nn;qn=1;var t=bt(),r=j(),n=jt(),e=ee(),i=$t(),o=Gr(),u=function(){},c=i(\"Reflect\",\"construct\"),f=/^\\s*(?:class|function)\\b/,a=t(f.exec),s=!f.test(u),l=function(t){if(!n(t))return!1;try{return c(u,[],t),!0}catch(t){return!1}},y=function(t){if(!n(t))return!1;switch(e(t)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return s||!!a(f,o(t))}catch(t){return!0}};return y.sham=!0,Nn=!c||r((function(){var t;return l(l.call)||!l(Object)||!l((function(){t=!0}))||t}))?y:l}function oe(){if(Xn)return Dn;Xn=1;var t=re(),r=ie(),n=St(),e=lr()(\"species\"),i=Array;return Dn=function(o){var u;return t(o)&&(u=o.constructor,(r(u)&&(u===i||t(u.prototype))||n(u)&&null===(u=u[e]))&&(u=void 0)),void 0===u?i:u}}function ue(){if(Wn)return Gn;Wn=1;var t=oe();return Gn=function(r,n){return new(t(r))(0===n?0:n)}}var ce,fe,ae,se,le,ye,ve,pe,he,de,be={};function ge(){if(fe)return ce;fe=1;var t=wn(),r=On();return ce=Object.keys||function(n){return t(n,r)}}function me(){if(le)return se;le=1;var t=$t();return se=t(\"document\",\"documentElement\")}function we(){if(ve)return ye;ve=1;var t,r=Pr(),n=function(){if(ae)return be;ae=1;var t=S(),r=$r(),n=Cr(),e=Pr(),i=kt(),o=ge();return be.f=t&&!r?Object.defineProperties:function(t,r){e(t);for(var u,c=i(r),f=o(r),a=f.length,s=0;a>s;)n.f(t,u=f[s++],c[u]);return t},be}(),e=On(),i=Yr(),o=me(),u=pr(),c=Wr(),f=\"prototype\",a=\"script\",s=c(\"IE_PROTO\"),l=function(){},y=function(t){return\"<\"+a+\">\"+t+\"</\"+a+\">\"},v=function(t){t.write(y(\"\")),t.close();var r=t.parentWindow.Object;return t=null,r},p=function(){try{t=new ActiveXObject(\"htmlfile\")}catch(t){}var r,n,i;p=\"undefined\"!=typeof document?document.domain&&t?v(t):(n=u(\"iframe\"),i=\"java\"+a+\":\",n.style.display=\"none\",o.appendChild(n),n.src=String(i),(r=n.contentWindow.document).open(),r.write(y(\"document.F=Object\")),r.close(),r.F):v(t);for(var c=e.length;c--;)delete p[f][e[c]];return p()};return i[s]=!0,ye=Object.create||function(t,e){var i;return null!==t?(l[f]=r(t),i=new l,l[f]=null,i[s]=t):i=p(),void 0===e?i:n.f(i,e)}}function Oe(){if(he)return pe;he=1;var t=lr(),r=we(),n=Cr().f,e=t(\"unscopables\"),i=Array.prototype;return void 0===i[e]&&n(i,e,{configurable:!0,value:r(null)}),pe=function(t){i[e][t]=!0}}!function(){if(de)return y;de=1;var t=Zn(),r=function(){if(Un)return Yn;Un=1;var t=te(),r=bt(),n=mt(),e=fr(),i=mn(),o=ue(),u=r([].push),c=function(r){var c=1===r,f=2===r,a=3===r,s=4===r,l=6===r,y=7===r,v=5===r||l;return function(p,h,d,b){for(var g,m,w=e(p),O=n(w),k=i(O),j=t(h,d),S=0,$=b||o,P=c?$(p,k):f||y?$(p,0):void 0;k>S;S++)if((v||S in O)&&(m=j(g=O[S],S,w),r))if(c)P[S]=m;else if(m)switch(r){case 3:return!0;case 5:return g;case 6:return S;case 2:u(P,g)}else switch(r){case 4:return!1;case 7:u(P,g)}return l?-1:a||s?s:P}};return Yn={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}}().find,n=Oe(),e=\"find\",i=!0;e in[]&&Array(1)[e]((function(){i=!1})),t({target:\"Array\",proto:!0,forced:i},{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),n(e)}();var ke,je,Se,$e={};!function(){if(Se)return $e;Se=1;var t=Zn(),r=function(){if(je)return ke;je=1;var t=S(),r=bt(),n=P(),e=j(),i=ge(),o=Kn(),u=ht(),c=fr(),f=mt(),a=Object.assign,s=Object.defineProperty,l=r([].concat);return ke=!a||e((function(){if(t&&1!==a({b:1},a(s({},\"a\",{enumerable:!0,get:function(){s(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var r={},n={},e=Symbol(\"assign detection\"),o=\"abcdefghijklmnopqrst\";return r[e]=7,o.split(\"\").forEach((function(t){n[t]=t})),7!==a({},r)[e]||i(a({},n)).join(\"\")!==o}))?function(r,e){for(var a=c(r),s=arguments.length,y=1,v=o.f,p=u.f;s>y;)for(var h,d=f(arguments[y++]),b=v?l(i(d),v(d)):i(d),g=b.length,m=0;g>m;)h=b[m++],t&&!n(p,d,h)||(a[h]=d[h]);return a}:a,ke}();t({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==r},{assign:r})}();var Pe,Ce,Ee,Te={};!function(){if(Ee)return Te;Ee=1;var t=ne(),r=Kr(),n=function(){if(Ce)return Pe;Ce=1;var t=ne(),r=ee();return Pe=t?{}.toString:function(){return\"[object \"+r(this)+\"]\"}}();t||r(Object.prototype,\"toString\",n,{unsafe:!0})}();var He=t.fn.bootstrapTable.utils;Object.assign(t.fn.bootstrapTable.defaults,{stickyHeader:!1,stickyHeaderOffsetY:0,stickyHeaderOffsetLeft:0,stickyHeaderOffsetRight:0}),t.BootstrapTable=function(e){function i(){return function(t,r){if(!(t instanceof r))throw new TypeError(\"Cannot call a class as a function\")}(this,i),r(this,i,arguments)}return function(t,r){if(\"function\"!=typeof r&&null!==r)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),r&&u(t,r)}(i,e),n(i,[{key:\"initHeader\",value:function(){for(var r=this,n=arguments.length,e=new Array(n),o=0;o<n;o++)e[o]=arguments[o];if(c(i,\"initHeader\",this)(e),this.options.stickyHeader){this.$tableBody.find(\".sticky-header-container,.sticky_anchor_begin,.sticky_anchor_end\").remove(),this.$el.before('<div class=\"sticky-header-container\"></div>'),this.$el.before('<div class=\"sticky_anchor_begin\"></div>'),this.$el.after('<div class=\"sticky_anchor_end\"></div>'),this.$header.addClass(\"sticky-header\"),this.$stickyContainer=this.$tableBody.find(\".sticky-header-container\"),this.$stickyBegin=this.$tableBody.find(\".sticky_anchor_begin\"),this.$stickyEnd=this.$tableBody.find(\".sticky_anchor_end\"),this.$stickyHeader=this.$header.clone(!0,!0);var u=He.getEventName(\"resize.sticky-header-table\",this.$el.attr(\"id\")),f=He.getEventName(\"scroll.sticky-header-table\",this.$el.attr(\"id\"));t(window).off(u).on(u,(function(){return r.renderStickyHeader()})),t(window).off(f).on(f,(function(){return r.renderStickyHeader()})),this.$tableBody.off(\"scroll\").on(\"scroll\",(function(){return r.matchPositionX()}))}}},{key:\"onColumnSearch\",value:function(t){var r=t.currentTarget,n=t.keyCode;c(i,\"onColumnSearch\",this)([{currentTarget:r,keyCode:n}]),this.options.stickyHeader&&this.renderStickyHeader()}},{key:\"resetView\",value:function(){for(var r=this,n=arguments.length,e=new Array(n),o=0;o<n;o++)e[o]=arguments[o];c(i,\"resetView\",this)(e),this.options.stickyHeader&&t(\".bootstrap-table.fullscreen\").off(\"scroll\").on(\"scroll\",(function(){return r.renderStickyHeader()}))}},{key:\"getCaret\",value:function(){for(var r=arguments.length,n=new Array(r),e=0;e<r;e++)n[e]=arguments[e];if(c(i,\"getCaret\",this)(n),this.options.stickyHeader&&this.$stickyHeader){var o=this.$stickyHeader.find(\"th\");this.$header.find(\"th\").each((function(r,n){o.eq(r).find(\".sortable\").attr(\"class\",t(n).find(\".sortable\").attr(\"class\"))}))}}},{key:\"horizontalScroll\",value:function(){var t=this;c(i,\"horizontalScroll\",this)([]),this.options.stickyHeader&&this.$tableBody.on(\"scroll\",(function(){return t.matchPositionX()}))}},{key:\"renderStickyHeader\",value:function(){var r=this,n=this;this.$stickyHeader=this.$header.clone(!0,!0),this.options.filterControl&&t(this.$stickyHeader).off(\"keyup change mouseup\").on(\"keyup change mouse\",(function(r){var e=t(r.target),i=e.val(),o=e.parents(\"th\").data(\"field\"),u=n.$header.find('th[data-field=\"'.concat(o,'\"]'));if(e.is(\"input\"))u.find(\"input\").val(i);else if(e.is(\"select\")){var c=u.find(\"select\");c.find(\"option[selected]\").removeAttr(\"selected\"),c.find('option[value=\"'.concat(i,'\"]')).attr(\"selected\",!0)}n.triggerSearch()}));var e=t(window).scrollTop(),i=this.$stickyBegin.offset().top-this.options.stickyHeaderOffsetY,o=this.$stickyEnd.offset().top-this.options.stickyHeaderOffsetY-this.$header.height();if(e>i&&e<=o){this.$stickyHeader.find(\"tr\").each((function(n,e){t(e).find(\"th\").each((function(e,i){t(i).css(\"min-width\",r.$header.find(\"tr:eq(\".concat(n,\")\")).find(\"th:eq(\".concat(e,\")\")).css(\"width\"))}))})),this.$stickyContainer.show().addClass(\"fix-sticky fixed-table-container\");var u=this.$tableBody[0].getBoundingClientRect(),c=\"100%\",f=this.options.stickyHeaderOffsetLeft,a=this.options.stickyHeaderOffsetRight;f||(f=u.left),a||(c=\"\".concat(u.width,\"px\")),this.$el.closest(\".bootstrap-table\").hasClass(\"fullscreen\")&&(f=0,a=0,c=\"100%\"),this.$stickyContainer.css(\"top\",\"\".concat(this.options.stickyHeaderOffsetY,\"px\")),this.$stickyContainer.css(\"left\",\"\".concat(f,\"px\")),this.$stickyContainer.css(\"right\",\"\".concat(a,\"px\")),this.$stickyContainer.css(\"width\",\"\".concat(c)),this.$stickyTable=t(\"<table/>\"),this.$stickyTable.addClass(this.options.classes),this.$stickyContainer.html(this.$stickyTable.append(this.$stickyHeader)),this.matchPositionX()}else this.$stickyContainer.removeClass(\"fix-sticky\").hide()}},{key:\"matchPositionX\",value:function(){this.$stickyContainer.scrollLeft(this.$tableBody.scrollLeft())}}])}(t.BootstrapTable)}));\n", "/**\n  * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation)\n  *\n  * @version v1.25.0\n  * @homepage https://bootstrap-table.com\n  * @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)\n  * @license MIT\n  */\n\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).jQuery)}(this,(function(t){\"use strict\";function e(t,e,n){return e=i(e),function(t,e){if(e&&(\"object\"==typeof e||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(t,o()?Reflect.construct(e,n||[],i(t).constructor):e.apply(t,n))}function n(t,e,n){return e&&function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,c(r.key),r)}}(t.prototype,e),Object.defineProperty(t,\"prototype\",{writable:!1}),t}function r(){return r=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var r=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=i(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(arguments.length<3?t:n):o.value}},r.apply(null,arguments)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}function o(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(o=function(){return!!t})()}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function f(t,e,n,o){var u=r(i(t.prototype),e,n);return\"function\"==typeof u?function(t){return u.apply(n,t)}:u}function c(t){var e=function(t,e){if(\"object\"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t,\"string\");return\"symbol\"==typeof e?e:e+\"\"}var a,s,d=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{},l={};function h(){if(s)return a;s=1;var t=function(t){return t&&t.Math===Math&&t};return a=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof d&&d)||t(\"object\"==typeof a&&a)||function(){return this}()||Function(\"return this\")()}var p,v,y,b,g,m,x,w,$={};function O(){return v?p:(v=1,p=function(t){try{return!!t()}catch(t){return!0}})}function C(){if(b)return y;b=1;var t=O();return y=!t((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))}function j(){if(m)return g;m=1;var t=O();return g=!t((function(){var t=function(){}.bind();return\"function\"!=typeof t||t.hasOwnProperty(\"prototype\")}))}function S(){if(w)return x;w=1;var t=j(),e=Function.prototype.call;return x=t?e.bind(e):function(){return e.apply(e,arguments)},x}var R,B,F,k,P,T,E,N,A,H,L,W,D,I,M,_,z,X,Y,q,G,V,U,K,Q,Z,J,tt,et,nt,rt,it,ot,ut,ft,ct,at,st,dt,lt,ht,pt={};function vt(){if(R)return pt;R=1;var t={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,n=e&&!t.call({1:2},1);return pt.f=n?function(t){var n=e(this,t);return!!n&&n.enumerable}:t,pt}function yt(){return F?B:(F=1,B=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}})}function bt(){if(P)return k;P=1;var t=j(),e=Function.prototype,n=e.call,r=t&&e.bind.bind(n,n);return k=t?r:function(t){return function(){return n.apply(t,arguments)}},k}function gt(){if(E)return T;E=1;var t=bt(),e=t({}.toString),n=t(\"\".slice);return T=function(t){return n(e(t),8,-1)}}function mt(){if(A)return N;A=1;var t=bt(),e=O(),n=gt(),r=Object,i=t(\"\".split);return N=e((function(){return!r(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"===n(t)?i(t,\"\"):r(t)}:r}function xt(){return L?H:(L=1,H=function(t){return null==t})}function wt(){if(D)return W;D=1;var t=xt(),e=TypeError;return W=function(n){if(t(n))throw new e(\"Can't call method on \"+n);return n}}function $t(){if(M)return I;M=1;var t=mt(),e=wt();return I=function(n){return t(e(n))}}function Ot(){if(z)return _;z=1;var t=\"object\"==typeof document&&document.all;return _=void 0===t&&void 0!==t?function(e){return\"function\"==typeof e||e===t}:function(t){return\"function\"==typeof t}}function Ct(){if(Y)return X;Y=1;var t=Ot();return X=function(e){return\"object\"==typeof e?null!==e:t(e)}}function jt(){if(G)return q;G=1;var t=h(),e=Ot();return q=function(n,r){return arguments.length<2?(i=t[n],e(i)?i:void 0):t[n]&&t[n][r];var i},q}function St(){if(J)return Z;J=1;var t,e,n=h(),r=function(){if(Q)return K;Q=1;var t=h().navigator,e=t&&t.userAgent;return K=e?String(e):\"\"}(),i=n.process,o=n.Deno,u=i&&i.versions||o&&o.version,f=u&&u.v8;return f&&(e=(t=f.split(\".\"))[0]>0&&t[0]<4?1:+(t[0]+t[1])),!e&&r&&(!(t=r.match(/Edge\\/(\\d+)/))||t[1]>=74)&&(t=r.match(/Chrome\\/(\\d+)/))&&(e=+t[1]),Z=e}function Rt(){if(et)return tt;et=1;var t=St(),e=O(),n=h().String;return tt=!!Object.getOwnPropertySymbols&&!e((function(){var e=Symbol(\"symbol detection\");return!n(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&t&&t<41}))}function Bt(){if(rt)return nt;rt=1;var t=Rt();return nt=t&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator}function Ft(){if(ot)return it;ot=1;var t=jt(),e=Ot(),n=function(){if(U)return V;U=1;var t=bt();return V=t({}.isPrototypeOf)}(),r=Bt(),i=Object;return it=r?function(t){return\"symbol\"==typeof t}:function(r){var o=t(\"Symbol\");return e(o)&&n(o.prototype,i(r))}}function kt(){if(ft)return ut;ft=1;var t=String;return ut=function(e){try{return t(e)}catch(t){return\"Object\"}}}function Pt(){if(at)return ct;at=1;var t=Ot(),e=kt(),n=TypeError;return ct=function(r){if(t(r))return r;throw new n(e(r)+\" is not a function\")}}function Tt(){if(dt)return st;dt=1;var t=Pt(),e=xt();return st=function(n,r){var i=n[r];return e(i)?void 0:t(i)}}function Et(){if(ht)return lt;ht=1;var t=S(),e=Ot(),n=Ct(),r=TypeError;return lt=function(i,o){var u,f;if(\"string\"===o&&e(u=i.toString)&&!n(f=t(u,i)))return f;if(e(u=i.valueOf)&&!n(f=t(u,i)))return f;if(\"string\"!==o&&e(u=i.toString)&&!n(f=t(u,i)))return f;throw new r(\"Can't convert object to primitive value\")}}var Nt,At,Ht,Lt,Wt,Dt,It,Mt,_t,zt,Xt,Yt,qt,Gt,Vt,Ut,Kt,Qt,Zt,Jt,te,ee,ne,re,ie={exports:{}};function oe(){if(Lt)return Ht;Lt=1;var t=h(),e=Object.defineProperty;return Ht=function(n,r){try{e(t,n,{value:r,configurable:!0,writable:!0})}catch(e){t[n]=r}return r}}function ue(){if(Wt)return ie.exports;Wt=1;var t=At?Nt:(At=1,Nt=!1),e=h(),n=oe(),r=\"__core-js_shared__\",i=ie.exports=e[r]||n(r,{});return(i.versions||(i.versions=[])).push({version:\"3.44.0\",mode:t?\"pure\":\"global\",copyright:\"\u00A9 2014-2025 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.44.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"}),ie.exports}function fe(){if(It)return Dt;It=1;var t=ue();return Dt=function(e,n){return t[e]||(t[e]=n||{})}}function ce(){if(_t)return Mt;_t=1;var t=wt(),e=Object;return Mt=function(n){return e(t(n))}}function ae(){if(Xt)return zt;Xt=1;var t=bt(),e=ce(),n=t({}.hasOwnProperty);return zt=Object.hasOwn||function(t,r){return n(e(t),r)}}function se(){if(qt)return Yt;qt=1;var t=bt(),e=0,n=Math.random(),r=t(1.1.toString);return Yt=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+r(++e+n,36)}}function de(){if(Vt)return Gt;Vt=1;var t=h(),e=fe(),n=ae(),r=se(),i=Rt(),o=Bt(),u=t.Symbol,f=e(\"wks\"),c=o?u.for||u:u&&u.withoutSetter||r;return Gt=function(t){return n(f,t)||(f[t]=i&&n(u,t)?u[t]:c(\"Symbol.\"+t)),f[t]}}function le(){if(Kt)return Ut;Kt=1;var t=S(),e=Ct(),n=Ft(),r=Tt(),i=Et(),o=de(),u=TypeError,f=o(\"toPrimitive\");return Ut=function(o,c){if(!e(o)||n(o))return o;var a,s=r(o,f);if(s){if(void 0===c&&(c=\"default\"),a=t(s,o,c),!e(a)||n(a))return a;throw new u(\"Can't convert object to primitive value\")}return void 0===c&&(c=\"number\"),i(o,c)}}function he(){if(Zt)return Qt;Zt=1;var t=le(),e=Ft();return Qt=function(n){var r=t(n,\"string\");return e(r)?r:r+\"\"}}function pe(){if(te)return Jt;te=1;var t=h(),e=Ct(),n=t.document,r=e(n)&&e(n.createElement);return Jt=function(t){return r?n.createElement(t):{}}}function ve(){if(ne)return ee;ne=1;var t=C(),e=O(),n=pe();return ee=!t&&!e((function(){return 7!==Object.defineProperty(n(\"div\"),\"a\",{get:function(){return 7}}).a}))}function ye(){if(re)return $;re=1;var t=C(),e=S(),n=vt(),r=yt(),i=$t(),o=he(),u=ae(),f=ve(),c=Object.getOwnPropertyDescriptor;return $.f=t?c:function(t,a){if(t=i(t),a=o(a),f)try{return c(t,a)}catch(t){}if(u(t,a))return r(!e(n.f,t,a),t[a])},$}var be,ge,me,xe,we,$e,Oe,Ce={};function je(){if(ge)return be;ge=1;var t=C(),e=O();return be=t&&e((function(){return 42!==Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))}function Se(){if(xe)return me;xe=1;var t=Ct(),e=String,n=TypeError;return me=function(r){if(t(r))return r;throw new n(e(r)+\" is not an object\")}}function Re(){if(we)return Ce;we=1;var t=C(),e=ve(),n=je(),r=Se(),i=he(),o=TypeError,u=Object.defineProperty,f=Object.getOwnPropertyDescriptor,c=\"enumerable\",a=\"configurable\",s=\"writable\";return Ce.f=t?n?function(t,e,n){if(r(t),e=i(e),r(n),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in n&&s in n&&!n[s]){var o=f(t,e);o&&o[s]&&(t[e]=n.value,n={configurable:a in n?n[a]:o[a],enumerable:c in n?n[c]:o[c],writable:!1})}return u(t,e,n)}:u:function(t,n,f){if(r(t),n=i(n),r(f),e)try{return u(t,n,f)}catch(t){}if(\"get\"in f||\"set\"in f)throw new o(\"Accessors not supported\");return\"value\"in f&&(t[n]=f.value),t},Ce}function Be(){if(Oe)return $e;Oe=1;var t=C(),e=Re(),n=yt();return $e=t?function(t,r,i){return e.f(t,r,n(1,i))}:function(t,e,n){return t[e]=n,t}}var Fe,ke,Pe,Te,Ee,Ne,Ae,He,Le,We,De,Ie,Me,_e,ze,Xe={exports:{}};function Ye(){if(Te)return Pe;Te=1;var t=bt(),e=Ot(),n=ue(),r=t(Function.toString);return e(n.inspectSource)||(n.inspectSource=function(t){return r(t)}),Pe=n.inspectSource}function qe(){if(He)return Ae;He=1;var t=fe(),e=se(),n=t(\"keys\");return Ae=function(t){return n[t]||(n[t]=e(t))}}function Ge(){return We?Le:(We=1,Le={})}function Ve(){if(Ie)return De;Ie=1;var t,e,n,r=function(){if(Ne)return Ee;Ne=1;var t=h(),e=Ot(),n=t.WeakMap;return Ee=e(n)&&/native code/.test(String(n))}(),i=h(),o=Ct(),u=Be(),f=ae(),c=ue(),a=qe(),s=Ge(),d=\"Object already initialized\",l=i.TypeError,p=i.WeakMap;if(r||c.state){var v=c.state||(c.state=new p);v.get=v.get,v.has=v.has,v.set=v.set,t=function(t,e){if(v.has(t))throw new l(d);return e.facade=t,v.set(t,e),e},e=function(t){return v.get(t)||{}},n=function(t){return v.has(t)}}else{var y=a(\"state\");s[y]=!0,t=function(t,e){if(f(t,y))throw new l(d);return e.facade=t,u(t,y,e),e},e=function(t){return f(t,y)?t[y]:{}},n=function(t){return f(t,y)}}return De={set:t,get:e,has:n,enforce:function(r){return n(r)?e(r):t(r,{})},getterFor:function(t){return function(n){var r;if(!o(n)||(r=e(n)).type!==t)throw new l(\"Incompatible receiver, \"+t+\" required\");return r}}}}function Ue(){if(Me)return Xe.exports;Me=1;var t=bt(),e=O(),n=Ot(),r=ae(),i=C(),o=function(){if(ke)return Fe;ke=1;var t=C(),e=ae(),n=Function.prototype,r=t&&Object.getOwnPropertyDescriptor,i=e(n,\"name\"),o=i&&\"something\"===function(){}.name,u=i&&(!t||t&&r(n,\"name\").configurable);return Fe={EXISTS:i,PROPER:o,CONFIGURABLE:u}}().CONFIGURABLE,u=Ye(),f=Ve(),c=f.enforce,a=f.get,s=String,d=Object.defineProperty,l=t(\"\".slice),h=t(\"\".replace),p=t([].join),v=i&&!e((function(){return 8!==d((function(){}),\"length\",{value:8}).length})),y=String(String).split(\"String\"),b=Xe.exports=function(t,e,n){\"Symbol(\"===l(s(e),0,7)&&(e=\"[\"+h(s(e),/^Symbol\\(([^)]*)\\).*$/,\"$1\")+\"]\"),n&&n.getter&&(e=\"get \"+e),n&&n.setter&&(e=\"set \"+e),(!r(t,\"name\")||o&&t.name!==e)&&(i?d(t,\"name\",{value:e,configurable:!0}):t.name=e),v&&n&&r(n,\"arity\")&&t.length!==n.arity&&d(t,\"length\",{value:n.arity});try{n&&r(n,\"constructor\")&&n.constructor?i&&d(t,\"prototype\",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var u=c(t);return r(u,\"source\")||(u.source=p(y,\"string\"==typeof e?e:\"\")),t};return Function.prototype.toString=b((function(){return n(this)&&a(this).source||u(this)}),\"toString\"),Xe.exports}function Ke(){if(ze)return _e;ze=1;var t=Ot(),e=Re(),n=Ue(),r=oe();return _e=function(i,o,u,f){f||(f={});var c=f.enumerable,a=void 0!==f.name?f.name:o;if(t(u)&&n(u,a,f),f.global)c?i[o]=u:r(o,u);else{try{f.unsafe?i[o]&&(c=!0):delete i[o]}catch(t){}c?i[o]=u:e.f(i,o,{value:u,enumerable:!1,configurable:!f.nonConfigurable,writable:!f.nonWritable})}return i}}var Qe,Ze,Je,tn,en,nn,rn,on,un,fn,cn,an,sn,dn,ln,hn,pn,vn={};function yn(){if(tn)return Je;tn=1;var t=function(){if(Ze)return Qe;Ze=1;var t=Math.ceil,e=Math.floor;return Qe=Math.trunc||function(n){var r=+n;return(r>0?e:t)(r)}}();return Je=function(e){var n=+e;return n!=n||0===n?0:t(n)}}function bn(){if(nn)return en;nn=1;var t=yn(),e=Math.max,n=Math.min;return en=function(r,i){var o=t(r);return o<0?e(o+i,0):n(o,i)}}function gn(){if(on)return rn;on=1;var t=yn(),e=Math.min;return rn=function(n){var r=t(n);return r>0?e(r,9007199254740991):0}}function mn(){if(fn)return un;fn=1;var t=gn();return un=function(e){return t(e.length)}}function xn(){if(an)return cn;an=1;var t=$t(),e=bn(),n=mn(),r=function(r){return function(i,o,u){var f=t(i),c=n(f);if(0===c)return!r&&-1;var a,s=e(u,c);if(r&&o!=o){for(;c>s;)if((a=f[s++])!=a)return!0}else for(;c>s;s++)if((r||s in f)&&f[s]===o)return r||s||0;return!r&&-1}};return cn={includes:r(!0),indexOf:r(!1)}}function wn(){if(dn)return sn;dn=1;var t=bt(),e=ae(),n=$t(),r=xn().indexOf,i=Ge(),o=t([].push);return sn=function(t,u){var f,c=n(t),a=0,s=[];for(f in c)!e(i,f)&&e(c,f)&&o(s,f);for(;u.length>a;)e(c,f=u[a++])&&(~r(s,f)||o(s,f));return s}}function $n(){return hn?ln:(hn=1,ln=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"])}var On,Cn,jn,Sn,Rn,Bn,Fn,kn,Pn,Tn,En,Nn,An,Hn,Ln,Wn,Dn,In,Mn,_n,zn,Xn,Yn,qn,Gn,Vn,Un,Kn={};function Qn(){return On||(On=1,Kn.f=Object.getOwnPropertySymbols),Kn}function Zn(){if(jn)return Cn;jn=1;var t=jt(),e=bt(),n=function(){if(pn)return vn;pn=1;var t=wn(),e=$n().concat(\"length\",\"prototype\");return vn.f=Object.getOwnPropertyNames||function(n){return t(n,e)},vn}(),r=Qn(),i=Se(),o=e([].concat);return Cn=t(\"Reflect\",\"ownKeys\")||function(t){var e=n.f(i(t)),u=r.f;return u?o(e,u(t)):e}}function Jn(){if(Rn)return Sn;Rn=1;var t=ae(),e=Zn(),n=ye(),r=Re();return Sn=function(i,o,u){for(var f=e(o),c=r.f,a=n.f,s=0;s<f.length;s++){var d=f[s];t(i,d)||u&&t(u,d)||c(i,d,a(o,d))}}}function tr(){if(Pn)return kn;Pn=1;var t=h(),e=ye().f,n=Be(),r=Ke(),i=oe(),o=Jn(),u=function(){if(Fn)return Bn;Fn=1;var t=O(),e=Ot(),n=/#|\\.prototype\\./,r=function(n,r){var c=o[i(n)];return c===f||c!==u&&(e(r)?t(r):!!r)},i=r.normalize=function(t){return String(t).replace(n,\".\").toLowerCase()},o=r.data={},u=r.NATIVE=\"N\",f=r.POLYFILL=\"P\";return Bn=r}();return kn=function(f,c){var a,s,d,l,h,p=f.target,v=f.global,y=f.stat;if(a=v?t:y?t[p]||i(p,{}):t[p]&&t[p].prototype)for(s in c){if(l=c[s],d=f.dontCallGetSet?(h=e(a,s))&&h.value:a[s],!u(v?s:p+(y?\".\":\"#\")+s,f.forced)&&void 0!==d){if(typeof l==typeof d)continue;o(l,d)}(f.sham||d&&d.sham)&&n(l,\"sham\",!0),r(a,s,l,f)}}}function er(){if(En)return Tn;En=1;var t=gt(),e=bt();return Tn=function(n){if(\"Function\"===t(n))return e(n)}}function nr(){if(Ln)return Hn;Ln=1;var t=gt();return Hn=Array.isArray||function(e){return\"Array\"===t(e)}}function rr(){if(Dn)return Wn;Dn=1;var t={};return t[de()(\"toStringTag\")]=\"z\",Wn=\"[object z]\"===String(t)}function ir(){if(Mn)return In;Mn=1;var t=rr(),e=Ot(),n=gt(),r=de()(\"toStringTag\"),i=Object,o=\"Arguments\"===n(function(){return arguments}());return In=t?n:function(t){var u,f,c;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(f=function(t,e){try{return t[e]}catch(t){}}(u=i(t),r))?f:o?n(u):\"Object\"===(c=n(u))&&e(u.callee)?\"Arguments\":c}}function or(){if(zn)return _n;zn=1;var t=bt(),e=O(),n=Ot(),r=ir(),i=jt(),o=Ye(),u=function(){},f=i(\"Reflect\",\"construct\"),c=/^\\s*(?:class|function)\\b/,a=t(c.exec),s=!c.test(u),d=function(t){if(!n(t))return!1;try{return f(u,[],t),!0}catch(t){return!1}},l=function(t){if(!n(t))return!1;switch(r(t)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return s||!!a(c,o(t))}catch(t){return!0}};return l.sham=!0,_n=!f||e((function(){var t;return d(d.call)||!d(Object)||!d((function(){t=!0}))||t}))?l:d}function ur(){if(Yn)return Xn;Yn=1;var t=nr(),e=or(),n=Ct(),r=de()(\"species\"),i=Array;return Xn=function(o){var u;return t(o)&&(u=o.constructor,(e(u)&&(u===i||t(u.prototype))||n(u)&&null===(u=u[r]))&&(u=void 0)),void 0===u?i:u}}function fr(){if(Gn)return qn;Gn=1;var t=ur();return qn=function(e,n){return new(t(e))(0===n?0:n)}}function cr(){if(Un)return Vn;Un=1;var t=function(){if(An)return Nn;An=1;var t=er(),e=Pt(),n=j(),r=t(t.bind);return Nn=function(t,i){return e(t),void 0===i?t:n?r(t,i):function(){return t.apply(i,arguments)}},Nn}(),e=bt(),n=mt(),r=ce(),i=mn(),o=fr(),u=e([].push),f=function(e){var f=1===e,c=2===e,a=3===e,s=4===e,d=6===e,l=7===e,h=5===e||d;return function(p,v,y,b){for(var g,m,x=r(p),w=n(x),$=i(w),O=t(v,y),C=0,j=b||o,S=f?j(p,$):c||l?j(p,0):void 0;$>C;C++)if((h||C in w)&&(m=O(g=w[C],C,x),e))if(f)S[C]=m;else if(m)switch(e){case 3:return!0;case 5:return g;case 6:return C;case 2:u(S,g)}else switch(e){case 4:return!1;case 7:u(S,g)}return d?-1:a||s?s:S}};return Vn={forEach:f(0),map:f(1),filter:f(2),some:f(3),every:f(4),find:f(5),findIndex:f(6),filterReject:f(7)}}var ar,sr,dr,lr,hr,pr,vr,yr,br,gr,mr={};function xr(){if(sr)return ar;sr=1;var t=wn(),e=$n();return ar=Object.keys||function(n){return t(n,e)}}function wr(){if(hr)return lr;hr=1;var t=jt();return lr=t(\"document\",\"documentElement\")}function $r(){if(vr)return pr;vr=1;var t,e=Se(),n=function(){if(dr)return mr;dr=1;var t=C(),e=je(),n=Re(),r=Se(),i=$t(),o=xr();return mr.f=t&&!e?Object.defineProperties:function(t,e){r(t);for(var u,f=i(e),c=o(e),a=c.length,s=0;a>s;)n.f(t,u=c[s++],f[u]);return t},mr}(),r=$n(),i=Ge(),o=wr(),u=pe(),f=qe(),c=\"prototype\",a=\"script\",s=f(\"IE_PROTO\"),d=function(){},l=function(t){return\"<\"+a+\">\"+t+\"</\"+a+\">\"},h=function(t){t.write(l(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},p=function(){try{t=new ActiveXObject(\"htmlfile\")}catch(t){}var e,n,i;p=\"undefined\"!=typeof document?document.domain&&t?h(t):(n=u(\"iframe\"),i=\"java\"+a+\":\",n.style.display=\"none\",o.appendChild(n),n.src=String(i),(e=n.contentWindow.document).open(),e.write(l(\"document.F=Object\")),e.close(),e.F):h(t);for(var f=r.length;f--;)delete p[c][r[f]];return p()};return i[s]=!0,pr=Object.create||function(t,r){var i;return null!==t?(d[c]=e(t),i=new d,d[c]=null,i[s]=t):i=p(),void 0===r?i:n.f(i,r)}}function Or(){if(br)return yr;br=1;var t=de(),e=$r(),n=Re().f,r=t(\"unscopables\"),i=Array.prototype;return void 0===i[r]&&n(i,r,{configurable:!0,value:e(null)}),yr=function(t){i[r][t]=!0}}!function(){if(gr)return l;gr=1;var t=tr(),e=cr().find,n=Or(),r=\"find\",i=!0;r in[]&&Array(1)[r]((function(){i=!1})),t({target:\"Array\",proto:!0,forced:i},{find:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),n(r)}();var Cr,jr,Sr,Rr={};function Br(){if(jr)return Cr;jr=1;var t=O();return Cr=function(e,n){var r=[][e];return!!r&&t((function(){r.call(null,n||function(){return 1},1)}))}}!function(){if(Sr)return Rr;Sr=1;var t=tr(),e=er(),n=xn().indexOf,r=Br(),i=e([].indexOf),o=!!i&&1/i([1],1,-0)<0;t({target:\"Array\",proto:!0,forced:o||!r(\"indexOf\")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return o?i(this,t,e)||0:n(this,t,e)}})}();var Fr,kr,Pr,Tr={};!function(){if(Pr)return Tr;Pr=1;var t=tr(),e=function(){if(kr)return Fr;kr=1;var t=C(),e=bt(),n=S(),r=O(),i=xr(),o=Qn(),u=vt(),f=ce(),c=mt(),a=Object.assign,s=Object.defineProperty,d=e([].concat);return Fr=!a||r((function(){if(t&&1!==a({b:1},a(s({},\"a\",{enumerable:!0,get:function(){s(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},n={},r=Symbol(\"assign detection\"),o=\"abcdefghijklmnopqrst\";return e[r]=7,o.split(\"\").forEach((function(t){n[t]=t})),7!==a({},e)[r]||i(a({},n)).join(\"\")!==o}))?function(e,r){for(var a=f(e),s=arguments.length,l=1,h=o.f,p=u.f;s>l;)for(var v,y=c(arguments[l++]),b=h?d(i(y),h(y)):i(y),g=b.length,m=0;g>m;)v=b[m++],t&&!n(p,y,v)||(a[v]=y[v]);return a}:a,Fr}();t({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==e},{assign:e})}();var Er,Nr,Ar,Hr={};!function(){if(Ar)return Hr;Ar=1;var t=rr(),e=Ke(),n=function(){if(Nr)return Er;Nr=1;var t=rr(),e=ir();return Er=t?{}.toString:function(){return\"[object \"+e(this)+\"]\"}}();t||e(Object.prototype,\"toString\",n,{unsafe:!0})}();var Lr=t.fn.bootstrapTable.utils;Object.assign(t.fn.bootstrapTable.defaults,{fixedColumns:!1,fixedNumber:0,fixedRightNumber:0}),t.BootstrapTable=function(r){function i(){return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,i),e(this,i,arguments)}return function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&u(t,e)}(i,r),n(i,[{key:\"fixedColumnsSupported\",value:function(){return this.options.fixedColumns&&!this.options.detailView&&!this.options.cardView}},{key:\"initContainer\",value:function(){f(i,\"initContainer\",this)([]),this.fixedColumnsSupported()&&(this.options.fixedNumber&&(this.$tableContainer.append('<div class=\"fixed-columns\"></div>'),this.$fixedColumns=this.$tableContainer.find(\".fixed-columns\")),this.options.fixedRightNumber&&(this.$tableContainer.append('<div class=\"fixed-columns-right\"></div>'),this.$fixedColumnsRight=this.$tableContainer.find(\".fixed-columns-right\")))}},{key:\"initBody\",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];f(i,\"initBody\",this)(e),this.$fixedColumns&&this.$fixedColumns.length&&this.$fixedColumns.toggle(this.fixedColumnsSupported()),this.$fixedColumnsRight&&this.$fixedColumnsRight.length&&this.$fixedColumnsRight.toggle(this.fixedColumnsSupported()),this.fixedColumnsSupported()&&(this.options.showHeader&&this.options.height||(this.initFixedColumnsBody(),this.initFixedColumnsEvents()))}},{key:\"trigger\",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];f(i,\"trigger\",this)(e),this.fixedColumnsSupported()&&(\"post-header\"===e[0]?this.initFixedColumnsHeader():\"scroll-body\"===e[0]&&(this.needFixedColumns&&this.options.fixedNumber&&this.$fixedBody.scrollTop(this.$tableBody.scrollTop()),this.needFixedColumns&&this.options.fixedRightNumber&&this.$fixedBodyRight.scrollTop(this.$tableBody.scrollTop())))}},{key:\"updateSelected\",value:function(){var e=this;f(i,\"updateSelected\",this)([]),this.fixedColumnsSupported()&&this.$tableBody.find(\"tr\").each((function(n,r){var i=t(r),o=i.data(\"index\"),u=i.attr(\"class\"),f='[name=\"'.concat(e.options.selectItemName,'\"]'),c=i.find(f);if(void 0!==o){var a=function(t,n){var r=n.find('tr[data-index=\"'.concat(o,'\"]'));r.attr(\"class\",u),c.length&&r.find(f).prop(\"checked\",c.prop(\"checked\")),e.$selectAll.length&&t.add(n).find('[name=\"btSelectAll\"]').prop(\"checked\",e.$selectAll.prop(\"checked\"))};e.$fixedBody&&e.options.fixedNumber&&a(e.$fixedHeader,e.$fixedBody),e.$fixedBodyRight&&e.options.fixedRightNumber&&a(e.$fixedHeaderRight,e.$fixedBodyRight)}}))}},{key:\"hideLoading\",value:function(){f(i,\"hideLoading\",this)([]),this.needFixedColumns&&this.options.fixedNumber&&this.$fixedColumns.find(\".fixed-table-loading\").hide(),this.needFixedColumns&&this.options.fixedRightNumber&&this.$fixedColumnsRight&&this.$fixedColumnsRight.find(\".fixed-table-loading\").hide()}},{key:\"initFixedColumnsHeader\",value:function(){var t=this;this.options.height?this.needFixedColumns=this.$tableHeader.outerWidth(!0)<this.$tableHeader.find(\"table\").outerWidth(!0):this.needFixedColumns=this.$tableBody.outerWidth(!0)<this.$tableBody.find(\"table\").outerWidth(!0);var e=function(e,n){return e.find(\".fixed-table-header\").remove(),e.append(t.$tableHeader.clone(!0)),e.css({width:t.getFixedColumnsWidth(n)}),e.find(\".fixed-table-header\")};this.needFixedColumns&&this.options.fixedNumber?(this.$fixedHeader=e(this.$fixedColumns),this.$fixedHeader.css(\"margin-right\",\"\")):this.$fixedColumns&&this.$fixedColumns.html(\"\").css(\"width\",\"\"),this.needFixedColumns&&this.options.fixedRightNumber&&this.$fixedColumnsRight?(this.$fixedHeaderRight=e(this.$fixedColumnsRight,!0),this.$fixedHeaderRight.scrollLeft(this.$fixedHeaderRight.find(\"table\").width())):this.$fixedColumnsRight&&this.$fixedColumnsRight.html(\"\").css(\"width\",\"\"),this.initFixedColumnsBody(),this.initFixedColumnsEvents()}},{key:\"initFixedColumnsBody\",value:function(){var t=this,e=function(e,n){e.find(\".fixed-table-body\").remove(),e.append(t.$tableBody.clone(!0)),e.find(\".fixed-table-body table\").removeAttr(\"id\");var r=e.find(\".fixed-table-body\"),i=t.$tableBody.get(0),o=i.scrollWidth>i.clientWidth?Lr.getScrollBarWidth():0,u=t.$tableContainer.outerHeight(!0)-o-1;return e.css({height:u}),r.css({height:u-n.height()}),r};this.needFixedColumns&&this.options.fixedNumber&&(this.$fixedBody=e(this.$fixedColumns,this.$fixedHeader)),this.needFixedColumns&&this.options.fixedRightNumber&&this.$fixedColumnsRight&&(this.$fixedBodyRight=e(this.$fixedColumnsRight,this.$fixedHeaderRight),this.$fixedBodyRight.scrollLeft(this.$fixedBodyRight.find(\"table\").width()),this.$fixedBodyRight.css(\"overflow-y\",this.options.height?\"auto\":\"hidden\"))}},{key:\"getFixedColumnsWidth\",value:function(t){var e=this.getVisibleFields(),n=0,r=this.options.fixedNumber,i=0;t&&(e=e.reverse(),r=this.options.fixedRightNumber,i=parseInt(this.$tableHeader.css(\"margin-right\"),10));for(var o=0;o<r;o++)n+=this.$header.find('th[data-field=\"'.concat(e[o],'\"]')).outerWidth(!0);return n+i+1}},{key:\"initFixedColumnsEvents\",value:function(){var e=this,n=function(n,r){var i='tr[data-index=\"'.concat(t(n.currentTarget).data(\"index\"),'\"]'),o=e.$tableBody.find(i);e.$fixedBody&&(o=o.add(e.$fixedBody.find(i))),e.$fixedBodyRight&&(o=o.add(e.$fixedBodyRight.find(i))),o.css(\"background-color\",r?t(n.currentTarget).css(\"background-color\"):\"\")};this.$tableBody.find(\"tr\").hover((function(t){n(t,!0)}),(function(t){n(t,!1)}));var r=\"undefined\"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1?\"DOMMouseScroll\":\"mousewheel\";this.needFixedColumns&&this.options.fixedNumber&&this.$fixedBody&&(this.$fixedBody.find(\"tr\").hover((function(t){n(t,!0)}),(function(t){n(t,!1)})),this.$fixedBody[0].addEventListener(r,(function(t){!function(t,n){var r,i,o,u,f,c=(i=0,o=0,u=0,f=0,\"detail\"in(r=t)&&(o=r.detail),\"wheelDelta\"in r&&(o=-r.wheelDelta/120),\"wheelDeltaY\"in r&&(o=-r.wheelDeltaY/120),\"wheelDeltaX\"in r&&(i=-r.wheelDeltaX/120),\"axis\"in r&&r.axis===r.HORIZONTAL_AXIS&&(i=o,o=0),u=10*i,f=10*o,\"deltaY\"in r&&(f=r.deltaY),\"deltaX\"in r&&(u=r.deltaX),(u||f)&&r.deltaMode&&(1===r.deltaMode?(u*=40,f*=40):(u*=800,f*=800)),u&&!i&&(i=u<1?-1:1),f&&!o&&(o=f<1?-1:1),{spinX:i,spinY:o,pixelX:u,pixelY:f}),a=Math.ceil(c.pixelY),s=e.$tableBody.scrollTop()+a;(a<0&&s>0||a>0&&s<n.scrollHeight-n.clientHeight)&&t.preventDefault(),e.$tableBody.scrollTop(s),e.$fixedBody&&e.$fixedBody.scrollTop(s),e.$fixedBodyRight&&e.$fixedBodyRight.scrollTop(s)}(t,e.$fixedBody[0])}))),this.needFixedColumns&&this.options.fixedRightNumber&&(this.$fixedBodyRight.find(\"tr\").hover((function(t){n(t,!0)}),(function(t){n(t,!1)})),this.$fixedBodyRight.off(\"scroll\").on(\"scroll\",(function(){var t=e.$fixedBodyRight.scrollTop();e.$tableBody.scrollTop(t),e.$fixedBody&&e.$fixedBody.scrollTop(t)}))),this.options.filterControl&&t(this.$fixedColumns).off(\"keyup change\").on(\"keyup change\",(function(n){var r=t(n.target),i=r.val(),o=r.parents(\"th\").data(\"field\"),u=e.$header.find('th[data-field=\"'.concat(o,'\"]'));if(r.is(\"input\"))u.find(\"input\").val(i);else if(r.is(\"select\")){var f=u.find(\"select\");f.find(\"option[selected]\").removeAttr(\"selected\"),f.find('option[value=\"'.concat(i,'\"]')).attr(\"selected\",!0)}e.triggerSearch()}))}},{key:\"renderStickyHeader\",value:function(){if(this.options.stickyHeader&&(this.$stickyContainer=this.$container.find(\".sticky-header-container\"),f(i,\"renderStickyHeader\",this)([]),this.needFixedColumns&&this.options.fixedNumber&&this.$fixedColumns.css(\"z-index\",101).find(\".sticky-header-container\").css(\"right\",\"\").width(this.$fixedColumns.outerWidth()),this.needFixedColumns&&this.options.fixedRightNumber)){var t=this.$fixedColumnsRight.find(\".sticky-header-container\");this.$fixedColumnsRight.css(\"z-index\",101),t.css(\"left\",\"\").scrollLeft(t.find(\".table\").outerWidth()).width(this.$fixedColumnsRight.outerWidth())}}},{key:\"matchPositionX\",value:function(){this.options.stickyHeader&&this.$stickyContainer.eq(0).scrollLeft(this.$tableBody.scrollLeft())}}])}(t.BootstrapTable)}));\n", "/*\nTurbo 7.1.0\nCopyright \u00A9 2021 Basecamp, LLC\n */\n(function () {\n    if (window.Reflect === undefined || 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 =\n        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;\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    else {\n        prototype = window.Event.prototype;\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    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    static get observedAttributes() {\n        return [\"disabled\", \"loading\", \"src\"];\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        const { src } = this;\n        this.src = null;\n        this.src = src;\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\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\": return FrameLoadingStyle.lazy;\n        default: 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))$/);\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\n        ? url.href.slice(0, -(anchor.length + 1))\n        : 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 dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, { cancelable, bubbles: true, detail });\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.apply(null, { length: 36 }).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    }).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 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}\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\": return FetchMethod.get;\n        case \"post\": return FetchMethod.post;\n        case \"put\": return FetchMethod.put;\n        case \"patch\": return FetchMethod.patch;\n        case \"delete\": 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        var _a, _b;\n        const { fetchOptions } = this;\n        (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, 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                this.delegate.requestErrored(this, error);\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\", { cancelable: true, detail: { fetchResponse }, target: this.target });\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.isIdempotent ? 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 isIdempotent() {\n        return this.method == FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\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}\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    constructor(html) {\n        this.templateElement = document.createElement(\"template\");\n        this.templateElement.innerHTML = html;\n    }\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(message);\n        }\n        else {\n            return message;\n        }\n    }\n    get fragment() {\n        const fragment = document.createDocumentFragment();\n        for (const element of this.foreignElements) {\n            fragment.appendChild(document.importNode(element, true));\n        }\n        return fragment;\n    }\n    get foreignElements() {\n        return this.templateChildren.reduce((streamElements, child) => {\n            if (child.tagName.toLowerCase() == \"turbo-stream\") {\n                return [...streamElements, child];\n            }\n            else {\n                return streamElements;\n            }\n        }, []);\n    }\n    get templateChildren() {\n        return Array.from(this.templateElement.content.children);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\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: return FormEnctype.multipart;\n        case FormEnctype.plain: return FormEnctype.plain;\n        default: return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\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    static confirmMethod(message, element) {\n        return confirm(message);\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        return ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formaction\")) || this.formElement.getAttribute(\"action\") || formElementAction || \"\";\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 isIdempotent() {\n        return this.fetchRequest.isIdempotent;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    get confirmationMessage() {\n        return this.formElement.getAttribute(\"data-turbo-confirm\");\n    }\n    get needsConfirmation() {\n        return this.confirmationMessage !== null;\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        if (this.needsConfirmation) {\n            const answer = FormSubmission.confirmMethod(this.confirmationMessage, this.formElement);\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    prepareHeadersForRequest(headers, request) {\n        if (!request.isIdempotent) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                headers[\"X-CSRF-Token\"] = token;\n            }\n            headers[\"Accept\"] = [StreamMessage.contentType, headers[\"Accept\"]].join(\", \");\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        dispatch(\"turbo:submit-start\", { target: this.formElement, detail: { formSubmission: this } });\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        dispatch(\"turbo:submit-end\", { target: this.formElement, detail: Object.assign({ formSubmission: this }, this.result) });\n        this.delegate.formSubmissionFinished(this);\n    }\n    requestMustRedirect(request) {\n        return !request.isIdempotent && this.mustRedirect;\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 && value != null && formData.get(name) != value) {\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 getMetaContent(name) {\n    const element = document.querySelector(`meta[name=\"${name}\"]`);\n    return element && element.content;\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 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        return this.element.querySelector(\"[autofocus]\");\n    }\n    get permanentElements() {\n        return [...this.element.querySelectorAll(\"[id][data-turbo-permanent]\")];\n    }\n    getPermanentElementById(id) {\n        return this.element.querySelector(`#${id}[data-turbo-permanent]`);\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}\n\nclass FormInterceptor {\n    constructor(delegate, element) {\n        this.submitBubbled = ((event) => {\n            const form = event.target;\n            if (!event.defaultPrevented && form instanceof HTMLFormElement && form.closest(\"turbo-frame, html\") == this.element) {\n                const submitter = event.submitter || undefined;\n                const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.method;\n                if (method != \"dialog\" && this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmissionIntercepted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"submit\", this.submitBubbled);\n    }\n    stop() {\n        this.element.removeEventListener(\"submit\", this.submitBubbled);\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                this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise(resolve => this.resolveInterceptionPromise = resolve);\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, this.resolveInterceptionPromise);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\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();\n        }\n    }\n    invalidate() {\n        this.delegate.viewInvalidated();\n    }\n    prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        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    invalidate() {\n        this.element.innerHTML = \"\";\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)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = () => {\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\n            ? target\n            : target instanceof Node\n                ? target.parentElement\n                : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass Bardo {\n    constructor(permanentElementMap) {\n        this.permanentElementMap = permanentElementMap;\n    }\n    static preservingPermanentElements(permanentElementMap, callback) {\n        const bardo = new this(permanentElementMap);\n        bardo.enter();\n        callback();\n        bardo.leave();\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [, newPermanentElement] = this.permanentElementMap[id];\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        }\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, isPreview, willRender = true) {\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });\n    }\n    get shouldRender() {\n        return true;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    createScriptElement(element) {\n        if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n            return element;\n        }\n        else {\n            const createdScriptElement = document.createElement(\"script\");\n            if (this.cspNonce) {\n                createdScriptElement.nonce = this.cspNonce;\n            }\n            createdScriptElement.textContent = element.textContent;\n            createdScriptElement.async = false;\n            copyElementAttributes(createdScriptElement, element);\n            return createdScriptElement;\n        }\n    }\n    preservingPermanentElements(callback) {\n        Bardo.preservingPermanentElements(this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\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    get cspNonce() {\n        var _a;\n        return (_a = document.head.querySelector('meta[name=\"csp-nonce\"]')) === null || _a === void 0 ? void 0 : _a.getAttribute(\"content\");\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of [...sourceElement.attributes]) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\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        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(this.currentElement);\n        destinationRange.deleteContents();\n        const frameElement = this.newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            this.currentElement.appendChild(sourceRange.extractContents());\n        }\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            if (element) {\n                element.scrollIntoView({ block });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = this.createScriptElement(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}\n\nclass ProgressBar {\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    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: 9999;\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    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        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\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\n            ? element.getAttribute(\"content\")\n            : 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.tagName.toLowerCase();\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.tagName.toLowerCase();\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    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\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    clone() {\n        return new PageSnapshot(this.element.cloneNode(true), 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};\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.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, snapshotHTML, response, visitCachedSnapshot, willRender } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\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.scrolled = !willRender;\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.adapter.visitCompleted(this);\n            this.delegate.visitCompleted(this);\n            this.followRedirect();\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) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = this.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                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);\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML));\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);\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            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(request, response) {\n    }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\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({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(request, error) {\n        this.recordResponse({ statusCode: SystemStatusCode.networkFailure, redirected: false });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled) {\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\": return history.replaceState;\n            case \"advance\":\n            case \"restore\": 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().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        this.performScroll();\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, uuid(), options);\n    }\n    visitStarted(visit) {\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.changeHistory();\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            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(visit) {\n    }\n    pageInvalidated() {\n        this.reload();\n    }\n    visitFailed(visit) {\n    }\n    visitRendered(visit) {\n    }\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() {\n        window.location.reload();\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    removeStaleElements() {\n        const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n        for (const element of staleElements) {\n            element.remove();\n        }\n    }\n}\n\nclass FormSubmitObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.submitCaptured = () => {\n            removeEventListener(\"submit\", this.submitBubbled, false);\n            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                    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n                    if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n                        event.preventDefault();\n                        this.delegate.formSubmitted(form, submitter);\n                    }\n                }\n            }\n        });\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\n\nclass FrameRedirector {\n    constructor(element) {\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formInterceptor = new FormInterceptor(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formInterceptor.stop();\n    }\n    shouldInterceptLinkClick(element, url) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url);\n        }\n    }\n    shouldInterceptFormSubmission(element, submitter) {\n        return this.shouldSubmit(element, submitter);\n    }\n    formSubmissionIntercepted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.removeAttribute(\"reloadable\");\n            frame.delegate.formSubmissionIntercepted(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 frame = this.findFrameElement(element, submitter);\n        return frame ? frame != element.closest(\"turbo-frame\") : false;\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 LinkClickObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.clickCaptured = () => {\n            removeEventListener(\"click\", this.clickBubbled, false);\n            addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            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        if (target instanceof Element) {\n            return target.closest(\"a[href]:not([target^=_]):not([download])\");\n        }\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\n\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\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                if (formSubmission.method != FetchMethod.get) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = { action, response: { statusCode, responseHTML, redirected } };\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);\n            }\n            else {\n                await this.view.renderPage(snapshot);\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(formSubmission) {\n        const { formElement, submitter } = formSubmission;\n        const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n        return isAction(action) ? action : \"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 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(new StreamMessage(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    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head, body } = document;\n        documentElement.replaceChild(this.newHead, head);\n        documentElement.replaceChild(this.newElement, body);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = this.createScriptElement(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    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    prepareToRender() {\n        this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            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    mergeHead() {\n        this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        this.removeCurrentHeadProvisionalElements();\n        this.copyNewHeadProvisionalElements();\n    }\n    replaceBody() {\n        this.preservingPermanentElements(() => {\n            this.activateNewBody();\n            this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    copyNewHeadStylesheetElements() {\n        for (const element of this.newHeadStylesheetElements) {\n            document.head.appendChild(element);\n        }\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(this.createScriptElement(element));\n        }\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 = this.createScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    assignNewBody() {\n        if (document.body && this.newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(this.newElement);\n        }\n        else {\n            document.documentElement.appendChild(this.newElement);\n        }\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    }\n    renderPage(snapshot, isPreview = false, willRender = true) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, isPreview, willRender);\n        return this.render(renderer);\n    }\n    renderError(snapshot) {\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot() {\n        if (this.shouldCacheSnapshot) {\n            this.delegate.viewWillCacheSnapshot();\n            const { snapshot, 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    get shouldCacheSnapshot() {\n        return this.snapshot.isCacheable;\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(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);\n        this.formSubmitObserver = new FormSubmitObserver(this);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.frameRedirector = new FrameRedirector(document.documentElement);\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.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.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.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        this.navigator.proposeVisit(expandURL(location), options);\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        document.documentElement.appendChild(StreamMessage.wrap(message).fragment);\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\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, { action: \"restore\", historyChanged: true });\n        }\n        else {\n            this.adapter.pageInvalidated();\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willFollowLinkToLocation(link, location) {\n        return this.elementDriveEnabled(link)\n            && locationIsVisitable(location, this.snapshot.rootLocation)\n            && this.applicationAllowsFollowingLinkToLocation(link, location);\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        this.convertLinkWithMethodClickToFormSubmission(link) || this.visit(location.href, { action });\n    }\n    convertLinkWithMethodClickToFormSubmission(link) {\n        const linkMethod = link.getAttribute(\"data-turbo-method\");\n        if (linkMethod) {\n            const form = document.createElement(\"form\");\n            form.method = linkMethod;\n            form.action = link.getAttribute(\"href\") || \"undefined\";\n            form.hidden = true;\n            if (link.hasAttribute(\"data-turbo-confirm\")) {\n                form.setAttribute(\"data-turbo-confirm\", link.getAttribute(\"data-turbo-confirm\"));\n            }\n            const frame = this.getTargetFrameForLink(link);\n            if (frame) {\n                form.setAttribute(\"data-turbo-frame\", frame);\n                form.addEventListener(\"turbo:submit-start\", () => form.remove());\n            }\n            else {\n                form.addEventListener(\"submit\", () => form.remove());\n            }\n            document.body.appendChild(form);\n            return dispatch(\"submit\", { cancelable: true, target: form });\n        }\n        else {\n            return false;\n        }\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        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\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.elementDriveEnabled(form)\n            && (!submitter || this.elementDriveEnabled(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 }, resume) {\n        const event = this.notifyApplicationBeforeRender(element, resume);\n        return !event.defaultPrevented;\n    }\n    viewRenderedSnapshot(snapshot, isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    viewInvalidated() {\n        this.adapter.pageInvalidated();\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location) {\n        return dispatch(\"turbo:click\", { target: link, detail: { url: location.href }, cancelable: true });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", { detail: { url: location.href }, cancelable: true });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        markAsBusy(document.documentElement);\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, resume) {\n        return dispatch(\"turbo:before-render\", { detail: { newBody, resume }, cancelable: true });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        clearBusyState(document.documentElement);\n        return dispatch(\"turbo:load\", { detail: { url: this.location.href, timing } });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", { oldURL: oldURL.toString(), newURL: newURL.toString() }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", { detail: { fetchResponse }, target: frame, cancelable: true });\n    }\n    elementDriveEnabled(element) {\n        const container = element === null || element === void 0 ? void 0 : element.closest(\"[data-turbo]\");\n        if (this.drive) {\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        const action = link.getAttribute(\"data-turbo-action\");\n        return isAction(action) ? action : \"advance\";\n    }\n    getTargetFrameForLink(link) {\n        const frame = link.getAttribute(\"data-turbo-frame\");\n        if (frame) {\n            return frame;\n        }\n        else {\n            const container = link.closest(\"turbo-frame\");\n            if (container) {\n                return container.id;\n            }\n        }\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\nconst session = new 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    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\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});\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.settingSourceURL = false;\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.formInterceptor = new FormInterceptor(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            this.reloadable = false;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            this.linkInterceptor.start();\n            this.formInterceptor.start();\n            this.sourceURLChanged();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.linkInterceptor.stop();\n            this.formInterceptor.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\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.settingSourceURL && this.enabled && this.isActive && (this.reloadable || this.sourceURL != this.currentURL)) {\n            const previousURL = this.currentURL;\n            this.currentURL = this.sourceURL;\n            if (this.sourceURL) {\n                try {\n                    this.element.loaded = this.visit(expandURL(this.sourceURL));\n                    this.appearanceObserver.stop();\n                    await this.element.loaded;\n                    this.hasBeenLoaded = true;\n                }\n                catch (error) {\n                    this.currentURL = previousURL;\n                    throw error;\n                }\n            }\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 { body } = parseHTMLDocument(html);\n                const snapshot = new Snapshot(await this.extractForeignFrameElement(body));\n                const renderer = new FrameRenderer(this.view.snapshot, snapshot, false, false);\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                await this.view.render(renderer);\n                session.frameRendered(fetchResponse, this.element);\n                session.frameLoaded(this.element);\n                this.fetchResponseLoaded(fetchResponse);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            this.view.invalidate();\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.loadSourceURL();\n    }\n    shouldInterceptLinkClick(element, url) {\n        if (element.hasAttribute(\"data-turbo-method\")) {\n            return false;\n        }\n        else {\n            return this.shouldInterceptNavigation(element);\n        }\n    }\n    linkClickIntercepted(element, url) {\n        this.reloadable = true;\n        this.navigateFrame(element, url);\n    }\n    shouldInterceptFormSubmission(element, submitter) {\n        return this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmissionIntercepted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.reloadable = false;\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareHeadersForRequest(headers, request) {\n        headers[\"Turbo-Frame\"] = this.id;\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    requestFailedWithResponse(request, response) {\n        console.error(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        this.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender(snapshot, resume) {\n        return true;\n    }\n    viewRenderedSnapshot(snapshot, isPreview) {\n    }\n    viewInvalidated() {\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        this.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        frame.setAttribute(\"reloadable\", \"\");\n        frame.src = url;\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        const action = getAttribute(\"data-turbo-action\", submitter, element, frame);\n        if (isAction(action)) {\n            const { visitCachedSnapshot } = new SnapshotSubstitution(frame);\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                    session.visit(frame.src, { action, response, visitCachedSnapshot, willRender: false });\n                }\n            };\n        }\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            if (element = activateElement(container.querySelector(`turbo-frame#${id}`), this.currentURL)) {\n                return element;\n            }\n            if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.currentURL)) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n            console.error(`Response has no matching <turbo-frame id=\"${id}\"> element`);\n        }\n        catch (error) {\n            console.error(error);\n        }\n        return new FrameElement();\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.elementDriveEnabled(element)) {\n            return false;\n        }\n        if (submitter && !session.elementDriveEnabled(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    get reloadable() {\n        const frame = this.findFrameElement(this.element);\n        return frame.hasAttribute(\"reloadable\");\n    }\n    set reloadable(value) {\n        const frame = this.findFrameElement(this.element);\n        if (value) {\n            frame.setAttribute(\"reloadable\", \"\");\n        }\n        else {\n            frame.removeAttribute(\"reloadable\");\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.settingSourceURL = true;\n        this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        this.currentURL = this.element.src;\n        this.settingSourceURL = false;\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\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}\nclass SnapshotSubstitution {\n    constructor(element) {\n        this.visitCachedSnapshot = ({ element }) => {\n            var _a;\n            const { id, clone } = this;\n            (_a = element.querySelector(\"#\" + id)) === null || _a === void 0 ? void 0 : _a.replaceWith(clone);\n        };\n        this.clone = element.cloneNode(true);\n        this.id = element.id;\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\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(e => {\n            e.innerHTML = \"\";\n            e.append(this.templateContent);\n        });\n    }\n};\n\nclass StreamElement extends HTMLElement {\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            if (this.dispatchEvent(this.beforeRenderEvent)) {\n                await nextAnimationFrame();\n                this.performAction();\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 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\", { bubbles: true, cancelable: true });\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\nFrameElement.delegateConstructor = FrameController;\ncustomElements.define(\"turbo-frame\", FrameElement);\ncustomElements.define(\"turbo-stream\", StreamElement);\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    while (element = element.parentElement) {\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    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { PageRenderer, PageSnapshot, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, 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", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, { received: this.dispatchMessageEvent.bind(this) })\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  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name }\n  }\n}\n\ncustomElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n", "// Entry point for the build script in your package.json\nimport \"@hotwired/turbo-rails\"\nimport \"@rails/actioncable\"\n\nimport \"./src/jquery\"\nimport \"./src/jquery.visible\"\nimport \"./src/jquery.triggerNativeEvent\"\nimport \"./src/jquery-ui.min\"\nimport \"./src/bootstrap\"\nimport \"./src/admin-walkthrough\"\nimport \"./src/string_tools\"\nimport \"./src/all-common\"\nimport \"./controllers\"\nimport \"./src/admin-support\"\nimport \"./src/overlayScrollbars.min\"\nimport \"./src/jquery.maskedinput.min\"\n// The latest version of select2 does not properly register globally -- so we are importing into a variable and calling it\nimport \"./src/select2.custom\"\nimport \"./src/bootstrap-table.min\"\nimport \"./src/bootstrap-table-sticky-header.min\"\nimport \"./src/bootstrap-table-fixed-columns.min\"\nimport \"./src/jquery.table-sorter\"\nimport \"./src/jquery.stickytableheaders\"\nimport \"./src/jquery.mjs.nestedSortable\"\nimport \"./src/advanced-report\"\nimport \"./src/jquery.multiselect-revised\"\nimport \"./src/jquery.multisortable\"\n", "import jquery from \"jquery\"\nwindow.jQuery = jquery\nwindow.$ = jquery", "(function($){\n\n    /**\n     * Copyright 2012, Digital Fusion\n     * Licensed under the MIT license.\n     * http://teamdf.com/jquery-plugins/license/\n     *\n     * @author Sam Sehnert\n     * @desc A small plugin that checks whether elements are within\n     *\t\t the user visible viewport of a web browser.\n     *\t\t only accounts for vertical position, not horizontal.\n     *\n     * Updated - to accept percents as well.  When a percent is passed to it it requires a certain percent of the element to be visible before returning true. - neil\n     */\n    $.fn.visible = function(partial){\n\n        var $t\t\t\t\t= $(this),\n            $w\t\t\t\t= $(window),\n            viewTop\t\t\t= $w.scrollTop(),\n            viewBottom\t\t= viewTop + $w.height(),\n            _top\t\t\t= $t.offset().top,\n            _bottom\t\t\t= _top + $t.height(),\n            compareTop\t\t= typeof partial == 'number' ? (_bottom-((_bottom-_top)*(partial/100))) : (partial === true ? _bottom : _top),\n            compareBottom\t= typeof partial == 'number' ? (_top+((_bottom-_top)*(partial/100))) : (partial === true ? _top : _bottom);\n        return ((compareBottom <= viewBottom) && (compareTop >= viewTop));\n    };\n    $.fn.elementVisible = $.fn.visible;\n\n})(jQuery);", "(function($){\n    $.fn.triggerNativeEvent = function(eventType){\n        this.each(function() {\n            let event = new Event(eventType, {bubbles: true});\n            this.dispatchEvent(event);\n        });\n    };\n})(jQuery);", "/*! jQuery UI - v1.13.2 - 2022-07-14\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n!function(t){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)}(function(V){\"use strict\";V.ui=V.ui||{};V.ui.version=\"1.13.2\";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,\"events\"))&&e.remove&&V(i).triggerHandler(\"remove\");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(\".\")[0],l=r+\"-\"+(t=t.split(\".\")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]=\"function\"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+\".\"+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],a.call(s[n],e)&&void 0!==i&&(V.isPlainObject(i)?t[e]=V.isPlainObject(t[e])?V.widget.extend({},t[e],i):V.widget.extend({},i):t[e]=i);return t},V.widget.bridge=function(o,e){var a=e.prototype.widgetFullName||o;V.fn[o]=function(i){var t=\"string\"==typeof i,s=r.call(arguments,1),n=this;return t?this.length||\"instance\"!==i?this.each(function(){var t,e=V.data(this,a);return\"instance\"===i?(n=e,!1):e?\"function\"!=typeof e[i]||\"_\"===i.charAt(0)?V.error(\"no such method '\"+i+\"' for \"+o+\" widget instance\"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error(\"cannot call methods on \"+o+\" prior to initialization; attempted to call method '\"+i+\"'\")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V.data(this,a);t?(t.option(i||{}),t._init&&t._init()):V.data(this,a,new e(i,this))})),n}},V.Widget=function(){},V.Widget._childConstructors=[],V.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"<div>\",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace=\".\"+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger(\"create\",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr(\"aria-disabled\"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if(\"string\"==typeof t)if(o={},t=(i=t.split(\".\")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return\"classes\"===t&&this._setOptionClasses(e),this.options[t]=e,\"disabled\"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=V(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+\"-disabled\",null,!!t),t&&(this._removeClass(this.hoverable,null,\"ui-state-hover\"),this._removeClass(this.focusable,null,\"ui-state-focus\"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],a=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=a.classesElementLookup[t[s]]||V(),i=n.add?(function(){var i=[];n.element.each(function(t,e){V.map(a.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),a._on(V(i),{remove:\"_untrackClassesElement\"})}(),V(V.uniqueSort(i.get().concat(n.element.get())))):V(i.not(n.element).get()),a.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=V.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\\S+/g)||[],!0),n.extra&&t(n.extra.match(/\\S+/g)||[]),o.join(\" \")},_untrackClassesElement:function(i){var s=this;V.each(s.classesElementLookup,function(t,e){-1!==V.inArray(i.target,e)&&(s.classesElementLookup[t]=V(e.not(i.target).get()))}),this._off(V(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n=\"string\"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s=\"boolean\"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var a,r=this;\"boolean\"!=typeof n&&(t=o,o=n,n=!1),t?(o=a=V(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,a=this.widget()),V.each(t,function(t,e){function i(){if(n||!0!==r.options.disabled&&!V(this).hasClass(\"ui-state-disabled\"))return(\"string\"==typeof e?r[e]:e).apply(r,arguments)}\"string\"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||V.guid++);var s=t.match(/^([\\w:-]*)\\s*(.*)$/),t=s[1]+r.eventNamespace,s=s[2];s?a.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||\"\").split(\" \").join(this.eventNamespace+\" \")+this.eventNamespace,t.off(e),this.bindings=V(this.bindings.not(t).get()),this.focusable=V(this.focusable.not(t).get()),this.hoverable=V(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return(\"string\"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(V(t.currentTarget),null,\"ui-state-hover\")},mouseleave:function(t){this._removeClass(V(t.currentTarget),null,\"ui-state-hover\")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(V(t.currentTarget),null,\"ui-state-focus\")},focusout:function(t){this._removeClass(V(t.currentTarget),null,\"ui-state-focus\")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=V.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!(\"function\"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},V.each({show:\"fadeIn\",hide:\"fadeOut\"},function(o,a){V.Widget.prototype[\"_\"+o]=function(e,t,i){var s,n=(t=\"string\"==typeof t?{effect:t}:t)?!0!==t&&\"number\"!=typeof t&&t.effect||a:o;\"number\"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!V.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&V.effects&&V.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){V(this)[o](),i&&i.call(e[0]),t()})}});var s,x,k,o,l,h,c,u,C;V.widget;function D(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function I(t,e){return parseInt(V.css(t,e),10)||0}function T(t){return null!=t&&t===t.window}x=Math.max,k=Math.abs,o=/left|center|right/,l=/top|center|bottom/,h=/[\\+\\-]\\d+(\\.[\\d]+)?%?/,c=/^\\w+/,u=/%$/,C=V.fn.position,V.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=V(\"<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>\"),i=e.children()[0];return V(\"body\").append(e),t=i.offsetWidth,e.css(\"overflow\",\"scroll\"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?\"\":t.element.css(\"overflow-x\"),i=t.isWindow||t.isDocument?\"\":t.element.css(\"overflow-y\"),e=\"scroll\"===e||\"auto\"===e&&t.width<t.element[0].scrollWidth;return{width:\"scroll\"===i||\"auto\"===i&&t.height<t.element[0].scrollHeight?V.position.scrollbarWidth():0,height:e?V.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=V(t||window),i=T(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?V(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},V.fn.position=function(u){if(!u||!u.of)return C.apply(this,arguments);var d,p,f,g,m,t,_=\"string\"==typeof(u=V.extend({},u)).of?V(document).find(u.of):V(u.of),v=V.position.getWithinInfo(u.within),b=V.position.getScrollInfo(v),y=(u.collision||\"flip\").split(\" \"),w={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:T(t)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(u.at=\"left top\"),p=e.width,f=e.height,m=V.extend({},g=e.offset),V.each([\"my\",\"at\"],function(){var t,e,i=(u[this]||\"\").split(\" \");(i=1===i.length?o.test(i[0])?i.concat([\"center\"]):l.test(i[0])?[\"center\"].concat(i):[\"center\",\"center\"]:i)[0]=o.test(i[0])?i[0]:\"center\",i[1]=l.test(i[1])?i[1]:\"center\",t=h.exec(i[0]),e=h.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],u[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===y.length&&(y[1]=y[0]),\"right\"===u.at[0]?m.left+=p:\"center\"===u.at[0]&&(m.left+=p/2),\"bottom\"===u.at[1]?m.top+=f:\"center\"===u.at[1]&&(m.top+=f/2),d=D(w.at,p,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,a=V(this),r=a.outerWidth(),l=a.outerHeight(),e=I(this,\"marginLeft\"),s=I(this,\"marginTop\"),n=r+e+I(this,\"marginRight\")+b.width,o=l+s+I(this,\"marginBottom\")+b.height,h=V.extend({},m),c=D(w.my,a.outerWidth(),a.outerHeight());\"right\"===u.my[0]?h.left-=r:\"center\"===u.my[0]&&(h.left-=r/2),\"bottom\"===u.my[1]?h.top-=l:\"center\"===u.my[1]&&(h.top-=l/2),h.left+=c[0],h.top+=c[1],i={marginLeft:e,marginTop:s},V.each([\"left\",\"top\"],function(t,e){V.ui.position[y[t]]&&V.ui.position[y[t]][e](h,{targetWidth:p,targetHeight:f,elemWidth:r,elemHeight:l,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+c[0],d[1]+c[1]],my:u.my,at:u.at,within:v,elem:a})}),u.using&&(t=function(t){var e=g.left-h.left,i=e+p-r,s=g.top-h.top,n=s+f-l,o={target:{element:_,left:g.left,top:g.top,width:p,height:f},element:{element:a,left:h.left,top:h.top,width:r,height:l},horizontal:i<0?\"left\":0<e?\"right\":\"center\",vertical:n<0?\"top\":0<s?\"bottom\":\"middle\"};p<r&&k(e+i)<p&&(o.horizontal=\"center\"),f<l&&k(s+n)<f&&(o.vertical=\"middle\"),x(k(e),k(i))>x(k(s),k(n))?o.important=\"horizontal\":o.important=\"vertical\",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0<a&&r<=0?(i=t.left+a+e.collisionWidth-n-s,t.left+=a-i):t.left=!(0<r&&a<=0)&&r<a?s+n-e.collisionWidth:s:0<a?t.left+=a:0<r?t.left-=r:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,a=s-o,r=o+e.collisionHeight-n-s;e.collisionHeight>n?0<a&&r<=0?(i=t.top+a+e.collisionHeight-n-s,t.top+=a-i):t.top=!(0<r&&a<=0)&&r<a?s+n-e.collisionHeight:s:0<a?t.top+=a:0<r?t.top-=r:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,a=t.left-e.collisionPosition.marginLeft,r=a-o,l=a+e.collisionWidth-n-o,h=\"left\"===e.my[0]?-e.elemWidth:\"right\"===e.my[0]?e.elemWidth:0,i=\"left\"===e.at[0]?e.targetWidth:\"right\"===e.at[0]?-e.targetWidth:0,a=-2*e.offset[0];r<0?((s=t.left+h+i+a+e.collisionWidth-n-s)<0||s<k(r))&&(t.left+=h+i+a):0<l&&(0<(o=t.left-e.collisionPosition.marginLeft+h+i+a-o)||k(o)<l)&&(t.left+=h+i+a)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,a=t.top-e.collisionPosition.marginTop,r=a-o,l=a+e.collisionHeight-n-o,h=\"top\"===e.my[1]?-e.elemHeight:\"bottom\"===e.my[1]?e.elemHeight:0,i=\"top\"===e.at[1]?e.targetHeight:\"bottom\"===e.at[1]?-e.targetHeight:0,a=-2*e.offset[1];r<0?((s=t.top+h+i+a+e.collisionHeight-n-s)<0||s<k(r))&&(t.top+=h+i+a):0<l&&(0<(o=t.top-e.collisionPosition.marginTop+h+i+a-o)||k(o)<l)&&(t.top+=h+i+a)}},flipfit:{left:function(){V.ui.position.flip.left.apply(this,arguments),V.ui.position.fit.left.apply(this,arguments)},top:function(){V.ui.position.flip.top.apply(this,arguments),V.ui.position.fit.top.apply(this,arguments)}}};V.ui.position,V.extend(V.expr.pseudos,{data:V.expr.createPseudo?V.expr.createPseudo(function(e){return function(t){return!!V.data(t,e)}}):function(t,e,i){return!!V.data(t,i[3])}}),V.fn.extend({disableSelection:(t=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\",function(){return this.on(t+\".ui-disableSelection\",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(\".ui-disableSelection\")}});var t,d=V,p={},e=p.toString,f=/^([\\-+])=\\s*(\\d+\\.?\\d*)/,g=[{re:/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),t[4]?(parseInt(t[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16),t[4]?(parseInt(t[4]+t[4],16)/255).toFixed(2):1]}},{re:/hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,space:\"hsla\",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],m=d.Color=function(t,e,i,s){return new d.Color.fn.parse(t,e,i,s)},_={rgba:{props:{red:{idx:0,type:\"byte\"},green:{idx:1,type:\"byte\"},blue:{idx:2,type:\"byte\"}}},hsla:{props:{hue:{idx:0,type:\"degrees\"},saturation:{idx:1,type:\"percent\"},lightness:{idx:2,type:\"percent\"}}}},v={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},b=m.support={},y=d(\"<p>\")[0],w=d.each;function P(t){return null==t?t+\"\":\"object\"==typeof t?p[e.call(t)]||\"object\":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||\"rgba\";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?(\"0,0,0,0\"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText=\"background-color:rgba(1,1,1,.5)\",b.rgba=-1<y.style.backgroundColor.indexOf(\"rgba\"),w(_,function(t,e){e.cache=\"_\"+t,e.props.alpha={idx:3,type:\"percent\",def:1}}),d.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(t,e){p[\"[object \"+e+\"]\"]=e.toLowerCase()}),(m.fn=d.extend(m.prototype,{parse:function(n,t,e,i){if(void 0===n)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=d(n).css(t),t=void 0);var o=this,s=P(n),a=this._rgba=[];return void 0!==t&&(n=[n,t,e,i],s=\"array\"),\"string\"===s?this.parse(S(n)||B._default):\"array\"===s?(w(_.rgba.props,function(t,e){a[e.idx]=M(n[e.idx],e)}),this):\"object\"===s?(w(_,n instanceof m?function(t,e){n[e.cache]&&(o[e.cache]=n[e.cache].slice())}:function(t,i){var s=i.cache;w(i.props,function(t,e){if(!o[s]&&i.to){if(\"alpha\"===t||null==n[t])return;o[s]=i.to(o._rgba)}o[s][e.idx]=M(n[t],e,!0)}),o[s]&&d.inArray(null,o[s].slice(0,3))<0&&(null==o[s][3]&&(o[s][3]=1),i.from&&(o._rgba=i.from(o[s])))}),this):void 0},is:function(t){var n=m(t),o=!0,a=this;return w(_,function(t,e){var i,s=n[e.cache];return s&&(i=a[e.cache]||e.to&&e.to(a._rgba)||[],w(e.props,function(t,e){if(null!=s[e.idx])return o=s[e.idx]===i[e.idx]})),o}),o},_space:function(){var i=[],s=this;return w(_,function(t,e){s[e.cache]&&i.push(t)}),i.pop()},transition:function(t,a){var e=(h=m(t))._space(),i=_[e],t=0===this.alpha()?m(\"transparent\"):this,r=t[i.cache]||i.to(t._rgba),l=r.slice(),h=h[i.cache];return w(i.props,function(t,e){var i=e.idx,s=r[i],n=h[i],o=v[e.type]||{};null!==n&&(null===s?l[i]=n:(o.mod&&(n-s>o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t=\"rgba(\",e=d.map(this._rgba,function(t,e){return null!=t?t:2<e?1:0});return 1===e[3]&&(e.pop(),t=\"rgb(\"),t+e.join()+\")\"},toHslaString:function(){var t=\"hsla(\",e=d.map(this.hsla(),function(t,e){return null==t&&(t=2<e?1:0),t=e&&e<3?Math.round(100*t)+\"%\":t});return 1===e[3]&&(e.pop(),t=\"hsl(\"),t+e.join()+\")\"},toHexString:function(t){var e=this._rgba.slice(),i=e.pop();return t&&e.push(~~(255*i)),\"#\"+d.map(e,function(t){return 1===(t=(t||0).toString(16)).length?\"0\"+t:t}).join(\"\")},toString:function(){return 0===this._rgba[3]?\"transparent\":this.toRgbaString()}})).parse.prototype=m.fn,_.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/255,i=t[1]/255,s=t[2]/255,n=t[3],o=Math.max(e,i,s),a=Math.min(e,i,s),r=o-a,l=o+a,t=.5*l,i=a===o?0:e===o?60*(i-s)/r+360:i===o?60*(s-e)/r+120:60*(e-i)/r+240,l=0==r?0:t<=.5?r/l:r/(2-l);return[Math.round(i)%360,l,t,null==n?1:n]},_.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],t=t[3],i=s<=.5?s*(1+i):s+i-s*i,s=2*s-i;return[Math.round(255*H(s,i,e+1/3)),Math.round(255*H(s,i,e)),Math.round(255*H(s,i,e-1/3)),t]},w(_,function(l,t){var e=t.props,o=t.cache,a=t.to,r=t.from;m.fn[l]=function(t){if(a&&!this[o]&&(this[o]=a(this._rgba)),void 0===t)return this[o].slice();var i=P(t),s=\"array\"===i||\"object\"===i?t:arguments,n=this[o].slice();return w(e,function(t,e){t=s[\"object\"===i?t:e.idx];null==t&&(t=n[e.idx]),n[e.idx]=M(t,e)}),r?((t=m(r(n)))[o]=n,t):m(n)},w(e,function(a,r){m.fn[a]||(m.fn[a]=function(t){var e,i=P(t),s=\"alpha\"===a?this._hsla?\"hsla\":\"rgba\":l,n=this[s](),o=n[r.idx];return\"undefined\"===i?o:(\"function\"===i&&(i=P(t=t.call(this,o))),null==t&&r.empty?this:(\"string\"===i&&(e=f.exec(t))&&(t=o+parseFloat(e[2])*(\"+\"===e[1]?1:-1)),n[r.idx]=t,this[s](n)))})})}),(m.hook=function(t){t=t.split(\" \");w(t,function(t,o){d.cssHooks[o]={set:function(t,e){var i,s,n=\"\";if(\"transparent\"!==e&&(\"string\"!==P(e)||(i=S(e)))){if(e=m(i||e),!b.rgba&&1!==e._rgba[3]){for(s=\"backgroundColor\"===o?t.parentNode:t;(\"\"===n||\"transparent\"===n)&&s&&s.style;)try{n=d.css(s,\"backgroundColor\"),s=s.parentNode}catch(t){}e=e.blend(n&&\"transparent\"!==n?n:\"_default\")}e=e.toRgbaString()}try{t.style[o]=e}catch(t){}}},d.fx.step[o]=function(t){t.colorInit||(t.start=m(t.elem,o),t.end=m(t.end),t.colorInit=!0),d.cssHooks[o].set(t.elem,t.start.transition(t.end,t.pos))}})})(\"backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\"),d.cssHooks.borderColor={expand:function(i){var s={};return w([\"Top\",\"Right\",\"Bottom\",\"Left\"],function(t,e){s[\"border\"+e+\"Color\"]=i}),s}};var z,A,O,N,E,W,F,L,R,Y,B=d.Color.names={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\",transparent:[null,null,null,0],_default:\"#ffffff\"},j=\"ui-effects-\",q=\"ui-effects-style\",K=\"ui-effects-animated\";function U(t){var e,i,s=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,n={};if(s&&s.length&&s[0]&&s[s[0]])for(i=s.length;i--;)\"string\"==typeof s[e=s[i]]&&(n[e.replace(/-([\\da-z])/gi,function(t,e){return e.toUpperCase()})]=s[e]);else for(e in s)\"string\"==typeof s[e]&&(n[e]=s[e]);return n}function X(t,e,i,s){return t={effect:t=V.isPlainObject(t)?(e=t).effect:t},\"function\"==typeof(e=null==e?{}:e)&&(s=e,i=null,e={}),\"number\"!=typeof e&&!V.fx.speeds[e]||(s=i,i=e,e={}),\"function\"==typeof i&&(s=i,i=null),e&&V.extend(t,e),i=i||e.duration,t.duration=V.fx.off?0:\"number\"==typeof i?i:i in V.fx.speeds?V.fx.speeds[i]:V.fx.speeds._default,t.complete=s||e.complete,t}function $(t){return!t||\"number\"==typeof t||V.fx.speeds[t]||(\"string\"==typeof t&&!V.effects.effect[t]||(\"function\"==typeof t||\"object\"==typeof t&&!t.effect))}function G(t,e){var i=e.outerWidth(),e=e.outerHeight(),t=/^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/.exec(t)||[\"\",0,i,e,0];return{top:parseFloat(t[1])||0,right:\"auto\"===t[2]?i:parseFloat(t[2]),bottom:\"auto\"===t[3]?e:parseFloat(t[3]),left:parseFloat(t[4])||0}}V.effects={effect:{}},N=[\"add\",\"remove\",\"toggle\"],E={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1},V.each([\"borderLeftStyle\",\"borderRightStyle\",\"borderBottomStyle\",\"borderTopStyle\"],function(t,e){V.fx.step[e]=function(t){(\"none\"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(d.style(t.elem,e,t.end),t.setAttr=!0)}}),V.fn.addBack||(V.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),V.effects.animateClass=function(n,t,e,i){var o=V.speed(t,e,i);return this.queue(function(){var i=V(this),t=i.attr(\"class\")||\"\",e=(e=o.children?i.find(\"*\").addBack():i).map(function(){return{el:V(this),start:U(this)}}),s=function(){V.each(N,function(t,e){n[e]&&i[e+\"Class\"](n[e])})};s(),e=e.map(function(){return this.end=U(this.el[0]),this.diff=function(t,e){var i,s,n={};for(i in e)s=e[i],t[i]!==s&&(E[i]||!V.fx.step[i]&&isNaN(parseFloat(s))||(n[i]=s));return n}(this.start,this.end),this}),i.attr(\"class\",t),e=e.map(function(){var t=this,e=V.Deferred(),i=V.extend({},o,{queue:!1,complete:function(){e.resolve(t)}});return this.el.animate(this.diff,i),e.promise()}),V.when.apply(V,e.get()).done(function(){s(),V.each(arguments,function(){var e=this.el;V.each(this.diff,function(t){e.css(t,\"\")})}),o.complete.call(i[0])})})},V.fn.extend({addClass:(O=V.fn.addClass,function(t,e,i,s){return e?V.effects.animateClass.call(this,{add:t},e,i,s):O.apply(this,arguments)}),removeClass:(A=V.fn.removeClass,function(t,e,i,s){return 1<arguments.length?V.effects.animateClass.call(this,{remove:t},e,i,s):A.apply(this,arguments)}),toggleClass:(z=V.fn.toggleClass,function(t,e,i,s,n){return\"boolean\"==typeof e||void 0===e?i?V.effects.animateClass.call(this,e?{add:t}:{remove:t},i,s,n):z.apply(this,arguments):V.effects.animateClass.call(this,{toggle:t},e,i,s)}),switchClass:function(t,e,i,s,n){return V.effects.animateClass.call(this,{add:e,remove:t},i,s,n)}}),V.expr&&V.expr.pseudos&&V.expr.pseudos.animated&&(V.expr.pseudos.animated=(W=V.expr.pseudos.animated,function(t){return!!V(t).data(K)||W(t)})),!1!==V.uiBackCompat&&V.extend(V.effects,{save:function(t,e){for(var i=0,s=e.length;i<s;i++)null!==e[i]&&t.data(j+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;s<n;s++)null!==e[s]&&(i=t.data(j+e[s]),t.css(e[s],i))},setMode:function(t,e){return e=\"toggle\"===e?t.is(\":hidden\")?\"show\":\"hide\":e},createWrapper:function(i){if(i.parent().is(\".ui-effects-wrapper\"))return i.parent();var s={width:i.outerWidth(!0),height:i.outerHeight(!0),float:i.css(\"float\")},t=V(\"<div></div>\").addClass(\"ui-effects-wrapper\").css({fontSize:\"100%\",background:\"transparent\",border:\"none\",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger(\"focus\"),t=i.parent(),\"static\"===i.css(\"position\")?(t.css({position:\"relative\"}),i.css({position:\"relative\"})):(V.extend(s,{position:i.css(\"position\"),zIndex:i.css(\"z-index\")}),V.each([\"top\",\"left\",\"bottom\",\"right\"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]=\"auto\")}),i.css({position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(\".ui-effects-wrapper\")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger(\"focus\")),t}}),V.extend(V.effects,{version:\"1.13.2\",define:function(t,e,i){return i||(i=e,e=\"effect\"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s=\"horizontal\"!==i?(e||100)/100:1,e=\"vertical\"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1<e&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(q,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(q)||\"\",t.removeData(q)},mode:function(t,e){t=t.is(\":hidden\");return\"toggle\"===e&&(e=t?\"show\":\"hide\"),e=(t?\"hide\"===e:\"show\"===e)?\"none\":e},getBaseline:function(t,e){var i,s;switch(t[0]){case\"top\":i=0;break;case\"middle\":i=.5;break;case\"bottom\":i=1;break;default:i=t[0]/e.height}switch(t[1]){case\"left\":s=0;break;case\"center\":s=.5;break;case\"right\":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(t){var e,i=t.css(\"position\"),s=t.position();return t.css({marginTop:t.css(\"marginTop\"),marginBottom:t.css(\"marginBottom\"),marginLeft:t.css(\"marginLeft\"),marginRight:t.css(\"marginRight\")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()),/^(static|relative)/.test(i)&&(i=\"absolute\",e=V(\"<\"+t[0].nodeName+\">\").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css(\"display\"))?\"inline-block\":\"block\",visibility:\"hidden\",marginTop:t.css(\"marginTop\"),marginBottom:t.css(\"marginBottom\"),marginLeft:t.css(\"marginLeft\"),marginRight:t.css(\"marginRight\"),float:t.css(\"float\")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass(\"ui-effects-placeholder\"),t.data(j+\"placeholder\",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+\"placeholder\",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0<i[0]&&(o[e]=i[0]*n+i[1])}),o}}),V.fn.extend({effect:function(){function t(t){var e=V(this),i=V.effects.mode(e,r)||o;e.data(K,!0),l.push(i),o&&(\"show\"===i||i===o&&\"hide\"===i)&&e.show(),o&&\"none\"===i||V.effects.saveStyle(e),\"function\"==typeof t&&t()}var s=X.apply(this,arguments),n=V.effects.effect[s.effect],o=n.mode,e=s.queue,i=e||\"fx\",a=s.complete,r=s.mode,l=[];return V.fx.off||!n?r?this[r](s.duration,a):this.each(function(){a&&a.call(this)}):!1===e?this.each(t).each(h):this.queue(i,t).queue(i,h);function h(t){var e=V(this);function i(){\"function\"==typeof a&&a.call(e[0]),\"function\"==typeof t&&t()}s.mode=l.shift(),!1===V.uiBackCompat||o?\"none\"===s.mode?(e[r](),i()):n.call(e[0],s,function(){e.removeData(K),V.effects.cleanUp(e),\"hide\"===s.mode&&e.hide(),i()}):(e.is(\":hidden\")?\"hide\"===r:\"show\"===r)?(e[r](),i()):n.call(e[0],s,i)}},show:(R=V.fn.show,function(t){if($(t))return R.apply(this,arguments);t=X.apply(this,arguments);return t.mode=\"show\",this.effect.call(this,t)}),hide:(L=V.fn.hide,function(t){if($(t))return L.apply(this,arguments);t=X.apply(this,arguments);return t.mode=\"hide\",this.effect.call(this,t)}),toggle:(F=V.fn.toggle,function(t){if($(t)||\"boolean\"==typeof t)return F.apply(this,arguments);t=X.apply(this,arguments);return t.mode=\"toggle\",this.effect.call(this,t)}),cssUnit:function(t){var i=this.css(t),s=[];return V.each([\"em\",\"px\",\"%\",\"pt\"],function(t,e){0<i.indexOf(e)&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css(\"clip\",\"rect(\"+t.top+\"px \"+t.right+\"px \"+t.bottom+\"px \"+t.left+\"px)\"):G(this.css(\"clip\"),this)},transfer:function(t,e){var i=V(this),s=V(t.to),n=\"fixed\"===s.css(\"position\"),o=V(\"body\"),a=n?o.scrollTop():0,r=n?o.scrollLeft():0,o=s.offset(),o={top:o.top-a,left:o.left-r,height:s.innerHeight(),width:s.innerWidth()},s=i.offset(),l=V(\"<div class='ui-effects-transfer'></div>\");l.appendTo(\"body\").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?\"fixed\":\"absolute\"}).animate(o,t.duration,t.easing,function(){l.remove(),\"function\"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),\"string\"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each([\"Quad\",\"Cubic\",\"Quart\",\"Quint\",\"Expo\"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing[\"easeIn\"+t]=e,V.easing[\"easeOut\"+t]=function(t){return 1-e(1-t)},V.easing[\"easeInOut\"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define(\"blind\",\"hide\",function(t,e){var i={up:[\"bottom\",\"top\"],vertical:[\"bottom\",\"top\"],down:[\"top\",\"bottom\"],left:[\"right\",\"left\"],horizontal:[\"right\",\"left\"],right:[\"left\",\"right\"]},s=V(this),n=t.direction||\"up\",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],\"show\"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define(\"bounce\",function(t,e){var i,s,n=V(this),o=t.mode,a=\"hide\"===o,r=\"show\"===o,l=t.direction||\"up\",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p=\"up\"===l||\"down\"===l?\"top\":\"left\",f=\"up\"===l||\"left\"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n[\"top\"==p?\"outerHeight\":\"outerWidth\"]()/3,r&&((s={opacity:1})[p]=l,n.css(\"opacity\",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g<c;g++)(i={})[p]=(f?\"-=\":\"+=\")+h,n.animate(i,u,d).animate(s,u,d),h=a?2*h:h/2;a&&((i={opacity:0})[p]=(f?\"-=\":\"+=\")+h,n.animate(i,u,d)),n.queue(e),V.effects.unshift(n,t,1+o)}),V.effects.define(\"clip\",\"hide\",function(t,e){var i={},s=V(this),n=t.direction||\"vertical\",o=\"both\"===n,a=o||\"horizontal\"===n,o=o||\"vertical\"===n,n=s.cssClip();i.clip={top:o?(n.bottom-n.top)/2:n.top,right:a?(n.right-n.left)/2:n.right,bottom:o?(n.bottom-n.top)/2:n.bottom,left:a?(n.right-n.left)/2:n.left},V.effects.createPlaceholder(s),\"show\"===t.mode&&(s.cssClip(i.clip),i.clip=n),s.animate(i,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define(\"drop\",\"hide\",function(t,e){var i=V(this),s=\"show\"===t.mode,n=t.direction||\"left\",o=\"up\"===n||\"down\"===n?\"top\":\"left\",a=\"up\"===n||\"left\"===n?\"-=\":\"+=\",r=\"+=\"==a?\"-=\":\"+=\",l={opacity:0};V.effects.createPlaceholder(i),n=t.distance||i[\"top\"==o?\"outerHeight\":\"outerWidth\"](!0)/2,l[o]=a+n,s&&(i.css(l),l[o]=r+n,l.opacity=1),i.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define(\"explode\",\"hide\",function(t,e){var i,s,n,o,a,r,l=t.pieces?Math.round(Math.sqrt(t.pieces)):3,h=l,c=V(this),u=\"show\"===t.mode,d=c.show().css(\"visibility\",\"hidden\").offset(),p=Math.ceil(c.outerWidth()/h),f=Math.ceil(c.outerHeight()/l),g=[];function m(){g.push(this),g.length===l*h&&(c.css({visibility:\"visible\"}),V(g).remove(),e())}for(i=0;i<l;i++)for(o=d.top+i*f,r=i-(l-1)/2,s=0;s<h;s++)n=d.left+s*p,a=s-(h-1)/2,c.clone().appendTo(\"body\").wrap(\"<div></div>\").css({position:\"absolute\",visibility:\"visible\",left:-s*p,top:-i*f}).parent().addClass(\"ui-effects-explode\").css({position:\"absolute\",overflow:\"hidden\",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define(\"fade\",\"toggle\",function(t,e){var i=\"show\"===t.mode;V(this).css(\"opacity\",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define(\"fold\",\"hide\",function(e,t){var i=V(this),s=e.mode,n=\"show\"===s,o=\"hide\"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?[\"right\",\"bottom\"]:[\"bottom\",\"right\"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define(\"highlight\",\"show\",function(t,e){var i=V(this),s={backgroundColor:i.css(\"backgroundColor\")};\"hide\"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:\"none\",backgroundColor:t.color||\"#ffff99\"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define(\"size\",function(s,e){var n,i=V(this),t=[\"fontSize\"],o=[\"borderTopWidth\",\"borderBottomWidth\",\"paddingTop\",\"paddingBottom\"],a=[\"borderLeftWidth\",\"borderRightWidth\",\"paddingLeft\",\"paddingRight\"],r=s.mode,l=\"effect\"!==r,h=s.scale||\"both\",c=s.origin||[\"middle\",\"center\"],u=i.css(\"position\"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),\"show\"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},\"box\"!==h&&\"both\"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),\"content\"!==h&&\"both\"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),\"content\"!==h&&\"both\"!==h||(o=o.concat([\"marginTop\",\"marginBottom\"]).concat(t),a=a.concat([\"marginLeft\",\"marginRight\"]),i.find(\"*[width]\").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css(\"opacity\",f.opacity),l||(i.css(\"position\",\"static\"===u?\"relative\":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define(\"scale\",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||\"effect\"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||\"both\"),origin:t.origin||[\"middle\",\"center\"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define(\"puff\",\"hide\",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define(\"pulsate\",\"show\",function(t,e){var i=V(this),s=t.mode,n=\"show\"===s,o=2*(t.times||5)+(n||\"hide\"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(\":visible\")||(i.css(\"opacity\",0).show(),r=1);l<o;l++)i.animate({opacity:r},a,t.easing),r=1-r;i.animate({opacity:r},a,t.easing),i.queue(e),V.effects.unshift(i,s,1+o)}),V.effects.define(\"shake\",function(t,e){var i=1,s=V(this),n=t.direction||\"left\",o=t.distance||20,a=t.times||3,r=2*a+1,l=Math.round(t.duration/r),h=\"up\"===n||\"down\"===n?\"top\":\"left\",c=\"up\"===n||\"left\"===n,u={},d={},p={},n=s.queue().length;for(V.effects.createPlaceholder(s),u[h]=(c?\"-=\":\"+=\")+o,d[h]=(c?\"+=\":\"-=\")+2*o,p[h]=(c?\"-=\":\"+=\")+2*o,s.animate(u,l,t.easing);i<a;i++)s.animate(d,l,t.easing).animate(p,l,t.easing);s.animate(d,l,t.easing).animate(u,l/2,t.easing).queue(e),V.effects.unshift(s,n,1+r)}),V.effects.define(\"slide\",\"show\",function(t,e){var i,s,n=V(this),o={up:[\"bottom\",\"top\"],down:[\"top\",\"bottom\"],left:[\"right\",\"left\"],right:[\"left\",\"right\"]},a=t.mode,r=t.direction||\"left\",l=\"up\"===r||\"down\"===r?\"top\":\"left\",h=\"up\"===r||\"left\"===r,c=t.distance||n[\"top\"==l?\"outerHeight\":\"outerWidth\"](!0),u={};V.effects.createPlaceholder(n),i=n.cssClip(),s=n.position()[l],u[l]=(h?-1:1)*c+s,u.clip=n.cssClip(),u.clip[o[r][1]]=u.clip[o[r][0]],\"show\"===a&&(n.cssClip(u.clip),n.css(l,u[l]),u.clip=i,u[l]=s),n.animate(u,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),y=!1!==V.uiBackCompat?V.effects.define(\"transfer\",function(t,e){V(this).transfer(t,e)}):y;V.ui.focusable=function(t,e){var i,s,n,o,a=t.nodeName.toLowerCase();return\"area\"===a?(s=(i=t.parentNode).name,!(!t.href||!s||\"map\"!==i.nodeName.toLowerCase())&&(0<(s=V(\"img[usemap='#\"+s+\"']\")).length&&s.is(\":visible\"))):(/^(input|select|textarea|button|object)$/.test(a)?(n=!t.disabled)&&(o=V(t).closest(\"fieldset\")[0])&&(n=!o.disabled):n=\"a\"===a&&t.href||e,n&&V(t).is(\":visible\")&&function(t){var e=t.css(\"visibility\");for(;\"inherit\"===e;)t=t.parent(),e=t.css(\"visibility\");return\"visible\"===e}(V(t)))},V.extend(V.expr.pseudos,{focusable:function(t){return V.ui.focusable(t,null!=V.attr(t,\"tabindex\"))}});var Q,J;V.ui.focusable,V.fn._form=function(){return\"string\"==typeof this[0].form?this.closest(\"form\"):V(this[0].form)},V.ui.formResetMixin={_formResetHandler:function(){var e=V(this);setTimeout(function(){var t=e.data(\"ui-form-reset-instances\");V.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data(\"ui-form-reset-instances\")||[]).length||this.form.on(\"reset.ui-form-reset\",this._formResetHandler),t.push(this),this.form.data(\"ui-form-reset-instances\",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data(\"ui-form-reset-instances\")).splice(V.inArray(this,t),1),t.length?this.form.data(\"ui-form-reset-instances\",t):this.form.removeData(\"ui-form-reset-instances\").off(\"reset.ui-form-reset\"))}};V.expr.pseudos||(V.expr.pseudos=V.expr[\":\"]),V.uniqueSort||(V.uniqueSort=V.unique),V.escapeSelector||(Q=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g,J=function(t,e){return e?\"\\0\"===t?\"\uFFFD\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},V.escapeSelector=function(t){return(t+\"\").replace(Q,J)}),V.fn.even&&V.fn.odd||V.fn.extend({even:function(){return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});var Z;V.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},V.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents(\"label\"),(t=this.attr(\"id\"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t=\"label[for='\"+V.escapeSelector(t)+\"']\",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},V.fn.scrollParent=function(t){var e=this.css(\"position\"),i=\"absolute\"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=V(this);return(!i||\"static\"!==t.css(\"position\"))&&s.test(t.css(\"overflow\")+t.css(\"overflow-y\")+t.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==e&&t.length?t:V(this[0].ownerDocument||document)},V.extend(V.expr.pseudos,{tabbable:function(t){var e=V.attr(t,\"tabindex\"),i=null!=e;return(!i||0<=e)&&V.ui.focusable(t,i)}}),V.fn.extend({uniqueId:(Z=0,function(){return this.each(function(){this.id||(this.id=\"ui-id-\"+ ++Z)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\\d+$/.test(this.id)&&V(this).removeAttr(\"id\")})}}),V.widget(\"ui.accordion\",{version:\"1.13.2\",options:{active:0,animate:{},classes:{\"ui-accordion-header\":\"ui-corner-top\",\"ui-accordion-header-collapsed\":\"ui-corner-all\",\"ui-accordion-content\":\"ui-corner-bottom\"},collapsible:!1,event:\"click\",header:function(t){return t.find(\"> li > :first-child\").add(t.find(\"> :not(li)\").even())},heightStyle:\"auto\",icons:{activeHeader:\"ui-icon-triangle-1-s\",header:\"ui-icon-triangle-1-e\"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:\"hide\",borderBottomWidth:\"hide\",paddingTop:\"hide\",paddingBottom:\"hide\",height:\"hide\"},showProps:{borderTopWidth:\"show\",borderBottomWidth:\"show\",paddingTop:\"show\",paddingBottom:\"show\",height:\"show\"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass(\"ui-accordion\",\"ui-widget ui-helper-reset\"),this.element.attr(\"role\",\"tablist\"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(\"<span>\"),this._addClass(t,\"ui-accordion-header-icon\",\"ui-icon \"+e.header),t.prependTo(this.headers),t=this.active.children(\".ui-accordion-header-icon\"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,\"ui-accordion-icons\"))},_destroyIcons:function(){this._removeClass(this.headers,\"ui-accordion-icons\"),this.headers.children(\".ui-accordion-header-icon\").remove()},_destroy:function(){var t;this.element.removeAttr(\"role\"),this.headers.removeAttr(\"role aria-expanded aria-selected aria-controls tabIndex\").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css(\"display\",\"\").removeAttr(\"role aria-hidden aria-labelledby\").removeUniqueId(),\"content\"!==this.options.heightStyle&&t.css(\"height\",\"\")},_setOption:function(t,e){\"active\"!==t?(\"event\"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),\"collapsible\"!==t||e||!1!==this.options.active||this._activate(0),\"icons\"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr(\"aria-disabled\",t),this._toggleClass(null,\"ui-state-disabled\",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,\"ui-state-disabled\",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr(\"tabIndex\",-1),V(n).attr(\"tabIndex\",0),V(n).trigger(\"focus\"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger(\"focus\")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(\".ui-state-disabled\").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;\"function\"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,\"ui-accordion-header ui-accordion-header-collapsed\",\"ui-state-default\"),this.panels=this.headers.next().filter(\":not(.ui-accordion-content-active)\").hide(),this._addClass(this.panels,\"ui-accordion-content\",\"ui-helper-reset ui-widget-content\"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,\"ui-accordion-header-active\",\"ui-state-active\")._removeClass(this.active,\"ui-accordion-header-collapsed\"),this._addClass(this.active.next(),\"ui-accordion-content-active\"),this.active.next().show(),this.headers.attr(\"role\",\"tab\").each(function(){var t=V(this),e=t.uniqueId().attr(\"id\"),i=t.next(),s=i.uniqueId().attr(\"id\");t.attr(\"aria-controls\",s),i.attr(\"aria-labelledby\",e)}).next().attr(\"role\",\"tabpanel\"),this.headers.not(this.active).attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\",tabIndex:-1}).next().attr({\"aria-hidden\":\"true\"}).hide(),this.active.length?this.active.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0}).next().attr({\"aria-hidden\":\"false\"}):this.headers.eq(0).attr(\"tabIndex\",0),this._createIcons(),this._setupEvents(t.event),\"fill\"===e?(i=s.height(),this.element.siblings(\":visible\").each(function(){var t=V(this),e=t.css(\"position\");\"absolute\"!==e&&\"fixed\"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css(\"overflow\",\"auto\")):\"auto\"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(\":visible\");t||V(this).show(),i=Math.max(i,V(this).css(\"height\",\"\").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return\"number\"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:\"_keydown\"};t&&V.each(t.split(\" \"),function(t,e){i[e]=\"_eventHandler\"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:\"_panelKeyDown\"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger(\"beforeActivate\",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,\"ui-accordion-header-active\",\"ui-state-active\"),e.icons&&(i=i.children(\".ui-accordion-header-icon\"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,\"ui-accordion-header-collapsed\")._addClass(s,\"ui-accordion-header-active\",\"ui-state-active\"),e.icons&&(n=s.children(\".ui-accordion-header-icon\"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),\"ui-accordion-content-active\")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({\"aria-hidden\":\"true\"}),i.prev().attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\"}),e.length&&i.length?i.prev().attr({tabIndex:-1,\"aria-expanded\":\"false\"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr(\"tabIndex\"),10)}).attr(\"tabIndex\",-1),e.attr(\"aria-hidden\",\"false\").prev().attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css(\"box-sizing\"),h=t.length&&(!i.length||t.index()<i.index()),c=this.options.animate||{},u=h&&c.down||c,h=function(){a._toggleComplete(e)};return n=(n=\"string\"==typeof u?u:n)||u.easing||c.easing,o=(o=\"number\"==typeof u?u:o)||u.duration||c.duration,i.length?t.length?(s=t.show().outerHeight(),i.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:o,easing:n,complete:h,step:function(t,e){e.now=Math.round(t),\"height\"!==e.prop?\"content-box\"===l&&(r+=e.now):\"content\"!==a.options.heightStyle&&(e.now=Math.round(s-i.outerHeight()-r),r=0)}})):i.animate(this.hideProps,o,n,h):t.animate(this.showProps,o,n,h)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,\"ui-accordion-content-active\"),this._removeClass(i,\"ui-accordion-header-active\")._addClass(i,\"ui-accordion-header-collapsed\"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger(\"activate\",null,t)}}),V.ui.safeActiveElement=function(e){var i;try{i=e.activeElement}catch(t){i=e.body}return i=!(i=i||e.body).nodeName?e.body:i},V.widget(\"ui.menu\",{version:\"1.13.2\",defaultElement:\"<ul>\",delay:300,options:{icons:{submenu:\"ui-icon-caret-1-e\"},items:\"> *\",menus:\"ul\",position:{my:\"left top\",at:\"right top\"},role:\"menu\",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass(\"ui-menu\",\"ui-widget ui-widget-content\"),this._on({\"mousedown .ui-menu-item\":function(t){t.preventDefault(),this._activateItem(t)},\"click .ui-menu-item\":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(\".ui-state-disabled\").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(\".ui-menu\").length?this.expand(t):!this.element.is(\":focus\")&&i.closest(\".ui-menu\").length&&(this.element.trigger(\"focus\",[!0]),this.active&&1===this.active.parents(\".ui-menu\").length&&clearTimeout(this.timer)))},\"mouseenter .ui-menu-item\":\"_activateItem\",\"mousemove .ui-menu-item\":\"_activateItem\",mouseleave:\"collapseAll\",\"mouseleave .ui-menu\":\"collapseAll\",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:\"_keydown\"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(\".ui-menu-item\"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(\".ui-state-active\")||(this._removeClass(i.siblings().children(\".ui-state-active\"),null,\"ui-state-active\"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(\".ui-menu-item\").removeAttr(\"role aria-disabled\").children(\".ui-menu-item-wrapper\").removeUniqueId().removeAttr(\"tabIndex role aria-haspopup\");this.element.removeAttr(\"aria-activedescendant\").find(\".ui-menu\").addBack().removeAttr(\"role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex\").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data(\"ui-menu-submenu-caret\")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move(\"first\",\"first\",t);break;case V.ui.keyCode.END:this._move(\"last\",\"last\",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(\".ui-state-disabled\")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||\"\",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(\".ui-menu-item\"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(\".ui-state-disabled\")&&(this.active.children(\"[aria-haspopup='true']\").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass(\"ui-menu-icons\",null,!!this.element.find(\".ui-icon\").length),e=i.filter(\":not(.ui-menu)\").hide().attr({role:this.options.role,\"aria-hidden\":\"true\",\"aria-expanded\":\"false\"}).each(function(){var t=V(this),e=t.prev(),i=V(\"<span>\").data(\"ui-menu-submenu-caret\",!0);s._addClass(i,\"ui-menu-icon\",\"ui-icon \"+n),e.attr(\"aria-haspopup\",\"true\").prepend(i),t.attr(\"aria-labelledby\",e.attr(\"id\"))}),this._addClass(e,\"ui-menu\",\"ui-widget ui-widget-content ui-front\"),(t=i.add(this.element).find(this.options.items)).not(\".ui-menu-item\").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,\"ui-menu-divider\",\"ui-widget-content\")}),i=(e=t.not(\".ui-menu-item, .ui-menu-divider\")).children().not(\".ui-menu\").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,\"ui-menu-item\")._addClass(i,\"ui-menu-item-wrapper\"),t.filter(\".ui-state-disabled\").attr(\"aria-disabled\",\"true\"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:\"menuitem\",listbox:\"option\"}[this.options.role]},_setOption:function(t,e){var i;\"icons\"===t&&(i=this.element.find(\".ui-menu-icon\"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr(\"aria-disabled\",String(t)),this._toggleClass(null,\"ui-state-disabled\",!!t)},focus:function(t,e){var i;this.blur(t,t&&\"focus\"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(\".ui-menu-item-wrapper\"),this._addClass(i,null,\"ui-state-active\"),this.options.role&&this.element.attr(\"aria-activedescendant\",i.attr(\"id\")),i=this.active.parent().closest(\".ui-menu-item\").children(\".ui-menu-item-wrapper\"),this._addClass(i,null,\"ui-state-active\"),t&&\"keydown\"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(\".ui-menu\")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger(\"focus\",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],\"borderTopWidth\"))||0,s=parseFloat(V.css(this.activeMenu[0],\"paddingTop\"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s<e+t&&this.activeMenu.scrollTop(i+e-s+t))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(\".ui-menu-item-wrapper\"),null,\"ui-state-active\"),this._trigger(\"blur\",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),\"true\"===t.attr(\"aria-hidden\")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(t){var e=V.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(\".ui-menu\").not(t.parents(\".ui-menu\")).hide().attr(\"aria-hidden\",\"true\"),t.show().removeAttr(\"aria-hidden\").attr(\"aria-expanded\",\"true\").position(e)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var t=i?this.element:V(e&&e.target).closest(this.element.find(\".ui-menu\"));t.length||(t=this.element),this._close(t),this.blur(e),this._removeClass(t.find(\".ui-state-active\"),null,\"ui-state-active\"),this.activeMenu=t},i?0:this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(\".ui-menu\").hide().attr(\"aria-hidden\",\"true\").attr(\"aria-expanded\",\"false\")},_closeOnDocumentClick:function(t){return!V(t.target).closest(\".ui-menu\").length},_isDivider:function(t){return!/[^\\-\\u2014\\u2013\\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(\".ui-menu-item\",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this._menuItems(this.active.children(\".ui-menu\")).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move(\"next\",\"first\",t)},previous:function(t){this._move(\"prev\",\"last\",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(\".ui-menu-item\").length},isLastItem:function(){return this.active&&!this.active.nextAll(\".ui-menu-item\").length},_menuItems:function(t){return(t||this.element).find(this.options.items).filter(\".ui-menu-item\")},_move:function(t,e,i){var s;(s=this.active?\"first\"===t||\"last\"===t?this.active[\"first\"===t?\"prevAll\":\"nextAll\"](\".ui-menu-item\").last():this.active[t+\"All\"](\".ui-menu-item\").first():s)&&s.length&&this.active||(s=this._menuItems(this.activeMenu)[e]()),this.focus(i,s)},nextPage:function(t){var e,i,s;this.active?this.isLastItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===V.fn.jquery.indexOf(\"3.2.\")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.nextAll(\".ui-menu-item\").each(function(){return(e=V(this)).offset().top-i-s<0}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu)[this.active?\"last\":\"first\"]())):this.next(t)},previousPage:function(t){var e,i,s;this.active?this.isFirstItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===V.fn.jquery.indexOf(\"3.2.\")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.prevAll(\".ui-menu-item\").each(function(){return 0<(e=V(this)).offset().top-i+s}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu).first())):this.next(t)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop(\"scrollHeight\")},select:function(t){this.active=this.active||V(t.target).closest(\".ui-menu-item\");var e={item:this.active};this.active.has(\".ui-menu\").length||this.collapseAll(t,!0),this._trigger(\"select\",t,e)},_filterMenuItems:function(t){var t=t.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\"),e=new RegExp(\"^\"+t,\"i\");return this.activeMenu.find(this.options.items).filter(\".ui-menu-item\").filter(function(){return e.test(String.prototype.trim.call(V(this).children(\".ui-menu-item-wrapper\").text()))})}});V.widget(\"ui.autocomplete\",{version:\"1.13.2\",defaultElement:\"<input>\",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e=\"textarea\"===t,t=\"input\"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?\"val\":\"text\"],this.isNewMenu=!0,this._addClass(\"ui-autocomplete-input\"),this.element.attr(\"autocomplete\",\"off\"),this._on(this.element,{keydown:function(t){if(this.element.prop(\"readOnly\"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move(\"previousPage\",t);break;case e.PAGE_DOWN:i=!0,this._move(\"nextPage\",t);break;case e.UP:i=!0,this._keyEvent(\"previous\",t);break;case e.DOWN:i=!0,this._keyEvent(\"next\",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(\":visible\")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(\":visible\")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move(\"previousPage\",t);break;case e.PAGE_DOWN:this._move(\"nextPage\",t);break;case e.UP:this._keyEvent(\"previous\",t);break;case e.DOWN:this._keyEvent(\"next\",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V(\"<ul>\").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:\"on\"}).menu(\"instance\"),this._addClass(this.menu.element,\"ui-autocomplete\",\"ui-front\"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one(\"mousemove\",function(){V(t.target).trigger(t.originalEvent)});s=e.item.data(\"ui-autocomplete-item\"),!1!==this._trigger(\"focus\",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr(\"aria-label\")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(V(\"<div>\").text(i))},100))},menuselect:function(t,e){var i=e.item.data(\"ui-autocomplete-item\"),s=this.previous;this.element[0]!==V.ui.safeActiveElement(this.document[0])&&(this.element.trigger(\"focus\"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger(\"select\",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=V(\"<div>\",{role:\"status\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,\"ui-helper-hidden-accessible\"),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr(\"autocomplete\"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),\"source\"===t&&this._initSource(),\"appendTo\"===t&&this.menu.element.appendTo(this._appendTo()),\"disabled\"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||V.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(\".ui-front, dialog\"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(V.ui.autocomplete.filter(i,t.term))}):\"string\"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=V.ajax({url:s,data:t,dataType:\"json\",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(\":visible\"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger(\"search\",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass(\"ui-autocomplete-loading\"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass(\"ui-autocomplete-loading\")}.bind(this)},__response:function(t){t=t&&this._normalize(t),this._trigger(\"response\",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger(\"open\")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,\"mousedown\"),this.menu.element.is(\":visible\")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger(\"close\",t))},_change:function(t){this.previous!==this._value()&&this._trigger(\"change\",t,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:V.map(t,function(t){return\"string\"==typeof t?{label:t,value:t}:V.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var e=this.menu.element.empty();this._renderMenu(e,t),this.isNewMenu=!0,this.menu.refresh(),e.show(),this._resizeMenu(),e.position(V.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:\"_closeOnClickOutside\"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width(\"\").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(i,t){var s=this;V.each(t,function(t,e){s._renderItemData(i,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data(\"ui-autocomplete-item\",e)},_renderItem:function(t,e){return V(\"<li>\").append(V(\"<div>\").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(\":visible\"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(\":visible\")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop(\"contentEditable\");return\"inherit\"===e?this._isContentEditable(t.parent()):\"true\"===e}}),V.extend(V.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")},filter:function(t,e){var i=new RegExp(V.ui.autocomplete.escapeRegex(e),\"i\");return V.grep(t,function(t){return i.test(t.label||t.value||t)})}}),V.widget(\"ui.autocomplete\",V.ui.autocomplete,{options:{messages:{noResults:\"No search results.\",results:function(t){return t+(1<t?\" results are\":\" result is\")+\" available, use up and down arrow keys to navigate.\"}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(V(\"<div>\").text(e))},100))}});V.ui.autocomplete;var tt=/ui-corner-([a-z]){2,6}/g;V.widget(\"ui.controlgroup\",{version:\"1.13.2\",defaultElement:\"<div>\",options:{direction:\"horizontal\",disabled:null,onlyVisible:!0,items:{button:\"input[type=button], input[type=submit], input[type=reset], button, a\",controlgroupLabel:\".ui-controlgroup-label\",checkboxradio:\"input[type='checkbox'], input[type='radio']\",selectmenu:\"select\",spinner:\".ui-spinner-input\"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr(\"role\",\"toolbar\"),this.refresh()},_destroy:function(){this._callChildMethod(\"destroy\"),this.childWidgets.removeData(\"ui-controlgroup-data\"),this.element.removeAttr(\"role\"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(\".ui-controlgroup-label-contents\").contents().unwrap()},_initWidgets:function(){var o=this,a=[];V.each(this.options.items,function(s,t){var e,n={};if(t)return\"controlgroupLabel\"===s?((e=o.element.find(t)).each(function(){var t=V(this);t.children(\".ui-controlgroup-label-contents\").length||t.contents().wrapAll(\"<span class='ui-controlgroup-label-contents'></span>\")}),o._addClass(e,null,\"ui-widget ui-widget-content ui-state-default\"),void(a=a.concat(e.get()))):void(V.fn[s]&&(n=o[\"_\"+s+\"Options\"]?o[\"_\"+s+\"Options\"](\"middle\"):{classes:{}},o.element.find(t).each(function(){var t=V(this),e=t[s](\"instance\"),i=V.widget.extend({},n);\"button\"===s&&t.parent(\".ui-spinner\").length||((e=e||t[s]()[s](\"instance\"))&&(i.classes=o._resolveClassesValues(i.classes,e)),t[s](i),i=t[s](\"widget\"),V.data(i[0],\"ui-controlgroup-data\",e||t[s](\"instance\")),a.push(i[0]))})))}),this.childWidgets=V(V.uniqueSort(a)),this._addClass(this.childWidgets,\"ui-controlgroup-item\")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=V(this).data(\"ui-controlgroup-data\");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){e=this._buildSimpleOptions(e,\"label\").classes.label;this._removeClass(t,null,\"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\"),this._addClass(t,null,e)},_buildSimpleOptions:function(t,e){var i=\"vertical\"===this.options.direction,s={classes:{}};return s.classes[e]={middle:\"\",first:\"ui-corner-\"+(i?\"top\":\"left\"),last:\"ui-corner-\"+(i?\"bottom\":\"right\"),only:\"ui-corner-all\"}[t],s},_spinnerOptions:function(t){t=this._buildSimpleOptions(t,\"ui-spinner\");return t.classes[\"ui-spinner-up\"]=\"\",t.classes[\"ui-spinner-down\"]=\"\",t},_buttonOptions:function(t){return this._buildSimpleOptions(t,\"ui-button\")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,\"ui-checkboxradio-label\")},_selectmenuOptions:function(t){var e=\"vertical\"===this.options.direction;return{width:e&&\"auto\",classes:{middle:{\"ui-selectmenu-button-open\":\"\",\"ui-selectmenu-button-closed\":\"\"},first:{\"ui-selectmenu-button-open\":\"ui-corner-\"+(e?\"top\":\"tl\"),\"ui-selectmenu-button-closed\":\"ui-corner-\"+(e?\"top\":\"left\")},last:{\"ui-selectmenu-button-open\":e?\"\":\"ui-corner-tr\",\"ui-selectmenu-button-closed\":\"ui-corner-\"+(e?\"bottom\":\"right\")},only:{\"ui-selectmenu-button-open\":\"ui-corner-top\",\"ui-selectmenu-button-closed\":\"ui-corner-all\"}}[t]}},_resolveClassesValues:function(i,s){var n={};return V.each(i,function(t){var e=s.options.classes[t]||\"\",e=String.prototype.trim.call(e.replace(tt,\"\"));n[t]=(e+\" \"+i[t]).replace(/\\s+/g,\" \")}),n},_setOption:function(t,e){\"direction\"===t&&this._removeClass(\"ui-controlgroup-\"+this.options.direction),this._super(t,e),\"disabled\"!==t?this.refresh():this._callChildMethod(e?\"disable\":\"enable\")},refresh:function(){var n,o=this;this._addClass(\"ui-controlgroup ui-controlgroup-\"+this.options.direction),\"horizontal\"===this.options.direction&&this._addClass(null,\"ui-helper-clearfix\"),this._initWidgets(),n=this.childWidgets,(n=this.options.onlyVisible?n.filter(\":visible\"):n).length&&(V.each([\"first\",\"last\"],function(t,e){var i,s=n[e]().data(\"ui-controlgroup-data\");s&&o[\"_\"+s.widgetName+\"Options\"]?((i=o[\"_\"+s.widgetName+\"Options\"](1===n.length?\"only\":e)).classes=o._resolveClassesValues(i.classes,s),s.element[s.widgetName](i)):o._updateCornerClass(n[e](),e)}),this._callChildMethod(\"refresh\"))}});V.widget(\"ui.checkboxradio\",[V.ui.formResetMixin,{version:\"1.13.2\",options:{disabled:null,label:null,icon:!0,classes:{\"ui-checkboxradio-label\":\"ui-corner-all\",\"ui-checkboxradio-icon\":\"ui-corner-all\"}},_getCreateOptions:function(){var t,e=this._super()||{};return this._readType(),t=this.element.labels(),this.label=V(t[t.length-1]),this.label.length||V.error(\"No label found for checkboxradio widget\"),this.originalLabel=\"\",(t=this.label.contents().not(this.element[0])).length&&(this.originalLabel+=t.clone().wrapAll(\"<div></div>\").parent().html()),this.originalLabel&&(e.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(e.disabled=t),e},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption(\"disabled\",this.options.disabled),this._addClass(\"ui-checkboxradio\",\"ui-helper-hidden-accessible\"),this._addClass(this.label,\"ui-checkboxradio-label\",\"ui-button ui-widget\"),\"radio\"===this.type&&this._addClass(this.label,\"ui-checkboxradio-radio-label\"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&this._addClass(this.label,\"ui-checkboxradio-checked\",\"ui-state-active\"),this._on({change:\"_toggleClasses\",focus:function(){this._addClass(this.label,null,\"ui-state-focus ui-visual-focus\")},blur:function(){this._removeClass(this.label,null,\"ui-state-focus ui-visual-focus\")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,\"input\"===t&&/radio|checkbox/.test(this.type)||V.error(\"Can't create checkboxradio on element.nodeName=\"+t+\" and element.type=\"+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e=\"input[name='\"+V.escapeSelector(t)+\"']\";return t?(this.form.length?V(this.form[0].elements).filter(e):V(e).filter(function(){return 0===V(this)._form().length})).not(this.element):V([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,\"ui-checkboxradio-checked\",\"ui-state-active\",t),this.options.icon&&\"checkbox\"===this.type&&this._toggleClass(this.icon,null,\"ui-icon-check ui-state-checked\",t)._toggleClass(this.icon,null,\"ui-icon-blank\",!t),\"radio\"===this.type&&this._getRadioGroup().each(function(){var t=V(this).checkboxradio(\"instance\");t&&t._removeClass(t.label,\"ui-checkboxradio-checked\",\"ui-state-active\")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if(\"label\"!==t||e){if(this._super(t,e),\"disabled\"===t)return this._toggleClass(this.label,null,\"ui-state-disabled\",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e=\"ui-icon ui-icon-background \";this.options.icon?(this.icon||(this.icon=V(\"<span>\"),this.iconSpace=V(\"<span> </span>\"),this._addClass(this.iconSpace,\"ui-checkboxradio-icon-space\")),\"checkbox\"===this.type?(e+=t?\"ui-icon-check ui-state-checked\":\"ui-icon-blank\",this._removeClass(this.icon,null,t?\"ui-icon-blank\":\"ui-icon-check\")):e+=\"ui-icon-blank\",this._addClass(this.icon,\"ui-checkboxradio-icon\",e),t||this._removeClass(this.icon,null,\"ui-icon-check ui-state-checked\"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),(t=this.iconSpace?t.not(this.iconSpace[0]):t).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,\"ui-checkboxradio-checked\",\"ui-state-active\",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);var et;V.ui.checkboxradio;V.widget(\"ui.button\",{version:\"1.13.2\",defaultElement:\"<button>\",options:{classes:{\"ui-button\":\"ui-corner-all\"},disabled:null,icon:null,iconPosition:\"beginning\",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is(\"input\"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr(\"title\"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass(\"ui-button\",\"ui-widget\"),this._setOption(\"disabled\",this.options.disabled),this._enhance(),this.element.is(\"a\")&&this._on({keyup:function(t){t.keyCode===V.ui.keyCode.SPACE&&(t.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger(\"click\"))}})},_enhance:function(){this.element.is(\"button\")||this.element.attr(\"role\",\"button\"),this.options.icon&&(this._updateIcon(\"icon\",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr(\"title\"),this.options.showLabel||this.title||this.element.attr(\"title\",this.options.label)},_updateIcon:function(t,e){var i=\"iconPosition\"!==t,s=i?this.options.iconPosition:e,t=\"top\"===s||\"bottom\"===s;this.icon?i&&this._removeClass(this.icon,null,this.options.icon):(this.icon=V(\"<span>\"),this._addClass(this.icon,\"ui-button-icon\",\"ui-icon\"),this.options.showLabel||this._addClass(\"ui-button-icon-only\")),i&&this._addClass(this.icon,null,e),this._attachIcon(s),t?(this._addClass(this.icon,null,\"ui-widget-icon-block\"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=V(\"<span> </span>\"),this._addClass(this.iconSpace,\"ui-button-icon-space\")),this._removeClass(this.icon,null,\"ui-wiget-icon-block\"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr(\"role\"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr(\"title\")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?\"before\":\"after\"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?\"append\":\"prepend\"](this.icon)},_setOptions:function(t){var e=(void 0===t.showLabel?this.options:t).showLabel,i=(void 0===t.icon?this.options:t).icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){\"icon\"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),\"iconPosition\"===t&&this._updateIcon(t,e),\"showLabel\"===t&&(this._toggleClass(\"ui-button-icon-only\",null,!e),this._updateTooltip()),\"label\"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),\"disabled\"===t&&(this._toggleClass(null,\"ui-state-disabled\",e),(this.element[0].disabled=e)&&this.element.trigger(\"blur\"))},refresh:function(){var t=this.element.is(\"input, button\")?this.element[0].disabled:this.element.hasClass(\"ui-button-disabled\");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==V.uiBackCompat&&(V.widget(\"ui.button\",V.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition=\"end\"),this._super()},_setOption:function(t,e){\"text\"!==t?(\"showLabel\"===t&&(this.options.text=e),\"icon\"===t&&(this.options.icons.primary=e),\"icons\"===t&&(e.primary?(this._super(\"icon\",e.primary),this._super(\"iconPosition\",\"beginning\")):e.secondary&&(this._super(\"icon\",e.secondary),this._super(\"iconPosition\",\"end\"))),this._superApply(arguments)):this._super(\"showLabel\",e)}}),V.fn.button=(et=V.fn.button,function(i){var t=\"string\"==typeof i,s=Array.prototype.slice.call(arguments,1),n=this;return t?this.length||\"instance\"!==i?this.each(function(){var t=V(this).attr(\"type\"),e=V.data(this,\"ui-\"+(\"checkbox\"!==t&&\"radio\"!==t?\"button\":\"checkboxradio\"));return\"instance\"===i?(n=e,!1):e?\"function\"!=typeof e[i]||\"_\"===i.charAt(0)?V.error(\"no such method '\"+i+\"' for button widget instance\"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error(\"cannot call methods on button prior to initialization; attempted to call method '\"+i+\"'\")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V(this).attr(\"type\"),e=\"checkbox\"!==t&&\"radio\"!==t?\"button\":\"checkboxradio\",t=V.data(this,\"ui-\"+e);t?(t.option(i||{}),t._init&&t._init()):\"button\"!=e?V(this).checkboxradio(V.extend({icon:!1},i)):et.call(V(this),i)})),n}),V.fn.buttonset=function(){return V.ui.controlgroup||V.error(\"Controlgroup widget missing\"),\"option\"===arguments[0]&&\"items\"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],\"items.button\",arguments[2]]):\"option\"===arguments[0]&&\"items\"===arguments[1]?this.controlgroup.apply(this,[arguments[0],\"items.button\"]):(\"object\"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))});var it;V.ui.button;function st(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId=\"ui-datepicker-div\",this._inlineClass=\"ui-datepicker-inline\",this._appendClass=\"ui-datepicker-append\",this._triggerClass=\"ui-datepicker-trigger\",this._dialogClass=\"ui-datepicker-dialog\",this._disableClass=\"ui-datepicker-disabled\",this._unselectableClass=\"ui-datepicker-unselectable\",this._currentClass=\"ui-datepicker-current-day\",this._dayOverClass=\"ui-datepicker-days-cell-over\",this.regional=[],this.regional[\"\"]={closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"mm/dd/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\",selectMonthLabel:\"Select month\",selectYearLabel:\"Select year\"},this._defaults={showOn:\"focus\",showAnim:\"fadeIn\",showOptions:{},defaultDate:null,appendText:\"\",buttonText:\"...\",buttonImage:\"\",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:\"c-10:c+10\",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:\"+10\",minDate:null,maxDate:null,duration:\"fast\",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,onUpdateDatepicker:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:\"\",altFormat:\"\",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},V.extend(this._defaults,this.regional[\"\"]),this.regional.en=V.extend(!0,{},this.regional[\"\"]),this.regional[\"en-US\"]=V.extend(!0,{},this.regional.en),this.dpDiv=nt(V(\"<div id='\"+this._mainDivId+\"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\"))}function nt(t){var e=\"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";return t.on(\"mouseout\",e,function(){V(this).removeClass(\"ui-state-hover\"),-1!==this.className.indexOf(\"ui-datepicker-prev\")&&V(this).removeClass(\"ui-datepicker-prev-hover\"),-1!==this.className.indexOf(\"ui-datepicker-next\")&&V(this).removeClass(\"ui-datepicker-next-hover\")}).on(\"mouseover\",e,ot)}function ot(){V.datepicker._isDisabledDatepicker((it.inline?it.dpDiv.parent():it.input)[0])||(V(this).parents(\".ui-datepicker-calendar\").find(\"a\").removeClass(\"ui-state-hover\"),V(this).addClass(\"ui-state-hover\"),-1!==this.className.indexOf(\"ui-datepicker-prev\")&&V(this).addClass(\"ui-datepicker-prev-hover\"),-1!==this.className.indexOf(\"ui-datepicker-next\")&&V(this).addClass(\"ui-datepicker-next-hover\"))}function at(t,e){for(var i in V.extend(t,e),e)null==e[i]&&(t[i]=e[i]);return t}V.extend(V.ui,{datepicker:{version:\"1.13.2\"}}),V.extend(st.prototype,{markerClassName:\"hasDatepicker\",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return at(this._defaults,t||{}),this},_attachDatepicker:function(t,e){var i,s=t.nodeName.toLowerCase(),n=\"div\"===s||\"span\"===s;t.id||(this.uuid+=1,t.id=\"dp\"+this.uuid),(i=this._newInst(V(t),n)).settings=V.extend({},e||{}),\"input\"===s?this._connectDatepicker(t,i):n&&this._inlineDatepicker(t,i)},_newInst:function(t,e){return{id:t[0].id.replace(/([^A-Za-z0-9_\\-])/g,\"\\\\\\\\$1\"),input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:e,dpDiv:e?nt(V(\"<div class='\"+this._inlineClass+\" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\")):this.dpDiv}},_connectDatepicker:function(t,e){var i=V(t);e.append=V([]),e.trigger=V([]),i.hasClass(this.markerClassName)||(this._attachments(i,e),i.addClass(this.markerClassName).on(\"keydown\",this._doKeyDown).on(\"keypress\",this._doKeyPress).on(\"keyup\",this._doKeyUp),this._autoSize(e),V.data(t,\"datepicker\",e),e.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,e){var i,s=this._get(e,\"appendText\"),n=this._get(e,\"isRTL\");e.append&&e.append.remove(),s&&(e.append=V(\"<span>\").addClass(this._appendClass).text(s),t[n?\"before\":\"after\"](e.append)),t.off(\"focus\",this._showDatepicker),e.trigger&&e.trigger.remove(),\"focus\"!==(i=this._get(e,\"showOn\"))&&\"both\"!==i||t.on(\"focus\",this._showDatepicker),\"button\"!==i&&\"both\"!==i||(s=this._get(e,\"buttonText\"),i=this._get(e,\"buttonImage\"),this._get(e,\"buttonImageOnly\")?e.trigger=V(\"<img>\").addClass(this._triggerClass).attr({src:i,alt:s,title:s}):(e.trigger=V(\"<button type='button'>\").addClass(this._triggerClass),i?e.trigger.html(V(\"<img>\").attr({src:i,alt:s,title:s})):e.trigger.text(s)),t[n?\"before\":\"after\"](e.trigger),e.trigger.on(\"click\",function(){return V.datepicker._datepickerShowing&&V.datepicker._lastInput===t[0]?V.datepicker._hideDatepicker():(V.datepicker._datepickerShowing&&V.datepicker._lastInput!==t[0]&&V.datepicker._hideDatepicker(),V.datepicker._showDatepicker(t[0])),!1}))},_autoSize:function(t){var e,i,s,n,o,a;this._get(t,\"autoSize\")&&!t.inline&&(o=new Date(2009,11,20),(a=this._get(t,\"dateFormat\")).match(/[DM]/)&&(e=function(t){for(n=s=i=0;n<t.length;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?\"monthNames\":\"monthNamesShort\"))),o.setDate(e(this._get(t,a.match(/DD/)?\"dayNames\":\"dayNamesShort\"))+20-o.getDay())),t.input.attr(\"size\",this._formatDate(t,o).length))},_inlineDatepicker:function(t,e){var i=V(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv),V.data(t,\"datepicker\",e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&&this._disableDatepicker(t),e.dpDiv.css(\"display\",\"block\"))},_dialogDatepicker:function(t,e,i,s,n){var o,a=this._dialogInst;return a||(this.uuid+=1,o=\"dp\"+this.uuid,this._dialogInput=V(\"<input type='text' id='\"+o+\"' style='position: absolute; top: -100px; width: 0px;'/>\"),this._dialogInput.on(\"keydown\",this._doKeyDown),V(\"body\").append(this._dialogInput),(a=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},V.data(this._dialogInput[0],\"datepicker\",a)),at(a.settings,s||{}),e=e&&e.constructor===Date?this._formatDate(a,e):e,this._dialogInput.val(e),this._pos=n?n.length?n:[n.pageX,n.pageY]:null,this._pos||(o=document.documentElement.clientWidth,s=document.documentElement.clientHeight,e=document.documentElement.scrollLeft||document.body.scrollLeft,n=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[o/2-100+e,s/2-150+n]),this._dialogInput.css(\"left\",this._pos[0]+20+\"px\").css(\"top\",this._pos[1]+\"px\"),a.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),V.blockUI&&V.blockUI(this.dpDiv),V.data(this._dialogInput[0],\"datepicker\",a),this},_destroyDatepicker:function(t){var e,i=V(t),s=V.data(t,\"datepicker\");i.hasClass(this.markerClassName)&&(e=t.nodeName.toLowerCase(),V.removeData(t,\"datepicker\"),\"input\"===e?(s.append.remove(),s.trigger.remove(),i.removeClass(this.markerClassName).off(\"focus\",this._showDatepicker).off(\"keydown\",this._doKeyDown).off(\"keypress\",this._doKeyPress).off(\"keyup\",this._doKeyUp)):\"div\"!==e&&\"span\"!==e||i.removeClass(this.markerClassName).empty(),it===s&&(it=null,this._curInst=null))},_enableDatepicker:function(e){var t,i=V(e),s=V.data(e,\"datepicker\");i.hasClass(this.markerClassName)&&(\"input\"===(t=e.nodeName.toLowerCase())?(e.disabled=!1,s.trigger.filter(\"button\").each(function(){this.disabled=!1}).end().filter(\"img\").css({opacity:\"1.0\",cursor:\"\"})):\"div\"!==t&&\"span\"!==t||((i=i.children(\".\"+this._inlineClass)).children().removeClass(\"ui-state-disabled\"),i.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").prop(\"disabled\",!1)),this._disabledInputs=V.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var t,i=V(e),s=V.data(e,\"datepicker\");i.hasClass(this.markerClassName)&&(\"input\"===(t=e.nodeName.toLowerCase())?(e.disabled=!0,s.trigger.filter(\"button\").each(function(){this.disabled=!0}).end().filter(\"img\").css({opacity:\"0.5\",cursor:\"default\"})):\"div\"!==t&&\"span\"!==t||((i=i.children(\".\"+this._inlineClass)).children().addClass(\"ui-state-disabled\"),i.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").prop(\"disabled\",!0)),this._disabledInputs=V.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(t){try{return V.data(t,\"datepicker\")}catch(t){throw\"Missing instance data for this datepicker\"}},_optionDatepicker:function(t,e,i){var s,n,o=this._getInst(t);if(2===arguments.length&&\"string\"==typeof e)return\"defaults\"===e?V.extend({},V.datepicker._defaults):o?\"all\"===e?V.extend({},o.settings):this._get(o,e):null;s=e||{},\"string\"==typeof e&&((s={})[e]=i),o&&(this._curInst===o&&this._hideDatepicker(),n=this._getDateDatepicker(t,!0),e=this._getMinMaxDate(o,\"min\"),i=this._getMinMaxDate(o,\"max\"),at(o.settings,s),null!==e&&void 0!==s.dateFormat&&void 0===s.minDate&&(o.settings.minDate=this._formatDate(o,e)),null!==i&&void 0!==s.dateFormat&&void 0===s.maxDate&&(o.settings.maxDate=this._formatDate(o,i)),\"disabled\"in s&&(s.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(V(t),o),this._autoSize(o),this._setDate(o,n),this._updateAlternate(o),this._updateDatepicker(o))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){t=this._getInst(t);t&&this._updateDatepicker(t)},_setDateDatepicker:function(t,e){t=this._getInst(t);t&&(this._setDate(t,e),this._updateDatepicker(t),this._updateAlternate(t))},_getDateDatepicker:function(t,e){t=this._getInst(t);return t&&!t.inline&&this._setDateFromField(t,e),t?this._getDate(t):null},_doKeyDown:function(t){var e,i,s=V.datepicker._getInst(t.target),n=!0,o=s.dpDiv.is(\".ui-datepicker-rtl\");if(s._keyEvent=!0,V.datepicker._datepickerShowing)switch(t.keyCode){case 9:V.datepicker._hideDatepicker(),n=!1;break;case 13:return(i=V(\"td.\"+V.datepicker._dayOverClass+\":not(.\"+V.datepicker._currentClass+\")\",s.dpDiv))[0]&&V.datepicker._selectDay(t.target,s.selectedMonth,s.selectedYear,i[0]),(e=V.datepicker._get(s,\"onSelect\"))?(i=V.datepicker._formatDate(s),e.apply(s.input?s.input[0]:null,[i,s])):V.datepicker._hideDatepicker(),!1;case 27:V.datepicker._hideDatepicker();break;case 33:V.datepicker._adjustDate(t.target,t.ctrlKey?-V.datepicker._get(s,\"stepBigMonths\"):-V.datepicker._get(s,\"stepMonths\"),\"M\");break;case 34:V.datepicker._adjustDate(t.target,t.ctrlKey?+V.datepicker._get(s,\"stepBigMonths\"):+V.datepicker._get(s,\"stepMonths\"),\"M\");break;case 35:(t.ctrlKey||t.metaKey)&&V.datepicker._clearDate(t.target),n=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&V.datepicker._gotoToday(t.target),n=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,o?1:-1,\"D\"),n=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&V.datepicker._adjustDate(t.target,t.ctrlKey?-V.datepicker._get(s,\"stepBigMonths\"):-V.datepicker._get(s,\"stepMonths\"),\"M\");break;case 38:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,-7,\"D\"),n=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,o?-1:1,\"D\"),n=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&V.datepicker._adjustDate(t.target,t.ctrlKey?+V.datepicker._get(s,\"stepBigMonths\"):+V.datepicker._get(s,\"stepMonths\"),\"M\");break;case 40:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,7,\"D\"),n=t.ctrlKey||t.metaKey;break;default:n=!1}else 36===t.keyCode&&t.ctrlKey?V.datepicker._showDatepicker(this):n=!1;n&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var e,i=V.datepicker._getInst(t.target);if(V.datepicker._get(i,\"constrainInput\"))return e=V.datepicker._possibleChars(V.datepicker._get(i,\"dateFormat\")),i=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||i<\" \"||!e||-1<e.indexOf(i)},_doKeyUp:function(t){t=V.datepicker._getInst(t.target);if(t.input.val()!==t.lastVal)try{V.datepicker.parseDate(V.datepicker._get(t,\"dateFormat\"),t.input?t.input.val():null,V.datepicker._getFormatConfig(t))&&(V.datepicker._setDateFromField(t),V.datepicker._updateAlternate(t),V.datepicker._updateDatepicker(t))}catch(t){}return!0},_showDatepicker:function(t){var e,i,s,n;\"input\"!==(t=t.target||t).nodeName.toLowerCase()&&(t=V(\"input\",t.parentNode)[0]),V.datepicker._isDisabledDatepicker(t)||V.datepicker._lastInput===t||(n=V.datepicker._getInst(t),V.datepicker._curInst&&V.datepicker._curInst!==n&&(V.datepicker._curInst.dpDiv.stop(!0,!0),n&&V.datepicker._datepickerShowing&&V.datepicker._hideDatepicker(V.datepicker._curInst.input[0])),!1!==(i=(s=V.datepicker._get(n,\"beforeShow\"))?s.apply(t,[t,n]):{})&&(at(n.settings,i),n.lastVal=null,V.datepicker._lastInput=t,V.datepicker._setDateFromField(n),V.datepicker._inDialog&&(t.value=\"\"),V.datepicker._pos||(V.datepicker._pos=V.datepicker._findPos(t),V.datepicker._pos[1]+=t.offsetHeight),e=!1,V(t).parents().each(function(){return!(e|=\"fixed\"===V(this).css(\"position\"))}),s={left:V.datepicker._pos[0],top:V.datepicker._pos[1]},V.datepicker._pos=null,n.dpDiv.empty(),n.dpDiv.css({position:\"absolute\",display:\"block\",top:\"-1000px\"}),V.datepicker._updateDatepicker(n),s=V.datepicker._checkOffset(n,s,e),n.dpDiv.css({position:V.datepicker._inDialog&&V.blockUI?\"static\":e?\"fixed\":\"absolute\",display:\"none\",left:s.left+\"px\",top:s.top+\"px\"}),n.inline||(i=V.datepicker._get(n,\"showAnim\"),s=V.datepicker._get(n,\"duration\"),n.dpDiv.css(\"z-index\",function(t){for(var e,i;t.length&&t[0]!==document;){if((\"absolute\"===(e=t.css(\"position\"))||\"relative\"===e||\"fixed\"===e)&&(i=parseInt(t.css(\"zIndex\"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}(V(t))+1),V.datepicker._datepickerShowing=!0,V.effects&&V.effects.effect[i]?n.dpDiv.show(i,V.datepicker._get(n,\"showOptions\"),s):n.dpDiv[i||\"show\"](i?s:null),V.datepicker._shouldFocusInput(n)&&n.input.trigger(\"focus\"),V.datepicker._curInst=n)))},_updateDatepicker:function(t){this.maxRows=4,(it=t).dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var e,i=this._getNumberOfMonths(t),s=i[1],n=t.dpDiv.find(\".\"+this._dayOverClass+\" a\"),o=V.datepicker._get(t,\"onUpdateDatepicker\");0<n.length&&ot.apply(n.get(0)),t.dpDiv.removeClass(\"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\").width(\"\"),1<s&&t.dpDiv.addClass(\"ui-datepicker-multi-\"+s).css(\"width\",17*s+\"em\"),t.dpDiv[(1!==i[0]||1!==i[1]?\"add\":\"remove\")+\"Class\"](\"ui-datepicker-multi\"),t.dpDiv[(this._get(t,\"isRTL\")?\"add\":\"remove\")+\"Class\"](\"ui-datepicker-rtl\"),t===V.datepicker._curInst&&V.datepicker._datepickerShowing&&V.datepicker._shouldFocusInput(t)&&t.input.trigger(\"focus\"),t.yearshtml&&(e=t.yearshtml,setTimeout(function(){e===t.yearshtml&&t.yearshtml&&t.dpDiv.find(\"select.ui-datepicker-year\").first().replaceWith(t.yearshtml),e=t.yearshtml=null},0)),o&&o.apply(t.input?t.input[0]:null,[t])},_shouldFocusInput:function(t){return t.input&&t.input.is(\":visible\")&&!t.input.is(\":disabled\")&&!t.input.is(\":focus\")},_checkOffset:function(t,e,i){var s=t.dpDiv.outerWidth(),n=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,a=t.input?t.input.outerHeight():0,r=document.documentElement.clientWidth+(i?0:V(document).scrollLeft()),l=document.documentElement.clientHeight+(i?0:V(document).scrollTop());return e.left-=this._get(t,\"isRTL\")?s-o:0,e.left-=i&&e.left===t.input.offset().left?V(document).scrollLeft():0,e.top-=i&&e.top===t.input.offset().top+a?V(document).scrollTop():0,e.left-=Math.min(e.left,e.left+s>r&&s<r?Math.abs(e.left+s-r):0),e.top-=Math.min(e.top,e.top+n>l&&n<l?Math.abs(n+a):0),e},_findPos:function(t){for(var e=this._getInst(t),i=this._get(e,\"isRTL\");t&&(\"hidden\"===t.type||1!==t.nodeType||V.expr.pseudos.hidden(t));)t=t[i?\"previousSibling\":\"nextSibling\"];return[(e=V(t).offset()).left,e.top]},_hideDatepicker:function(t){var e,i,s=this._curInst;!s||t&&s!==V.data(t,\"datepicker\")||this._datepickerShowing&&(e=this._get(s,\"showAnim\"),i=this._get(s,\"duration\"),t=function(){V.datepicker._tidyDialog(s)},V.effects&&(V.effects.effect[e]||V.effects[e])?s.dpDiv.hide(e,V.datepicker._get(s,\"showOptions\"),i,t):s.dpDiv[\"slideDown\"===e?\"slideUp\":\"fadeIn\"===e?\"fadeOut\":\"hide\"](e?i:null,t),e||t(),this._datepickerShowing=!1,(t=this._get(s,\"onClose\"))&&t.apply(s.input?s.input[0]:null,[s.input?s.input.val():\"\",s]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:\"absolute\",left:\"0\",top:\"-100px\"}),V.blockUI&&(V.unblockUI(),V(\"body\").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(\".ui-datepicker-calendar\")},_checkExternalClick:function(t){var e;V.datepicker._curInst&&(e=V(t.target),t=V.datepicker._getInst(e[0]),(e[0].id===V.datepicker._mainDivId||0!==e.parents(\"#\"+V.datepicker._mainDivId).length||e.hasClass(V.datepicker.markerClassName)||e.closest(\".\"+V.datepicker._triggerClass).length||!V.datepicker._datepickerShowing||V.datepicker._inDialog&&V.blockUI)&&(!e.hasClass(V.datepicker.markerClassName)||V.datepicker._curInst===t)||V.datepicker._hideDatepicker())},_adjustDate:function(t,e,i){var s=V(t),t=this._getInst(s[0]);this._isDisabledDatepicker(s[0])||(this._adjustInstDate(t,e,i),this._updateDatepicker(t))},_gotoToday:function(t){var e=V(t),i=this._getInst(e[0]);this._get(i,\"gotoCurrent\")&&i.currentDay?(i.selectedDay=i.currentDay,i.drawMonth=i.selectedMonth=i.currentMonth,i.drawYear=i.selectedYear=i.currentYear):(t=new Date,i.selectedDay=t.getDate(),i.drawMonth=i.selectedMonth=t.getMonth(),i.drawYear=i.selectedYear=t.getFullYear()),this._notifyChange(i),this._adjustDate(e)},_selectMonthYear:function(t,e,i){var s=V(t),t=this._getInst(s[0]);t[\"selected\"+(\"M\"===i?\"Month\":\"Year\")]=t[\"draw\"+(\"M\"===i?\"Month\":\"Year\")]=parseInt(e.options[e.selectedIndex].value,10),this._notifyChange(t),this._adjustDate(s)},_selectDay:function(t,e,i,s){var n=V(t);V(s).hasClass(this._unselectableClass)||this._isDisabledDatepicker(n[0])||((n=this._getInst(n[0])).selectedDay=n.currentDay=parseInt(V(\"a\",s).attr(\"data-date\")),n.selectedMonth=n.currentMonth=e,n.selectedYear=n.currentYear=i,this._selectDate(t,this._formatDate(n,n.currentDay,n.currentMonth,n.currentYear)))},_clearDate:function(t){t=V(t);this._selectDate(t,\"\")},_selectDate:function(t,e){var i=V(t),t=this._getInst(i[0]);e=null!=e?e:this._formatDate(t),t.input&&t.input.val(e),this._updateAlternate(t),(i=this._get(t,\"onSelect\"))?i.apply(t.input?t.input[0]:null,[e,t]):t.input&&t.input.trigger(\"change\"),t.inline?this._updateDatepicker(t):(this._hideDatepicker(),this._lastInput=t.input[0],\"object\"!=typeof t.input[0]&&t.input.trigger(\"focus\"),this._lastInput=null)},_updateAlternate:function(t){var e,i,s=this._get(t,\"altField\");s&&(e=this._get(t,\"altFormat\")||this._get(t,\"dateFormat\"),i=this._getDate(t),t=this.formatDate(e,i,this._getFormatConfig(t)),V(document).find(s).val(t))},noWeekends:function(t){t=t.getDay();return[0<t&&t<6,\"\"]},iso8601Week:function(t){var e=new Date(t.getTime());return e.setDate(e.getDate()+4-(e.getDay()||7)),t=e.getTime(),e.setMonth(0),e.setDate(1),Math.floor(Math.round((t-e)/864e5)/7)+1},parseDate:function(e,n,t){if(null==e||null==n)throw\"Invalid arguments\";if(\"\"===(n=\"object\"==typeof n?n.toString():n+\"\"))return null;for(var i,s,o,a=0,r=(t?t.shortYearCutoff:null)||this._defaults.shortYearCutoff,r=\"string\"!=typeof r?r:(new Date).getFullYear()%100+parseInt(r,10),l=(t?t.dayNamesShort:null)||this._defaults.dayNamesShort,h=(t?t.dayNames:null)||this._defaults.dayNames,c=(t?t.monthNamesShort:null)||this._defaults.monthNamesShort,u=(t?t.monthNames:null)||this._defaults.monthNames,d=-1,p=-1,f=-1,g=-1,m=!1,_=function(t){t=w+1<e.length&&e.charAt(w+1)===t;return t&&w++,t},v=function(t){var e=_(t),e=\"@\"===t?14:\"!\"===t?20:\"y\"===t&&e?4:\"o\"===t?3:2,e=new RegExp(\"^\\\\d{\"+(\"y\"===t?e:1)+\",\"+e+\"}\"),e=n.substring(a).match(e);if(!e)throw\"Missing number at position \"+a;return a+=e[0].length,parseInt(e[0],10)},b=function(t,e,i){var s=-1,e=V.map(_(t)?i:e,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(V.each(e,function(t,e){var i=e[1];if(n.substr(a,i.length).toLowerCase()===i.toLowerCase())return s=e[0],a+=i.length,!1}),-1!==s)return s+1;throw\"Unknown name at position \"+a},y=function(){if(n.charAt(a)!==e.charAt(w))throw\"Unexpected literal at position \"+a;a++},w=0;w<e.length;w++)if(m)\"'\"!==e.charAt(w)||_(\"'\")?y():m=!1;else switch(e.charAt(w)){case\"d\":f=v(\"d\");break;case\"D\":b(\"D\",l,h);break;case\"o\":g=v(\"o\");break;case\"m\":p=v(\"m\");break;case\"M\":p=b(\"M\",c,u);break;case\"y\":d=v(\"y\");break;case\"@\":d=(o=new Date(v(\"@\"))).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case\"!\":d=(o=new Date((v(\"!\")-this._ticksTo1970)/1e4)).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case\"'\":_(\"'\")?y():m=!0;break;default:y()}if(a<n.length&&(s=n.substr(a),!/^\\s+/.test(s)))throw\"Extra/unparsed characters found in date: \"+s;if(-1===d?d=(new Date).getFullYear():d<100&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=r?0:-100)),-1<g)for(p=1,f=g;;){if(f<=(i=this._getDaysInMonth(d,p-1)))break;p++,f-=i}if((o=this._daylightSavingAdjust(new Date(d,p-1,f))).getFullYear()!==d||o.getMonth()+1!==p||o.getDate()!==f)throw\"Invalid date\";return o},ATOM:\"yy-mm-dd\",COOKIE:\"D, dd M yy\",ISO_8601:\"yy-mm-dd\",RFC_822:\"D, d M y\",RFC_850:\"DD, dd-M-y\",RFC_1036:\"D, d M y\",RFC_1123:\"D, d M yy\",RFC_2822:\"D, d M yy\",RSS:\"D, d M y\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yy-mm-dd\",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(e,t,i){if(!t)return\"\";function s(t,e,i){var s=\"\"+e;if(c(t))for(;s.length<i;)s=\"0\"+s;return s}function n(t,e,i,s){return(c(t)?s:i)[e]}var o,a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,r=(i?i.dayNames:null)||this._defaults.dayNames,l=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,h=(i?i.monthNames:null)||this._defaults.monthNames,c=function(t){t=o+1<e.length&&e.charAt(o+1)===t;return t&&o++,t},u=\"\",d=!1;if(t)for(o=0;o<e.length;o++)if(d)\"'\"!==e.charAt(o)||c(\"'\")?u+=e.charAt(o):d=!1;else switch(e.charAt(o)){case\"d\":u+=s(\"d\",t.getDate(),2);break;case\"D\":u+=n(\"D\",t.getDay(),a,r);break;case\"o\":u+=s(\"o\",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case\"m\":u+=s(\"m\",t.getMonth()+1,2);break;case\"M\":u+=n(\"M\",t.getMonth(),l,h);break;case\"y\":u+=c(\"y\")?t.getFullYear():(t.getFullYear()%100<10?\"0\":\"\")+t.getFullYear()%100;break;case\"@\":u+=t.getTime();break;case\"!\":u+=1e4*t.getTime()+this._ticksTo1970;break;case\"'\":c(\"'\")?u+=\"'\":d=!0;break;default:u+=e.charAt(o)}return u},_possibleChars:function(e){for(var t=\"\",i=!1,s=function(t){t=n+1<e.length&&e.charAt(n+1)===t;return t&&n++,t},n=0;n<e.length;n++)if(i)\"'\"!==e.charAt(n)||s(\"'\")?t+=e.charAt(n):i=!1;else switch(e.charAt(n)){case\"d\":case\"m\":case\"y\":case\"@\":t+=\"0123456789\";break;case\"D\":case\"M\":return null;case\"'\":s(\"'\")?t+=\"'\":i=!0;break;default:t+=e.charAt(n)}return t},_get:function(t,e){return(void 0!==t.settings[e]?t.settings:this._defaults)[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,\"dateFormat\"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?\"\":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,\"defaultDate\"),new Date))},_determineDate:function(r,t,e){var i,s,t=null==t||\"\"===t?e:\"string\"==typeof t?function(t){try{return V.datepicker.parseDate(V.datepicker._get(r,\"dateFormat\"),t,V.datepicker._getFormatConfig(r))}catch(t){}for(var e=(t.toLowerCase().match(/^c/)?V.datepicker._getDate(r):null)||new Date,i=e.getFullYear(),s=e.getMonth(),n=e.getDate(),o=/([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,a=o.exec(t);a;){switch(a[2]||\"d\"){case\"d\":case\"D\":n+=parseInt(a[1],10);break;case\"w\":case\"W\":n+=7*parseInt(a[1],10);break;case\"m\":case\"M\":s+=parseInt(a[1],10),n=Math.min(n,V.datepicker._getDaysInMonth(i,s));break;case\"y\":case\"Y\":i+=parseInt(a[1],10),n=Math.min(n,V.datepicker._getDaysInMonth(i,s))}a=o.exec(t)}return new Date(i,s,n)}(t):\"number\"==typeof t?isNaN(t)?e:(i=t,(s=new Date).setDate(s.getDate()+i),s):new Date(t.getTime());return(t=t&&\"Invalid Date\"===t.toString()?e:t)&&(t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0)),this._daylightSavingAdjust(t)},_daylightSavingAdjust:function(t){return t?(t.setHours(12<t.getHours()?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,e=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=e.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=e.getMonth(),t.drawYear=t.selectedYear=t.currentYear=e.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?\"\":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&\"\"===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(t){var e=this._get(t,\"stepMonths\"),i=\"#\"+t.id.replace(/\\\\\\\\/g,\"\\\\\");t.dpDiv.find(\"[data-handler]\").map(function(){var t={prev:function(){V.datepicker._adjustDate(i,-e,\"M\")},next:function(){V.datepicker._adjustDate(i,+e,\"M\")},hide:function(){V.datepicker._hideDatepicker()},today:function(){V.datepicker._gotoToday(i)},selectDay:function(){return V.datepicker._selectDay(i,+this.getAttribute(\"data-month\"),+this.getAttribute(\"data-year\"),this),!1},selectMonth:function(){return V.datepicker._selectMonthYear(i,this,\"M\"),!1},selectYear:function(){return V.datepicker._selectMonthYear(i,this,\"Y\"),!1}};V(this).on(this.getAttribute(\"data-event\"),t[this.getAttribute(\"data-handler\")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,x,k,C,D,I,T,P,M,S,H,z,A=new Date,O=this._daylightSavingAdjust(new Date(A.getFullYear(),A.getMonth(),A.getDate())),N=this._get(t,\"isRTL\"),E=this._get(t,\"showButtonPanel\"),W=this._get(t,\"hideIfNoPrevNext\"),F=this._get(t,\"navigationAsDateFormat\"),L=this._getNumberOfMonths(t),R=this._get(t,\"showCurrentAtPos\"),A=this._get(t,\"stepMonths\"),Y=1!==L[0]||1!==L[1],B=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),j=this._getMinMaxDate(t,\"min\"),q=this._getMinMaxDate(t,\"max\"),K=t.drawMonth-R,U=t.drawYear;if(K<0&&(K+=12,U--),q)for(e=this._daylightSavingAdjust(new Date(q.getFullYear(),q.getMonth()-L[0]*L[1]+1,q.getDate())),e=j&&e<j?j:e;this._daylightSavingAdjust(new Date(U,K,1))>e;)--K<0&&(K=11,U--);for(t.drawMonth=K,t.drawYear=U,R=this._get(t,\"prevText\"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(U,K-A,1)),this._getFormatConfig(t)):R,i=this._canAdjustMonth(t,-1,U,K)?V(\"<a>\").attr({class:\"ui-datepicker-prev ui-corner-all\",\"data-handler\":\"prev\",\"data-event\":\"click\",title:R}).append(V(\"<span>\").addClass(\"ui-icon ui-icon-circle-triangle-\"+(N?\"e\":\"w\")).text(R))[0].outerHTML:W?\"\":V(\"<a>\").attr({class:\"ui-datepicker-prev ui-corner-all ui-state-disabled\",title:R}).append(V(\"<span>\").addClass(\"ui-icon ui-icon-circle-triangle-\"+(N?\"e\":\"w\")).text(R))[0].outerHTML,R=this._get(t,\"nextText\"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(U,K+A,1)),this._getFormatConfig(t)):R,s=this._canAdjustMonth(t,1,U,K)?V(\"<a>\").attr({class:\"ui-datepicker-next ui-corner-all\",\"data-handler\":\"next\",\"data-event\":\"click\",title:R}).append(V(\"<span>\").addClass(\"ui-icon ui-icon-circle-triangle-\"+(N?\"w\":\"e\")).text(R))[0].outerHTML:W?\"\":V(\"<a>\").attr({class:\"ui-datepicker-next ui-corner-all ui-state-disabled\",title:R}).append(V(\"<span>\").attr(\"class\",\"ui-icon ui-icon-circle-triangle-\"+(N?\"w\":\"e\")).text(R))[0].outerHTML,A=this._get(t,\"currentText\"),W=this._get(t,\"gotoCurrent\")&&t.currentDay?B:O,A=F?this.formatDate(A,W,this._getFormatConfig(t)):A,R=\"\",t.inline||(R=V(\"<button>\").attr({type:\"button\",class:\"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\",\"data-handler\":\"hide\",\"data-event\":\"click\"}).text(this._get(t,\"closeText\"))[0].outerHTML),F=\"\",E&&(F=V(\"<div class='ui-datepicker-buttonpane ui-widget-content'>\").append(N?R:\"\").append(this._isInRange(t,W)?V(\"<button>\").attr({type:\"button\",class:\"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\",\"data-handler\":\"today\",\"data-event\":\"click\"}).text(A):\"\").append(N?\"\":R)[0].outerHTML),n=parseInt(this._get(t,\"firstDay\"),10),n=isNaN(n)?0:n,o=this._get(t,\"showWeek\"),a=this._get(t,\"dayNames\"),r=this._get(t,\"dayNamesMin\"),l=this._get(t,\"monthNames\"),h=this._get(t,\"monthNamesShort\"),c=this._get(t,\"beforeShowDay\"),u=this._get(t,\"showOtherMonths\"),d=this._get(t,\"selectOtherMonths\"),p=this._getDefaultDate(t),f=\"\",m=0;m<L[0];m++){for(_=\"\",this.maxRows=4,v=0;v<L[1];v++){if(b=this._daylightSavingAdjust(new Date(U,K,t.selectedDay)),y=\" ui-corner-all\",w=\"\",Y){if(w+=\"<div class='ui-datepicker-group\",1<L[1])switch(v){case 0:w+=\" ui-datepicker-group-first\",y=\" ui-corner-\"+(N?\"right\":\"left\");break;case L[1]-1:w+=\" ui-datepicker-group-last\",y=\" ui-corner-\"+(N?\"left\":\"right\");break;default:w+=\" ui-datepicker-group-middle\",y=\"\"}w+=\"'>\"}for(w+=\"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\"+y+\"'>\"+(/all|left/.test(y)&&0===m?N?s:i:\"\")+(/all|right/.test(y)&&0===m?N?i:s:\"\")+this._generateMonthYearHeader(t,K,U,j,q,0<m||0<v,l,h)+\"</div><table class='ui-datepicker-calendar'><thead><tr>\",x=o?\"<th class='ui-datepicker-week-col'>\"+this._get(t,\"weekHeader\")+\"</th>\":\"\",g=0;g<7;g++)x+=\"<th scope='col'\"+(5<=(g+n+6)%7?\" class='ui-datepicker-week-end'\":\"\")+\"><span title='\"+a[k=(g+n)%7]+\"'>\"+r[k]+\"</span></th>\";for(w+=x+\"</tr></thead><tbody>\",D=this._getDaysInMonth(U,K),U===t.selectedYear&&K===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,D)),C=(this._getFirstDayOfMonth(U,K)-n+7)%7,D=Math.ceil((C+D)/7),I=Y&&this.maxRows>D?this.maxRows:D,this.maxRows=I,T=this._daylightSavingAdjust(new Date(U,K,1-C)),P=0;P<I;P++){for(w+=\"<tr>\",M=o?\"<td class='ui-datepicker-week-col'>\"+this._get(t,\"calculateWeek\")(T)+\"</td>\":\"\",g=0;g<7;g++)S=c?c.apply(t.input?t.input[0]:null,[T]):[!0,\"\"],z=(H=T.getMonth()!==K)&&!d||!S[0]||j&&T<j||q&&q<T,M+=\"<td class='\"+(5<=(g+n+6)%7?\" ui-datepicker-week-end\":\"\")+(H?\" ui-datepicker-other-month\":\"\")+(T.getTime()===b.getTime()&&K===t.selectedMonth&&t._keyEvent||p.getTime()===T.getTime()&&p.getTime()===b.getTime()?\" \"+this._dayOverClass:\"\")+(z?\" \"+this._unselectableClass+\" ui-state-disabled\":\"\")+(H&&!u?\"\":\" \"+S[1]+(T.getTime()===B.getTime()?\" \"+this._currentClass:\"\")+(T.getTime()===O.getTime()?\" ui-datepicker-today\":\"\"))+\"'\"+(H&&!u||!S[2]?\"\":\" title='\"+S[2].replace(/'/g,\"&#39;\")+\"'\")+(z?\"\":\" data-handler='selectDay' data-event='click' data-month='\"+T.getMonth()+\"' data-year='\"+T.getFullYear()+\"'\")+\">\"+(H&&!u?\"&#xa0;\":z?\"<span class='ui-state-default'>\"+T.getDate()+\"</span>\":\"<a class='ui-state-default\"+(T.getTime()===O.getTime()?\" ui-state-highlight\":\"\")+(T.getTime()===B.getTime()?\" ui-state-active\":\"\")+(H?\" ui-priority-secondary\":\"\")+\"' href='#' aria-current='\"+(T.getTime()===B.getTime()?\"true\":\"false\")+\"' data-date='\"+T.getDate()+\"'>\"+T.getDate()+\"</a>\")+\"</td>\",T.setDate(T.getDate()+1),T=this._daylightSavingAdjust(T);w+=M+\"</tr>\"}11<++K&&(K=0,U++),_+=w+=\"</tbody></table>\"+(Y?\"</div>\"+(0<L[0]&&v===L[1]-1?\"<div class='ui-datepicker-row-break'></div>\":\"\"):\"\")}f+=_}return f+=F,t._keyEvent=!1,f},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f=this._get(t,\"changeMonth\"),g=this._get(t,\"changeYear\"),m=this._get(t,\"showMonthAfterYear\"),_=this._get(t,\"selectMonthLabel\"),v=this._get(t,\"selectYearLabel\"),b=\"<div class='ui-datepicker-title'>\",y=\"\";if(o||!f)y+=\"<span class='ui-datepicker-month'>\"+a[e]+\"</span>\";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+=\"<select class='ui-datepicker-month' aria-label='\"+_+\"' data-handler='selectMonth' data-event='change'>\",c=0;c<12;c++)(!l||c>=s.getMonth())&&(!h||c<=n.getMonth())&&(y+=\"<option value='\"+c+\"'\"+(c===e?\" selected='selected'\":\"\")+\">\"+r[c]+\"</option>\");y+=\"</select>\"}if(m||(b+=y+(!o&&f&&g?\"\":\"&#xa0;\")),!t.yearshtml)if(t.yearshtml=\"\",o||!g)b+=\"<span class='ui-datepicker-year'>\"+i+\"</span>\";else{for(a=this._get(t,\"yearRange\").split(\":\"),u=(new Date).getFullYear(),d=(_=function(t){t=t.match(/c[+\\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\\-].*/)?u+parseInt(t,10):parseInt(t,10);return isNaN(t)?u:t})(a[0]),p=Math.max(d,_(a[1]||\"\")),d=s?Math.max(d,s.getFullYear()):d,p=n?Math.min(p,n.getFullYear()):p,t.yearshtml+=\"<select class='ui-datepicker-year' aria-label='\"+v+\"' data-handler='selectYear' data-event='change'>\";d<=p;d++)t.yearshtml+=\"<option value='\"+d+\"'\"+(d===i?\" selected='selected'\":\"\")+\">\"+d+\"</option>\";t.yearshtml+=\"</select>\",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,\"yearSuffix\"),m&&(b+=(!o&&f&&g?\"\":\"&#xa0;\")+y),b+=\"</div>\"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+(\"Y\"===i?e:0),n=t.selectedMonth+(\"M\"===i?e:0),e=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+(\"D\"===i?e:0),e=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,e)));t.selectedDay=e.getDate(),t.drawMonth=t.selectedMonth=e.getMonth(),t.drawYear=t.selectedYear=e.getFullYear(),\"M\"!==i&&\"Y\"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,\"min\"),t=this._getMinMaxDate(t,\"max\"),e=i&&e<i?i:e;return t&&t<e?t:e},_notifyChange:function(t){var e=this._get(t,\"onChangeMonthYear\");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){t=this._get(t,\"numberOfMonths\");return null==t?[1,1]:\"number\"==typeof t?[1,t]:t},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+\"Date\"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),n=this._daylightSavingAdjust(new Date(i,s+(e<0?e:n[0]*n[1]),1));return e<0&&n.setDate(this._getDaysInMonth(n.getFullYear(),n.getMonth())),this._isInRange(t,n)},_isInRange:function(t,e){var i=this._getMinMaxDate(t,\"min\"),s=this._getMinMaxDate(t,\"max\"),n=null,o=null,a=this._get(t,\"yearRange\");return a&&(t=a.split(\":\"),a=(new Date).getFullYear(),n=parseInt(t[0],10),o=parseInt(t[1],10),t[0].match(/[+\\-].*/)&&(n+=a),t[1].match(/[+\\-].*/)&&(o+=a)),(!i||e.getTime()>=i.getTime())&&(!s||e.getTime()<=s.getTime())&&(!n||e.getFullYear()>=n)&&(!o||e.getFullYear()<=o)},_getFormatConfig:function(t){var e=this._get(t,\"shortYearCutoff\");return{shortYearCutoff:e=\"string\"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,\"dayNamesShort\"),dayNames:this._get(t,\"dayNames\"),monthNamesShort:this._get(t,\"monthNamesShort\"),monthNames:this._get(t,\"monthNames\")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);e=e?\"object\"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,\"dateFormat\"),e,this._getFormatConfig(t))}}),V.fn.datepicker=function(t){if(!this.length)return this;V.datepicker.initialized||(V(document).on(\"mousedown\",V.datepicker._checkExternalClick),V.datepicker.initialized=!0),0===V(\"#\"+V.datepicker._mainDivId).length&&V(\"body\").append(V.datepicker.dpDiv);var e=Array.prototype.slice.call(arguments,1);return\"string\"==typeof t&&(\"isDisabled\"===t||\"getDate\"===t||\"widget\"===t)||\"option\"===t&&2===arguments.length&&\"string\"==typeof arguments[1]?V.datepicker[\"_\"+t+\"Datepicker\"].apply(V.datepicker,[this[0]].concat(e)):this.each(function(){\"string\"==typeof t?V.datepicker[\"_\"+t+\"Datepicker\"].apply(V.datepicker,[this].concat(e)):V.datepicker._attachDatepicker(this,t)})},V.datepicker=new st,V.datepicker.initialized=!1,V.datepicker.uuid=(new Date).getTime(),V.datepicker.version=\"1.13.2\";V.datepicker,V.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase());var rt=!1;V(document).on(\"mouseup\",function(){rt=!1});V.widget(\"ui.mouse\",{version:\"1.13.2\",options:{cancel:\"input, textarea, button, select, option\",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on(\"mousedown.\"+this.widgetName,function(t){return e._mouseDown(t)}).on(\"click.\"+this.widgetName,function(t){if(!0===V.data(t.target,e.widgetName+\".preventClickEvent\"))return V.removeData(t.target,e.widgetName+\".preventClickEvent\"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off(\".\"+this.widgetName),this._mouseMoveDelegate&&this.document.off(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).off(\"mouseup.\"+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!rt){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!(\"string\"!=typeof this.options.cancel||!t.target.nodeName)&&V(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===V.data(t.target,this.widgetName+\".preventClickEvent\")&&V.removeData(t.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).on(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),t.preventDefault(),rt=!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(V.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).off(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&V.data(t.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,rt=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),V.ui.plugin={add:function(t,e,i){var s,n=V.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},V.ui.safeBlur=function(t){t&&\"body\"!==t.nodeName.toLowerCase()&&V(t).trigger(\"blur\")};V.widget(\"ui.draggable\",V.ui.mouse,{version:\"1.13.2\",widgetEventPrefix:\"drag\",options:{addClasses:!0,appendTo:\"parent\",axis:!1,connectToSortable:!1,containment:!1,cursor:\"auto\",cursorAt:!1,grid:!1,handle:!1,helper:\"original\",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:\"default\",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:\"both\",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){\"original\"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass(\"ui-draggable\"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(\".ui-draggable-dragging\")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(t){var e=this.options;return!(this.helper||e.disabled||0<V(t.target).closest(\".ui-resizable-handle\").length)&&(this.handle=this._getHandle(t),!!this.handle&&(this._blurActiveElement(t),this._blockFrames(!0===e.iframeFix?\"iframe\":e.iframeFix),!0))},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=V(this);return V(\"<div>\").css(\"position\",\"absolute\").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=V.ui.safeActiveElement(this.document[0]);V(t.target).closest(e).length||V.ui.safeBlur(e)},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this._addClass(this.helper,\"ui-draggable-dragging\"),this._cacheHelperProportions(),V.ui.ddmanager&&(V.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css(\"position\"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0<this.helper.parents().filter(function(){return\"fixed\"===V(this).css(\"position\")}).length,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this._setContainment(),!1===this._trigger(\"start\",t)?(this._clear(),!1):(this._cacheHelperProportions(),V.ui.ddmanager&&!e.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),V.ui.ddmanager&&V.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(t,e){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo(\"absolute\"),!e){e=this._uiHash();if(!1===this._trigger(\"drag\",t,e))return this._mouseUp(new V.Event(\"mouseup\",t)),!1;this.position=e.position}return this.helper[0].style.left=this.position.left+\"px\",this.helper[0].style.top=this.position.top+\"px\",V.ui.ddmanager&&V.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var e=this,i=!1;return V.ui.ddmanager&&!this.options.dropBehaviour&&(i=V.ui.ddmanager.drop(this,t)),this.dropped&&(i=this.dropped,this.dropped=!1),\"invalid\"===this.options.revert&&!i||\"valid\"===this.options.revert&&i||!0===this.options.revert||\"function\"==typeof this.options.revert&&this.options.revert.call(this.element,i)?V(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==e._trigger(\"stop\",t)&&e._clear()}):!1!==this._trigger(\"stop\",t)&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),V.ui.ddmanager&&V.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.trigger(\"focus\"),V.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(\".ui-draggable-dragging\")?this._mouseUp(new V.Event(\"mouseup\",{target:this.element[0]})):this._clear(),this},_getHandle:function(t){return!this.options.handle||!!V(t.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,\"ui-draggable-handle\")},_removeHandleClassName:function(){this._removeClass(this.handleElement,\"ui-draggable-handle\")},_createHelper:function(t){var e=this.options,i=\"function\"==typeof e.helper,t=i?V(e.helper.apply(this.element[0],[t])):\"clone\"===e.helper?this.element.clone().removeAttr(\"id\"):this.element;return t.parents(\"body\").length||t.appendTo(\"parent\"===e.appendTo?this.element[0].parentNode:e.appendTo),i&&t[0]===this.element[0]&&this._setPositionRelative(),t[0]===this.element[0]||/(fixed|absolute)/.test(t.css(\"position\"))||t.css(\"position\",\"absolute\"),t},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css(\"position\"))||(this.element[0].style.position=\"relative\")},_adjustOffsetFromHelper:function(t){\"string\"==typeof t&&(t=t.split(\" \")),\"left\"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),\"right\"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),\"top\"in t&&(this.offset.click.top=t.top+this.margins.top),\"bottom\"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),e=this.document[0];return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==e&&V.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),{top:(t=this._isRootNode(this.offsetParent[0])?{top:0,left:0}:t).top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:t.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css(\"marginLeft\"),10)||0,top:parseInt(this.element.css(\"marginTop\"),10)||0,right:parseInt(this.element.css(\"marginRight\"),10)||0,bottom:parseInt(this.element.css(\"marginBottom\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i,s=this.options,n=this.document[0];this.relativeContainer=null,s.containment?\"window\"!==s.containment?\"document\"!==s.containment?s.containment.constructor!==Array?(\"parent\"===s.containment&&(s.containment=this.helper[0].parentNode),(i=(e=V(s.containment))[0])&&(t=/(scroll|auto)/.test(e.css(\"overflow\")),this.containment=[(parseInt(e.css(\"borderLeftWidth\"),10)||0)+(parseInt(e.css(\"paddingLeft\"),10)||0),(parseInt(e.css(\"borderTopWidth\"),10)||0)+(parseInt(e.css(\"paddingTop\"),10)||0),(t?Math.max(i.scrollWidth,i.offsetWidth):i.offsetWidth)-(parseInt(e.css(\"borderRightWidth\"),10)||0)-(parseInt(e.css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(i.scrollHeight,i.offsetHeight):i.offsetHeight)-(parseInt(e.css(\"borderBottomWidth\"),10)||0)-(parseInt(e.css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=e)):this.containment=s.containment:this.containment=[0,0,V(n).width()-this.helperProportions.width-this.margins.left,(V(n).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=[V(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,V(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,V(window).scrollLeft()+V(window).width()-this.helperProportions.width-this.margins.left,V(window).scrollTop()+(V(window).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=null},_convertPositionTo:function(t,e){e=e||this.position;var i=\"absolute\"===t?1:-1,t=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.top:t?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.left:t?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s=this.options,n=this._isRootNode(this.scrollParent[0]),o=t.pageX,a=t.pageY;return n&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(i=this.relativeContainer?(i=this.relativeContainer.offset(),[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]):this.containment,t.pageX-this.offset.click.left<i[0]&&(o=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(a=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(o=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(a=i[3]+this.offset.click.top)),s.grid&&(t=s.grid[1]?this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,a=!i||t-this.offset.click.top>=i[1]||t-this.offset.click.top>i[3]?t:t-this.offset.click.top>=i[1]?t-s.grid[1]:t+s.grid[1],t=s.grid[0]?this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,o=!i||t-this.offset.click.left>=i[0]||t-this.offset.click.left>i[2]?t:t-this.offset.click.left>=i[0]?t-s.grid[0]:t+s.grid[0]),\"y\"===s.axis&&(o=this.originalPageX),\"x\"===s.axis&&(a=this.originalPageY)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,\"ui-draggable-dragging\"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,e,i){return i=i||this._uiHash(),V.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo(\"absolute\"),i.offset=this.positionAbs),V.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),V.ui.plugin.add(\"draggable\",\"connectToSortable\",{start:function(e,t,i){var s=V.extend({},t,{item:i.element});i.sortables=[],V(i.options.connectToSortable).each(function(){var t=V(this).sortable(\"instance\");t&&!t.options.disabled&&(i.sortables.push(t),t.refreshPositions(),t._trigger(\"activate\",e,s))})},stop:function(e,t,i){var s=V.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,V.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css(\"position\"),top:t.placeholder.css(\"top\"),left:t.placeholder.css(\"left\")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger(\"deactivate\",e,s))})},drag:function(i,s,n){V.each(n.sortables,function(){var t=!1,e=this;e.positionAbs=n.positionAbs,e.helperProportions=n.helperProportions,e.offset.click=n.offset.click,e._intersectsWith(e.containerCache)&&(t=!0,V.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,t=this!==e&&this._intersectsWith(this.containerCache)&&V.contains(e.element[0],this.element[0])?!1:t})),t?(e.isOver||(e.isOver=1,n._parent=s.helper.parent(),e.currentItem=s.helper.appendTo(e.element).data(\"ui-sortable-item\",!0),e.options._helper=e.options.helper,e.options.helper=function(){return s.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=n.offset.click.top,e.offset.click.left=n.offset.click.left,e.offset.parent.left-=n.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=n.offset.parent.top-e.offset.parent.top,n._trigger(\"toSortable\",i),n.dropped=e.element,V.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,e.fromOutside=n),e.currentItem&&(e._mouseDrag(i),s.position=e.position)):e.isOver&&(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger(\"out\",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&&e.placeholder.remove(),s.helper.appendTo(n._parent),n._refreshOffsets(i),s.position=n._generatePosition(i,!0),n._trigger(\"fromSortable\",i),n.dropped=!1,V.each(n.sortables,function(){this.refreshPositions()}))})}}),V.ui.plugin.add(\"draggable\",\"cursor\",{start:function(t,e,i){var s=V(\"body\"),i=i.options;s.css(\"cursor\")&&(i._cursor=s.css(\"cursor\")),s.css(\"cursor\",i.cursor)},stop:function(t,e,i){i=i.options;i._cursor&&V(\"body\").css(\"cursor\",i._cursor)}}),V.ui.plugin.add(\"draggable\",\"opacity\",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css(\"opacity\")&&(i._opacity=e.css(\"opacity\")),e.css(\"opacity\",i.opacity)},stop:function(t,e,i){i=i.options;i._opacity&&V(e.helper).css(\"opacity\",i._opacity)}}),V.ui.plugin.add(\"draggable\",\"scroll\",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&\"HTML\"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var s=i.options,n=!1,o=i.scrollParentNotHidden[0],a=i.document[0];o!==a&&\"HTML\"!==o.tagName?(s.axis&&\"x\"===s.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY<s.scrollSensitivity?o.scrollTop=n=o.scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(o.scrollTop=n=o.scrollTop-s.scrollSpeed)),s.axis&&\"y\"===s.axis||(i.overflowOffset.left+o.offsetWidth-t.pageX<s.scrollSensitivity?o.scrollLeft=n=o.scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(o.scrollLeft=n=o.scrollLeft-s.scrollSpeed))):(s.axis&&\"x\"===s.axis||(t.pageY-V(a).scrollTop()<s.scrollSensitivity?n=V(a).scrollTop(V(a).scrollTop()-s.scrollSpeed):V(window).height()-(t.pageY-V(a).scrollTop())<s.scrollSensitivity&&(n=V(a).scrollTop(V(a).scrollTop()+s.scrollSpeed))),s.axis&&\"y\"===s.axis||(t.pageX-V(a).scrollLeft()<s.scrollSensitivity?n=V(a).scrollLeft(V(a).scrollLeft()-s.scrollSpeed):V(window).width()-(t.pageX-V(a).scrollLeft())<s.scrollSensitivity&&(n=V(a).scrollLeft(V(a).scrollLeft()+s.scrollSpeed)))),!1!==n&&V.ui.ddmanager&&!s.dropBehaviour&&V.ui.ddmanager.prepareOffsets(i,t)}}),V.ui.plugin.add(\"draggable\",\"snap\",{start:function(t,e,i){var s=i.options;i.snapElements=[],V(s.snap.constructor!==String?s.snap.items||\":data(ui-draggable)\":s.snap).each(function(){var t=V(this),e=t.offset();this!==i.element[0]&&i.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:e.top,left:e.left})})},drag:function(t,e,i){for(var s,n,o,a,r,l,h,c,u,d=i.options,p=d.snapTolerance,f=e.offset.left,g=f+i.helperProportions.width,m=e.offset.top,_=m+i.helperProportions.height,v=i.snapElements.length-1;0<=v;v--)l=(r=i.snapElements[v].left-i.margins.left)+i.snapElements[v].width,c=(h=i.snapElements[v].top-i.margins.top)+i.snapElements[v].height,g<r-p||l+p<f||_<h-p||c+p<m||!V.contains(i.snapElements[v].item.ownerDocument,i.snapElements[v].item)?(i.snapElements[v].snapping&&i.options.snap.release&&i.options.snap.release.call(i.element,t,V.extend(i._uiHash(),{snapItem:i.snapElements[v].item})),i.snapElements[v].snapping=!1):(\"inner\"!==d.snapMode&&(s=Math.abs(h-_)<=p,n=Math.abs(c-m)<=p,o=Math.abs(r-g)<=p,a=Math.abs(l-f)<=p,s&&(e.position.top=i._convertPositionTo(\"relative\",{top:h-i.helperProportions.height,left:0}).top),n&&(e.position.top=i._convertPositionTo(\"relative\",{top:c,left:0}).top),o&&(e.position.left=i._convertPositionTo(\"relative\",{top:0,left:r-i.helperProportions.width}).left),a&&(e.position.left=i._convertPositionTo(\"relative\",{top:0,left:l}).left)),u=s||n||o||a,\"outer\"!==d.snapMode&&(s=Math.abs(h-m)<=p,n=Math.abs(c-_)<=p,o=Math.abs(r-f)<=p,a=Math.abs(l-g)<=p,s&&(e.position.top=i._convertPositionTo(\"relative\",{top:h,left:0}).top),n&&(e.position.top=i._convertPositionTo(\"relative\",{top:c-i.helperProportions.height,left:0}).top),o&&(e.position.left=i._convertPositionTo(\"relative\",{top:0,left:r}).left),a&&(e.position.left=i._convertPositionTo(\"relative\",{top:0,left:l-i.helperProportions.width}).left)),!i.snapElements[v].snapping&&(s||n||o||a||u)&&i.options.snap.snap&&i.options.snap.snap.call(i.element,t,V.extend(i._uiHash(),{snapItem:i.snapElements[v].item})),i.snapElements[v].snapping=s||n||o||a||u)}}),V.ui.plugin.add(\"draggable\",\"stack\",{start:function(t,e,i){var s,i=i.options,i=V.makeArray(V(i.stack)).sort(function(t,e){return(parseInt(V(t).css(\"zIndex\"),10)||0)-(parseInt(V(e).css(\"zIndex\"),10)||0)});i.length&&(s=parseInt(V(i[0]).css(\"zIndex\"),10)||0,V(i).each(function(t){V(this).css(\"zIndex\",s+t)}),this.css(\"zIndex\",s+i.length))}}),V.ui.plugin.add(\"draggable\",\"zIndex\",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css(\"zIndex\")&&(i._zIndex=e.css(\"zIndex\")),e.css(\"zIndex\",i.zIndex)},stop:function(t,e,i){i=i.options;i._zIndex&&V(e.helper).css(\"zIndex\",i._zIndex)}});V.ui.draggable;V.widget(\"ui.resizable\",V.ui.mouse,{version:\"1.13.2\",widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,classes:{\"ui-resizable-se\":\"ui-icon ui-icon-gripsmall-diagonal-se\"},containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if(\"hidden\"===V(t).css(\"overflow\"))return!1;var i=e&&\"left\"===e?\"scrollLeft\":\"scrollTop\",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass(\"ui-resizable\"),V.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(V(\"<div class='ui-wrapper'></div>\").css({overflow:\"hidden\",position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")})),this.element=this.element.parent().data(\"ui-resizable\",this.element.resizable(\"instance\")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\"),marginLeft:this.originalElement.css(\"marginLeft\")},this.element.css(t),this.originalElement.css(\"margin\",0),this.originalResizeStyle=this.originalElement.css(\"resize\"),this.originalElement.css(\"resize\",\"none\"),this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&V(this.element).on(\"mouseenter\",function(){e.disabled||(i._removeClass(\"ui-resizable-autohide\"),i._handles.show())}).on(\"mouseleave\",function(){e.disabled||i.resizing||(i._addClass(\"ui-resizable-autohide\"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){V(t).removeData(\"resizable\").removeData(\"ui-resizable\").off(\".resizable\")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")}).insertAfter(e),e.remove()),this.originalElement.css(\"resize\",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case\"handles\":this._removeHandles(),this._setupHandles();break;case\"aspectRatio\":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,a=this;if(this.handles=o.handles||(V(\".ui-resizable-handle\",this.element).length?{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"}:\"e,s,se\"),this._handles=V(),this._addedHandles=V(),this.handles.constructor===String)for(\"all\"===this.handles&&(this.handles=\"n,e,s,w,se,sw,ne,nw\"),i=this.handles.split(\",\"),this.handles={},e=0;e<i.length;e++)s=\"ui-resizable-\"+(t=String.prototype.trim.call(i[e])),n=V(\"<div>\"),this._addClass(n,\"ui-resizable-handle \"+s),n.css({zIndex:o.zIndex}),this.handles[t]=\".ui-resizable-\"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=V(this.handles[e]),this._on(this.handles[e],{mousedown:a._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=V(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=[\"padding\",/ne|nw|n/.test(e)?\"Top\":/se|sw|s/.test(e)?\"Bottom\":/^e$/.test(e)?\"Right\":\"Left\"].join(\"\"),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(\".ui-resizable-handle\")),this._handles.disableSelection(),this._handles.on(\"mouseover\",function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:\"se\")}),o.autoHide&&(this._handles.hide(),this._addClass(\"ui-resizable-autohide\"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=V(this.handles[e])[0])!==t.target&&!V.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css(\"left\")),i=this._num(this.helper.css(\"top\")),s.containment&&(e+=V(s.containment).scrollLeft()||0,i+=V(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=\"number\"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=V(\".ui-resizable-\"+this.axis).css(\"cursor\"),V(\"body\").css(\"cursor\",\"auto\"===s?this.axis+\"-resize\":s),this._addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate(\"resize\",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),V.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger(\"resize\",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],\"left\")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css(\"left\"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css(\"top\"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(V.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),V(\"body\").css(\"cursor\",\"auto\"),this._removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+\"px\"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+\"px\"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+\"px\"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+\"px\"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t)),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),\"sw\"===s&&(t.left=e.left+(i.width-t.width),t.top=null),\"nw\"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&i&&(t.top=l-e.minHeight),n&&i&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css(\"borderTopWidth\"),t.css(\"borderRightWidth\"),t.css(\"borderBottomWidth\"),t.css(\"borderLeftWidth\")],n=[t.css(\"paddingTop\"),t.css(\"paddingRight\"),t.css(\"paddingBottom\"),t.css(\"paddingLeft\")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||V(\"<div></div>\").css({overflow:\"hidden\"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:\"absolute\",left:this.elementOffset.left+\"px\",top:this.elementOffset.top+\"px\",zIndex:++e.zIndex}),this.helper.appendTo(\"body\").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){V.ui.plugin.call(this,t,[e,this.ui()]),\"resize\"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),V.ui.plugin.add(\"resizable\",\"animate\",{stop:function(e){var i=V(this).resizable(\"instance\"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],\"left\")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,n={width:i.size.width-a,height:i.size.height-o},a=parseFloat(i.element.css(\"left\"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css(\"top\"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(V.extend(n,o&&a?{top:o,left:a}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css(\"width\")),height:parseFloat(i.element.css(\"height\")),top:parseFloat(i.element.css(\"top\")),left:parseFloat(i.element.css(\"left\"))};s&&s.length&&V(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate(\"resize\",e)}})}}),V.ui.plugin.add(\"resizable\",\"containment\",{start:function(){var i,s,n=V(this).resizable(\"instance\"),t=n.options,e=n.element,o=t.containment,a=o instanceof V?o.get(0):/parent/.test(o)?e.parent().get(0):o;a&&(n.containerElement=V(a),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:V(document),left:0,top:0,width:V(document).width(),height:V(document).height()||document.body.parentNode.scrollHeight}):(i=V(a),s=[],V([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(t,e){s[t]=n._num(i.css(\"padding\"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(a,\"left\")?a.scrollWidth:o,e=n._hasScroll(a)?a.scrollHeight:e,n.parentData={element:a,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=V(this).resizable(\"instance\"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,a={top:0,left:0},r=e.containerElement,t=!0;r[0]!==document&&/static/.test(r.css(\"position\"))&&(a=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-a.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css(\"position\")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-a.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-a.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=V(this).resizable(\"instance\"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=V(t.helper),a=o.offset(),r=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css(\"position\"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o}),t._helper&&!e.animate&&/static/.test(n.css(\"position\"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o})}}),V.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(){var t=V(this).resizable(\"instance\").options;V(t.alsoResize).each(function(){var t=V(this);t.data(\"ui-resizable-alsoresize\",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css(\"left\")),top:parseFloat(t.css(\"top\"))})})},resize:function(t,i){var e=V(this).resizable(\"instance\"),s=e.options,n=e.originalSize,o=e.originalPosition,a={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};V(s.alsoResize).each(function(){var t=V(this),s=V(this).data(\"ui-resizable-alsoresize\"),n={},e=t.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];V.each(e,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){V(this).removeData(\"ui-resizable-alsoresize\")}}),V.ui.plugin.add(\"resizable\",\"ghost\",{start:function(){var t=V(this).resizable(\"instance\"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,\"ui-resizable-ghost\"),!1!==V.uiBackCompat&&\"string\"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=V(this).resizable(\"instance\");t.ghost&&t.ghost.css({position:\"relative\",height:t.size.height,width:t.size.width})},stop:function(){var t=V(this).resizable(\"instance\");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),V.ui.plugin.add(\"resizable\",\"grid\",{resize:function(){var t,e=V(this).resizable(\"instance\"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r=\"number\"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,h=r[1]||1,c=Math.round((s.width-n.width)/l)*l,u=Math.round((s.height-n.height)/h)*h,d=n.width+c,p=n.height+u,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<p,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=l),s&&(p+=h),f&&(d-=l),g&&(p-=h),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):((p-h<=0||d-l<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<p-h?(e.size.height=p,e.position.top=o.top-u):(p=h-t.height,e.size.height=p,e.position.top=o.top+n.height-p),0<d-l?(e.size.width=d,e.position.left=o.left-c):(d=l-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});V.ui.resizable;V.widget(\"ui.dialog\",{version:\"1.13.2\",options:{appendTo:\"body\",autoOpen:!0,buttons:[],classes:{\"ui-dialog\":\"ui-corner-all\",\"ui-dialog-titlebar\":\"ui-corner-all\"},closeOnEscape:!0,closeText:\"Close\",draggable:!0,hide:null,height:\"auto\",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:\"center\",at:\"center\",of:window,collision:\"fit\",using:function(t){var e=V(this).css(t).offset().top;e<0&&V(this).css(\"top\",t.top-e)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr(\"title\"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr(\"title\").appendTo(this.uiDialog),this._addClass(\"ui-dialog-content\",\"ui-widget-content\"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&V.fn.draggable&&this._makeDraggable(),this.options.resizable&&V.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?V(t):this.document.find(t||\"body\").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr(\"title\",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:V.noop,enable:V.noop,close:function(t){var e=this;this._isOpen&&!1!==this._trigger(\"beforeClose\",t)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(\":focusable\").trigger(\"focus\").length||V.ui.safeBlur(V.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){e._trigger(\"close\",t)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!1,s=this.uiDialog.siblings(\".ui-front:visible\").map(function(){return+V(this).css(\"z-index\")}).get(),s=Math.max.apply(null,s);return s>=+this.uiDialog.css(\"z-index\")&&(this.uiDialog.css(\"z-index\",s+1),i=!0),i&&!e&&this._trigger(\"focus\",t),i},open:function(){var t=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=V(V.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css(\"z-index\",this.uiDialog.css(\"z-index\")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger(\"focus\")}),this._makeFocusTarget(),this._trigger(\"open\"))},_focusTabbable:function(){var t=this._focusedElement;(t=!(t=!(t=!(t=!(t=t||this.element.find(\"[autofocus]\")).length?this.element.find(\":tabbable\"):t).length?this.uiDialogButtonPane.find(\":tabbable\"):t).length?this.uiDialogTitlebarClose.filter(\":tabbable\"):t).length?this.uiDialog:t).eq(0).trigger(\"focus\")},_restoreTabbableFocus:function(){var t=V.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===t||V.contains(this.uiDialog[0],t)||this._focusTabbable()},_keepFocus:function(t){t.preventDefault(),this._restoreTabbableFocus(),this._delay(this._restoreTabbableFocus)},_createWrapper:function(){this.uiDialog=V(\"<div>\").hide().attr({tabIndex:-1,role:\"dialog\"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,\"ui-dialog\",\"ui-widget ui-widget-content ui-front\"),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===V.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);var e,i,s;t.keyCode!==V.ui.keyCode.TAB||t.isDefaultPrevented()||(e=this.uiDialog.find(\":tabbable\"),i=e.first(),s=e.last(),t.target!==s[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){s.trigger(\"focus\")}),t.preventDefault()):(this._delay(function(){i.trigger(\"focus\")}),t.preventDefault()))},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find(\"[aria-describedby]\").length||this.uiDialog.attr({\"aria-describedby\":this.element.uniqueId().attr(\"id\")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=V(\"<div>\"),this._addClass(this.uiDialogTitlebar,\"ui-dialog-titlebar\",\"ui-widget-header ui-helper-clearfix\"),this._on(this.uiDialogTitlebar,{mousedown:function(t){V(t.target).closest(\".ui-dialog-titlebar-close\")||this.uiDialog.trigger(\"focus\")}}),this.uiDialogTitlebarClose=V(\"<button type='button'></button>\").button({label:V(\"<a>\").text(this.options.closeText).html(),icon:\"ui-icon-closethick\",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,\"ui-dialog-titlebar-close\"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=V(\"<span>\").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(t,\"ui-dialog-title\"),this._title(t),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({\"aria-labelledby\":t.attr(\"id\")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(\"&#160;\")},_createButtonPane:function(){this.uiDialogButtonPane=V(\"<div>\"),this._addClass(this.uiDialogButtonPane,\"ui-dialog-buttonpane\",\"ui-widget-content ui-helper-clearfix\"),this.uiButtonSet=V(\"<div>\").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,\"ui-dialog-buttonset\"),this._createButtons()},_createButtons:function(){var s=this,t=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),V.isEmptyObject(t)||Array.isArray(t)&&!t.length?this._removeClass(this.uiDialog,\"ui-dialog-buttons\"):(V.each(t,function(t,e){var i;e=V.extend({type:\"button\"},e=\"function\"==typeof e?{click:e,text:t}:e),i=e.click,t={icon:e.icon,iconPosition:e.iconPosition,showLabel:e.showLabel,icons:e.icons,text:e.text},delete e.click,delete e.icon,delete e.iconPosition,delete e.showLabel,delete e.icons,\"boolean\"==typeof e.text&&delete e.text,V(\"<button></button>\",e).button(t).appendTo(s.uiButtonSet).on(\"click\",function(){i.apply(s.element[0],arguments)})}),this._addClass(this.uiDialog,\"ui-dialog-buttons\"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var n=this,o=this.options;function a(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:\".ui-dialog-content, .ui-dialog-titlebar-close\",handle:\".ui-dialog-titlebar\",containment:\"document\",start:function(t,e){n._addClass(V(this),\"ui-dialog-dragging\"),n._blockFrames(),n._trigger(\"dragStart\",t,a(e))},drag:function(t,e){n._trigger(\"drag\",t,a(e))},stop:function(t,e){var i=e.offset.left-n.document.scrollLeft(),s=e.offset.top-n.document.scrollTop();o.position={my:\"left top\",at:\"left\"+(0<=i?\"+\":\"\")+i+\" top\"+(0<=s?\"+\":\"\")+s,of:n.window},n._removeClass(V(this),\"ui-dialog-dragging\"),n._unblockFrames(),n._trigger(\"dragStop\",t,a(e))}})},_makeResizable:function(){var n=this,o=this.options,t=o.resizable,e=this.uiDialog.css(\"position\"),t=\"string\"==typeof t?t:\"n,e,s,w,se,sw,ne,nw\";function a(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:\".ui-dialog-content\",containment:\"document\",alsoResize:this.element,maxWidth:o.maxWidth,maxHeight:o.maxHeight,minWidth:o.minWidth,minHeight:this._minHeight(),handles:t,start:function(t,e){n._addClass(V(this),\"ui-dialog-resizing\"),n._blockFrames(),n._trigger(\"resizeStart\",t,a(e))},resize:function(t,e){n._trigger(\"resize\",t,a(e))},stop:function(t,e){var i=n.uiDialog.offset(),s=i.left-n.document.scrollLeft(),i=i.top-n.document.scrollTop();o.height=n.uiDialog.height(),o.width=n.uiDialog.width(),o.position={my:\"left top\",at:\"left\"+(0<=s?\"+\":\"\")+s+\" top\"+(0<=i?\"+\":\"\")+i,of:n.window},n._removeClass(V(this),\"ui-dialog-resizing\"),n._unblockFrames(),n._trigger(\"resizeStop\",t,a(e))}}).css(\"position\",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=V(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=V.inArray(this,t);-1!==e&&t.splice(e,1)},_trackingInstances:function(){var t=this.document.data(\"ui-dialog-instances\");return t||this.document.data(\"ui-dialog-instances\",t=[]),t},_minHeight:function(){var t=this.options;return\"auto\"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(\":visible\");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};V.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(\":data(ui-resizable)\")&&this.uiDialog.resizable(\"option\",n)},_setOption:function(t,e){var i,s=this.uiDialog;\"disabled\"!==t&&(this._super(t,e),\"appendTo\"===t&&this.uiDialog.appendTo(this._appendTo()),\"buttons\"===t&&this._createButtons(),\"closeText\"===t&&this.uiDialogTitlebarClose.button({label:V(\"<a>\").text(\"\"+this.options.closeText).html()}),\"draggable\"===t&&((i=s.is(\":data(ui-draggable)\"))&&!e&&s.draggable(\"destroy\"),!i&&e&&this._makeDraggable()),\"position\"===t&&this._position(),\"resizable\"===t&&((i=s.is(\":data(ui-resizable)\"))&&!e&&s.resizable(\"destroy\"),i&&\"string\"==typeof e&&s.resizable(\"option\",\"handles\",e),i||!1===e||this._makeResizable()),\"title\"===t&&this._title(this.uiDialogTitlebar.find(\".ui-dialog-title\")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:\"auto\",minHeight:0,maxHeight:\"none\",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:\"auto\",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i=\"number\"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):\"none\",\"auto\"===s.height?this.element.css({minHeight:e,maxHeight:i,height:\"auto\"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(\":data(ui-resizable)\")&&this.uiDialog.resizable(\"option\",\"minHeight\",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find(\"iframe\").map(function(){var t=V(this);return V(\"<div>\").css({position:\"absolute\",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!V(t.target).closest(\".ui-dialog\").length||!!V(t.target).closest(\".ui-datepicker\").length},_createOverlay:function(){var i,s;this.options.modal&&(i=V.fn.jquery.substring(0,4),s=!0,this._delay(function(){s=!1}),this.document.data(\"ui-dialog-overlays\")||this.document.on(\"focusin.ui-dialog\",function(t){var e;s||((e=this._trackingInstances()[0])._allowInteraction(t)||(t.preventDefault(),e._focusTabbable(),\"3.4.\"!==i&&\"3.5.\"!==i||e._delay(e._restoreTabbableFocus)))}.bind(this)),this.overlay=V(\"<div>\").appendTo(this._appendTo()),this._addClass(this.overlay,null,\"ui-widget-overlay ui-front\"),this._on(this.overlay,{mousedown:\"_keepFocus\"}),this.document.data(\"ui-dialog-overlays\",(this.document.data(\"ui-dialog-overlays\")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&&this.overlay&&((t=this.document.data(\"ui-dialog-overlays\")-1)?this.document.data(\"ui-dialog-overlays\",t):(this.document.off(\"focusin.ui-dialog\"),this.document.removeData(\"ui-dialog-overlays\")),this.overlay.remove(),this.overlay=null)}}),!1!==V.uiBackCompat&&V.widget(\"ui.dialog\",V.ui.dialog,{options:{dialogClass:\"\"},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){\"dialogClass\"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}});V.ui.dialog;function lt(t,e,i){return e<=t&&t<e+i}V.widget(\"ui.droppable\",{version:\"1.13.2\",widgetEventPrefix:\"drop\",options:{accept:\"*\",addClasses:!0,greedy:!1,scope:\"default\",tolerance:\"intersect\",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept=\"function\"==typeof i?i:function(t){return t.is(i)},this.proportions=function(){if(!arguments.length)return t=t||{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};t=arguments[0]},this._addToManager(e.scope),e.addClasses&&this._addClass(\"ui-droppable\")},_addToManager:function(t){V.ui.ddmanager.droppables[t]=V.ui.ddmanager.droppables[t]||[],V.ui.ddmanager.droppables[t].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var t=V.ui.ddmanager.droppables[this.options.scope];this._splice(t)},_setOption:function(t,e){var i;\"accept\"===t?this.accept=\"function\"==typeof e?e:function(t){return t.is(e)}:\"scope\"===t&&(i=V.ui.ddmanager.droppables[this.options.scope],this._splice(i),this._addToManager(e)),this._super(t,e)},_activate:function(t){var e=V.ui.ddmanager.current;this._addActiveClass(),e&&this._trigger(\"activate\",t,this.ui(e))},_deactivate:function(t){var e=V.ui.ddmanager.current;this._removeActiveClass(),e&&this._trigger(\"deactivate\",t,this.ui(e))},_over:function(t){var e=V.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this._addHoverClass(),this._trigger(\"over\",t,this.ui(e)))},_out:function(t){var e=V.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this._removeHoverClass(),this._trigger(\"out\",t,this.ui(e)))},_drop:function(e,t){var i=t||V.ui.ddmanager.current,s=!1;return!(!i||(i.currentItem||i.element)[0]===this.element[0])&&(this.element.find(\":data(ui-droppable)\").not(\".ui-draggable-dragging\").each(function(){var t=V(this).droppable(\"instance\");if(t.options.greedy&&!t.options.disabled&&t.options.scope===i.options.scope&&t.accept.call(t.element[0],i.currentItem||i.element)&&V.ui.intersect(i,V.extend(t,{offset:t.element.offset()}),t.options.tolerance,e))return!(s=!0)}),!s&&(!!this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger(\"drop\",e,this.ui(i)),this.element)))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass(\"ui-droppable-hover\")},_removeHoverClass:function(){this._removeClass(\"ui-droppable-hover\")},_addActiveClass:function(){this._addClass(\"ui-droppable-active\")},_removeActiveClass:function(){this._removeClass(\"ui-droppable-active\")}}),V.ui.intersect=function(t,e,i,s){if(!e.offset)return!1;var n=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,a=n+t.helperProportions.width,r=o+t.helperProportions.height,l=e.offset.left,h=e.offset.top,c=l+e.proportions().width,u=h+e.proportions().height;switch(i){case\"fit\":return l<=n&&a<=c&&h<=o&&r<=u;case\"intersect\":return l<n+t.helperProportions.width/2&&a-t.helperProportions.width/2<c&&h<o+t.helperProportions.height/2&&r-t.helperProportions.height/2<u;case\"pointer\":return lt(s.pageY,h,e.proportions().height)&&lt(s.pageX,l,e.proportions().width);case\"touch\":return(h<=o&&o<=u||h<=r&&r<=u||o<h&&u<r)&&(l<=n&&n<=c||l<=a&&a<=c||n<l&&c<a);default:return!1}},!(V.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(t,e){var i,s,n=V.ui.ddmanager.droppables[t.options.scope]||[],o=e?e.type:null,a=(t.currentItem||t.element).find(\":data(ui-droppable)\").addBack();t:for(i=0;i<n.length;i++)if(!(n[i].options.disabled||t&&!n[i].accept.call(n[i].element[0],t.currentItem||t.element))){for(s=0;s<a.length;s++)if(a[s]===n[i].element[0]){n[i].proportions().height=0;continue t}n[i].visible=\"none\"!==n[i].element.css(\"display\"),n[i].visible&&(\"mousedown\"===o&&n[i]._activate.call(n[i],e),n[i].offset=n[i].element.offset(),n[i].proportions({width:n[i].element[0].offsetWidth,height:n[i].element[0].offsetHeight}))}},drop:function(t,e){var i=!1;return V.each((V.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&V.ui.intersect(t,this,this.options.tolerance,e)&&(i=this._drop.call(this,e)||i),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,e)))}),i},dragStart:function(t,e){t.element.parentsUntil(\"body\").on(\"scroll.droppable\",function(){t.options.refreshPositions||V.ui.ddmanager.prepareOffsets(t,e)})},drag:function(n,o){n.options.refreshPositions&&V.ui.ddmanager.prepareOffsets(n,o),V.each(V.ui.ddmanager.droppables[n.options.scope]||[],function(){var t,e,i,s;this.options.disabled||this.greedyChild||!this.visible||(s=!(i=V.ui.intersect(n,this,this.options.tolerance,o))&&this.isover?\"isout\":i&&!this.isover?\"isover\":null)&&(this.options.greedy&&(e=this.options.scope,(i=this.element.parents(\":data(ui-droppable)\").filter(function(){return V(this).droppable(\"instance\").options.scope===e})).length&&((t=V(i[0]).droppable(\"instance\")).greedyChild=\"isover\"===s)),t&&\"isover\"===s&&(t.isover=!1,t.isout=!0,t._out.call(t,o)),this[s]=!0,this[\"isout\"===s?\"isover\":\"isout\"]=!1,this[\"isover\"===s?\"_over\":\"_out\"].call(this,o),t&&\"isout\"===s&&(t.isout=!1,t.isover=!0,t._over.call(t,o)))})},dragStop:function(t,e){t.element.parentsUntil(\"body\").off(\"scroll.droppable\"),t.options.refreshPositions||V.ui.ddmanager.prepareOffsets(t,e)}})!==V.uiBackCompat&&V.widget(\"ui.droppable\",V.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}});V.ui.droppable,V.widget(\"ui.progressbar\",{version:\"1.13.2\",options:{classes:{\"ui-progressbar\":\"ui-corner-all\",\"ui-progressbar-value\":\"ui-corner-left\",\"ui-progressbar-complete\":\"ui-corner-right\"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:\"progressbar\",\"aria-valuemin\":this.min}),this._addClass(\"ui-progressbar\",\"ui-widget ui-widget-content\"),this.valueDiv=V(\"<div>\").appendTo(this.element),this._addClass(this.valueDiv,\"ui-progressbar-value\",\"ui-widget-header\"),this._refreshValue()},_destroy:function(){this.element.removeAttr(\"role aria-valuemin aria-valuemax aria-valuenow\"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,\"number\"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){\"max\"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr(\"aria-disabled\",t),this._toggleClass(null,\"ui-state-disabled\",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).width(e.toFixed(0)+\"%\"),this._toggleClass(this.valueDiv,\"ui-progressbar-complete\",null,t===this.options.max)._toggleClass(\"ui-progressbar-indeterminate\",null,this.indeterminate),this.indeterminate?(this.element.removeAttr(\"aria-valuenow\"),this.overlayDiv||(this.overlayDiv=V(\"<div>\").appendTo(this.valueDiv),this._addClass(this.overlayDiv,\"ui-progressbar-overlay\"))):(this.element.attr({\"aria-valuemax\":this.options.max,\"aria-valuenow\":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger(\"change\")),t===this.options.max&&this._trigger(\"complete\")}}),V.widget(\"ui.selectable\",V.ui.mouse,{version:\"1.13.2\",options:{appendTo:\"body\",autoRefresh:!0,distance:0,filter:\"*\",tolerance:\"touch\",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var i=this;this._addClass(\"ui-selectable\"),this.dragged=!1,this.refresh=function(){i.elementPos=V(i.element[0]).offset(),i.selectees=V(i.options.filter,i.element[0]),i._addClass(i.selectees,\"ui-selectee\"),i.selectees.each(function(){var t=V(this),e=t.offset(),e={left:e.left-i.elementPos.left,top:e.top-i.elementPos.top};V.data(this,\"selectable-item\",{element:this,$element:t,left:e.left,top:e.top,right:e.left+t.outerWidth(),bottom:e.top+t.outerHeight(),startselected:!1,selected:t.hasClass(\"ui-selected\"),selecting:t.hasClass(\"ui-selecting\"),unselecting:t.hasClass(\"ui-unselecting\")})})},this.refresh(),this._mouseInit(),this.helper=V(\"<div>\"),this._addClass(this.helper,\"ui-selectable-helper\")},_destroy:function(){this.selectees.removeData(\"selectable-item\"),this._mouseDestroy()},_mouseStart:function(i){var s=this,t=this.options;this.opos=[i.pageX,i.pageY],this.elementPos=V(this.element[0]).offset(),this.options.disabled||(this.selectees=V(t.filter,this.element[0]),this._trigger(\"start\",i),V(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&&this.refresh(),this.selectees.filter(\".ui-selected\").each(function(){var t=V.data(this,\"selectable-item\");t.startselected=!0,i.metaKey||i.ctrlKey||(s._removeClass(t.$element,\"ui-selected\"),t.selected=!1,s._addClass(t.$element,\"ui-unselecting\"),t.unselecting=!0,s._trigger(\"unselecting\",i,{unselecting:t.element}))}),V(i.target).parents().addBack().each(function(){var t,e=V.data(this,\"selectable-item\");if(e)return t=!i.metaKey&&!i.ctrlKey||!e.$element.hasClass(\"ui-selected\"),s._removeClass(e.$element,t?\"ui-unselecting\":\"ui-selected\")._addClass(e.$element,t?\"ui-selecting\":\"ui-unselecting\"),e.unselecting=!t,e.selecting=t,(e.selected=t)?s._trigger(\"selecting\",i,{selecting:e.element}):s._trigger(\"unselecting\",i,{unselecting:e.element}),!1}))},_mouseDrag:function(s){if(this.dragged=!0,!this.options.disabled){var t,n=this,o=this.options,a=this.opos[0],r=this.opos[1],l=s.pageX,h=s.pageY;return l<a&&(t=l,l=a,a=t),h<r&&(t=h,h=r,r=t),this.helper.css({left:a,top:r,width:l-a,height:h-r}),this.selectees.each(function(){var t=V.data(this,\"selectable-item\"),e=!1,i={};t&&t.element!==n.element[0]&&(i.left=t.left+n.elementPos.left,i.right=t.right+n.elementPos.left,i.top=t.top+n.elementPos.top,i.bottom=t.bottom+n.elementPos.top,\"touch\"===o.tolerance?e=!(i.left>l||i.right<a||i.top>h||i.bottom<r):\"fit\"===o.tolerance&&(e=i.left>a&&i.right<l&&i.top>r&&i.bottom<h),e?(t.selected&&(n._removeClass(t.$element,\"ui-selected\"),t.selected=!1),t.unselecting&&(n._removeClass(t.$element,\"ui-unselecting\"),t.unselecting=!1),t.selecting||(n._addClass(t.$element,\"ui-selecting\"),t.selecting=!0,n._trigger(\"selecting\",s,{selecting:t.element}))):(t.selecting&&((s.metaKey||s.ctrlKey)&&t.startselected?(n._removeClass(t.$element,\"ui-selecting\"),t.selecting=!1,n._addClass(t.$element,\"ui-selected\"),t.selected=!0):(n._removeClass(t.$element,\"ui-selecting\"),t.selecting=!1,t.startselected&&(n._addClass(t.$element,\"ui-unselecting\"),t.unselecting=!0),n._trigger(\"unselecting\",s,{unselecting:t.element}))),t.selected&&(s.metaKey||s.ctrlKey||t.startselected||(n._removeClass(t.$element,\"ui-selected\"),t.selected=!1,n._addClass(t.$element,\"ui-unselecting\"),t.unselecting=!0,n._trigger(\"unselecting\",s,{unselecting:t.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,V(\".ui-unselecting\",this.element[0]).each(function(){var t=V.data(this,\"selectable-item\");i._removeClass(t.$element,\"ui-unselecting\"),t.unselecting=!1,t.startselected=!1,i._trigger(\"unselected\",e,{unselected:t.element})}),V(\".ui-selecting\",this.element[0]).each(function(){var t=V.data(this,\"selectable-item\");i._removeClass(t.$element,\"ui-selecting\")._addClass(t.$element,\"ui-selected\"),t.selecting=!1,t.selected=!0,t.startselected=!0,i._trigger(\"selected\",e,{selected:t.element})}),this._trigger(\"stop\",e),this.helper.remove(),!1}}),V.widget(\"ui.selectmenu\",[V.ui.formResetMixin,{version:\"1.13.2\",defaultElement:\"<select>\",options:{appendTo:null,classes:{\"ui-selectmenu-button-open\":\"ui-corner-top\",\"ui-selectmenu-button-closed\":\"ui-corner-all\"},disabled:null,icons:{button:\"ui-icon-triangle-1-s\"},position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var t=this.element.uniqueId().attr(\"id\");this.ids={element:t,button:t+\"-button\",menu:t+\"-menu\"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=V()},_drawButton:function(){var t,e=this,i=this._parseOption(this.element.find(\"option:selected\"),this.element[0].selectedIndex);this.labels=this.element.labels().attr(\"for\",this.ids.button),this._on(this.labels,{click:function(t){this.button.trigger(\"focus\"),t.preventDefault()}}),this.element.hide(),this.button=V(\"<span>\",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:\"combobox\",\"aria-expanded\":\"false\",\"aria-autocomplete\":\"list\",\"aria-owns\":this.ids.menu,\"aria-haspopup\":\"true\",title:this.element.attr(\"title\")}).insertAfter(this.element),this._addClass(this.button,\"ui-selectmenu-button ui-selectmenu-button-closed\",\"ui-button ui-widget\"),t=V(\"<span>\").appendTo(this.button),this._addClass(t,\"ui-selectmenu-icon\",\"ui-icon \"+this.options.icons.button),this.buttonItem=this._renderButtonItem(i).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one(\"focusin\",function(){e._rendered||e._refreshMenu()})},_drawMenu:function(){var i=this;this.menu=V(\"<ul>\",{\"aria-hidden\":\"true\",\"aria-labelledby\":this.ids.button,id:this.ids.menu}),this.menuWrap=V(\"<div>\").append(this.menu),this._addClass(this.menuWrap,\"ui-selectmenu-menu\",\"ui-front\"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{\"ui-menu\":\"ui-corner-bottom\"},role:\"listbox\",select:function(t,e){t.preventDefault(),i._setSelection(),i._select(e.item.data(\"ui-selectmenu-item\"),t)},focus:function(t,e){e=e.item.data(\"ui-selectmenu-item\");null!=i.focusIndex&&e.index!==i.focusIndex&&(i._trigger(\"focus\",t,{item:e}),i.isOpen||i._select(e,t)),i.focusIndex=e.index,i.button.attr(\"aria-activedescendant\",i.menuItems.eq(e.index).attr(\"id\"))}}).menu(\"instance\"),this.menuInstance._off(this.menu,\"mouseleave\"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data(\"ui-selectmenu-item\")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t=this.element.find(\"option\");this.menu.empty(),this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find(\"li\").not(\".ui-selectmenu-optgroup\").find(\".ui-menu-item-wrapper\"),this._rendered=!0,t.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data(\"ui-selectmenu-item\")),this._setOption(\"disabled\",this.element.prop(\"disabled\")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(\".ui-state-active\"),null,\"ui-state-active\"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger(\"open\",t)))},_position:function(){this.menuWrap.position(V.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger(\"close\",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(t){var e=V(\"<span>\");return this._setText(e,t.label),this._addClass(e,\"ui-selectmenu-text\"),e},_renderMenu:function(s,t){var n=this,o=\"\";V.each(t,function(t,e){var i;e.optgroup!==o&&(i=V(\"<li>\",{text:e.optgroup}),n._addClass(i,\"ui-selectmenu-optgroup\",\"ui-menu-divider\"+(e.element.parent(\"optgroup\").prop(\"disabled\")?\" ui-state-disabled\":\"\")),i.appendTo(s),o=e.optgroup),n._renderItemData(s,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data(\"ui-selectmenu-item\",e)},_renderItem:function(t,e){var i=V(\"<li>\"),s=V(\"<div>\",{title:e.element.attr(\"title\")});return e.disabled&&this._addClass(i,null,\"ui-state-disabled\"),this._setText(s,e.label),i.append(s).appendTo(t)},_setText:function(t,e){e?t.text(e):t.html(\"&#160;\")},_move:function(t,e){var i,s=\".ui-menu-item\";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent(\"li\"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent(\"li\"),s+=\":not(.ui-state-disabled)\"),(s=\"first\"===t||\"last\"===t?i[\"first\"===t?\"prevAll\":\"nextAll\"](s).eq(-1):i[t+\"All\"](s).eq(0)).length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent(\"li\")},_toggle:function(t){this[this.isOpen?\"close\":\"open\"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.trigger(\"focus\"))},_documentClick:{mousedown:function(t){this.isOpen&&(V(t.target).closest(\".ui-selectmenu-menu, #\"+V.escapeSelector(this.ids.button)).length||this.close(t))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&&(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(t){var e=!0;switch(t.keyCode){case V.ui.keyCode.TAB:case V.ui.keyCode.ESCAPE:this.close(t),e=!1;break;case V.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case V.ui.keyCode.UP:t.altKey?this._toggle(t):this._move(\"prev\",t);break;case V.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move(\"next\",t);break;case V.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case V.ui.keyCode.LEFT:this._move(\"prev\",t);break;case V.ui.keyCode.RIGHT:this._move(\"next\",t);break;case V.ui.keyCode.HOME:case V.ui.keyCode.PAGE_UP:this._move(\"first\",t);break;case V.ui.keyCode.END:case V.ui.keyCode.PAGE_DOWN:this._move(\"last\",t);break;default:this.menu.trigger(t),e=!1}e&&t.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent(\"li\");e.hasClass(\"ui-state-disabled\")||this._select(e.data(\"ui-selectmenu-item\"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger(\"select\",e,{item:t}),t.index!==i&&this._trigger(\"change\",e,{item:t}),this.close(e)},_setAria:function(t){t=this.menuItems.eq(t.index).attr(\"id\");this.button.attr({\"aria-labelledby\":t,\"aria-activedescendant\":t}),this.menu.attr(\"aria-activedescendant\",t)},_setOption:function(t,e){var i;\"icons\"===t&&(i=this.button.find(\"span.ui-icon\"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),\"appendTo\"===t&&this.menuWrap.appendTo(this._appendTo()),\"width\"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option(\"disabled\",t),this.button.attr(\"aria-disabled\",t),this._toggleClass(this.button,null,\"ui-state-disabled\",t),this.element.prop(\"disabled\",t),t?(this.button.attr(\"tabindex\",-1),this.close()):this.button.attr(\"tabindex\",0)},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(\".ui-front, dialog\"):t).length?this.document[0].body:t},_toggleAttr:function(){this.button.attr(\"aria-expanded\",this.isOpen),this._removeClass(this.button,\"ui-selectmenu-button-\"+(this.isOpen?\"closed\":\"open\"))._addClass(this.button,\"ui-selectmenu-button-\"+(this.isOpen?\"open\":\"closed\"))._toggleClass(this.menuWrap,\"ui-selectmenu-open\",null,this.isOpen),this.menu.attr(\"aria-hidden\",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css(\"width\",\"\")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width(\"\").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop(\"disabled\"),t},_parseOptions:function(t){var i=this,s=[];t.each(function(t,e){e.hidden||s.push(i._parseOption(V(e),t))}),this.items=s},_parseOption:function(t,e){var i=t.parent(\"optgroup\");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr(\"label\")||\"\",disabled:i.prop(\"disabled\")||t.prop(\"disabled\")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr(\"for\",this.ids.element)}}]),V.widget(\"ui.slider\",V.ui.mouse,{version:\"1.13.2\",widgetEventPrefix:\"slide\",options:{animate:!1,classes:{\"ui-slider\":\"ui-corner-all\",\"ui-slider-handle\":\"ui-corner-all\",\"ui-slider-range\":\"ui-corner-all ui-widget-header\"},distance:0,max:100,min:0,orientation:\"horizontal\",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass(\"ui-slider ui-slider-\"+this.orientation,\"ui-widget ui-widget-content\"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,e=this.options,i=this.element.find(\".ui-slider-handle\"),s=[],n=e.values&&e.values.length||1;for(i.length>n&&(i.slice(n).remove(),i=i.slice(0,n)),t=i.length;t<n;t++)s.push(\"<span tabindex='0'></span>\");this.handles=i.add(V(s.join(\"\")).appendTo(this.element)),this._addClass(this.handles,\"ui-slider-handle\",\"ui-state-default\"),this.handle=this.handles.eq(0),this.handles.each(function(t){V(this).data(\"ui-slider-handle-index\",t).attr(\"tabIndex\",0)})},_createRange:function(){var t=this.options;t.range?(!0===t.range&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:Array.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,\"ui-slider-range-min ui-slider-range-max\"),this.range.css({left:\"\",bottom:\"\"})):(this.range=V(\"<div>\").appendTo(this.element),this._addClass(this.range,\"ui-slider-range\")),\"min\"!==t.range&&\"max\"!==t.range||this._addClass(this.range,\"ui-slider-range-\"+t.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,o,e,a,r=this,l=this.options;return!l.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),a={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(a),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var e=Math.abs(i-r.values(t));(e<s||s===e&&(t===r._lastChangedValue||r.values(t)===l.min))&&(s=e,n=V(this),o=t)}),!1!==this._start(t,o)&&(this._mouseSliding=!0,this._handleIndex=o,this._addClass(n,null,\"ui-state-active\"),n.trigger(\"focus\"),e=n.offset(),a=!V(t.target).parents().addBack().is(\".ui-slider-handle\"),this._clickOffset=a?{left:0,top:0}:{left:t.pageX-e.left-n.width()/2,top:t.pageY-e.top-n.height()/2-(parseInt(n.css(\"borderTopWidth\"),10)||0)-(parseInt(n.css(\"borderBottomWidth\"),10)||0)+(parseInt(n.css(\"marginTop\"),10)||0)},this.handles.hasClass(\"ui-state-hover\")||this._slide(t,o,i),this._animateOff=!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},e=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,e),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,\"ui-state-active\"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1},_detectOrientation:function(){this.orientation=\"vertical\"===this.options.orientation?\"vertical\":\"horizontal\"},_normValueFromMouse:function(t){var e,t=\"horizontal\"===this.orientation?(e=this.elementSize.width,t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),t=t/e;return(t=1<t?1:t)<0&&(t=0),\"vertical\"===this.orientation&&(t=1-t),e=this._valueMax()-this._valueMin(),e=this._valueMin()+t*e,this._trimAlignValue(e)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger(\"start\",t,this._uiHash(e))},_slide:function(t,e,i){var s,n=this.value(),o=this.values();this._hasMultipleValues()&&(s=this.values(e?0:1),n=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(s,i):Math.max(s,i)),o[e]=i),i!==n&&!1!==this._trigger(\"slide\",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger(\"stop\",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger(\"change\",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(t,e){var i,s,n;if(1<arguments.length)return this.options.values[t]=this._trimAlignValue(e),this._refreshValue(),void this._change(null,t);if(!arguments.length)return this._values();if(!Array.isArray(t))return this._hasMultipleValues()?this._values(t):this.value();for(i=this.options.values,s=t,n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(s[n]),this._change(null,n);this._refreshValue()},_setOption:function(t,e){var i,s=0;switch(\"range\"===t&&!0===this.options.range&&(\"min\"===e?(this.options.value=this._values(0),this.options.values=null):\"max\"===e&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),Array.isArray(this.options.values)&&(s=this.options.values.length),this._super(t,e),t){case\"orientation\":this._detectOrientation(),this._removeClass(\"ui-slider-horizontal ui-slider-vertical\")._addClass(\"ui-slider-\"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(e),this.handles.css(\"horizontal\"===e?\"bottom\":\"left\",\"\");break;case\"value\":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case\"values\":for(this._animateOff=!0,this._refreshValue(),i=s-1;0<=i;i--)this._change(null,i);this._animateOff=!1;break;case\"step\":case\"min\":case\"max\":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case\"range\":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,\"ui-state-disabled\",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i;if(arguments.length)return t=this.options.values[t],t=this._trimAlignValue(t);if(this._hasMultipleValues()){for(e=this.options.values.slice(),i=0;i<e.length;i+=1)e[i]=this._trimAlignValue(e[i]);return e}return[]},_trimAlignValue:function(t){if(t<=this._valueMin())return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=0<this.options.step?this.options.step:1,i=(t-this._valueMin())%e,t=t-i;return 2*Math.abs(i)>=e&&(t+=0<i?e:-e),parseFloat(t.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(\".\");return-1===t?0:e.length-t-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){\"vertical\"===t&&this.range.css({width:\"\",left:\"\"}),\"horizontal\"===t&&this.range.css({height:\"\",bottom:\"\"})},_refreshValue:function(){var e,i,t,s,n,o=this.options.range,a=this.options,r=this,l=!this._animateOff&&a.animate,h={};this._hasMultipleValues()?this.handles.each(function(t){i=(r.values(t)-r._valueMin())/(r._valueMax()-r._valueMin())*100,h[\"horizontal\"===r.orientation?\"left\":\"bottom\"]=i+\"%\",V(this).stop(1,1)[l?\"animate\":\"css\"](h,a.animate),!0===r.options.range&&(\"horizontal\"===r.orientation?(0===t&&r.range.stop(1,1)[l?\"animate\":\"css\"]({left:i+\"%\"},a.animate),1===t&&r.range[l?\"animate\":\"css\"]({width:i-e+\"%\"},{queue:!1,duration:a.animate})):(0===t&&r.range.stop(1,1)[l?\"animate\":\"css\"]({bottom:i+\"%\"},a.animate),1===t&&r.range[l?\"animate\":\"css\"]({height:i-e+\"%\"},{queue:!1,duration:a.animate}))),e=i}):(t=this.value(),s=this._valueMin(),n=this._valueMax(),i=n!==s?(t-s)/(n-s)*100:0,h[\"horizontal\"===this.orientation?\"left\":\"bottom\"]=i+\"%\",this.handle.stop(1,1)[l?\"animate\":\"css\"](h,a.animate),\"min\"===o&&\"horizontal\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({width:i+\"%\"},a.animate),\"max\"===o&&\"horizontal\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({width:100-i+\"%\"},a.animate),\"min\"===o&&\"vertical\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({height:i+\"%\"},a.animate),\"max\"===o&&\"vertical\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({height:100-i+\"%\"},a.animate))},_handleEvents:{keydown:function(t){var e,i,s,n=V(t.target).data(\"ui-slider-handle-index\");switch(t.keyCode){case V.ui.keyCode.HOME:case V.ui.keyCode.END:case V.ui.keyCode.PAGE_UP:case V.ui.keyCode.PAGE_DOWN:case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(V(t.target),null,\"ui-state-active\"),!1===this._start(t,n)))return}switch(s=this.options.step,e=i=this._hasMultipleValues()?this.values(n):this.value(),t.keyCode){case V.ui.keyCode.HOME:i=this._valueMin();break;case V.ui.keyCode.END:i=this._valueMax();break;case V.ui.keyCode.PAGE_UP:i=this._trimAlignValue(e+(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.PAGE_DOWN:i=this._trimAlignValue(e-(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:if(e===this._valueMax())return;i=this._trimAlignValue(e+s);break;case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(e===this._valueMin())return;i=this._trimAlignValue(e-s)}this._slide(t,n,i)},keyup:function(t){var e=V(t.target).data(\"ui-slider-handle-index\");this._keySliding&&(this._keySliding=!1,this._stop(t,e),this._change(t,e),this._removeClass(V(t.target),null,\"ui-state-active\"))}}}),V.widget(\"ui.sortable\",V.ui.mouse,{version:\"1.13.2\",widgetEventPrefix:\"sort\",ready:!1,options:{appendTo:\"parent\",axis:!1,connectWith:!1,containment:!1,cursor:\"auto\",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:\"original\",items:\"> *\",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:\"default\",tolerance:\"intersect\",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css(\"float\"))||/inline|table-cell/.test(t.css(\"display\"))},_create:function(){this.containerCache={},this._addClass(\"ui-sortable\"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&this._setHandleClassName()},_setHandleClassName:function(){var t=this;this._removeClass(this.element.find(\".ui-sortable-handle\"),\"ui-sortable-handle\"),V.each(this.items,function(){t._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,\"ui-sortable-handle\")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;0<=t;t--)this.items[t].item.removeData(this.widgetName+\"-item\");return this},_mouseCapture:function(t,e){var i=null,s=!1,n=this;return!this.reverting&&(!this.options.disabled&&\"static\"!==this.options.type&&(this._refreshItems(t),V(t.target).parents().each(function(){if(V.data(this,n.widgetName+\"-item\")===n)return i=V(this),!1}),!!(i=V.data(t.target,n.widgetName+\"-item\")===n?V(t.target):i)&&(!(this.options.handle&&!e&&(V(this.options.handle,i).find(\"*\").addBack().each(function(){this===t.target&&(s=!0)}),!s))&&(this.currentItem=i,this._removeCurrentsFromItems(),!0))))},_mouseStart:function(t,e,i){var s,n,o=this.options;if((this.currentContainer=this).refreshPositions(),this.appendTo=V(\"parent\"!==o.appendTo?o.appendTo:this.currentItem.parent()),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},V.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},relative:this._getRelativeOffset()}),this.helper.css(\"position\",\"absolute\"),this.cssPosition=this.helper.css(\"position\"),o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),this.scrollParent=this.placeholder.scrollParent(),V.extend(this.offset,{parent:this._getParentOffset()}),o.containment&&this._setContainment(),o.cursor&&\"auto\"!==o.cursor&&(n=this.document.find(\"body\"),this.storedCursor=n.css(\"cursor\"),n.css(\"cursor\",o.cursor),this.storedStylesheet=V(\"<style>*{ cursor: \"+o.cursor+\" !important; }</style>\").appendTo(n)),o.zIndex&&(this.helper.css(\"zIndex\")&&(this._storedZIndex=this.helper.css(\"zIndex\")),this.helper.css(\"zIndex\",o.zIndex)),o.opacity&&(this.helper.css(\"opacity\")&&(this._storedOpacity=this.helper.css(\"opacity\")),this.helper.css(\"opacity\",o.opacity)),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger(\"start\",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(s=this.containers.length-1;0<=s;s--)this.containers[s]._trigger(\"activate\",t,this._uiHash(this));return V.ui.ddmanager&&(V.ui.ddmanager.current=this),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this._addClass(this.helper,\"ui-sortable-helper\"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo(\"absolute\"),this._mouseDrag(t),!0},_scroll:function(t){var e=this.options,i=!1;return this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<e.scrollSensitivity?this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop+e.scrollSpeed:t.pageY-this.overflowOffset.top<e.scrollSensitivity&&(this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop-e.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<e.scrollSensitivity?this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft+e.scrollSpeed:t.pageX-this.overflowOffset.left<e.scrollSensitivity&&(this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft-e.scrollSpeed)):(t.pageY-this.document.scrollTop()<e.scrollSensitivity?i=this.document.scrollTop(this.document.scrollTop()-e.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<e.scrollSensitivity&&(i=this.document.scrollTop(this.document.scrollTop()+e.scrollSpeed)),t.pageX-this.document.scrollLeft()<e.scrollSensitivity?i=this.document.scrollLeft(this.document.scrollLeft()-e.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<e.scrollSensitivity&&(i=this.document.scrollLeft(this.document.scrollLeft()+e.scrollSpeed))),i},_mouseDrag:function(t){var e,i,s,n,o=this.options;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo(\"absolute\"),this.options.axis&&\"y\"===this.options.axis||(this.helper[0].style.left=this.position.left+\"px\"),this.options.axis&&\"x\"===this.options.axis||(this.helper[0].style.top=this.position.top+\"px\"),o.scroll&&!1!==this._scroll(t)&&(this._refreshItemPositions(!0),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t)),this.dragDirection={vertical:this._getDragVerticalDirection(),horizontal:this._getDragHorizontalDirection()},e=this.items.length-1;0<=e;e--)if(s=(i=this.items[e]).item[0],(n=this._intersectsWithPointer(i))&&i.instance===this.currentContainer&&!(s===this.currentItem[0]||this.placeholder[1===n?\"next\":\"prev\"]()[0]===s||V.contains(this.placeholder[0],s)||\"semi-dynamic\"===this.options.type&&V.contains(this.element[0],s))){if(this.direction=1===n?\"down\":\"up\",\"pointer\"!==this.options.tolerance&&!this._intersectsWithSides(i))break;this._rearrange(t,i),this._trigger(\"change\",t,this._uiHash());break}return this._contactContainers(t),V.ui.ddmanager&&V.ui.ddmanager.drag(this,t),this._trigger(\"sort\",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,e){var i,s,n,o;if(t)return V.ui.ddmanager&&!this.options.dropBehaviour&&V.ui.ddmanager.drop(this,t),this.options.revert?(s=(i=this).placeholder.offset(),o={},(n=this.options.axis)&&\"x\"!==n||(o.left=s.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),n&&\"y\"!==n||(o.top=s.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,V(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){i._clear(t)})):this._clear(t,e),!1},cancel:function(){if(this.dragging){this._mouseUp(new V.Event(\"mouseup\",{target:null})),\"original\"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,\"ui-sortable-helper\")):this.currentItem.show();for(var t=this.containers.length-1;0<=t;t--)this.containers[t]._trigger(\"deactivate\",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger(\"out\",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),\"original\"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),V.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?V(this.domPosition.prev).after(this.currentItem):V(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var t=this._getItemsAsjQuery(e&&e.connected),i=[];return e=e||{},V(t).each(function(){var t=(V(e.item||this).attr(e.attribute||\"id\")||\"\").match(e.expression||/(.+)[\\-=_](.+)/);t&&i.push((e.key||t[1]+\"[]\")+\"=\"+(e.key&&e.expression?t[1]:t[2]))}),!i.length&&e.key&&i.push(e.key+\"=\"),i.join(\"&\")},toArray:function(t){var e=this._getItemsAsjQuery(t&&t.connected),i=[];return t=t||{},e.each(function(){i.push(V(t.item||this).attr(t.attribute||\"id\")||\"\")}),i},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,h=\"x\"===this.options.axis||r<s+h&&s+h<l,c=\"y\"===this.options.axis||o<e+c&&e+c<a;return\"pointer\"===this.options.tolerance||this.options.forcePointerForContainers||\"pointer\"!==this.options.tolerance&&this.helperProportions[this.floating?\"width\":\"height\"]>t[this.floating?\"width\":\"height\"]?h&&c:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<s+this.helperProportions.height/2&&n-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e=\"x\"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),t=\"y\"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!e||!t)&&(e=this.dragDirection.vertical,t=this.dragDirection.horizontal,this.floating?\"right\"===t||\"down\"===e?2:1:e&&(\"down\"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this.dragDirection.vertical,t=this.dragDirection.horizontal;return this.floating&&t?\"right\"===t&&i||\"left\"===t&&!i:s&&(\"down\"===s&&e||\"up\"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!=t&&(0<t?\"down\":\"up\")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!=t&&(0<t?\"right\":\"left\")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(t){var e,i,s,n,o=[],a=[],r=this._connectWith();if(r&&t)for(e=r.length-1;0<=e;e--)for(i=(s=V(r[e],this.document[0])).length-1;0<=i;i--)(n=V.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&a.push([\"function\"==typeof n.options.items?n.options.items.call(n.element):V(n.options.items,n.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),n]);function l(){o.push(this)}for(a.push([\"function\"==typeof this.options.items?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):V(this.options.items,this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),this]),e=a.length-1;0<=e;e--)a[e][0].each(l);return V(o)},_removeCurrentsFromItems:function(){var i=this.currentItem.find(\":data(\"+this.widgetName+\"-item)\");this.items=V.grep(this.items,function(t){for(var e=0;e<i.length;e++)if(i[e]===t.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var e,i,s,n,o,a,r,l,h=this.items,c=[[\"function\"==typeof this.options.items?this.options.items.call(this.element[0],t,{item:this.currentItem}):V(this.options.items,this.element),this]],u=this._connectWith();if(u&&this.ready)for(e=u.length-1;0<=e;e--)for(i=(s=V(u[e],this.document[0])).length-1;0<=i;i--)(n=V.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&(c.push([\"function\"==typeof n.options.items?n.options.items.call(n.element[0],t,{item:this.currentItem}):V(n.options.items,n.element),n]),this.containers.push(n));for(e=c.length-1;0<=e;e--)for(o=c[e][1],l=(a=c[e][i=0]).length;i<l;i++)(r=V(a[i])).data(this.widgetName+\"-item\",o),h.push({item:r,instance:o,width:0,height:0,left:0,top:0})},_refreshItemPositions:function(t){for(var e,i,s=this.items.length-1;0<=s;s--)e=this.items[s],this.currentContainer&&e.instance!==this.currentContainer&&e.item[0]!==this.currentItem[0]||(i=this.options.toleranceElement?V(this.options.toleranceElement,e.item):e.item,t||(e.width=i.outerWidth(),e.height=i.outerHeight()),i=i.offset(),e.left=i.left,e.top=i.top)},refreshPositions:function(t){var e,i;if(this.floating=!!this.items.length&&(\"x\"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),this._refreshItemPositions(t),this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;0<=e;e--)i=this.containers[e].element.offset(),this.containers[e].containerCache.left=i.left,this.containers[e].containerCache.top=i.top,this.containers[e].containerCache.width=this.containers[e].element.outerWidth(),this.containers[e].containerCache.height=this.containers[e].element.outerHeight();return this},_createPlaceholder:function(i){var s,n,o=(i=i||this).options;o.placeholder&&o.placeholder.constructor!==String||(s=o.placeholder,n=i.currentItem[0].nodeName.toLowerCase(),o.placeholder={element:function(){var t=V(\"<\"+n+\">\",i.document[0]);return i._addClass(t,\"ui-sortable-placeholder\",s||i.currentItem[0].className)._removeClass(t,\"ui-sortable-helper\"),\"tbody\"===n?i._createTrPlaceholder(i.currentItem.find(\"tr\").eq(0),V(\"<tr>\",i.document[0]).appendTo(t)):\"tr\"===n?i._createTrPlaceholder(i.currentItem,t):\"img\"===n&&t.attr(\"src\",i.currentItem.attr(\"src\")),s||t.css(\"visibility\",\"hidden\"),t},update:function(t,e){s&&!o.forcePlaceholderSize||(e.height()&&(!o.forcePlaceholderSize||\"tbody\"!==n&&\"tr\"!==n)||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css(\"paddingTop\")||0,10)-parseInt(i.currentItem.css(\"paddingBottom\")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css(\"paddingLeft\")||0,10)-parseInt(i.currentItem.css(\"paddingRight\")||0,10)))}}),i.placeholder=V(o.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),o.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){V(\"<td>&#160;</td>\",i.document[0]).attr(\"colspan\",V(this).attr(\"colspan\")||1).appendTo(e)})},_contactContainers:function(t){for(var e,i,s,n,o,a,r,l,h,c=null,u=null,d=this.containers.length-1;0<=d;d--)V.contains(this.currentItem[0],this.containers[d].element[0])||(this._intersectsWith(this.containers[d].containerCache)?c&&V.contains(this.containers[d].element[0],c.element[0])||(c=this.containers[d],u=d):this.containers[d].containerCache.over&&(this.containers[d]._trigger(\"out\",t,this._uiHash(this)),this.containers[d].containerCache.over=0));if(c)if(1===this.containers.length)this.containers[u].containerCache.over||(this.containers[u]._trigger(\"over\",t,this._uiHash(this)),this.containers[u].containerCache.over=1);else{for(i=1e4,s=null,n=(l=c.floating||this._isFloating(this.currentItem))?\"left\":\"top\",o=l?\"width\":\"height\",h=l?\"pageX\":\"pageY\",e=this.items.length-1;0<=e;e--)V.contains(this.containers[u].element[0],this.items[e].item[0])&&this.items[e].item[0]!==this.currentItem[0]&&(a=this.items[e].item.offset()[n],r=!1,t[h]-a>this.items[e][o]/2&&(r=!0),Math.abs(t[h]-a)<i&&(i=Math.abs(t[h]-a),s=this.items[e],this.direction=r?\"up\":\"down\"));(s||this.options.dropOnEmpty)&&(this.currentContainer!==this.containers[u]?(s?this._rearrange(t,s,null,!0):this._rearrange(t,null,this.containers[u].element,!0),this._trigger(\"change\",t,this._uiHash()),this.containers[u]._trigger(\"change\",t,this._uiHash(this)),this.currentContainer=this.containers[u],this.options.placeholder.update(this.currentContainer,this.placeholder),this.scrollParent=this.placeholder.scrollParent(),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this.containers[u]._trigger(\"over\",t,this._uiHash(this)),this.containers[u].containerCache.over=1):this.currentContainer.containerCache.over||(this.containers[u]._trigger(\"over\",t,this._uiHash()),this.currentContainer.containerCache.over=1))}},_createHelper:function(t){var e=this.options,t=\"function\"==typeof e.helper?V(e.helper.apply(this.element[0],[t,this.currentItem])):\"clone\"===e.helper?this.currentItem.clone():this.currentItem;return t.parents(\"body\").length||this.appendTo[0].appendChild(t[0]),t[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css(\"position\"),top:this.currentItem.css(\"top\"),left:this.currentItem.css(\"left\")}),t[0].style.width&&!e.forceHelperSize||t.width(this.currentItem.width()),t[0].style.height&&!e.forceHelperSize||t.height(this.currentItem.height()),t},_adjustOffsetFromHelper:function(t){\"string\"==typeof t&&(t=t.split(\" \")),\"left\"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),\"right\"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),\"top\"in t&&(this.offset.click.top=t.top+this.margins.top),\"bottom\"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),{top:(t=this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&\"html\"===this.offsetParent[0].tagName.toLowerCase()&&V.ui.ie?{top:0,left:0}:t).top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:t.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"!==this.cssPosition)return{top:0,left:0};var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+this.scrollParent.scrollLeft()}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css(\"marginLeft\"),10)||0,top:parseInt(this.currentItem.css(\"marginTop\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i=this.options;\"parent\"===i.containment&&(i.containment=this.helper[0].parentNode),\"document\"!==i.containment&&\"window\"!==i.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,\"document\"===i.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,(\"document\"===i.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(i.containment)||(t=V(i.containment)[0],e=V(i.containment).offset(),i=\"hidden\"!==V(t).css(\"overflow\"),this.containment=[e.left+(parseInt(V(t).css(\"borderLeftWidth\"),10)||0)+(parseInt(V(t).css(\"paddingLeft\"),10)||0)-this.margins.left,e.top+(parseInt(V(t).css(\"borderTopWidth\"),10)||0)+(parseInt(V(t).css(\"paddingTop\"),10)||0)-this.margins.top,e.left+(i?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(V(t).css(\"borderLeftWidth\"),10)||0)-(parseInt(V(t).css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left,e.top+(i?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(V(t).css(\"borderTopWidth\"),10)||0)-(parseInt(V(t).css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,e){e=e||this.position;var i=\"absolute\"===t?1:-1,s=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,t=/(html|body)/i.test(s[0].tagName);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():t?0:s.scrollTop())*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():t?0:s.scrollLeft())*i}},_generatePosition:function(t){var e=this.options,i=t.pageX,s=t.pageY,n=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return\"relative\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(i=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(s=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(i=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(s=this.containment[3]+this.offset.click.top)),e.grid&&(t=this.originalPageY+Math.round((s-this.originalPageY)/e.grid[1])*e.grid[1],s=!this.containment||t-this.offset.click.top>=this.containment[1]&&t-this.offset.click.top<=this.containment[3]?t:t-this.offset.click.top>=this.containment[1]?t-e.grid[1]:t+e.grid[1],t=this.originalPageX+Math.round((i-this.originalPageX)/e.grid[0])*e.grid[0],i=!this.containment||t-this.offset.click.left>=this.containment[0]&&t-this.offset.click.left<=this.containment[2]?t:t-this.offset.click.left>=this.containment[0]?t-e.grid[0]:t+e.grid[0])),{top:s-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop()),left:i-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],\"down\"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)\"auto\"!==this._storedCSS[i]&&\"static\"!==this._storedCSS[i]||(this._storedCSS[i]=\"\");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,\"ui-sortable-helper\")}else this.currentItem.show();function n(e,i,s){return function(t){s._trigger(e,t,i._uiHash(i))}}for(this.fromOutside&&!e&&s.push(function(t){this._trigger(\"receive\",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(\".ui-sortable-helper\")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger(\"update\",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger(\"remove\",t,this._uiHash())}),s.push(function(e){return function(t){e._trigger(\"receive\",t,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(e){return function(t){e._trigger(\"update\",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;0<=i;i--)e||s.push(n(\"deactivate\",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(n(\"out\",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find(\"body\").css(\"cursor\",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css(\"opacity\",this._storedOpacity),this._storedZIndex&&this.helper.css(\"zIndex\",\"auto\"===this._storedZIndex?\"\":this._storedZIndex),this.dragging=!1,e||this._trigger(\"beforeStop\",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i<s.length;i++)s[i].call(this,t);this._trigger(\"stop\",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===V.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(t){var e=t||this;return{helper:e.helper,placeholder:e.placeholder||V([]),position:e.position,originalPosition:e.originalPosition,offset:e.positionAbs,item:e.currentItem,sender:t?t.element:null}}});function ht(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger(\"change\")}}V.widget(\"ui.spinner\",{version:\"1.13.2\",defaultElement:\"<input>\",widgetEventPrefix:\"spin\",options:{classes:{\"ui-spinner\":\"ui-corner-all\",\"ui-spinner-down\":\"ui-corner-br\",\"ui-spinner-up\":\"ui-corner-tr\"},culture:null,icons:{down:\"ui-icon-triangle-1-s\",up:\"ui-icon-triangle-1-n\"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption(\"max\",this.options.max),this._setOption(\"min\",this.options.min),this._setOption(\"step\",this.options.step),\"\"!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_getCreateOptions:function(){var s=this._super(),n=this.element;return V.each([\"min\",\"max\",\"step\"],function(t,e){var i=n.attr(e);null!=i&&i.length&&(s[e]=i)}),s},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:\"_stop\",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger(\"change\",t))},mousewheel:function(t,e){var i=V.ui.safeActiveElement(this.document[0]);if(this.element[0]===i&&e){if(!this.spinning&&!this._start(t))return!1;this._spin((0<e?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},\"mousedown .ui-spinner-button\":function(t){var e;function i(){this.element[0]===V.ui.safeActiveElement(this.document[0])||(this.element.trigger(\"focus\"),this.previous=e,this._delay(function(){this.previous=e}))}e=this.element[0]===V.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(t)&&this._repeat(null,V(t.currentTarget).hasClass(\"ui-spinner-up\")?1:-1,t)},\"mouseup .ui-spinner-button\":\"_stop\",\"mouseenter .ui-spinner-button\":function(t){if(V(t.currentTarget).hasClass(\"ui-state-active\"))return!1!==this._start(t)&&void this._repeat(null,V(t.currentTarget).hasClass(\"ui-spinner-up\")?1:-1,t)},\"mouseleave .ui-spinner-button\":\"_stop\"},_enhance:function(){this.uiSpinner=this.element.attr(\"autocomplete\",\"off\").wrap(\"<span>\").parent().append(\"<a></a><a></a>\")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,\"ui-spinner\",\"ui-widget ui-widget-content\"),this._addClass(\"ui-spinner-input\"),this.element.attr(\"role\",\"spinbutton\"),this.buttons=this.uiSpinner.children(\"a\").attr(\"tabIndex\",-1).attr(\"aria-hidden\",!0).button({classes:{\"ui-button\":\"\"}}),this._removeClass(this.buttons,\"ui-corner-all\"),this._addClass(this.buttons.first(),\"ui-spinner-button ui-spinner-up\"),this._addClass(this.buttons.last(),\"ui-spinner-button ui-spinner-down\"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&0<this.uiSpinner.height()&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(t){var e=this.options,i=V.ui.keyCode;switch(t.keyCode){case i.UP:return this._repeat(null,1,t),!0;case i.DOWN:return this._repeat(null,-1,t),!0;case i.PAGE_UP:return this._repeat(null,e.page,t),!0;case i.PAGE_DOWN:return this._repeat(null,-e.page,t),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger(\"start\",t))&&(this.counter||(this.counter=1),this.spinning=!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger(\"spin\",e,{value:i})||(this._value(i),this.counter++)},_increment:function(t){var e=this.options.incremental;return e?\"function\"==typeof e?e(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(\".\");return-1===t?0:e.length-t-1},_adjustValue:function(t){var e=this.options,i=null!==e.min?e.min:0,s=t-i;return t=i+Math.round(s/e.step)*e.step,t=parseFloat(t.toFixed(this._precision())),null!==e.max&&t>e.max?e.max:null!==e.min&&t<e.min?e.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger(\"stop\",t))},_setOption:function(t,e){var i;if(\"culture\"===t||\"numberFormat\"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));\"max\"!==t&&\"min\"!==t&&\"step\"!==t||\"string\"==typeof e&&(e=this._parse(e)),\"icons\"===t&&(i=this.buttons.first().find(\".ui-icon\"),this._removeClass(i,null,this.options.icons.up),this._addClass(i,null,e.up),i=this.buttons.last().find(\".ui-icon\"),this._removeClass(i,null,this.options.icons.down),this._addClass(i,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,\"ui-state-disabled\",!!t),this.element.prop(\"disabled\",!!t),this.buttons.button(t?\"disable\":\"enable\")},_setOptions:ht(function(t){this._super(t)}),_parse:function(t){return\"\"===(t=\"string\"==typeof t&&\"\"!==t?window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t:t)||isNaN(t)?null:t},_format:function(t){return\"\"===t?\"\":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({\"aria-valuemin\":this.options.min,\"aria-valuemax\":this.options.max,\"aria-valuenow\":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;\"\"!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop(\"disabled\",!1).removeAttr(\"autocomplete role aria-valuemin aria-valuemax aria-valuenow\"),this.uiSpinner.replaceWith(this.element)},stepUp:ht(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:ht(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:ht(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:ht(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());ht(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==V.uiBackCompat&&V.widget(\"ui.spinner\",V.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr(\"autocomplete\",\"off\").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return\"<span>\"},_buttonHtml:function(){return\"<a></a><a></a>\"}});var ct;V.ui.spinner;V.widget(\"ui.tabs\",{version:\"1.13.2\",delay:300,options:{active:null,classes:{\"ui-tabs\":\"ui-corner-all\",\"ui-tabs-nav\":\"ui-corner-all\",\"ui-tabs-panel\":\"ui-corner-bottom\",\"ui-tabs-tab\":\"ui-corner-top\"},collapsible:!1,event:\"click\",heightStyle:\"content\",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(ct=/#.*$/,function(t){var e=t.href.replace(ct,\"\"),i=location.href.replace(ct,\"\");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1<t.hash.length&&e===i}),_create:function(){var e=this,t=this.options;this.running=!1,this._addClass(\"ui-tabs\",\"ui-widget ui-widget-content\"),this._toggleClass(\"ui-tabs-collapsible\",null,t.collapsible),this._processTabs(),t.active=this._initialActive(),Array.isArray(t.disabled)&&(t.disabled=V.uniqueSort(t.disabled.concat(V.map(this.tabs.filter(\".ui-state-disabled\"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(t.active):this.active=V(),this._refresh(),this.active.length&&this.load(t.active)},_initialActive:function(){var i=this.options.active,t=this.options.collapsible,s=location.hash.substring(1);return null===i&&(s&&this.tabs.each(function(t,e){if(V(e).attr(\"aria-controls\")===s)return i=t,!1}),null!==(i=null===i?this.tabs.index(this.tabs.filter(\".ui-tabs-active\")):i)&&-1!==i||(i=!!this.tabs.length&&0)),!1!==i&&-1===(i=this.tabs.index(this.tabs.eq(i)))&&(i=!t&&0),i=!t&&!1===i&&this.anchors.length?0:i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):V()}},_tabKeydown:function(t){var e=V(V.ui.safeActiveElement(this.document[0])).closest(\"li\"),i=this.tabs.index(e),s=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:i++;break;case V.ui.keyCode.UP:case V.ui.keyCode.LEFT:s=!1,i--;break;case V.ui.keyCode.END:i=this.anchors.length-1;break;case V.ui.keyCode.HOME:i=0;break;case V.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i);case V.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i!==this.options.active&&i);default:return}t.preventDefault(),clearTimeout(this.activating),i=this._focusNextTab(i,s),t.ctrlKey||t.metaKey||(e.attr(\"aria-selected\",\"false\"),this.tabs.eq(i).attr(\"aria-selected\",\"true\"),this.activating=this._delay(function(){this.option(\"active\",i)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===V.ui.keyCode.UP&&(t.preventDefault(),this.active.trigger(\"focus\"))},_handlePageNav:function(t){return t.altKey&&t.keyCode===V.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===V.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,e){var i=this.tabs.length-1;for(;-1!==V.inArray(t=(t=i<t?0:t)<0?i:t,this.options.disabled);)t=e?t+1:t-1;return t},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger(\"focus\"),t},_setOption:function(t,e){\"active\"!==t?(this._super(t,e),\"collapsible\"===t&&(this._toggleClass(\"ui-tabs-collapsible\",null,e),e||!1!==this.options.active||this._activate(0)),\"event\"===t&&this._setupEvents(e),\"heightStyle\"===t&&this._setupHeightStyle(e)):this._activate(e)},_sanitizeSelector:function(t){return t?t.replace(/[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g,\"\\\\$&\"):\"\"},refresh:function(){var t=this.options,e=this.tablist.children(\":has(a[href])\");t.disabled=V.map(e.filter(\".ui-state-disabled\"),function(t){return e.index(t)}),this._processTabs(),!1!==t.active&&this.anchors.length?this.active.length&&!V.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=V()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=V()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({\"aria-hidden\":\"true\"}),this.active.length?(this.active.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0}),this._addClass(this.active,\"ui-tabs-active\",\"ui-state-active\"),this._getPanelForTab(this.active).show().attr({\"aria-hidden\":\"false\"})):this.tabs.eq(0).attr(\"tabIndex\",0)},_processTabs:function(){var l=this,t=this.tabs,e=this.anchors,i=this.panels;this.tablist=this._getList().attr(\"role\",\"tablist\"),this._addClass(this.tablist,\"ui-tabs-nav\",\"ui-helper-reset ui-helper-clearfix ui-widget-header\"),this.tablist.on(\"mousedown\"+this.eventNamespace,\"> li\",function(t){V(this).is(\".ui-state-disabled\")&&t.preventDefault()}).on(\"focus\"+this.eventNamespace,\".ui-tabs-anchor\",function(){V(this).closest(\"li\").is(\".ui-state-disabled\")&&this.blur()}),this.tabs=this.tablist.find(\"> li:has(a[href])\").attr({role:\"tab\",tabIndex:-1}),this._addClass(this.tabs,\"ui-tabs-tab\",\"ui-state-default\"),this.anchors=this.tabs.map(function(){return V(\"a\",this)[0]}).attr({tabIndex:-1}),this._addClass(this.anchors,\"ui-tabs-anchor\"),this.panels=V(),this.anchors.each(function(t,e){var i,s,n,o=V(e).uniqueId().attr(\"id\"),a=V(e).closest(\"li\"),r=a.attr(\"aria-controls\");l._isLocal(e)?(n=(i=e.hash).substring(1),s=l.element.find(l._sanitizeSelector(i))):(n=a.attr(\"aria-controls\")||V({}).uniqueId()[0].id,(s=l.element.find(i=\"#\"+n)).length||(s=l._createPanel(n)).insertAfter(l.panels[t-1]||l.tablist),s.attr(\"aria-live\",\"polite\")),s.length&&(l.panels=l.panels.add(s)),r&&a.data(\"ui-tabs-aria-controls\",r),a.attr({\"aria-controls\":n,\"aria-labelledby\":o}),s.attr(\"aria-labelledby\",o)}),this.panels.attr(\"role\",\"tabpanel\"),this._addClass(this.panels,\"ui-tabs-panel\",\"ui-widget-content\"),t&&(this._off(t.not(this.tabs)),this._off(e.not(this.anchors)),this._off(i.not(this.panels)))},_getList:function(){return this.tablist||this.element.find(\"ol, ul\").eq(0)},_createPanel:function(t){return V(\"<div>\").attr(\"id\",t).data(\"ui-tabs-destroy\",!0)},_setOptionDisabled:function(t){var e,i;for(Array.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1),i=0;e=this.tabs[i];i++)e=V(e),!0===t||-1!==V.inArray(i,t)?(e.attr(\"aria-disabled\",\"true\"),this._addClass(e,null,\"ui-state-disabled\")):(e.removeAttr(\"aria-disabled\"),this._removeClass(e,null,\"ui-state-disabled\"));this.options.disabled=t,this._toggleClass(this.widget(),this.widgetFullName+\"-disabled\",null,!0===t)},_setupEvents:function(t){var i={};t&&V.each(t.split(\" \"),function(t,e){i[e]=\"_eventHandler\"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:\"_tabKeydown\"}),this._on(this.panels,{keydown:\"_panelKeydown\"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,e=this.element.parent();\"fill\"===t?(i=e.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(\":visible\").each(function(){var t=V(this),e=t.css(\"position\");\"absolute\"!==e&&\"fixed\"!==e&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=V(this).outerHeight(!0)}),this.panels.each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css(\"overflow\",\"auto\")):\"auto\"===t&&(i=0,this.panels.each(function(){i=Math.max(i,V(this).height(\"\").height())}).height(i))},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget).closest(\"li\"),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():this._getPanelForTab(s),r=i.length?this._getPanelForTab(i):V(),i={oldTab:i,oldPanel:r,newTab:o?V():s,newPanel:a};t.preventDefault(),s.hasClass(\"ui-state-disabled\")||s.hasClass(\"ui-tabs-loading\")||this.running||n&&!e.collapsible||!1===this._trigger(\"beforeActivate\",t,i)||(e.active=!o&&this.tabs.index(s),this.active=n?V():s,this.xhr&&this.xhr.abort(),r.length||a.length||V.error(\"jQuery UI Tabs: Mismatching fragment identifier.\"),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,i))},_toggle:function(t,e){var i=this,s=e.newPanel,n=e.oldPanel;function o(){i.running=!1,i._trigger(\"activate\",t,e)}function a(){i._addClass(e.newTab.closest(\"li\"),\"ui-tabs-active\",\"ui-state-active\"),s.length&&i.options.show?i._show(s,i.options.show,o):(s.show(),o())}this.running=!0,n.length&&this.options.hide?this._hide(n,this.options.hide,function(){i._removeClass(e.oldTab.closest(\"li\"),\"ui-tabs-active\",\"ui-state-active\"),a()}):(this._removeClass(e.oldTab.closest(\"li\"),\"ui-tabs-active\",\"ui-state-active\"),n.hide(),a()),n.attr(\"aria-hidden\",\"true\"),e.oldTab.attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\"}),s.length&&n.length?e.oldTab.attr(\"tabIndex\",-1):s.length&&this.tabs.filter(function(){return 0===V(this).attr(\"tabIndex\")}).attr(\"tabIndex\",-1),s.attr(\"aria-hidden\",\"false\"),e.newTab.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0})},_activate:function(t){var t=this._findActive(t);t[0]!==this.active[0]&&(t=(t=!t.length?this.active:t).find(\".ui-tabs-anchor\")[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return!1===t?V():this.tabs.eq(t)},_getIndex:function(t){return t=\"string\"==typeof t?this.anchors.index(this.anchors.filter(\"[href$='\"+V.escapeSelector(t)+\"']\")):t},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr(\"role\").off(this.eventNamespace),this.anchors.removeAttr(\"role tabIndex\").removeUniqueId(),this.tabs.add(this.panels).each(function(){V.data(this,\"ui-tabs-destroy\")?V(this).remove():V(this).removeAttr(\"role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\")}),this.tabs.each(function(){var t=V(this),e=t.data(\"ui-tabs-aria-controls\");e?t.attr(\"aria-controls\",e).removeData(\"ui-tabs-aria-controls\"):t.removeAttr(\"aria-controls\")}),this.panels.show(),\"content\"!==this.options.heightStyle&&this.panels.css(\"height\",\"\")},enable:function(i){var t=this.options.disabled;!1!==t&&(t=void 0!==i&&(i=this._getIndex(i),Array.isArray(t)?V.map(t,function(t){return t!==i?t:null}):V.map(this.tabs,function(t,e){return e!==i?e:null})),this._setOptionDisabled(t))},disable:function(t){var e=this.options.disabled;if(!0!==e){if(void 0===t)e=!0;else{if(t=this._getIndex(t),-1!==V.inArray(t,e))return;e=Array.isArray(e)?V.merge([t],e).sort():[t]}this._setOptionDisabled(e)}},load:function(t,s){t=this._getIndex(t);function n(t,e){\"abort\"===e&&o.panels.stop(!1,!0),o._removeClass(i,\"ui-tabs-loading\"),a.removeAttr(\"aria-busy\"),t===o.xhr&&delete o.xhr}var o=this,i=this.tabs.eq(t),t=i.find(\".ui-tabs-anchor\"),a=this._getPanelForTab(i),r={tab:i,panel:a};this._isLocal(t[0])||(this.xhr=V.ajax(this._ajaxSettings(t,s,r)),this.xhr&&\"canceled\"!==this.xhr.statusText&&(this._addClass(i,\"ui-tabs-loading\"),a.attr(\"aria-busy\",\"true\"),this.xhr.done(function(t,e,i){setTimeout(function(){a.html(t),o._trigger(\"load\",s,r),n(i,e)},1)}).fail(function(t,e){setTimeout(function(){n(t,e)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr(\"href\").replace(/#.*$/,\"\"),beforeSend:function(t,e){return n._trigger(\"beforeLoad\",i,V.extend({jqXHR:t,ajaxSettings:e},s))}}},_getPanelForTab:function(t){t=V(t).attr(\"aria-controls\");return this.element.find(this._sanitizeSelector(\"#\"+t))}}),!1!==V.uiBackCompat&&V.widget(\"ui.tabs\",V.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,\"ui-tab\")}});V.ui.tabs;V.widget(\"ui.tooltip\",{version:\"1.13.2\",options:{classes:{\"ui-tooltip\":\"ui-corner-all ui-widget-shadow\"},content:function(){var t=V(this).attr(\"title\");return V(\"<a>\").text(t).html()},hide:!0,items:\"[title]:not([disabled])\",position:{my:\"left top+15\",at:\"left bottom\",collision:\"flipfit flip\"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr(\"aria-describedby\")||\"\").split(/\\s+/);i.push(e),t.data(\"ui-tooltip-id\",e).attr(\"aria-describedby\",String.prototype.trim.call(i.join(\" \")))},_removeDescribedBy:function(t){var e=t.data(\"ui-tooltip-id\"),i=(t.attr(\"aria-describedby\")||\"\").split(/\\s+/),e=V.inArray(e,i);-1!==e&&i.splice(e,1),t.removeData(\"ui-tooltip-id\"),(i=String.prototype.trim.call(i.join(\" \")))?t.attr(\"aria-describedby\",i):t.removeAttr(\"aria-describedby\")},_create:function(){this._on({mouseover:\"open\",focusin:\"open\"}),this.tooltips={},this.parents={},this.liveRegion=V(\"<div>\").attr({role:\"log\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,\"ui-helper-hidden-accessible\"),this.disabledTitles=V([])},_setOption:function(t,e){var i=this;this._super(t,e),\"content\"===t&&V.each(this.tooltips,function(t,e){i._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?\"_disable\":\"_enable\"]()},_disable:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event(\"blur\");i.target=i.currentTarget=e.element[0],s.close(i,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var t=V(this);if(t.is(\"[title]\"))return t.data(\"ui-tooltip-title\",t.attr(\"title\")).removeAttr(\"title\")}))},_enable:function(){this.disabledTitles.each(function(){var t=V(this);t.data(\"ui-tooltip-title\")&&t.attr(\"title\",t.data(\"ui-tooltip-title\"))}),this.disabledTitles=V([])},open:function(t){var i=this,e=V(t?t.target:this.element).closest(this.options.items);e.length&&!e.data(\"ui-tooltip-id\")&&(e.attr(\"title\")&&e.data(\"ui-tooltip-title\",e.attr(\"title\")),e.data(\"ui-tooltip-open\",!0),t&&\"mouseover\"===t.type&&e.parents().each(function(){var t,e=V(this);e.data(\"ui-tooltip-open\")&&((t=V.Event(\"blur\")).target=t.currentTarget=this,i.close(t,!0)),e.attr(\"title\")&&(e.uniqueId(),i.parents[this.id]={element:this,title:e.attr(\"title\")},e.attr(\"title\",\"\"))}),this._registerCloseHandlers(t,e),this._updateContent(e,t))},_updateContent:function(e,i){var t=this.options.content,s=this,n=i?i.type:null;if(\"string\"==typeof t||t.nodeType||t.jquery)return this._open(i,e,t);(t=t.call(e[0],function(t){s._delay(function(){e.data(\"ui-tooltip-open\")&&(i&&(i.type=n),this._open(i,e,t))})}))&&this._open(i,e,t)},_open:function(t,e,i){var s,n,o,a=V.extend({},this.options.position);function r(t){a.of=t,n.is(\":hidden\")||n.position(a)}i&&((s=this._find(e))?s.tooltip.find(\".ui-tooltip-content\").html(i):(e.is(\"[title]\")&&(t&&\"mouseover\"===t.type?e.attr(\"title\",\"\"):e.removeAttr(\"title\")),s=this._tooltip(e),n=s.tooltip,this._addDescribedBy(e,n.attr(\"id\")),n.find(\".ui-tooltip-content\").html(i),this.liveRegion.children().hide(),(i=V(\"<div>\").html(n.find(\".ui-tooltip-content\").html())).removeAttr(\"name\").find(\"[name]\").removeAttr(\"name\"),i.removeAttr(\"id\").find(\"[id]\").removeAttr(\"id\"),i.appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:r}),r(t)):n.position(V.extend({of:e},this.options.position)),n.hide(),this._show(n,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(o=this.delayedShow=setInterval(function(){n.is(\":visible\")&&(r(a.of),clearInterval(o))},13)),this._trigger(\"open\",t,{tooltip:n})))},_registerCloseHandlers:function(t,e){var i={keyup:function(t){t.keyCode===V.ui.keyCode.ESCAPE&&((t=V.Event(t)).currentTarget=e[0],this.close(t,!0))}};e[0]!==this.element[0]&&(i.remove=function(){var t=this._find(e);t&&this._removeTooltip(t.tooltip)}),t&&\"mouseover\"!==t.type||(i.mouseleave=\"close\"),t&&\"focusin\"!==t.type||(i.focusout=\"close\"),this._on(!0,e,i)},close:function(t){var e,i=this,s=V(t?t.currentTarget:this.element),n=this._find(s);n?(e=n.tooltip,n.closing||(clearInterval(this.delayedShow),s.data(\"ui-tooltip-title\")&&!s.attr(\"title\")&&s.attr(\"title\",s.data(\"ui-tooltip-title\")),this._removeDescribedBy(s),n.hiding=!0,e.stop(!0),this._hide(e,this.options.hide,function(){i._removeTooltip(V(this))}),s.removeData(\"ui-tooltip-open\"),this._off(s,\"mouseleave focusout keyup\"),s[0]!==this.element[0]&&this._off(s,\"remove\"),this._off(this.document,\"mousemove\"),t&&\"mouseleave\"===t.type&&V.each(this.parents,function(t,e){V(e.element).attr(\"title\",e.title),delete i.parents[t]}),n.closing=!0,this._trigger(\"close\",t,{tooltip:e}),n.hiding||(n.closing=!1))):s.removeData(\"ui-tooltip-open\")},_tooltip:function(t){var e=V(\"<div>\").attr(\"role\",\"tooltip\"),i=V(\"<div>\").appendTo(e),s=e.uniqueId().attr(\"id\");return this._addClass(i,\"ui-tooltip-content\"),this._addClass(e,\"ui-tooltip\",\"ui-widget ui-widget-content\"),e.appendTo(this._appendTo(t)),this.tooltips[s]={element:t,tooltip:e}},_find:function(t){t=t.data(\"ui-tooltip-id\");return t?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr(\"id\")]},_appendTo:function(t){t=t.closest(\".ui-front, dialog\");return t=!t.length?this.document[0].body:t},_destroy:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event(\"blur\"),e=e.element;i.target=i.currentTarget=e[0],s.close(i,!0),V(\"#\"+t).remove(),e.data(\"ui-tooltip-title\")&&(e.attr(\"title\")||e.attr(\"title\",e.data(\"ui-tooltip-title\")),e.removeData(\"ui-tooltip-title\"))}),this.liveRegion.remove()}}),!1!==V.uiBackCompat&&V.widget(\"ui.tooltip\",V.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}});V.ui.tooltip});", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n\n  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n      _ref3$x = _ref3.x,\n      x = _ref3$x === void 0 ? 0 : _ref3$x,\n      _ref3$y = _ref3.y,\n      y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n  var state = _ref4.state,\n      options = _ref4.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body' && (canEscapeClipping ? getComputedStyle(clippingParent).position !== 'static' : true);\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function format(str) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  return [].concat(args).reduce(function (p, c) {\n    return p.replace(/%s/, c);\n  }, str);\n}", "import format from \"./format.js\";\nimport { modifierPhases } from \"../enums.js\";\nvar INVALID_MODIFIER_ERROR = 'Popper: modifier \"%s\" provided an invalid %s property, expected %s but got %s';\nvar MISSING_DEPENDENCY_ERROR = 'Popper: modifier \"%s\" requires \"%s\", but \"%s\" modifier is not available';\nvar VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];\nexport default function validateModifiers(modifiers) {\n  modifiers.forEach(function (modifier) {\n    [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`\n    .filter(function (value, index, self) {\n      return self.indexOf(value) === index;\n    }).forEach(function (key) {\n      switch (key) {\n        case 'name':\n          if (typeof modifier.name !== 'string') {\n            console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '\"name\"', '\"string\"', \"\\\"\" + String(modifier.name) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'enabled':\n          if (typeof modifier.enabled !== 'boolean') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"enabled\"', '\"boolean\"', \"\\\"\" + String(modifier.enabled) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'phase':\n          if (modifierPhases.indexOf(modifier.phase) < 0) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"phase\"', \"either \" + modifierPhases.join(', '), \"\\\"\" + String(modifier.phase) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'fn':\n          if (typeof modifier.fn !== 'function') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"fn\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'effect':\n          if (modifier.effect != null && typeof modifier.effect !== 'function') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"effect\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'requires':\n          if (modifier.requires != null && !Array.isArray(modifier.requires)) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requires\"', '\"array\"', \"\\\"\" + String(modifier.requires) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'requiresIfExists':\n          if (!Array.isArray(modifier.requiresIfExists)) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requiresIfExists\"', '\"array\"', \"\\\"\" + String(modifier.requiresIfExists) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'options':\n        case 'data':\n          break;\n\n        default:\n          console.error(\"PopperJS: an invalid property has been provided to the \\\"\" + modifier.name + \"\\\" modifier, valid properties are \" + VALID_PROPERTIES.map(function (s) {\n            return \"\\\"\" + s + \"\\\"\";\n          }).join(', ') + \"; but \\\"\" + key + \"\\\" was provided.\");\n      }\n\n      modifier.requires && modifier.requires.forEach(function (requirement) {\n        if (modifiers.find(function (mod) {\n          return mod.name === requirement;\n        }) == null) {\n          console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));\n        }\n      });\n    });\n  });\n}", "export default function uniqueBy(arr, fn) {\n  var identifiers = new Set();\n  return arr.filter(function (item) {\n    var identifier = fn(item);\n\n    if (!identifiers.has(identifier)) {\n      identifiers.add(identifier);\n      return true;\n    }\n  });\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n  }\n\n  return selector\n}\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element)\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null\n  }\n\n  return null\n}\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element)\n\n  return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0]\n  }\n\n  return typeof obj.nodeType !== 'undefined'\n}\n\nconst getElement = obj => {\n  if (isElement(obj)) { // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return document.querySelector(obj)\n  }\n\n  return null\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property]\n    const value = config[property]\n    const valueType = value && isElement(value) ? 'element' : toType(value)\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(\n        `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n      )\n    }\n  })\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  // eslint-disable-next-line no-unused-expressions\n  element.offsetHeight\n}\n\nconst getjQuery = () => {\n  const { jQuery } = window\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback())\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback()\n  }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]\n  }\n\n  const listLength = list.length\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  getElement,\n  getUID,\n  getSelectorFromElement,\n  getElementFromSelector,\n  getTransitionDurationFromElement,\n  triggerTransitionEnd,\n  isElement,\n  typeCheckConfig,\n  isVisible,\n  isDisabled,\n  findShadowRoot,\n  noop,\n  getNextActiveElement,\n  reflow,\n  getjQuery,\n  onDOMContentLoaded,\n  isRTL,\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\nconst customEventsRegex = /^(mouseenter|mouseleave)/i\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target\n\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn)\n          }\n\n          return fn.apply(target, [event])\n        }\n      }\n    }\n\n    // To please ESLint\n    return null\n  }\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events)\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]]\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event\n    }\n  }\n\n  return null\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string'\n  const originalHandler = delegation ? delegationFn : handler\n\n  let typeEvent = getTypeEvent(originalTypeEvent)\n  const isNative = nativeEvents.has(typeEvent)\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [delegation, originalHandler, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  if (!handler) {\n    handler = delegationFn\n    delegationFn = null\n  }\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn)\n    } else {\n      handler = wrapFn(handler)\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n  const events = getEvent(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null)\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff\n\n    return\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = delegation ?\n    bootstrapDelegationHandler(element, handler, delegationFn) :\n    bootstrapHandler(element, handler)\n\n  fn.delegationSelector = delegation ? handler : null\n  fn.originalHandler = originalHandler\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, delegation)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey]\n\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n    }\n  })\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false)\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getEvent(element)\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      })\n    }\n\n    const storeElementEvent = events[typeEvent] || {}\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers]\n\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n      }\n    })\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n    const isNative = nativeEvents.has(typeEvent)\n\n    let jQueryEvent\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n    let evt = null\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents')\n      evt.initEvent(typeEvent, bubbles, true)\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      })\n    }\n\n    // merge custom information in our event\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key]\n          }\n        })\n      })\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport {\n  executeAfterTransition,\n  getElement\n} from './util/index'\nimport EventHandler from './dom/event-handler'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.1.3'\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element)\n\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null\n    })\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  /** Static */\n\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true\n  }\n\n  if (val === 'false') {\n    return false\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val)\n  }\n\n  if (val === '' || val === 'null') {\n    return null\n  }\n\n  return val\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n\n    Object.keys(element.dataset)\n      .filter(key => key.startsWith('bs'))\n      .forEach(key => {\n        let pureKey = key.replace(/^bs/, '')\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n        attributes[pureKey] = normalizeData(element.dataset[key])\n      })\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect()\n\n    return {\n      top: rect.top + window.pageYOffset,\n      left: rect.left + window.pageXOffset\n    }\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    }\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children)\n      .filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n\n    let ancestor = element.parentNode\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor)\n      }\n\n      ancestor = ancestor.parentNode\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(', ')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isRTL,\n  isVisible,\n  getNextActiveElement,\n  reflow,\n  triggerTransitionEnd,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n}\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_INDICATOR = '[data-bs-target]'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._items = null\n    this._interval = null\n    this._activeElement = null\n    this._isPaused = false\n    this._isSliding = false\n    this.touchTimeout = null\n    this.touchStartX = 0\n    this.touchDeltaX = 0\n\n    this._config = this._getConfig(config)\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n    this._pointerEvent = Boolean(window.PointerEvent)\n\n    this._addEventListeners()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element)\n      this.cycle(true)\n    }\n\n    clearInterval(this._interval)\n    this._interval = null\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval()\n\n      this._interval = setInterval(\n        (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n        this._config.interval\n      )\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n    const activeIndex = this._getItemIndex(this._activeElement)\n\n    if (index > this._items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    if (activeIndex === index) {\n      this.pause()\n      this.cycle()\n      return\n    }\n\n    const order = index > activeIndex ?\n      ORDER_NEXT :\n      ORDER_PREV\n\n    this._slide(order, this._items[index])\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX)\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltax / this.touchDeltaX\n\n    this.touchDeltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT)\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    const hasPointerPenTouch = event => {\n      return this._pointerEvent &&\n        (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n    }\n\n    const start = event => {\n      if (hasPointerPenTouch(event)) {\n        this.touchStartX = event.clientX\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX\n      }\n    }\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ?\n        0 :\n        event.touches[0].clientX - this.touchStartX\n    }\n\n    const end = event => {\n      if (hasPointerPenTouch(event)) {\n        this.touchDeltaX = event.clientX - this.touchStartX\n      }\n\n      this._handleSwipe()\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause()\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout)\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n      }\n    }\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault())\n    })\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event))\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(direction)\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ?\n      SelectorEngine.find(SELECTOR_ITEM, element.parentNode) :\n      []\n\n    return this._items.indexOf(element)\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap)\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget)\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element))\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    })\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n      activeIndicator.removeAttribute('aria-current')\n\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement)\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE)\n          indicators[i].setAttribute('aria-current', 'true')\n          break\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n      this._config.interval = elementInterval\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder)\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n    const activeElementIndex = this._getItemIndex(activeElement)\n    const nextElement = element || this._getItemByOrder(order, activeElement)\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n    const isCycling = Boolean(this._interval)\n\n    const isNext = order === ORDER_NEXT\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n    const eventDirectionName = this._orderToDirection(order)\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {\n      this._isSliding = false\n      return\n    }\n\n    if (this._isSliding) {\n      return\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return\n    }\n\n    this._isSliding = true\n\n    if (isCycling) {\n      this.pause()\n    }\n\n    this._setActiveIndicatorElement(nextElement)\n    this._activeElement = nextElement\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      })\n    }\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName)\n\n      reflow(nextElement)\n\n      activeElement.classList.add(directionalClassName)\n      nextElement.classList.add(directionalClassName)\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName)\n        nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n        activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n        this._isSliding = false\n\n        setTimeout(triggerSlidEvent, 0)\n      }\n\n      this._queueCallback(completeCallBack, activeElement, true)\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      this._isSliding = false\n      triggerSlidEvent()\n    }\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config)\n\n    let { _config } = data\n    if (typeof config === 'object') {\n      _config = {\n        ..._config,\n        ...config\n      }\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide\n\n    if (typeof config === 'number') {\n      data.to(config)\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`)\n      }\n\n      data[action]()\n    } else if (_config.interval && _config.ride) {\n      data.pause()\n      data.cycle()\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config)\n    })\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this)\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return\n    }\n\n    const config = {\n      ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    }\n    const slideIndex = this.getAttribute('data-bs-slide-to')\n\n    if (slideIndex) {\n      config.interval = false\n    }\n\n    Carousel.carouselInterface(target, config)\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex)\n    }\n\n    event.preventDefault()\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler)\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]))\n  }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElement,\n  getSelectorFromElement,\n  getElementFromSelector,\n  reflow,\n  typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n  toggle: true,\n  parent: null\n}\n\nconst DefaultType = {\n  toggle: 'boolean',\n  parent: '(null|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._isTransitioning = false\n    this._config = this._getConfig(config)\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i]\n      const selector = getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElem => foundElem === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let actives = []\n    let activesData\n\n    if (this._config.parent) {\n      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)) // remove children if greater depth\n    }\n\n    const container = SelectorEngine.findOne(this._selector)\n    if (actives.length) {\n      const tempActiveData = actives.find(elem => container !== elem)\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null\n\n      if (activesData && activesData._isTransitioning) {\n        return\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    actives.forEach(elemActive => {\n      if (container !== elemActive) {\n        Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide()\n      }\n\n      if (!activesData) {\n        Data.set(elemActive, DATA_KEY, null)\n      }\n    })\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    const triggerArrayLength = this._triggerArray.length\n    for (let i = 0; i < triggerArrayLength; i++) {\n      const trigger = this._triggerArray[i]\n      const elem = getElementFromSelector(trigger)\n\n      if (elem && !this._isShown(elem)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    }\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))\n      .forEach(element => {\n        const selected = getElementFromSelector(element)\n\n        if (selected) {\n          this._addAriaAndCollapsedClass([element], this._isShown(selected))\n        }\n      })\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED)\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED)\n      }\n\n      elem.setAttribute('aria-expanded', isOpen)\n    })\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const _config = {}\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false\n      }\n\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  const selector = getSelectorFromElement(this)\n  const selectorElements = SelectorEngine.find(selector)\n\n  selectorElements.forEach(element => {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n  defineJQueryPlugin,\n  getElement,\n  getElementFromSelector,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst SPACE_KEY = 'Space'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_NAVBAR = 'navbar'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\n\nconst Default = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n}\n\nconst DefaultType = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._popper = null\n    this._config = this._getConfig(config)\n    this._menu = this._getMenuElement()\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown(this._menu)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element)\n    // Totally disable Popper for Dropdowns in Navbar\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none')\n    } else {\n      this._createPopper(parent)\n    }\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement &&\n      !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children)\n        .forEach(elem => EventHandler.on(elem, 'mouseover', noop))\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown(this._menu)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children)\n        .forEach(elem => EventHandler.off(elem, 'mouseover', noop))\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = {\n      ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    }\n\n    typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper(parent) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false)\n\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n\n    if (isDisplayStatic) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static')\n    }\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0]\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY))) {\n      return\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i])\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      if (!context._isShown()) {\n        continue\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      }\n\n      if (event) {\n        const composedPath = event.composedPath()\n        const isMenuTarget = composedPath.includes(context._menu)\n        if (\n          composedPath.includes(context._element) ||\n          (context._config.autoClose === 'inside' && !isMenuTarget) ||\n          (context._config.autoClose === 'outside' && isMenuTarget)\n        ) {\n          continue\n        }\n\n        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n        if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event\n        }\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ?\n      event.key === SPACE_KEY || (event.key !== ESCAPE_KEY &&\n      ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) ||\n        event.target.closest(SELECTOR_MENU))) :\n      !REGEXP_KEYDOWN.test(event.key)) {\n      return\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW)\n\n    if (!isActive && event.key === ESCAPE_KEY) {\n      return\n    }\n\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0]\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (event.key === ESCAPE_KEY) {\n      instance.hide()\n      return\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        instance.show()\n      }\n\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus()\n    }\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width)\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProp)\n      const calculatedValue = window.getComputedStyle(element)[styleProp]\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, 'paddingRight')\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight')\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight')\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp]\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp)\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp)\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp)\n        element.style[styleProp] = value\n      }\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack)\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow, typeCheckConfig } from './index'\n\nconst Default = {\n  className: 'modal-backdrop',\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body', // give the choice to place backdrop under different elements\n  clickCallback: null\n}\n\nconst DefaultType = {\n  className: 'string',\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n}\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement())\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  // Private\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...(typeof config === 'object' ? config : {})\n    }\n\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    this._config.rootElement.append(this._getElement())\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport { typeCheckConfig } from './index'\n\nconst Default = {\n  trapElement: null, // The element to trap focus inside of\n  autofocus: true\n}\n\nconst DefaultType = {\n  trapElement: 'element',\n  autofocus: 'boolean'\n}\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nclass FocusTrap {\n  constructor(config) {\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  activate() {\n    const { trapElement, autofocus } = this._config\n\n    if (this._isActive) {\n      return\n    }\n\n    if (autofocus) {\n      trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n\n  _handleFocusin(event) {\n    const { target } = event\n    const { trapElement } = this._config\n\n    if (target === document || target === trapElement || trapElement.contains(target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isRTL,\n  isVisible,\n  reflow,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._config = this._getConfig(config)\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._ignoreBackdropClick = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true\n    }\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true\n        }\n      })\n    })\n\n    this._showBackdrop(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    const isAnimated = this._isAnimated()\n\n    if (isAnimated) {\n      this._isTransitioning = true\n    }\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated)\n  }\n\n  dispose() {\n    [window, this._dialog]\n      .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated()\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    if (isAnimated) {\n      reflow(this._element)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated)\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          event.preventDefault()\n          this.hide()\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {\n          this._triggerBackdropTransition()\n        }\n      })\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())\n    } else {\n      EventHandler.off(window, EVENT_RESIZE)\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false\n        return\n      }\n\n      if (event.target !== event.currentTarget) {\n        return\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide()\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition()\n      }\n    })\n\n    this._backdrop.show(callback)\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const { classList, scrollHeight, style } = this._element\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight\n\n    // return if the following background transition hasn't yet completed\n    if ((!isModalOverflowing && style.overflowY === 'hidden') || classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden'\n    }\n\n    classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC)\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = ''\n        }, this._dialog)\n      }\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if ((!isBodyOverflowing && isModalOverflowing && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`\n    }\n\n    if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking moddal toggler while another one is open\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (allReadyOpen) {\n    Modal.getInstance(allReadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isDisabled,\n  isVisible,\n  typeCheckConfig\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._config = this._getConfig(config)\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._element.style.visibility = 'visible'\n\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll) {\n        this._focustrap.activate()\n      }\n\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n      this._element.style.visibility = 'hidden'\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    }\n    typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide()\n      }\n    })\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () =>\n  SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())\n)\n\nenableDismissTrigger(Offcanvas)\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n\n  // Check if a regular expression validates the attribute.\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attributeName)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const element = elements[i]\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    attributeList.forEach(attribute => {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    })\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n  defineJQueryPlugin,\n  findShadowRoot,\n  getElement,\n  getUID,\n  isElement,\n  isRTL,\n  noop,\n  typeCheckConfig\n} from './util/index'\nimport { DefaultAllowlist, sanitizeHtml } from './util/sanitizer'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst DefaultType = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n}\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n              '<div class=\"tooltip-arrow\"></div>' +\n              '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n    }\n\n    super(element)\n\n    // private\n    this._isEnabled = true\n    this._timeout = 0\n    this._hoverState = ''\n    this._activeTrigger = {}\n    this._popper = null\n\n    // Protected\n    this._config = this._getConfig(config)\n    this.tip = null\n\n    this._setListeners()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Public\n\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event)\n\n      context._activeTrigger.click = !context._activeTrigger.click\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context)\n      } else {\n        context._leave(null, context)\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {\n        this._leave(null, this)\n        return\n      }\n\n      this._enter(null, this)\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this.tip) {\n      this.tip.remove()\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW)\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = shadowRoot === null ?\n      this._element.ownerDocument.documentElement.contains(this._element) :\n      shadowRoot.contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`\n    // This will be removed later in favor of a `setContent` method\n    if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {\n      this._disposePopper()\n      this.tip.remove()\n      this.tip = null\n    }\n\n    const tip = this.getTipElement()\n    const tipId = getUID(this.constructor.NAME)\n\n    tip.setAttribute('id', tipId)\n    this._element.setAttribute('aria-describedby', tipId)\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    const placement = typeof this._config.placement === 'function' ?\n      this._config.placement.call(this, tip, this._element) :\n      this._config.placement\n\n    const attachment = this._getAttachment(placement)\n    this._addAttachmentClass(attachment)\n\n    const { container } = this._config\n    Data.set(tip, this.constructor.DATA_KEY, this)\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED)\n    }\n\n    if (this._popper) {\n      this._popper.update()\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    const customClass = this._resolvePossibleFunction(this._config.customClass)\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '))\n    }\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop)\n      })\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState\n\n      this._hoverState = null\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN)\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this)\n      }\n    }\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(complete, this.tip, isAnimated)\n  }\n\n  hide() {\n    if (!this._popper) {\n      return\n    }\n\n    const tip = this.getTipElement()\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove()\n      }\n\n      this._cleanTipClass()\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN)\n\n      this._disposePopper()\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children)\n        .forEach(element => EventHandler.off(element, 'mouseover', noop))\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(complete, this.tip, isAnimated)\n    this._hoverState = ''\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n\n  isWithContent() {\n    return Boolean(this.getTitle())\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip\n    }\n\n    const element = document.createElement('div')\n    element.innerHTML = this._config.template\n\n    const tip = element.children[0]\n    this.setContent(tip)\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n\n    this.tip = tip\n    return this.tip\n  }\n\n  setContent(tip) {\n    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER)\n  }\n\n  _sanitizeAndSetContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!content && templateElement) {\n      templateElement.remove()\n      return\n    }\n\n    // we use append for html objects to maintain js events\n    this.setElementContent(templateElement, content)\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return\n    }\n\n    if (isElement(content)) {\n      content = getElement(content)\n\n      // content is a DOM node or a jQuery\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = ''\n          element.append(content)\n        }\n      } else {\n        element.textContent = content.textContent\n      }\n\n      return\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn)\n      }\n\n      element.innerHTML = content\n    } else {\n      element.textContent = content\n    }\n  }\n\n  getTitle() {\n    const title = this._element.getAttribute('data-bs-original-title') || this._config.title\n\n    return this._resolvePossibleFunction(title)\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end'\n    }\n\n    if (attachment === 'left') {\n      return 'start'\n    }\n\n    return attachment\n  }\n\n  // Private\n\n  _initializeOnDelegatedTarget(event, context) {\n    return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(content) {\n    return typeof content === 'function' ? content.call(this._element) : content\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }\n      ],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data)\n        }\n      }\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    }\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`)\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()]\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event))\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSEENTER :\n          this.constructor.Event.FOCUSIN\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSELEAVE :\n          this.constructor.Event.FOCUSOUT\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event))\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event))\n      }\n    })\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._config.selector) {\n      this._config = {\n        ...this._config,\n        trigger: 'manual',\n        selector: ''\n      }\n    } else {\n      this._fixTitle()\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title')\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '')\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title)\n      }\n\n      this._element.setAttribute('title', '')\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context)\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = true\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_SHOW\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show()\n      }\n    }, context._config.delay.show)\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context)\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = context._element.contains(event.relatedTarget)\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_OUT\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide()\n      }\n    }, context._config.delay.hide)\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr]\n      }\n    })\n\n    config = {\n      ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn)\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const key in this._config) {\n      if (this.constructor.Default[key] !== this._config[key]) {\n        config[key] = this._config[key]\n      }\n    }\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement()\n    const basicClassPrefixRegex = new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`, 'g')\n    const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex)\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim())\n        .forEach(tClass => tip.classList.remove(tClass))\n    }\n  }\n\n  _getBasicClassPrefix() {\n    return CLASS_PREFIX\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const { state } = popperData\n\n    if (!state) {\n      return\n    }\n\n    this.tip = state.elements.popper\n    this._cleanTipClass()\n    this._addAttachmentClass(this._getAttachment(state.placement))\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-popover'\n\nconst Default = {\n  ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n              '<div class=\"popover-arrow\"></div>' +\n              '<h3 class=\"popover-header\"></h3>' +\n              '<div class=\"popover-body\"></div>' +\n            '</div>'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Overrides\n\n  isWithContent() {\n    return this.getTitle() || this._getContent()\n  }\n\n  setContent(tip) {\n    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE)\n    this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT)\n  }\n\n  // Private\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  _getBasicClassPrefix() {\n    return CLASS_PREFIX\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElement,\n  getSelectorFromElement,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n}\n\nconst DefaultType = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n    this._config = this._getConfig(config)\n    this._offsets = []\n    this._targets = []\n    this._activeTarget = null\n    this._scrollHeight = 0\n\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n    this.refresh()\n    this._process()\n  }\n\n  // Getters\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ?\n      METHOD_OFFSET :\n      METHOD_POSITION\n\n    const offsetMethod = this._config.method === 'auto' ?\n      autoMethod :\n      this._config.method\n\n    const offsetBase = offsetMethod === METHOD_POSITION ?\n      this._getScrollTop() :\n      0\n\n    this._offsets = []\n    this._targets = []\n    this._scrollHeight = this._getScrollHeight()\n\n    const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element)\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect()\n        if (targetBCR.width || targetBCR.height) {\n          return [\n            Manipulator[offsetMethod](target).top + offsetBase,\n            targetSelector\n          ]\n        }\n      }\n\n      return null\n    })\n      .filter(item => item)\n      .sort((a, b) => a[0] - b[0])\n      .forEach(item => {\n        this._offsets.push(item[0])\n        this._targets.push(item[1])\n      })\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY)\n    super.dispose()\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    config.target = getElement(config.target) || document.documentElement\n\n    typeCheckConfig(NAME, config, DefaultType)\n\n    return config\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ?\n      this._scrollElement.pageYOffset :\n      this._scrollElement.scrollTop\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(\n      document.body.scrollHeight,\n      document.documentElement.scrollHeight\n    )\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ?\n      window.innerHeight :\n      this._scrollElement.getBoundingClientRect().height\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset\n    const scrollHeight = this._getScrollHeight()\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1]\n\n      if (this._activeTarget !== target) {\n        this._activate(target)\n      }\n\n      return\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null\n      this._clear()\n      return\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] &&\n          scrollTop >= this._offsets[i] &&\n          (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i])\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target\n\n    this._clear()\n\n    const queries = SELECTOR_LINK_ITEMS.split(',')\n      .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n    const link = SelectorEngine.findOne(queries.join(','), this._config.target)\n\n    link.classList.add(CLASS_NAME_ACTIVE)\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n    } else {\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n        .forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n            .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n\n          // Handle special case when .nav-link is inside .nav-item\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)\n            .forEach(navItem => {\n              SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)\n                .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n            })\n        })\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    })\n  }\n\n  _clear() {\n    SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n      .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n      .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY)\n    .forEach(spy => new ScrollSpy(spy))\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  getElementFromSelector,\n  isDisabled,\n  reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  show() {\n    if ((this._element.parentNode &&\n      this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n      this._element.classList.contains(CLASS_NAME_ACTIVE))) {\n      return\n    }\n\n    let previous\n    const target = getElementFromSelector(this._element)\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP)\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n      previous = SelectorEngine.find(itemSelector, listElement)\n      previous = previous[previous.length - 1]\n    }\n\n    const hideEvent = previous ?\n      EventHandler.trigger(previous, EVENT_HIDE, {\n        relatedTarget: this._element\n      }) :\n      null\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget: previous\n    })\n\n    if (showEvent.defaultPrevented || (hideEvent !== null && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._activate(this._element, listElement)\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN, {\n        relatedTarget: this._element\n      })\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget: previous\n      })\n    }\n\n    if (target) {\n      this._activate(target, target.parentNode, complete)\n    } else {\n      complete()\n    }\n  }\n\n  // Private\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n      SelectorEngine.find(SELECTOR_ACTIVE_UL, container) :\n      SelectorEngine.children(container, SELECTOR_ACTIVE)\n\n    const active = activeElements[0]\n    const isTransitioning = callback && (active && active.classList.contains(CLASS_NAME_FADE))\n\n    const complete = () => this._transitionComplete(element, active, callback)\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW)\n      this._queueCallback(complete, element, true)\n    } else {\n      complete()\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE)\n\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode)\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE)\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false)\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true)\n    }\n\n    reflow(element)\n\n    if (element.classList.contains(CLASS_NAME_FADE)) {\n      element.classList.add(CLASS_NAME_SHOW)\n    }\n\n    let parent = element.parentNode\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN)\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)\n          .forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE))\n      }\n\n      element.setAttribute('aria-expanded', true)\n    }\n\n    if (callback) {\n      callback()\n    }\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  const data = Tab.getOrCreateInstance(this)\n  data.show()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n  defineJQueryPlugin,\n  reflow,\n  typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element)\n\n    this._config = this._getConfig(config)\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      this._element.classList.remove(CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  // Private\n\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n    return config\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting\n        break\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting\n        break\n      default:\n        break\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\nenableDismissTrigger(Toast)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "import * as bootstrap from \"bootstrap\"\nwindow.bootstrap = bootstrap", "window.window_width = $(window).width();\nwindow.window_width_min = 992;\nwindow.mobile_walkthrough = false;\n\nif (window_width < window_width_min) {\n    mobile_walkthrough = true;\n}\n\nwindow.helper_menu_item_height = '62px';\nif (window_width >= 1200) {\n    helper_menu_item_height = '72px';\n}\nwindow.helper_menu_item_text_sizes = 'font-size: 14px;line-height: 21px;margin-left: 5px;';\nif (window_width >= 1200) {\n    helper_menu_item_text_sizes = 'font-size: 18px;line-height: 21px;margin-left: 10px;';\n}\n\nwindow.intro = undefined;\nwindow.introjs_page = undefined;\nwindow.intro_loading_next_page = false;\nwindow.redirectURL = undefined;\nwindow.introJsStarted = false;\n\nwindow.initIntroJs = function() {\n    if (intro) {\n        intro.exit(true);\n    }\n    window.nextText = i18n_string(\"general.next\", \"Next\");\n    window.backText = i18n_string(\"general.back\", \"Back\");\n    intro = introJs();\n    redirectURL = undefined;\n    var doneLabel = i18n_string(\"general.finish\", 'Finish');\n    var stepArray = [];\n    var shouldStartOnLoad = getCookie(\"introjs_startonload\");\n    var introjs_page = getCookie(\"introjs_page\");\n    if (introjs_page == \"/starter_kit\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.starterkit\",\n                position: 'right',\n                //helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-index\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Starter Kit</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_starter_kit_page_you_will_have_access_to_va', \"On the <strong>Admin Resources</strong> page you will have access to valuable resources for setting up your Well-Being Index account and having a successful launch.\")\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/admin_toolkit\";\n    } else if (introjs_page == \"/admin_toolkit\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.admintoolkit\",\n                position: 'right',\n                //helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-index\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Starter Kit</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_starter_kit_page_you_will_have_access_to_va', \"On the <strong>Admin Resources</strong> page you will have access to valulable resources for setting up your Well-Being Index account and having a successful launch.\")\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/administrator\";\n    } else if (introjs_page == \"/administrator\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.manage-admins\",\n                position: 'right',\n                //helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-admins\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Manage Admins</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_manage_admins_page_you_can_add_additional_a', \"On the <strong>Account Management > Administrators</strong> page you can add additional administrators to your account.\")\n                //,action: \"collapse_nav\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \".sub-nav.sub-nav-header-full\",\n                intro: i18n_string('walkthrough.adding_new_administrators_can_be_done_through_a_bu', \"Adding new administrators can be done through a bulk import or adding individually. When adding a new administrator you can set their permissions to be 'View Reports' if you do not want them to have full edit access.\"),\n                position: 'bottom',\n                //action: \"new_admin_radio\"\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/participants\";\n\n    } else if (introjs_page == \"/participants\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.invite-users\",\n                position: 'right',\n                //helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-users\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Invite Participants</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_invite_participants_page_you_can_access_you', \"On the <strong>Assessments > Invite Participants</strong> page you can access your unique invitation code, get the invitation template, and send test invitations.\")\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-invite-code-left\",\n                intro: i18n_string('walkthrough.here_you_will_find_the_signup_url_and_your_unique_', \"Here you will find the signup URL and your unique invitation code.\"),\n                position: (mobile_walkthrough ? 'top' : 'right')\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-invite-code-right\",\n                intro: i18n_string('walkthrough.this_is_an_example_of_an_invitation_email__you_can', \"This is an example of an invitation email.  You can copy it from here and use it in an external email system.\"),\n                position: (mobile_walkthrough ? 'top' : 'left'),\n                action: 'main_inv_tab'\n            }\n        );\n        // Check to make sure internal invitations are enabled --\n        if ($(\"#email_invitations\").length) {\n            stepArray.push(\n                {\n                    element: \"#tour-invite-email-left\",\n                    intro: i18n_string('walkthrough.send_an_email_invitation_to_a_single_email_address', \"Send an email invitation to a single email address.\"),\n                    position: (mobile_walkthrough ? 'top' : 'right'),\n                    action: 'email_inv_tab'\n                }\n            );\n            stepArray.push(\n                {\n                    element: \"#tour-invite-email-right\",\n                    intro: i18n_string('walkthrough.upload_a_spreadsheet_of_email_addresses_to_send_in', \"Upload a spreadsheet of email addresses to send invitations.\"),\n                    position: (mobile_walkthrough ? 'top' : 'left'),\n                    action: 'email_inv_tab'\n                }\n            );\n        }\n        // Send Test Invites\n        if ($(\"#send_test_invites\").length) {\n            stepArray.push(\n                {\n                    element: \"#send-test-invites-wrapper\",\n                    intro: i18n_string('walkthrough.send_out_test_invitations_to_your_organization_sta', \"Send out test invitations to your organization staff.  Test accounts will be automatically removed after 5 days.\"),\n                    position: 'top',\n                    action: 'email_test_inv_tab'\n                }\n            );\n            // stepArray.push(\n            //     {\n            //         element: \"#current-test-accounts-table-wrapper\",\n            //         intro: \"List of sent test invites and test accounts that will be removed after 5 days.\",\n            //         //action: \"example_test_invites\",\n            //         position: 'top'\n            //     }\n            // );\n        }\n\n\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/notifications\";\n    } else if (introjs_page == \"/notifications\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.reminders\",\n                position: 'right',\n                //helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-reminders\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Reminders/Notifications</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_remindersnotifications_page_you_can_configu', \"On the <strong>Account Management > Participant Notification Settings</strong> page, you can configure automated email settings and view samples emails that are sent.\"),\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#customize-auto-email-settings-div\",\n                position: 'top',\n                intro: i18n_string('walkthrough.enabledisable_reassessment_comparison_and_account_', \"Enable/disable reassessment, comparison, and account verification emails.  Set reassessment reminder email frequency.\"),\n            }\n        );\n        if ($(\"#reassess_enabled_div\").is(\":visible\")) {\n            stepArray.push(\n                {\n                    element: \"#reassess_enabled_div\",\n                    position: 'top',\n                    intro: i18n_string('walkthrough.configure_reassessment_email_frequency_or_setup_to', \"Configure reassessment email frequency or setup to send on specific dates.\"),\n                }\n            );\n        }\n\n\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/resources/manage\";\n    } else if (introjs_page == \"/resources/manage\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.resources\",\n                position: 'right',\n                // helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-resources\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Manage Resources</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_manage_resources_page_you_can_edit_resource', \"On the <strong>Account Management > Organizational Resources</strong> page you can edit resources specific to your organization.\"),\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-res-email-signature\",\n                intro: i18n_string('walkthrough.this_resource_is_the_email_signature_you_want_to_a', \"This resource is the email signature you want to appear at the bottom of all automated emails.\"),\n                position: 'top',\n                scrollPadding: 100\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-res-header-logo\",\n                intro: i18n_string('walkthrough.this_resource_is_for_customizing_the_logo_you_want', \"This resource is for customizing the logo you want participants to see when signing up and using the software.  The logo will be displayed in the upper right of the software.\"),\n                position: 'top'\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-res-high-risk-info\",\n                intro: i18n_string('walkthrough.this_resource_is_for_customizing_the_information_d', \"This resource is for customizing the information displayed after taking the assessment to participants that are high risk.\"),\n                position: 'top'\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-res-preview-btn\",\n                intro: i18n_string('walkthrough.click_this_button_to_preview_the_resources_as_a_us', \"Click this button to preview the resources as a user at your organization.  You will be able to view all of your local resources as well as the national resources available.\"),\n                position: 'bottom'\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-add-res-btn\",\n                intro: i18n_string('walkthrough.when_you_want_to_add_a_new_local_resource_click_he', \"When you want to add a new local resource, click here.\"),\n                position: 'top'\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/resources/new\";\n    } else if (introjs_page == \"/resources/new\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \"#t-resource-checkboxes\",\n                intro: i18n_string('walkthrough.when_editing_a_custom_resource_you_must_first_sele', \"<div style=\\\"width:380px;\\\">When editing a custom resource, you must first select the categories that you want it to be displayed in.  You must select at least 1 category.</div>\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-title-phone-intranet\",\n                intro: i18n_string('walkthrough.optionally_set_a_titlelocation_and_phone_number_if', \"Optionally set a title/location and phone number. If the resource in only accessible when connected to your network then select 'Yes' under 'Intranet Resource'.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-res-additional-content\",\n                intro: i18n_string('walkthrough.add_additional_content_here__you_can_add_links_tab', \"Add additional content here.  You can add links, tables, and images via this text area.\"),\n                position: \"top\"\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/resources/manage?tour=2\";\n    } else if (introjs_page == \"/resources/manage?tour=2\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                //element: \"#edit-order-dropdown-select\",\n                element: \"#edit-order-dropdown-select-wrap\",\n                intro: i18n_string('walkthrough.once_you_have_your_resources_added_you_can_change_', \"Once you have your resources added, you can change the order that they are displayed.  Select the category from this dropdown that you want to configure the order to.\"),\n                position: \"top\"\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/resources/\" + document.tour_example_res_id + \"/sort?tour=3\";\n    } else if (introjs_page == \"/resources/\" + document.tour_example_res_id + \"/sort?tour=3\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \"#sortable-resources\",\n                intro: i18n_string('walkthrough.drag_and_drop_the_resources_to_reorder_them_the_or', \"Drag and drop the resources to reorder them. The order will save automatically after dropping them.\"),\n                position: \"top\",\n                action: \"example_resources_for_order\"\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/signup-questions\";\n    } else if (introjs_page == \"/signup-questions\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.signup-questions\",\n                position: 'right',\n                //helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-questions\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Signup Questions</span></a></div>',\n                intro: i18n_string('walkthrough.on_the_signup_questions_page_you_will_be_able_to_c', \"On the <strong>Account Management > Participant Account Questions</strong> page, you will be able to customize the signup questions.\")\n            }\n        );\n        if ($(\"#tour-signup-quest-hide\").length) {\n            stepArray.push(\n                {\n                    element: \"#tour-signup-quest-hide\",\n                    intro: i18n_string('walkthrough.you_can_hide_specific_options_from_these_signup_qu', \"You can hide specific options from these signup questions if they do not apply to your organization.\"),\n                    position: \"top\"\n                }\n            );\n        }\n        stepArray.push(\n            {\n                element: \"#tour-signup-quest-custom\",\n                intro: i18n_string('walkthrough.you_can_add_custom_signup_questions_here__when_add', \"You can add custom signup questions here.  When adding a custom question, it will create a dropdown with options for users when they signup.  You can drag/drop to reorder the questions.  From the reports section, you can view the mean scores based on the selected answers.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-preview-account-signup\",\n                intro: i18n_string('walkthrough.you_can_preview_your_account_signup_page_here_', \"You can preview your account signup page here.\"),\n                position: \"bottom\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-view-demo\",\n                intro: i18n_string('walkthrough.you_can_view_the_demo_here_this_will_take_you_to_t', \"You can view the demo here. This will take you to the Well-Being Index demo site.\"),\n                position: \"bottom\"\n            }\n        );\n\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/signup-questions/add\";\n    } else if (introjs_page == \"/signup-questions/add\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \"#tour-signup-quest-custom-text\",\n                intro: i18n_string('walkthrough.when_adding_or_editing_a_custom_question_you_first', \"When adding or editing a custom question, you first create your question here.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-signup-quest-custom-report\",\n                intro: i18n_string('walkthrough.enter_the_associated_name_of_the_report_', \"Enter the associated name of the report.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-signup-quest-custom-multiple\",\n                intro: i18n_string('walkthrough.check_this_if_you_want_to_allow_users_to_select_mo', \"Check this if you want to allow users to select more than one option for this question.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#tour-signup-quest-custom-options\",\n                intro: i18n_string('walkthrough.click_on_add_option_to_add_the_option_you_will_nee', \"Click on 'Add Option' to add the option you will need.  Then fill in the text and drag/drop the rows to change the order that you want the options displayed.\"),\n                position: \"top\",\n                //action: \"sample_signup_questions\"\n            }\n        );\n\n        doneLabel = window.nextText+' \u2192';\n        // if (document.tour_parts.indexOf('reports') != -1 || document.tour_parts.indexOf('admin') != -1) {\n        //     redirectURL = \"/reports/0/show_report?report=percent_high_levels_of_distress\";\n        // } else {\n        redirectURL = \"/dashboard?tour=done\";\n        // }\n    } else if (introjs_page == \"/reports/0/show_report?report=percent_high_levels_of_distress\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.reports\",\n                position: 'right',\n                // helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-reports\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Reports</span></a></div>',\n                intro: i18n_string('walkthrough.on_any_of_the_reports_pages_the_interface_will_loo', \"On any of the <strong>Reports</strong> pages, the interface will look similar to this report.\")\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#choose-report-btn-group\",\n                intro: i18n_string('walkthrough.in_the_upper_right_you_can_quickly_switch_to_a_dif', \"In the upper right you can quickly switch to a different report using this dropdown.\"),\n                position: \"bottom\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#main-chart-wrapper\",\n                intro: i18n_string('walkthrough.in_the_main_area_will_be_the_chart_', \"In the main area will be the chart.\"),\n                position: (mobile_walkthrough ? 'top' : \"right\")\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#table-data-holder\",\n                intro: i18n_string('walkthrough.below_the_chart_will_be_a_table_of_the_data_from_t', \"Below the chart will be a table of the data from the chart.\"),\n                position: (mobile_walkthrough ? 'top' : \"right\")\n            }\n        );\n        // var report_button_wrapper = \".hidden-sm-down\";\n        // if (window_width < 768) {\n        //     report_button_wrapper = \".hidden-md-up\";\n        // }\n        stepArray.push(\n            {\n                // element: report_button_wrapper + \" .report-settings-panel-open-btn\",\n                element: \".configure-report-button\",\n                intro: i18n_string('walkthrough.here_you_can_open_the_configuration_settings_for_t', \"Here you can open the configuration settings for the report.\"),\n                position: (mobile_walkthrough ? 'top' : \"left\")\n            }\n        );\n        //  --  report-settings-panel-open-btn\n        stepArray.push(\n            {\n                element: \"#configureReportOptions\",\n                intro: i18n_string('walkthrough.in_the_reports_settings_you_can_choose_style_perio', \"In the reports settings you can choose style, period, type, and other options based on the type of report.\"),\n                position: 'left',\n                action: 'open_report_settings_panel'\n            }\n        );\n        stepArray.push(\n            {\n                // element: report_button_wrapper + \" .download-chart-button-group\",\n                element: \"#download-report-btn-group\",\n                intro: i18n_string('walkthrough.here_you_can_download_a_pdf_jpeg_or_excel_version_', \"Here you can download a PDF, JPEG, or Excel version of this report.\"),\n                position: (mobile_walkthrough ? 'top' : \"left\"),\n                action: 'close_report_settings_panel'\n            }\n        );\n        if ($(\"#advanced-reports-btn\").length) {\n            stepArray.push(\n                {\n                    element: \"#advanced-reports-btn\",\n                    intro: i18n_string('walkthrough.here_you_can_access_and_create_advanced_reports_', \"Here you can access and create advanced reports.\"),\n                    position: (mobile_walkthrough ? 'top' : \"left\")\n                }\n            );\n            doneLabel = window.nextText+' \u2192';\n            redirectURL = \"/advanced-report\";\n        } else if ($(\".process-improve\").length) {\n            doneLabel = window.nextText+' \u2192';\n            redirectURL = \"/process-improvement\";\n        } else {\n            doneLabel = window.nextText+' \u2192';\n            redirectURL = \"/dashboard?tour=done\";\n        }\n    } else if (introjs_page == \"/advanced-report\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                //element: \".table.table-striped\",\n                intro: i18n_string('walkthrough.all_saved_advanced_reports_will_be_listed_here__yo', \"All saved advanced reports will be listed here.  You can edit, remove, and run the report from this list. Reports can be organized into folders.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \".new-adv-report-btn\",\n                intro: i18n_string('walkthrough.here_you_can_create_a_new_advanced_report_', \"Here you can create a new advanced report.\"),\n                position: (mobile_walkthrough ? 'top' : \"right\")\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/advanced-report/new\";\n    } else if (introjs_page == \"/advanced-report/new\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                intro: i18n_string('walkthrough.the_advanced_report_editor_allows_for_combining_sp', \"The advanced report editor allows for combining specific groups based on demographic and custom question answers.\"),\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-adv-report-name\",\n                intro: i18n_string('walkthrough.the_first_step_is_input_the_name_of_the_report_', \"The first step is input the name of the report.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-adv-filter-options\",\n                intro: i18n_string('walkthrough.the_second_step_is_select_the_options_from_each_qu', \"The second step is select the options from each question that you want in your report.  You can group options together into a custom group as well.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#selected_question_options_list\",\n                intro: i18n_string('walkthrough.the_third_step_is_to_select_one_or_more_optionsgro', \"The third step is to select one or more options/groups to combine and add them to your report.\"),\n                position: \"top\"\n            }\n        );\n\n        stepArray.push(\n            {\n                element: \"#group_combo_table\",\n                intro: i18n_string('walkthrough.once_you_add_the_combined_optionsgroups_they_will_', \"Once you add the combined options/groups they will show here with the sample size and mean score for that group.  This can be used to check if there is enough participants in a particular group.  Once you add all of your combinations, then you can save and run the report.\"),\n                position: \"top\"\n            }\n        );\n        if ($(\".process-improve\").length) {\n            doneLabel = window.nextText+' \u2192';\n            redirectURL = \"/process-improvement\";\n        } else {\n            doneLabel = window.nextText+' \u2192';\n            redirectURL = \"/dashboard?tour=done\";\n        }\n    } else if (introjs_page == \"/process-improvement\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                element: \".nav-link.process-improve\",\n                position: 'right',\n                // helperHTML: '<div style=\"padding: 5px 6px 6px 4px;\"><a href=\"\" style=\"background-color: rgb(18, 56, 116);border-color: rgb(255, 255, 255) rgb(255, 255, 255) rgb(255, 255, 255) rgb(116, 142, 183);border-left-style: solid;border-left-width: 5px;box-sizing: border-box;color: rgb(255, 255, 255);display: block;font-size: 18px;height: ' + helper_menu_item_height + ';line-height: 27px;list-style-type: none;outline: rgb(59, 153, 252) auto 0px;overflow: hidden;padding: 10px 20px 10px 12px;text-align: left;text-decoration: none solid rgb(255, 255, 255);text-size-adjust: 100%;vertical-align: middle;white-space: nowrap;\"><i class=\"icon-research\" style=\"box-sizing: border-box;font-family: wbi;font-size: 42px;font-style: normal;line-height: 42px;speak: none;vertical-align: middle;-webkit-font-smoothing: antialiased;\"></i> <span style=\"box-sizing: border-box;' + helper_menu_item_height + '\">Process Improvement</span></a></div>',\n                intro: i18n_string('walkthrough.process_improvement_questions_can_be_used_to_get_f', \"Process improvement questions can be used to get feedback or suggestions from your participates.\")\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-process-improvement-question-table\",\n                intro: i18n_string('walkthrough.here_will_be_listed_all_process_improvement_questi', \"Here will be listed all process improvement questions.  You can have 3 active questions at a time.  Clicking on the status label will activate/deactivate the question.\"),\n                position: \"top\",\n                action: 'example_process_improvement_questions'\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#t-add-improvement-question\",\n                intro: i18n_string('walkthrough.here_you_can_create_new_process_improvement_questi', \"Here you can create new process improvement questions.\"),\n                position: \"top\"\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#improvement-sample-email-template\",\n                intro: i18n_string('walkthrough.at_the_bottom_you_can_view_and_download_the_proces', \"At the bottom you can view and download the process improvement email template to send from your own email system.\"),\n                position: \"top\"\n            }\n        );\n\n        doneLabel = window.nextText+' \u2192';\n        redirectURL = \"/dashboard?tour=done\";\n    } else if (introjs_page == \"/dashboard?tour=done\" && shouldStartOnLoad == \"yes\") {\n        stepArray.push(\n            {\n                intro: i18n_string('walkthrough.tour_completedyou_can_view_this_tour_anytime_by_go', \"<h2>Tour Completed</h2>You can view this tour anytime by going to the Help page.\"),\n            }\n        );\n    } else {\n        stepArray.push(\n            {\n                intro: i18n_string('walkthrough.wellbeing_index_tourwe_will_give_you_a_quick_tour_', \"<div style=\\\"width:300px;\\\"><h2>Well-Being Index Tour</h2>We will give you a quick tour and show you the different areas of the site. You can navigate the tour using the <strong>Prev/Next</strong> buttons or the <strong>left</strong> and <strong>right</strong> arrows on your keyboard.</div>\"),\n            }\n        );\n        stepArray.push(\n            {\n                element: \"#navigation-col\",\n                intro: i18n_string('walkthrough.the_main_navigation_can_be_collapsed_and_expanded_', \"The main navigation can be collapsed and expanded using the hamburger icon to the right of it.  This menu will have all of the links you will need to navigate the tool.\"),\n                position: 'right',\n                action: 'expand_nav'\n            }\n        );\n        var nav_active = \"\";\n        if (window_width < 1024) {\n            nav_active = \"active\";\n        }\n        stepArray.push(\n            {\n                element: \"nav.utility-nav\",\n                intro: i18n_string('walkthrough.at_the_bottom_of_the_navigation_you_will_see_links', \"<div style=\\\"width:340px;\\\">At the bottom of the navigation you will see links to go to your account page (to update your password), help documentation, and the logout button.</div>\"),\n                position: 'right',\n                action: 'expand_nav',\n                helperHTML: '<div class=\"' + nav_active + '\"><div id=\"sidebar\" style=\"position:relative;border:6px solid #FFF;border-radius:4px;\"><nav class=\"utility-nav introjs-showElement introjs-relativePosition\"><a href=\"#\"><i class=\"fa fa-gear\"></i><span>My Account</span></a><a href=\"#\"><i class=\"fa fa-question\"></i><span>Help</span></a><a href=\"#\"><i class=\"fa fa-sign-out\"></i><span>Logout</span></a></nav></div></div>'\n            }\n        );\n        doneLabel = window.nextText+' \u2192';\n\n        if (document.tour_parts.indexOf('admin') != -1) {\n            if ($(\"a.starter-kit\").length) {\n                redirectURL = \"/starter_kit\";\n            } \n            else if($(\"a.admin-toolkit\").length) {\n                redirectURL = \"/admin_toolkit\";\n            } \n            else {\n                redirectURL = \"/administrator\";\n            }\n        } else if (document.tour_parts.indexOf('reports') != -1 || document.tour_parts.indexOf('admin') != -1) {\n            redirectURL = \"/reports?report=at_risk\";\n        } else {\n            redirectURL = \"/dashboard?tour=done\";\n        }\n\n        // console.log(\"redirect_url:\", redirectURL)\n\n    }\n\n    intro.setOptions({\n        steps: stepArray,\n        showBullets: false,\n        scrollToElement: true,\n        scrollTo: 'tooltip',\n        showStepNumbers: false,\n        keyboardNavigation: false,\n        //hideNext: true,\n        nextToDone: true,\n        skipLabel: i18n_string(\"general.exit\", \"Exit\"),\n        doneLabel: doneLabel,\n        nextLabel: window.nextText+\" \u2192\",\n        prevLabel: \"\u2190 \"+window.backText,\n    });\n    if (redirectURL) {\n        intro.oncomplete(function () {\n            intro_loading_next_page = true;\n            setCookie(\"introjs_page\", redirectURL, 1);\n            setCookie(\"introjs_startonload\", \"yes\", 1);\n            window.location.href = redirectURL;\n        });\n    }\n\n    intro.onbeforechange(function (targetElement) {\n        document.introjsHelperHTML = '';\n        $(\".introjs-helperLayer\").html(\"\");\n        if (this._introItems && this._currentStep >= 0 && this._introItems[this._currentStep]) {\n            var stepObj = this._introItems[this._currentStep];\n            if (stepObj.helperHTML) {\n                // introjs-helperLayer  introjs-fixedTooltip\n                if ($(\".introjs-helperLayer\").length) {\n                    $(\".introjs-helperLayer\").html(stepObj.helperHTML);\n                } else {\n                    document.introjsHelperHTML = stepObj.helperHTML;\n                    setTimeout(updateHelperHTML, 50);\n                }\n            } else if (stepObj.action) {\n                if (stepObj.action == \"expand_nav\") {\n                    $(\"body\").removeClass(\"nav-toggled\");\n                } else if (stepObj.action == \"collapse_nav\") {\n                    $(\"body\").addClass(\"nav-toggled\");\n                } else if (stepObj.action == \"main_inv_tab\") {\n                    $(\"button[data-bs-target='#invitation_code']\").closest(\".nav\").find(\".nav-link\").removeClass(\"active\");\n                    $(\"button[data-bs-target='#invitation_code']\").addClass(\"active\");\n                    $(\".tab-content\").find(\".tab-pane\").removeClass(\"active\").removeClass(\"show\");\n                    $(\"#invitation_code\").addClass(\"active\").addClass(\"show\");\n                } else if (stepObj.action == \"email_inv_tab\") {\n                    $(\"button[data-bs-target='#email_invitations']\").closest(\".nav\").find(\".nav-link\").removeClass(\"active\");\n                    $(\"button[data-bs-target='#email_invitations']\").addClass(\"active\");\n                    $(\".tab-content\").find(\".tab-pane\").removeClass(\"active\").removeClass(\"show\");\n                    $(\"#email_invitations\").addClass(\"active\").addClass(\"show\");\n                } else if (stepObj.action == \"email_test_inv_tab\") {\n                    $(window).scrollTop(0);\n                    $(\"button[data-bs-target='#send_test_invites']\").closest(\".nav\").find(\".nav-link\").removeClass(\"active\");\n                    $(\"button[data-bs-target='#send_test_invites']\").addClass(\"active\");\n                    $(\".tab-content\").find(\".tab-pane\").removeClass(\"active\").removeClass(\"show\");\n                    $(\"#send_test_invites\").addClass(\"active\").addClass(\"show\");\n                } else if (stepObj.action == \"example_test_invites\") {\n                    var example_invites = '';\n                    example_invites += '<tr>';\n                    example_invites += '  <td>test.user1@yourorganization.com</td>';\n                    example_invites += '  <td>';\n                    example_invites += '    <span class=\"badge bg-primary\">Signed Up</span>';\n                    example_invites += '  </td>';\n                    example_invites += '  <td>09/03/2018</td>';\n                    example_invites += '  <td>';\n                    example_invites += '    <a href=\"#\"><em class=\"fa fa-times text-danger\"></em><span class=\"sr-only\">Remove Now</span></a>';\n                    example_invites += '    <a href=\"#\"><em class=\"fa fa-refresh text-success\"></em><span class=\"sr-only\">Reset Auto-removal Time</span></a>';\n                    example_invites += '  </td>';\n                    example_invites += '</tr>';\n                    example_invites += '<tr>';\n                    example_invites += '  <td>test.user2@yourorganization.com</td>';\n                    example_invites += '  <td>';\n                    example_invites += '    <span class=\"badge badge-success\">Sent</span>';\n                    example_invites += '  </td>';\n                    example_invites += '  <td>09/03/2018</td>';\n                    example_invites += '  <td>';\n                    example_invites += '    <a href=\"#\"><em class=\"fa fa-times text-danger\"></em><span class=\"sr-only\">Remove Now</span></a>';\n                    example_invites += '    <a href=\"#\"><em class=\"fa fa-envelope-o text-primary\"></em><span class=\"sr-only\">Resend Invite Email</span></a>';\n                    example_invites += '  </td>';\n                    example_invites += '</tr>';\n                    example_invites += '<tr>';\n                    example_invites += '  <td>test.user3@yourorganization.com</td>';\n                    example_invites += '  <td>';\n                    example_invites += '    <span class=\"badge badge-success\">Sent</span>';\n                    example_invites += '  </td>';\n                    example_invites += '  <td>09/03/2018</td>';\n                    example_invites += '  <td>';\n                    example_invites += '    <a href=\"#\"><em class=\"fa fa-times text-danger\"></em><span class=\"sr-only\">Remove Now</span></a>';\n                    example_invites += '    <a href=\"#\"><em class=\"fa fa-envelope-o text-primary\"></em><span class=\"sr-only\">Resend Invite Email</span></a>';\n                    example_invites += '  </td>';\n                    example_invites += '</tr>';\n\n                    $(\"#test_inv table tbody\").html(example_invites);\n                } else if (stepObj.action == \"example_resources_for_order\") {\n                    var example_res = '<li class=\"sortable-resources-ui-state-highlight list-group-item ui-sortable-handle\"><em class=\"fa fa-arrows\"></em> Phone: 555-555-5555</li>';\n                    example_res += '<li class=\"sortable-resources-ui-state-highlight list-group-item ui-sortable-handle\"><em class=\"fa fa-arrows\"></em> Phone: 111-444-2222</li>';\n                    example_res += '<li class=\"sortable-resources-ui-state-highlight list-group-item ui-sortable-handle\"><em class=\"fa fa-arrows\"></em> http://www.yourinternallink.com</li>';\n                    example_res += '<li class=\"sortable-resources-ui-state-highlight list-group-item ui-sortable-handle\"><em class=\"fa fa-arrows\"></em> http://www.yourorganization.com</li>';\n                    example_res += '<li class=\"sortable-resources-ui-state-highlight list-group-item ui-sortable-handle\"><em class=\"fa fa-arrows\"></em> http://www.helplink.com</li>';\n\n                    $(\"#sortable-resources\").html(example_res);\n                } else if (stepObj.action == \"sample_signup_questions\") {\n                    var example_html = '<tr class=\"ui-sortable-handle\"><td align=\"center\" valign=\"center\" style=\"vertical-align: inherit;\"><em class=\"fa fa-arrows\" style=\"font-size:20px;color:#cccccc;\"></em></td><td><input type=\"text\" class=\"form-control\" value=\"Example Option 1\"></td><td style=\"display:none;\"></td><td align=\"center\" class=\"text-center\"><input type=\"checkbox\" ></td></tr>';\n                    example_html += '<tr class=\"ui-sortable-handle\"><td align=\"center\" valign=\"center\" style=\"vertical-align: inherit;\"><em class=\"fa fa-arrows\" style=\"font-size:20px;color:#cccccc;\"></em></td><td><input type=\"text\" class=\"form-control\" value=\"Example Option 2\"></td><td style=\"display:none;\"></td><td align=\"center\" class=\"text-center\"><input type=\"checkbox\" ></td></tr>';\n                    example_html += '<tr class=\"ui-sortable-handle\"><td align=\"center\" valign=\"center\" style=\"vertical-align: inherit;\"><em class=\"fa fa-arrows\" style=\"font-size:20px;color:#cccccc;\"></em></td><td><input type=\"text\" class=\"form-control\" value=\"Example Option 3\"></td><td style=\"display:none;\"></td><td align=\"center\" class=\"text-center\"><input type=\"checkbox\" ></td></tr>';\n                    example_html += '<tr class=\"ui-sortable-handle\"><td align=\"center\" valign=\"center\" style=\"vertical-align: inherit;\"><em class=\"fa fa-arrows\" style=\"font-size:20px;color:#cccccc;\"></em></td><td><input type=\"text\" class=\"form-control\" value=\"Example Option 4\"></td><td style=\"display:none;\"></td><td align=\"center\" class=\"text-center\"><input type=\"checkbox\" ></td></tr>';\n                    example_html += '<tr class=\"ui-sortable-handle\"><td align=\"center\" valign=\"center\" style=\"vertical-align: inherit;\"><em class=\"fa fa-arrows\" style=\"font-size:20px;color:#cccccc;\"></em></td><td><input type=\"text\" class=\"form-control\" value=\"Example Option 5\"></td><td style=\"display:none;\"></td><td align=\"center\" class=\"text-center\"><input type=\"checkbox\" ></td></tr>';\n\n                    $(\"#option_table_body\").html(example_html);\n                } else if (stepObj.action == \"new_admin_radio\") {\n                    $(\"#new-admin-radio-new\").prop(\"checked\", true).click();\n                } else if (stepObj.action == \"open_report_settings_panel\") {\n                    $(\"#configureReportOptions\").addClass(\"notransition\");\n                    $(\".configure-report-button\").click();\n                    //$(\"#configureReportOptions\").addClass(\"show\").css('visibility','visible');\n\n                    setTimeout(function () {\n                        $(\"#configureReportOptions\").removeClass(\"notransition\");\n                    }, 500);\n                } else if (stepObj.action == \"close_report_settings_panel\") {\n                    $(\"#configureReportOptions\").addClass(\"notransition\");\n                    $(\"#configureReportOptions .btn-close\").click();\n\n                    setTimeout(function () {\n                        $(\"#configureReportOptions\").removeClass(\"notransition\");\n                    }, 500);\n                } else if (stepObj.action == \"example_process_improvement_questions\") {\n                    if ($(\"#t-process-imrpovement-question-table tbody tr\").length <= 1) {\n                        if ($(\"#t-process-imrpovement-question-table .no-process-questions\").length) {\n                            var example_html = '<tr><td>Your process improvement question 1</td><td nowrap=\"nowrap\"><a href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Toggle Status\" class=\"text-success\"><em class=\"fa fa-star\"></em> Active</a></td><td class=\"text-right\"><a href=\"process-improvement?edit=example\" class=\"btn\"><em data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Edit\" class=\"fa fa-pencil-square-o text-success\"></em><span class=\"sr-only\">Edit</span></a> <a href=\"#\" class=\"btn disabled\"><em data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=View Report\" class=\"fa fa-bar-chart text-muted\"></em><span class=\"sr-only\">View Report</span></a> <a href=\"#\" class=\"btn disabled\"><em data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=Delete\" class=\"fa fa-times text-muted\"></em><span class=\"sr-only\">Delete</span></a></td></tr>';\n                            example_html += '<tr><td>Your process improvement question 2</td><td nowrap=\"nowrap\"><a href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=Toggle Status\" class=\"text-success\"><em class=\"fa fa-star\"></em> Active</a></td><td class=\"text-right\"><a href=\"process-improvement?edit=example\" class=\"btn\"><em data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Edit\" class=\"fa fa-pencil-square-o text-success\"></em><span class=\"sr-only\">Edit</span></a> <a href=\"#\" class=\"btn disabled\"><em data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"View Report\" class=\"fa fa-bar-chart text-muted\"></em><span class=\"sr-only\">View Report</span></a> <a href=\"#\" class=\"btn disabled\"><em data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Delete\" class=\"fa fa-times text-muted\"></em><span class=\"sr-only\">Delete</span></a></td></tr>';\n\n                            $(\"#t-process-imrpovement-question-table tbody\").html(example_html);\n                        }\n                    }\n                }\n\n            }\n        }\n    });\n    intro.onexit(function () {\n        if (!intro_loading_next_page) {\n            setCookie(\"introjs_page\", \"\", -30);\n            setCookie(\"introjs_startonload\", \"\", -30);\n        }\n    });\n    intro.addHints();\n}\n\nwindow.setupWalkthrough = function() {\n    if (typeof introJs === 'undefined') {\n        return;\n    }\n    initIntroJs();\n    var shouldStartOnLoad = getCookie(\"introjs_startonload\");\n    if (shouldStartOnLoad == \"yes\") {\n        setCookie(\"introjs_startonload\", \"\", -30);\n        intro.start();\n        introJsStarted = true;\n    }\n\n    $(document).off(\"click\", \".start-tour\").on(\"click\", \".start-tour\", function (e) {\n        e.preventDefault();\n        redirect_to_start_tour();\n    });\n\n    $(document).keydown(function (e) {\n        if (intro && introJsStarted) {\n            switch (e.which) {\n                case 37: // left\n                    if ($(\".introjs-prevbutton\").is(\":visible\")) {\n                        intro.previousStep();\n                        e.preventDefault();\n                    }\n                    break;\n                case 39: // right\n                    if ($(\".introjs-nextbutton\").is(\":visible\")) {\n                        intro.nextStep();\n                        e.preventDefault();\n                    } else if ($(\".introjs-donebutton\").is(\":visible\")) {\n                        if (redirectURL) {\n                            intro_loading_next_page = true;\n                            setCookie(\"introjs_page\", redirectURL, 1);\n                            setCookie(\"introjs_startonload\", \"yes\", 1);\n                            window.location.href = redirectURL;\n                        } else {\n                            intro.exit();\n                        }\n                        e.preventDefault();\n                    }\n                    break;\n                default:\n                    return;\n            }\n        }\n    });\n}\n\nwindow.redirect_to_start_tour = function() {\n    if (window.location.href.indexOf(\"/dashboard\") > -1) {\n        intro.start();\n        introJsStarted = true;\n    } else {\n        setCookie(\"introjs_page\", \"/dashboard?tour=start\", 1);\n        setCookie(\"introjs_startonload\", \"yes\", 1);\n        window.location.href = \"/dashboard?tour=start\";\n    }\n}\n\nwindow.updateHelperHTML = function() {\n    if (document.introjsHelperHTML && document.introjsHelperHTML != '') {\n        if ($(\".introjs-helperLayer\").length) {\n            $(\".introjs-helperLayer\").html(document.introjsHelperHTML);\n        } else {\n            setTimeout(updateHelperHTML, 50);\n        }\n    }\n}\n\n\n// ==========================================================================================\n// \n// Well-Being Snapshot Walkthrough\n// \n// ==========================================================================================\n\nwindow.introWBS = undefined;\nwindow.introJsWBSStarted = false;\n\n\n\nwindow.setupWalkthroughWBS = function() {\n    if ($(\".start-snapshot-walkthrough\").length) {\n        initIntroJsForWellBeingSnapshot();\n        $(document).on(\"click\",\".start-snapshot-walkthrough\",function(e){\n          e.preventDefault();\n          introWBS.start();\n          introJsWBSStarted = true;\n        });\n        $(document).keydown(function(e) {\n          if(introWBS && introJsWBSStarted) {\n            switch (e.which) {\n              case 37: // left\n                if ($(\".introjs-prevbutton\").is(\":visible\")) {\n                  introWBS.previousStep();\n                  e.preventDefault();\n                }\n                break;\n              case 39: // right\n                if ($(\".introjs-nextbutton\").is(\":visible\")) {\n                  introWBS.nextStep();\n                  e.preventDefault();\n                } else if ($(\".introjs-donebutton\").is(\":visible\")) {\n                  introWBS.exit();\n                  e.preventDefault();\n                }\n                break;\n              default:\n                return;\n            }\n          }\n        });\n      }\n}\n\n\n$(document).on('click', '.introjs-donebutton', function(e){\n    if(introJsWBSStarted == true) {\n        introWBS.exit();\n    }\n    e.preventDefault();\n});\n\n\nwindow.createStepContent = function(vimeoId, title, text, width) {\n    if (typeof width == 'undefined') {\n        width = 400;\n    }\n    var title_html = '';\n    var text_html = '';\n    if (typeof title != 'undefined') {\n        title_html = '<h3>'+title+'</h3>';\n    }\n    if (typeof text != 'undefined') {\n        text_html = '<div class=\"pb-2\">'+text+'</div>';\n    }\n    return '<div style=\"width:'+width+'px;\">'+title_html+text_html+'<div class=\"ratio ratio-16x9\"><iframe src=\"https://player.vimeo.com/video/'+vimeoId+'\" width=\"640\" height=\"360\" frameborder=\"0\" allow=\"autoplay; fullscreen\" allowfullscreen></iframe></div></div>';\n}\n\n\nwindow.initIntroJsForWellBeingSnapshot = function(){\n    introWBS = introJs();\n    var stepArray = [];\n  \n    stepArray.push({\n      intro: createStepContent(\"777150445\", i18n_string('walkthrough.introducing_the_wellbeing_snapshot', 'Introducing the Well-Being Snapshot'), i18n_string('walkthrough.learn_about_the_principles_of_the_newest_report_av', 'Learn about the principles of the newest report available in your Well-Being Index account.'),700)\n    });\n    stepArray.push({\n      element: \"#ranges-explanation-all\",\n      intro: createStepContent(\"776786710\", i18n_string('walkthrough.wellbeing_continuum', 'Well-Being Continuum'), i18n_string('walkthrough.explore_4_categories_of_wellbeing_and_distress_and', 'Explore 4 categories of well-being and distress and the likelihood of positive and negative outcomes.')),\n      action: 'expand_4_range_learn_more',\n    });\n    stepArray.push({\n      element: \"#chart-data-holder\",\n      intro: createStepContent(\"776786729\", i18n_string('walkthrough.graph__visual_display_of_data', 'Graph - Visual Display of Data'), i18n_string('walkthrough.see_how_the_data_is_displayed_in_the_graph_area', 'See how the data is displayed in the graph area.')),\n      action: 'close_4_range_learn_more',\n    });\n    stepArray.push({\n      element: \"#full-width-report-table-container\",\n      intro: createStepContent(\"776786755\", i18n_string('walkthrough.data_table', 'Data Table'), i18n_string('walkthrough.see_how_the_data_is_depicted_in_the_report_table', 'See how the data is depicted in the report table.')),\n    });\n    stepArray.push({\n      element: \"#configureReportOptions\",\n      intro: createStepContent(\"776786768\", i18n_string('walkthrough.report_settings_overview', 'Report Settings Overview')),\n      action: 'open_report_settings_panel',\n    });\n    stepArray.push({\n      element: \"#wbs-create-your-groups\",\n      intro: createStepContent(\"776786779\", i18n_string('walkthrough.report_settings__create_groups', 'Report Settings - Create Groups'), i18n_string('walkthrough.create_custom_groups_using_demographic_questions', 'Create custom groups using demographic questions.')),\n      action: 'open_report_settings_panel',\n      loadHelperHTMLFromElement: true,\n    });\n    // #wbs-report-display\n    stepArray.push({\n      element: \"#wbs-report-display\",\n      intro: createStepContent(\"776786797\", i18n_string('walkthrough.report_settings__sort_by', 'Report Settings - Sort By'), i18n_string('walkthrough.review_the_different_ways_you_can_sort_your_report', 'Review the different ways you can sort your report data.')),\n      action: 'open_report_settings_panel',\n      loadHelperHTMLFromElement: true,\n    });\n    // #wbs-report-assessments\n    stepArray.push({\n      element: \"#wbs-report-assessments\",\n      intro: createStepContent(\"776786821\", i18n_string('walkthrough.settings__date_range__assessment_type', 'Settings - Date Range & Assessment Type'), i18n_string('walkthrough.limit_the_assessments', 'Limit the assessments')),\n      action: 'open_report_settings_panel',\n      loadHelperHTMLFromElement: true,\n    });\n    // #wbs-report-comparisons\n    stepArray.push({\n      element: \"#wbs-report-comparisons\",\n      intro: createStepContent(\"776786824\", i18n_string('walkthrough.settings__compare', 'Settings - Compare'), i18n_string('walkthrough.compare_your_current_view_of_the_data_to_national_', 'Compare your current view of the data to national and organization benchmark data.')),\n      action: 'open_report_settings_panel',\n      loadHelperHTMLFromElement: true,\n    });\n    stepArray.push({\n      intro: createStepContent(\"776786845\", i18n_string('walkthrough.suggested_views', 'Suggested Views'), i18n_string('walkthrough.get_a_quick_example_of_suggested_views_to_get_acti', 'Get a quick example of suggested views to get actionable insights from your report.'),700),\n      action: 'close_report_settings_panel'\n    });\n  \n  \n    introWBS.setOptions({\n      steps: stepArray,\n      showBullets: false,\n      scrollToElement: true,\n      scrollTo: 'tooltip',\n      showStepNumbers: false,\n      keyboardNavigation: false,\n      hideNext: true,\n\n        skipLabel: i18n_string(\"general.exit\", \"Exit\"),\n        doneLabel: i18n_string(\"general.done\", \"Done\"),\n        nextLabel: window.nextText,\n        prevLabel: window.backText,\n    });\n  \n    introWBS.onbeforechange(function(targetElement) {\n      document.introjsHelperHTML = '';\n      $(\".introjs-helperLayer\").html(\"\");\n      if(this._introItems && this._currentStep >= 0 && this._introItems[this._currentStep])\n      {\n        var stepObj = this._introItems[this._currentStep];\n        if(stepObj.helperHTML || stepObj.loadHelperHTMLFromElement)\n        {\n          var helperHTMLContent = stepObj.helperHTML;\n          if (stepObj.loadHelperHTMLFromElement) {\n            helperHTMLContent = '<div style=\"overflow:hidden;\">'+$(stepObj.element).prop('outerHTML')+'</div>';\n          }\n  \n          // introjs-helperLayer  introjs-fixedTooltip\n          if($(\".introjs-helperLayer\").length)\n          {\n            setTimeout(function(){\n              $(\".introjs-helperLayer\").html(helperHTMLContent);\n            },250);\n          }\n          else\n          {\n            document.introjsHelperHTML = helperHTMLContent;\n            setTimeout(updateHelperHTML,250);\n          }\n        }\n        if(stepObj.action)\n        {\n          if (stepObj.action == \"expand_4_range_learn_more\"){\n            $($(\"#continuum-button\").attr('href')).addClass('in show');\n          } else if (stepObj.action == \"close_4_range_learn_more\") {\n            $($(\"#continuum-button\").attr('href')).removeClass('in show');\n          } else if (stepObj.action == \"open_report_settings_panel\") {\n            $(window).scrollTop(0);\n            $(\"#configureReportOptions\").css(\"transition\",\"none\").css(\"visibility\", \"visible\").addClass(\"show\");            \n          } else if (stepObj.action == \"close_report_settings_panel\") {\n            $(\"#configureReportOptions\").css(\"transition\",\"none\").css(\"visibility\", \"hidden\").removeClass(\"open\");\n            $('.introjs-tooltipbuttons').append('<a role=\"button\" tabindex=\"0\" class=\"introjs-button introjs-fullbutton introjs-donebutton\" style=\"float: right\">'+i18n_string(\"general.done\", \"Done\")+'</a>');\n          }\n  \n        }\n      }\n    });\n    introWBS.addHints();\n}\n\n\n\n// ==========================================================================================\n// \n// Reworked Admin Navigation\n// \n// ==========================================================================================\n\nwindow.introNN = undefined;\nwindow.introJsNNStarted = false;\n\n\n\nwindow.setupWalkthroughNewNav = function() {\n    if ($(\".new_admin_nav\").length) {\n        initIntroJsForNewNav();\n        $(document).on(\"click\",\".new_admin_nav\",function(e){\n          e.preventDefault();\n          introNN.start();\n          introJsNNStarted = true;\n        });\n        $(document).keydown(function(e) {\n          if(introWBS && introJsWBSStarted) {\n            switch (e.which) {\n              case 37: // left\n                if ($(\".introjs-prevbutton\").is(\":visible\")) {\n                    introNN.previousStep();\n                  e.preventDefault();\n                }\n                break;\n              case 39: // right\n                if ($(\".introjs-nextbutton\").is(\":visible\")) {\n                  introNN.nextStep();\n                  e.preventDefault();\n                } else if ($(\".introjs-donebutton\").is(\":visible\")) {\n                  introNN.exit();\n                  e.preventDefault();\n                }\n                break;\n              default:\n                return;\n            }\n          }\n        });\n    }\n}\n\n\nwindow.initIntroJsForNewNav = function(){\n    introNN = introJs();\n    var stepArray = [];\n  \n    stepArray.push({\n      intro: createStepContent(\"\", 'New Navigation', 'We reworked that clunky old nav to something super sweet...',700)\n    });\n    stepArray.push({\n      element: \"#ranges-explanation-all\",\n      intro: createStepContent(\"776786710\", 'Well-Being Continuum', 'Explore 4 categories of well-being and distress and the likelihood of positive and negative outcomes.'),\n      action: 'expand_4_range_learn_more',\n    });\n\n    introNN.setOptions({\n        steps: stepArray,\n        showBullets: false,\n        scrollToElement: true,\n        scrollTo: 'tooltip',\n        showStepNumbers: false,\n        keyboardNavigation: false,\n        hideNext: true,\n        skipLabel: \"Exit\",\n      });\n    \n      introNN.onbeforechange(function(targetElement) {\n        document.introjsHelperHTML = '';\n        $(\".introjs-helperLayer\").html(\"\");\n        if(this._introItems && this._currentStep >= 0 && this._introItems[this._currentStep])\n        {\n          var stepObj = this._introItems[this._currentStep];\n          if(stepObj.helperHTML || stepObj.loadHelperHTMLFromElement)\n          {\n            var helperHTMLContent = stepObj.helperHTML;\n            if (stepObj.loadHelperHTMLFromElement) {\n              helperHTMLContent = '<div style=\"overflow:hidden;\">'+$(stepObj.element).prop('outerHTML')+'</div>';\n            }\n    \n            // introjs-helperLayer  introjs-fixedTooltip\n            if($(\".introjs-helperLayer\").length)\n            {\n              setTimeout(function(){\n                $(\".introjs-helperLayer\").html(helperHTMLContent);\n              },250);\n            }\n            else\n            {\n              document.introjsHelperHTML = helperHTMLContent;\n              setTimeout(updateHelperHTML,250);\n            }\n          }\n          if(stepObj.action)\n          {\n            if (stepObj.action == \"expand_4_range_learn_more\"){\n              $($(\"#continuum-button\").attr('href')).addClass('in show');\n            } else if (stepObj.action == \"close_4_range_learn_more\") {\n              $($(\"#continuum-button\").attr('href')).removeClass('in show');\n            } else if (stepObj.action == \"open_report_settings_panel\") {\n              $(window).scrollTop(0);\n              $(\"#configureReportOptions\").css(\"transition\",\"none\").css(\"visibility\", \"visible\").addClass(\"show\");            \n            } else if (stepObj.action == \"close_report_settings_panel\") {\n              $(\"#configureReportOptions\").css(\"transition\",\"none\").css(\"visibility\", \"hidden\").removeClass(\"open\");\n              $('.introjs-tooltipbuttons').append('<a role=\"button\" tabindex=\"0\" class=\"introjs-button introjs-fullbutton introjs-donebutton\" style=\"float: right\">Done</a>');\n            }\n    \n          }\n        }\n      });\n      introNN.addHints();\n}\n\n\n", "\n// Converted from the Ruby DidYouMean gem\nwindow.DidYouMean = {\n    Levenshtein: {\n        distance: function(str1, str2) {\n            let n = str1.length;\n            let m = str2.length;\n            if (n === 0) return m;\n            if (m === 0) return n;\n\n            let d = Array.from({length: m + 1}, (_, i) => i);\n            let x = null;\n\n            // to avoid duplicating an array, create it outside of the loop\n            let str2Codepoints = Array.from(str2);\n\n            Array.from(str1).forEach((char1, i) => {\n                i++;\n                let j = 0;\n                while (j < m) {\n                    let cost = (char1 === str2Codepoints[j]) ? 0 : 1;\n                    x = this.min3(\n                        d[j+1] + 1, // insertion\n                        i + 1,      // deletion\n                        d[j] + cost // substitution\n                    );\n                    d[j] = i;\n                    i = x;\n\n                    j += 1;\n                }\n                d[m] = x;\n            });\n\n            return x;\n        },\n\n        min3: function(a, b, c) {\n            if (a < b && a < c) {\n                return a;\n            } else if (b < c) {\n                return b;\n            } else {\n                return c;\n            }\n        }\n    }\n};\n\n/**\n * Determines whether two strings are similar based on a given similarity threshold.\n * The similarity computation uses Levenshtein distance.\n *\n * @function\n * @param {string} a - The first string to compare.\n * @param {string} b - The second string to compare.\n * @param {number} percent_threshold - A similarity threshold percent between 0 and 100\n * @returns {boolean} Returns true if the similarity between the two strings meets or exceeds the threshold; otherwise, false.\n */\nwindow.are_strings_similar = function(a, b, percent_threshold) {\n    var distance = DidYouMean.Levenshtein.distance(a, b);\n    var percent = 100 - (100 * distance / Math.max(a.length, b.length));\n    return percent >= percent_threshold;\n};", "import { Modal } from \"bootstrap\"\n\n// Navigation toggle buttons\n$(function(){\n\n  $('#system_modal_popup').on('hidden.bs.modal', function (e) {\n    // Clear modal once closed / hidden\n    $('#system_modal').html('');\n  })\n\n  $('#campaign_overview_video').on('hidden.bs.modal', function(e) {\n    $('#campaign_overview_video_iframe').attr('src', '');\n  });\n  $('#campaign_overview_video_close').on('click', function(e) {\n    $('#campaign_overview_video_iframe').attr('src', '');\n  });\n\n  if($(\"#user-results-dropdown-popover\").length)\n  {\n    var w = window.innerWidth;\n    var position = \"bottom\";\n    if(w > 900)\n    {\n      position = \"left\";\n    }\n    var popperEl = document.getElementById('user-results-dropdown-popover')\n    var popover = new bootstrap.Popover(popperEl, {\n      html: true,\n      trigger: 'manual',\n      placement: position,\n      title: i18n_string(\"common_js.new_feature\", \"New Feature!\")+'<a href=\"\" class=\"close user-results-dropdown-popover-close-btn\" style=\"margin-top: -0.4rem;\">&times;</a>',\n      content: i18n_string(\"common_js.view_your_past_assessments\", 'View your past assessments here and view your well-being over time.'),\n      template: '<div class=\"popover\" role=\"tooltip\" style=\"max-width:300px;\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'\n      });\n\n    setTimeout(function(){\n    //   console.log(popover)\n      popover.show();\n    },1000);\n    $(document).on(\"click\",\".user-results-dropdown-popover-close-btn, #wbi-date-range\",function(e){\n      e.preventDefault();\n      popover.hide();\n      $.ajax({url: \"/dismiss-notice?tip=results_date_dropdown\"});\n    });\n  }\n\n  if($(\"#one-time-popup-notice\").length)\n  {\n    var position = \"right\";\n\n    var popperEl = document.getElementById('one-time-popup-notice')\n    var popover = new bootstrap.Popover(popperEl, {\n      html: true,\n      trigger: 'manual',\n      placement: position,\n      title: i18n_string(\"common_js.new_feature\", \"New Feature!\")+'<a href=\"\" class=\"close user-results-dropdown-popover-close-btn\" style=\"margin-top: -0.4rem;\">&times;</a>',\n      content: i18n_string(\"common_js.view_account_details_here\", 'View your account details and announcements here.'),\n      template: '<div class=\"popover\" role=\"tooltip\" style=\"max-width:300px;\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'\n      });\n\n    setTimeout(function(){\n    //   console.log(popover)\n      popover.show();\n    },1000);\n    $(document).on(\"click\",\".user-results-dropdown-popover-close-btn, #wbi-date-range\",function(e){\n      e.preventDefault();\n      popover.hide();\n      $.ajax({url: \"/dismiss-notice?tip=admin_new_admin_menu\"});\n    });\n  }\n\n  $(document).on('click', '#sidebarToggle', function(e){\n    e.preventDefault();\n    $('body').toggleClass('nav-toggled');\n    if ($(window).width() > 767) {\n        if ($('body').hasClass('nav-toggled')) {\n            setCookie ('wbi_nav_toggled', 'nav-toggled', 7)\n        } else {\n            setCookie ('wbi_nav_toggled', '', -7)\n        }\n\n        if ($('body').hasClass('nav-toggled')) {\n            $('#menu .collapse').addClass(\"show\")\n            $(\"#menu .nav-item .nav-link\").each(function(){\n                var controls = $(this).attr('aria-controls')\n                if(controls !== undefined) {\n                    $(this).attr('data-bs-toggle', \"\")\n                    $(this).prop('href', \"#\")\n                }\n            })\n        } else {\n            $('#menu .collapse').removeClass(\"show\")\n            $(\"#menu .nav-item .nav-link\").each(function(){\n                var controls = $(this).attr('aria-controls')\n                if(controls !== undefined) {\n                    $(this).attr('data-bs-toggle', 'collapse')\n                    $(this).prop('href', '#' + controls)\n                }\n            })\n        }\n    }\n\n    if( $(\".bootstrap5\").length ){\n        var width = $('#account_management').width();\n        var w = 0;\n        if($('body').hasClass(\"nav-toggled\")) {\n            w = width + 170;\n        } else {\n            w = width - 170;\n        }\n\n        $('.bootstrap5').css(\"width\", w);\n    }\n\n    \n\n            \n  });\n  $(document).on('click', '.mobile-close-nav', function(e){\n      e.preventDefault();\n      $('body').toggleClass('nav-toggled');\n  });\n  // console.log(typeof $.tooltip);\n  // console.dir(bootstrap);\n  // if (typeof $.tooltip != \"undefined\") {\n  //     $('[data-bs-toggle=\"tooltip\"]').tooltip();\n  // }\n  initTooltips();\n  loadAppCallout();\n  setupWalkthrough();\n  setupWalkthroughWBS();\n  setupWalkthroughNewNav();\n  document.addEventListener(\"turbo:before-visit\", function () {\n    //   console.log(\"Event:turbo:before-visit\");\n      // Hide all modals\n      $('.modal').modal('hide');\n      // Hide all tooltips\n      var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n      tooltipTriggerList.map(function (tooltipTriggerEl) {\n          $(tooltipTriggerList).tooltip('hide');\n      });\n      $(\".tooltip.show\").hide();\n  });\n  document.addEventListener(\"turbo:load\", function () {\n      // Hide existing tooltips that are still open from previous page\n      var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n      tooltipTriggerList.map(function (tooltipTriggerEl) {\n          $(tooltipTriggerList).tooltip('hide');\n      });\n      $(\".tooltip.show\").hide();\n\n      initTooltips();\n      initMultiSelectDemographics();\n      initMobileAppJS();\n      loadAppCallout();\n      setupWalkthrough();\n      setupWalkthroughWBS();\n      setupWalkthroughNewNav();\n      init_mobile_app_soft_keyboard_helper();\n  });\n  document.addEventListener(\"turbo:frame-load\", function () {\n    //   console.log(\"Event:turbo:frame-load\");\n      // Hide existing tooltips that are still open from previous page\n      var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n      tooltipTriggerList.map(function (tooltipTriggerEl) {\n          $(tooltipTriggerList).tooltip('hide');\n      });\n      $(\".tooltip.show\").hide();\n\n      initTooltips();\n      initMultiSelectDemographics();\n      initMobileAppJS();\n      loadAppCallout();\n      init_mobile_app_soft_keyboard_helper();\n  });\n\n\n  $('.sortable').sortable({\n      axis: 'y',\n      update: function(event, ui) {\n          var data = $(this).sortable('serialize');\n          $.ajax({\n              headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n              url: $(this).data('href') + \"?kind=\" + $(this).data('kind'), \n              data: data,\n              type: 'PATCH', \n              success: function(e){\n              }\n            });\n      }\n  });\n\n  $(\".datepicker\").datepicker({\n    changeMonth: true,\n    changeYear: true,\n    minDate: ($('#default_start_date').length > 0) ? new Date($('#default_start_date').val()) : new Date('2010-01-01'),\n    dateFormat: 'yy-mm-dd'\n  });\n\n  $('#account_management_table').bootstrapTable({\n      onExpandRow: function() {\n          //console.log(\"we clicked the row\");\n      },\n      onCollapseRow: function() {\n\n      }\n  });\n  \n\n  // Help Video Modal\n  $(document).on('show.bs.modal', '#help-video-modal', function (event) {\n      var button = $(event.relatedTarget);\n      var title = button.data('title');\n      var video_src = button.data('video');\n      var modal = $(this);\n      modal.find('.modal-title').text( title );\n      modal.find('.embed-responsive-item').attr('src', video_src + '?rel=0&showinfo=0');\n  });\n  $(document).on('hide.bs.modal', '#help-video-modal', function(event) {\n      $(this).find('.embed-responsive-item').attr('src', '');\n  });\n\n  $(document).on('hide.bs.modal', '#system_modal_popup', function(event){\n    $(this).find('iframe').attr('src', '');\n  })\n\n  $(document).on('hide.bs.modal', '#campaign_overview_video', function(event){\n    $(this).find('iframe').attr('src', '');\n  })\n\n  init_mobile_app_soft_keyboard_helper();\n\n\n\n\n    $(document).on(\"click\",\".close-upcoming-renewal-notice\",function(e){\n\n        e.preventDefault();\n        $(\"#admin_upcoming_renewal_notice_div\").remove();\n        $.ajax({url: \"/dismiss-notice?tip=admin_upcoming_renewal_notice\"});\n    });\n\n    $(document).on(\"click\",\".close-participant-before-sending-alert\",function(e){\n        e.preventDefault();\n        let tip_value = $(e.currentTarget).data(\"tip\");\n        if (tip_value) {\n            $(\"#admin_participant_before_sending_div\").remove();\n            $.ajax({url: \"/dismiss-notice?tip=\"+tip_value});\n        }\n    });\n\n    $(document).on(\"click\",\".close-dismiss-tooltip-notice\",function(e){\n        e.preventDefault();\n        let tip_value = $(e.currentTarget).data(\"tip\");\n        if (tip_value) {\n            $(e.currentTarget).closest(\".alert\").remove();\n            $.ajax({url: \"/dismiss-notice?tip=\"+tip_value});\n        }\n    });\n\n});\n// Auto focus inputs on desktops\nif (!((typeof wbiandroid !== \"undefined\" && wbiandroid !== null) || (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.launchAuthSettings))) {\n    if ($(window).width() >= 1024) {\n        setTimeout(function () {\n            var $focusInput = $(\".autofocus-after-page-load\");\n            if ($focusInput.val() == \"\") {\n                $focusInput.trigger('focus');\n            }\n        }, 100);\n    }\n}\n\nwindow.initMobileAppJS = function(){\n    if ($(\"body\").hasClass(\"mobile-app\")) {\n        $(document).on(\"focus\", \"input\", function () {\n            $(\"body\").addClass(\"soft-keyboard-padding\");\n        }).on(\"blur\", \"input\", function () {\n            $(\"body\").removeClass(\"soft-keyboard-padding\");\n        });\n        // APP fix for Android document and audio links that should open in a new browser window\n        $(\"a[target='_blank']\").each(function () {\n            var currentURL = this.href;\n            // console.log(currentURL);\n            if (currentURL.indexOf(\"?\") > -1) {\n                this.href = currentURL + \"&target=_blank\";\n            } else {\n                this.href = currentURL + \"?target=_blank\";\n            }\n        });\n\n        if($(\"#mobile-app-config-auth\").length) {\n            let enableAppAuthConfigButton = false;\n            if (typeof wbiandroid !== \"undefined\" && wbiandroid !== null && wbiandroid.launchAuthSettings) {\n                enableAppAuthConfigButton = true;\n            } else if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.launchAuthSettings) {\n                enableAppAuthConfigButton = true;\n            }\n            if (enableAppAuthConfigButton) {\n                $(\"#mobile-app-config-auth\").show();\n            }\n            if (!$(\"#mobile-update-app-auth-btn\").data(\"click_setup\")) {\n                $(\"#mobile-update-app-auth-btn\").data(\"click_setup\", \"1\");\n                $(\"#mobile-update-app-auth-btn\").on(\"click\", function (e) {\n                    e.preventDefault();\n                    let currentTS = Math.floor(Date.now() / 1000);\n                    let lastClickTS = $(this).attr('data-last-click') || 1;\n                    if (currentTS - lastClickTS > 5) {\n                        $(this).attr('data-last-click', currentTS);\n                        try {\n                            if (typeof wbiandroid !== \"undefined\" && wbiandroid !== null && wbiandroid.launchAuthSettings) {\n                                wbiandroid.launchAuthSettings();\n                            } else if (window.webkit.messageHandlers && window.webkit.messageHandlers.launchAuthSettings) {\n                                webkit.messageHandlers.launchAuthSettings.postMessage(\"Load Auth Settings Page\");\n                            }\n                        } catch (err) {\n                            // console.log('The native context does not exist yet');\n                            alert(i18n_string(\"common_js.settings_not_enabled\", \"Settings Not Enabled\"));\n                        }\n                    }\n                });\n            }\n        }\n    }\n};\n\nwindow.setCookie = function(cname, cvalue, exdays) {\n  var d = new Date();\n  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\n  var expires = \"expires=\"+d.toUTCString();\n  document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n}\n  \nwindow.getCookie = function(cname) {\n  var name = cname + \"=\";\n  var ca = document.cookie.split(';');\n  for(var i = 0; i < ca.length; i++) {\n    var c = ca[i];\n    while (c.charAt(0) == ' ') {\n      c = c.substring(1);\n    }\n    if (c.indexOf(name) == 0) {\n      return c.substring(name.length, c.length);\n    }\n  }\n  return \"\";\n}\n\n// Validate SMS Phone Number\n$(function(){\n  // The availability check used to fire on every keyup, so typing one phone number sent\n  // about seven requests. Staff at a hospital share one IP address, and that volume tripped\n  // the per-IP availability_check limit in config/initializers/rack_attack.rb for legitimate\n  // signups (October 2026). Wait until typing pauses, and skip a number already checked.\n  var phoneAvailabilityDebouncer = window.basicDebouncer(600);\n  var lastCheckedPhone = null;\n\n  $(document).on(\"keyup\", \"#user_sms_phone\", function(e){\n    var phone_code = $('.selected-dial-code').html();\n    var phone_num = $(this).val();\n    if(phone_num != \"\" && phone_num.replace(/\\D/g,'').length > 3) {\n      // Validate that phone number is not used\n      var send_data = {\n         sms_phone: phone_num.replace(/\\D/g, ''),\n         sms_phone_country: phone_code.replace(/\\D/g, ''),\n         user_kind: $(\"#user_kind\").val()\n      };\n      var phone_to_check = send_data.sms_phone_country + \"-\" + send_data.sms_phone;\n\n      // Arrow keys, Shift, etc. fire keyup without changing the number - leave the current\n      // result (including an \"already in use\" error) on screen rather than re-checking.\n      if (phone_to_check === lastCheckedPhone) {\n        return;\n      }\n\n      $('#account_setup_phone_error_wrap').removeClass(\"shown\");\n      $(\"#account_setup_phone_error_wrap\").hide().find(\".alert\").html(\"\");\n\n      if($(\"#associate_user_auth\").length && (document.disable_associate_existing_account == undefined || !document.disable_associate_existing_account))\n      {\n          send_data.associate_message = \"yes\";\n      }\n\n      phoneAvailabilityDebouncer(function() {\n        lastCheckedPhone = phone_to_check;\n        checkPhoneAvailability(send_data, phone_code);\n      });\n    } else {\n        lastCheckedPhone = null;\n        $('#account_setup_phone_error_wrap').removeClass(\"shown\");\n        $(\"#account_setup_phone_error_wrap\").hide().find(\".alert\").html(\"\");\n        // $(\"#checking_phone_number_spinner\").addClass(\"hidden\");\n    }\n  });\n\n  function checkPhoneAvailability(send_data, phone_code) {\n    $.ajax({\n      url: '/users/check_phone_avail',\n      data: send_data,\n      success: function(data) {\n        if(data.available && data.available == \"no\")\n        {\n          $(\"#account_setup_phone_error_wrap\").addClass(\"shown\");\n          $(\"#account_setup_phone_error_wrap\").show().find(\".alert\").html(data.message + '<input type=\"hidden\" name=\"invalid_phone\" id=\"invalid_phone\" value=\"1\" />');\n          if(!$(\"#account_setup_phone_error_wrap\").elementVisible(50))\n          {\n            $(\"#sms_phone\").focus();\n          }\n        }\n        else\n        {\n          $(\"#account_setup_phone_error_wrap\").hide().find(\".alert\").html(\"\");\n          $('#user_sms_phone_country').val( phone_code.replace(/\\D/g, ''));\n        }\n      },\n      type: 'POST'\n    });\n  }\n\n\n  $(document).on(\"change\", '#reminder_pref', function(){\n    if( ($(this).val() == 'both' || $(this).val() == 'sms') && $('#reminder_pref_sms_phone').val() == '' ) {\n      $('#reminder_pref_notice').removeClass('hidden');\n    } else {\n      $('#reminder_pref_notice').addClass(\"hidden\");\n    }\n  })\n\n});\n\n$(document).on(\"hidden.bs.collapse\", \"#anon-content-row\", function () {\n    window.setCookie(\"hide_anon_alert\", \"yes\", 7);\n});\n\n$(document).on(\"change\", \"#question_86\", function () {\n    var val_list = $(this).val();\n    var lastSelection = $(this).data(\"last_selection\");\n    var option_id_no_answer = 0;\n    var option_id_not_listed = 0;\n    var prefer_not_to_answer_text = i18n_string(\"app_config.prefer_not_to_answer\", \"Prefer not to answer\");\n    var not_listed_text = i18n_string(\"common_js.not_listed\", \"Not listed\");\n    if (val_list && val_list.length) {\n        for (var i = 0; i < val_list.length; i++) {\n            if ($('#question_86 option[value=\"' + val_list[i] + '\"]').text() == prefer_not_to_answer_text) {\n                option_id_no_answer = val_list[i];\n            }\n            if ($('#question_86 option[value=\"' + val_list[i] + '\"]').text() == not_listed_text) {\n                option_id_not_listed = val_list[i];\n            }\n        }\n    }\n    if (option_id_no_answer > 0 && option_id_not_listed > 0) {\n        if (parseInt(lastSelection) == option_id_no_answer) {\n            $(this).val(option_id_not_listed).change();\n            $(this).data(\"last_selection\", option_id_not_listed);\n        } else {\n            $(this).val(option_id_no_answer).change();\n            $(this).data(\"last_selection\", option_id_no_answer);\n        }\n    } else if (option_id_no_answer > 0 && val_list.length > 1) {\n        // If they are selecting a NEW option other than \"Prefer not to answer\" then allow it\n        if (parseInt(lastSelection) == option_id_no_answer) {\n            // Deselect\n            $('#question_86 option[value=\"' + option_id_no_answer + '\"]').prop('selected', false);\n            $(this).change();\n            $(this).data(\"last_selection\", \"0\");\n        } else {\n            $(this).val(option_id_no_answer).change();\n            $(this).data(\"last_selection\", option_id_no_answer);\n        }\n    } else if (option_id_not_listed > 0 && val_list.length > 1) {\n        // If they are selecting a NEW option other than \"Not listed\" then allow it\n        if (parseInt(lastSelection) == option_id_not_listed) {\n            // Deselect\n            $('#question_86 option[value=\"' + option_id_not_listed + '\"]').prop('selected', false);\n            $(this).change();\n            $(this).data(\"last_selection\", \"0\");\n        } else {\n            $(this).val(option_id_not_listed).change();\n            $(this).data(\"last_selection\", option_id_not_listed);\n        }\n    } else if (val_list.length == 0) {\n        $(this).data(\"last_selection\", \"0\");\n    }\n});\n\n\n\n$(document).on('click', '.modal-video', function(event) {\n    var resource_id = \"\";\n    if( $(window).width() < 767 ) {\n        var resource_id = $(this).data('resource');\n    }\n    if(resource_id && resource_id != \"\")\n    {\n        window.location = 'video?video=' + resource_id;\n    }\n    else\n    {\n        event.preventDefault();\n        var title = $(this).data(\"title\");\n\n        var videoID = $(this).data('video');\n        if(!videoID)\n        {\n            return;\n        }\n\n        if (!$(\"#modal-video\").length) {\n            // Modal HTML not found -- lets insert :)\n            setupBootstrapModal(\"modal-video\", '<em class=\"far fa-video me-2\"></em> <span id=\"modal-video-label\"></span>', '<div id=\"video_player\"></div>', '', 'body', '', 'modal-dialog-centered modal-lg');\n            // let modal_html = '<div className=\"modal fade\" id=\"modal-video\" tabIndex=\"-1\" aria-labelledby=\"modal-video-label\" aria-hidden=\"true\">';\n            // modal_html    += '    <div className=\"modal-dialog modal-dialog-centered modal-lg\" role=\"document\">';\n            // modal_html    += '        <div className=\"modal-content\">';\n            // modal_html    += '             <div className=\"modal-header\">';\n            // modal_html    += '                <h5 className=\"modal-title\"><em className=\"fa fa-video-camera\"></em> <span id=\"modal-video-label\"></span></h5>';\n            // modal_html    += '                <button type=\"button\" className=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>';\n            // modal_html    += '            </div>';\n            // modal_html    += '            <div className=\"modal-body m-0\" id=\"video_player\"></div>';\n            // modal_html    += '        </div>';\n            // modal_html    += '    </div>';\n            // modal_html    += '</div>';\n            // $(\"body\").append(modal_html);\n        }\n\n        if($(this).data('kind') == 'vimeo') {\n            var video = $(this).data('video')\n            var embed_code = '<div style=\"padding:53.13% 0 0 0;position:relative;\"><iframe src=\"' + video + '?badge=0&amp;autopause=0&amp;quality_selector=1&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"' + title + '\"></iframe></div>';\n        } else {\n\n        \n\n            videoID = \"\"+videoID;\n            if (videoID.indexOf(\"http\") != -1) {\n                var regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=)([^#\\&\\?]*).*/;\n                var match = videoID.match(regExp);\n                if (match&&match[2].length>=11)\n                {\n                    videoID = match[2];\n\n                }\n            }\n            \n            if($(this).data('kind') == 'playlist')\n            {\n                var embed_code = '<div class=\"ratio ratio-16x9\"><iframe src=\"https://www.youtube.com/embed/videoseries?list=' + videoID + '&rel=0&showinfo=0&modestbranding=1&iv_load_policy=3\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></div>';\n                $('#video_player').html(embed_code);\n\n                \n            } else {\n                var embed_code = '<div class=\"ratio ratio-16x9\"><iframe src=\"https://www.youtube.com/embed/'+videoID+'?rel=0&amp;showinfo=0&amp;autoplay=1\" frameborder=\"0\" allowfullscreen></iframe></div>';\n                $('#video_player').html(embed_code);\n            }\n        }\n\n       \n        if(title) {\n            $(\"#modal-video-label\").html(title);\n        }\n    }\n\n    $('#modal-video').on(\"hidden.bs.modal\",function(e){\n        $('#video_player').html(\"\");\n    });\n    $('#modal-video').modal('show');\n\n});\n\n$(document).on('click', '.popup-video, .video-popup, .popupvideo, .videopopup', function(event) {\n    if (event.currentTarget && event.currentTarget.href) {\n        let href_link = event.currentTarget.href;\n        let vimeo_regex = /^(?:https?:)?\\/\\/(?:www\\.)?(?:player\\.)?vimeo\\.com\\/([^\\?&\\/\"]+).*$/g;\n        let youtube_regex = /^.*(?:https?:\\/\\/)?(?:www\\.)?(?:youtube\\.com|youtu\\.be)\\/(?:watch\\?v=|embed\\/|v\\/|user\\/.+\\/)?([^\\?&\"]+).*$/g;\n        let youtube_nocookie_regex = /^.*(?:https?:\\/\\/)?(?:www\\.)?(?:youtube-nocookie\\.com)\\/(?:watch\\?v=|embed\\/|v\\/|user\\/.+\\/)?([^\\?&\"]+).*$/g;\n\n        let iframe = '';\n        if(vimeo_regex.test(href_link)){\n            let replacement = '<iframe width=\"420\" height=\"345\" src=\"//player.vimeo.com/video/$1HASH_PARAM\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';\n            let hash_param = '';\n            // Unlisted and private videos will have a hash that needs to be passed to the iframe\n            const regex = /^.*(?:vimeo.com\\/|video\\/)(?:\\d+)(?:\\?.*\\&*h=|\\/)+(?<hash>[\\d,a-f]+)/\n            const found = href_link.match(regex)\n            if (found) {\n                hash_param = \"?h=\" + found.groups.hash\n            }\n            replacement = replacement.replace('HASH_PARAM', hash_param);\n            iframe = href_link.replace(vimeo_regex, replacement);\n        }\n        if(youtube_regex.test(href_link)){\n            let replacement = '<iframe width=\"420\" height=\"345\" src=\"https://www.youtube.com/embed/$1\" frameborder=\"0\" allowfullscreen></iframe>';\n            iframe = href_link.replace(youtube_regex, replacement);\n        }\n        if(youtube_nocookie_regex.test(href_link)){\n            let replacement = '<iframe width=\"420\" height=\"345\" src=\"https://www.youtube-nocookie.com/embed/$1\" frameborder=\"0\" allowfullscreen></iframe>';\n            iframe = href_link.replace(youtube_nocookie_regex, replacement);\n        }\n        if (iframe != '') {\n            event.preventDefault();\n            if (!$(\"#modal-video\").length) {\n                // Modal HTML not found -- lets insert :)\n                setupBootstrapModal(\"modal-video\", '<em class=\"far fa-video me-2\"></em> <span id=\"modal-video-label\"></span>', '<div id=\"video_player\"></div>', '', 'body', '', 'modal-dialog-centered modal-lg');\n            }\n            $(\"#modal-video-label\").html('');\n            let video_html = '<div class=\"ratio ratio-16x9\">';\n            video_html += iframe;\n            video_html += '</div>';\n\n            $('#video_player').html(video_html);\n            $('#modal-video').off(\"hidden.bs.modal\").on(\"hidden.bs.modal\", function (e) {\n                $('#video_player').html(\"\");\n            });\n            $('#modal-video').modal('show');\n        }\n    }\n});\n\n// $(document).on('click','[type=\"date\"]',function(){\n//     if ($(this).data(\"max\")) {\n//         $(this).prop('max', $(this).data(\"max\"));\n//     }\n//     if ($(this).data(\"min\")) {\n//         $(this).prop('min', $(this).data(\"min\"));\n//     }\n// });\n\nwindow.doJsAlert = function(alertmsg,alertBoxId) {\n    if (typeof alertBoxId === 'undefined') { alertBoxId = 'message-container'; }\n    $(\"#\"+alertBoxId).html(alertmsg).show();\n\n    var el = document.getElementById(alertBoxId);\n    if (el) {\n        var rect = el.getBoundingClientRect();\n        if (rect.top < 0 || rect.bottom > window.innerHeight) {\n            var offset = $(\"#\" + alertBoxId).offset();\n            var gotoPos = offset.top - 40;\n            $(\"html,body\").animate({scrollTop: gotoPos}, \"fast\");\n        }\n    }\n}\nwindow.clearJsAlerts = function(alertBoxId) {\n    if (typeof alertBoxId === 'undefined') { alertBoxId = 'message-container'; }\n    $(\"#\"+alertBoxId).html('').hide();\n}\nwindow.setupBootstrapModal = function(modalId, title, body, footer, placementSelector, modalClasses, modalDialogClasses) {\n    let html = '';\n    if (!title) {\n        title = 'Well-Being Index';\n    }\n    html += '<div id=\"'+modalId+'\" class=\"modal fade '+modalClasses+'\" tabIndex=\"-1\">';\n    html += '    <div class=\"modal-dialog '+modalDialogClasses+'\">';\n    html += '        <div class=\"modal-content\">';\n    html += '            <div class=\"modal-header\">';\n    html += '                <h2 class=\"modal-title h5 mb-0\">'+title+'</h2>';\n    html += '                <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>';\n    html += '            </div>';\n    html += '            <div class=\"modal-body\">';\n    html +=                 body;\n    html += '            </div>';\n    if (footer) {\n        html += '            <div class=\"modal-footer\">';\n        html +=                footer\n        html += '            </div>';\n    }\n    html += '        </div>';\n    html += '    </div>';\n    html += '</div>';\n\n    if ($(placementSelector).length != 1) {\n        placementSelector = 'body';\n    }\n    $(placementSelector).append(html);\n    $(\"#\"+modalId).modal();\n}\nwindow.initMultiSelectDemographics = function(){\n    // console.log(\"initMultiSelectDemographics:\"+$(\".question-multi\").length);\n    $(\".question-multi\").each(function () {\n        // console.log(\"initMultiSelectDemographics:.question-multi\");\n        if (!$(this).data(\"select2_setup\")) {\n            $(this).data(\"select2_setup\", true);\n            var options = {\n                placeholder: i18n_string(\"general.select_all_that_apply\", \"Select all that apply\"),\n                // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n                templateResult: function (result, container) {\n                    if (!result.id) {\n                        return result.text;\n                    }\n                    container.className += ' needsclick';\n                    return result.text;\n                },\n                matcher: function (params, data) {\n                    // If there are no search terms, return all of the data\n                    if ($.trim(params.term) === '') {\n                        return data;\n                    }\n\n                    let textUC = data.text.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n                    let termUC = params.term.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n\n                    // `params.term` should be the term that is used for searching\n                    // `data.text` is the text that is displayed for the data object\n                    if (textUC.indexOf(termUC) > -1) {\n                        return data;\n                    }\n\n                    // Return `null` if the term should not be displayed\n                    return null;\n                },\n                theme: \"bootstrap-5\",\n                containerCssClass: \"select2--small\",\n                dropdownCssClass: \"select2--small\"\n            };\n            var parentElement = $(this).closest(\".select2-wrapper-div\");\n            if (parentElement.length) {\n                options.dropdownParent = parentElement;\n            }\n            $(this).select2(options);\n            // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n            var sel2Data = $(this).data('select2');\n            if (sel2Data && sel2Data.$container) {\n                sel2Data.$container.find('*').addClass('needsclick');\n                let found_search_field = sel2Data.$container.find('.select2-search__field');\n                if (found_search_field && found_search_field.length) {\n                    let search_field = found_search_field.first();\n                    let parent_container = search_field.parent();\n                    addLabelToSelect2SearchField(search_field, parent_container);\n                }\n            }\n        }\n    });\n\n    ///////// New searchable inputs           //////////////////////////////////////////////////////////////////////////\n    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n    $(\".searchable-select\").each(function(){\n        if (!$(this).data(\"select2_setup\")) {\n            $(this).data(\"select2_setup\", true);\n            var options = {\n                placeholder: i18n_string(\"support.please_select\",\"Please Select\"),\n\n                matcher: function (params, data) {\n                    // If there are no search terms, return all of the data\n                    if ($.trim(params.term) === '') {\n                        return data;\n                    }\n\n                    let textUC = data.text.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n                    let termUC = params.term.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n\n                    //console.log(textUC);\n                    if (textUC.indexOf(\"other\") > -1) {\n                        return data;\n                    }\n\n                    // `params.term` should be the term that is used for searching\n                    // `data.text` is the text that is displayed for the data object\n                    if (textUC.indexOf(termUC) > -1) {\n                        return data;\n                    }\n\n                    // Return `null` if the term should not be displayed\n                    return null;\n                }\n\n            };\n            if ($(this).hasClass(\"select-kind-custom\")) {\n                // Update matcher to change the \"Other\" matching\n                options.matcher = function (params, data) {\n                    // If there are no search terms, return all of the data\n                    if ($.trim(params.term) === '') {\n                        return data;\n                    }\n\n                    let textUC = data.text.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n                    let termUC = params.term.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n\n                    // Only match extactly for custom questions\n                    if (textUC == \"other\") {\n                        return data;\n                    }\n\n                    // `params.term` should be the term that is used for searching\n                    // `data.text` is the text that is displayed for the data object\n                    if (textUC.indexOf(termUC) > -1) {\n                        return data;\n                    }\n\n                    // Return `null` if the term should not be displayed\n                    return null;\n                };\n            }\n            var parentElement = $(this).closest(\".select2-wrapper-div\");\n            if (parentElement.length) {\n                options.dropdownParent = parentElement;\n            }\n            $(this).on('select2:open', e => {\n                const select2 = $(e.target).data('select2');\n                if (select2 && select2.dropdown && select2.dropdown.$search && select2.dropdown.$search.get(0)) {\n                    if (!mobileCheck()) {\n                        select2.dropdown.$search.get(0).focus();\n                    }\n                    let search_field = select2.dropdown.$search;\n                    let parent_container = search_field.parent();\n                    addLabelToSelect2SearchField(search_field, parent_container);\n                }\n            });\n            $(this).select2(options);\n            // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n            var sel2Data = $(this).data('select2');\n            if (sel2Data && sel2Data.$container) {\n                sel2Data.$container.find('*').addClass('needsclick');\n                let found_search_field = sel2Data.$container.find('.select2-search__field');\n                if (found_search_field && found_search_field.length) {\n                    let search_field = found_search_field.first();\n                    let parent_container = search_field.parent();\n                    addLabelToSelect2SearchField(search_field, parent_container);\n                }\n            }\n            if (parentElement.length) {\n                // Fix missing placeholder text\n                var selectObj = $(this);\n                setTimeout(function () {\n                    if (selectObj.data(\"placeholder\")) {\n                        if (parentElement.find(\".select2-selection__placeholder\").html() == \"\") {\n                            parentElement.find(\".select2-selection__placeholder\").html(selectObj.data(\"placeholder\"));\n                        }\n                    }\n                }, 50);\n            }\n        }\n    });\n}\nwindow.addLabelToSelect2SearchField = function(search_field, parent_container) {\n    if (!parent_container.find('label').length) {\n        if (!document.select2uid_counter) {\n            document.select2uid_counter = Date.now();\n        }\n        document.select2uid_counter += 1;\n        let search_field_id = \"select2_search_\" + document.select2uid_counter;\n        search_field.attr(\"id\", search_field_id);\n        parent_container.prepend('<label for=\"'+search_field_id+'\" class=\"visually-hidden\">Search for options</label>');\n    }\n}\n\n$(function() {\n    initMultiSelectDemographics();\n    initMobileAppJS();\n});\n\nwindow.isVisible = function(e) {\n    return !!( e.offsetWidth || e.offsetHeight || e.getClientRects().length );\n}\n\nwindow.accountManagementDetailViewFormatter = function(index, row) {\n  var html = \"\";\n  if (row.actions) {\n    html += '<div class=\"detail-view-area\">';\n    var buttonHtml = row.actions;\n    buttonHtml = buttonHtml.replaceAll(\"detail-view-button-edit\", \"btn btn-outline-primary btn-sm mr-2\");\n    buttonHtml = buttonHtml.replaceAll(\"detail-view-button-login\", \"btn btn-outline-primary btn-sm mr-2\");\n    buttonHtml = buttonHtml.replaceAll(\"detail-view-button-delete\", \"btn btn-outline-danger btn-sm mr-2\");\n    html += buttonHtml;\n    html += '</div>';\n  }\n  return html;\n}\nwindow.removeDuplicates = function(arr){\n  let a = [];\n  for (let i=0, l=arr.length; i<l; i++) {\n    if (a.indexOf(arr[i]) === -1 && arr[i] !== '') {\n      a.push(arr[i]);\n    }\n  }\n  return a;\n}\nwindow.setupTermsScrollBox = function(){\n    var scrollToBottom = false;\n    $(\".terms-box\").overlayScrollbars({\n        className: \"os-theme-block-dark\",\n        scrollbars : {\n            clickScrolling   : true,\n            touchSupport     : true\n        },\n        callbacks:{\n            onScroll: function(){\n                if(!scrollToBottom){\n                    var outerDiv = $(\".terms-box\");\n                    var innerDiv = $(\".inner-terms-box\", outerDiv);\n                    var ScrollMod = 1;\n                    if (outerDiv.offset().top < innerDiv.outerHeight()) {\n                        ScrollMod = -1;\n                    }\n                    if (Math.round((ScrollMod * innerDiv.offset().top) + outerDiv.height() + outerDiv.offset().top) >= innerDiv.outerHeight()-60 && Math.abs(innerDiv.offset().top) != 0) {\n                        $(\"button#submit\").attr(\"disabled\", false);\n                        scrollToBottom = true;\n                        $(\"#agree_terms\").prop(\"checked\",true);\n                        $(\".terms-box-scroll-warning\").fadeOut(function(){\n                            $(\".terms-box\").addClass(\"read\");\n                        });\n                    } else {\n                        $(\"button#submit\").attr(\"disabled\", true);\n                    }\n                }\n            }\n        }\n    });\n}\n\nwindow.initTooltips = function(){\n    // console.log(\"initTooltips();\");\n    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\n    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n        if (!$(tooltipTriggerEl).data('tooltip-loaded')) {\n            $(tooltipTriggerEl).data('tooltip-loaded',1);\n            return new bootstrap.Tooltip(tooltipTriggerEl);\n        }\n    });\n};\n\n\nwindow.basicDebouncer = function ( delay ) {\n    let timer;\n    const debounce = function ( callback ) {\n        clearTimeout( timer );\n        timer = setTimeout(function () {\n            callback();\n        }, delay);\n        return timer;\n    };\n    return debounce;\n};\n// Utility function to escape HTML\nwindow.escapeHtml = function(text)\n{\n    text = \"\"+text;\n    var map = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#039;'};\n    return text.replace(/[&<>\"']/g, function(m) { return map[m]; });\n};\nwindow.init_select2 = function(selector,options) {\n    if (!options) {\n        options = {};\n    }\n    if (options && !options.templateResult) {\n        // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n        options.templateResult = function (result, container) {\n            if (!result.id) {\n                return result.text;\n            }\n            container.className += ' needsclick';\n            return result.text;\n        }\n    }\n    options.theme = \"bootstrap-5\";\n    $(selector).each(function () {\n        var parentElement = $(this).closest(\".select2-wrapper-div\");\n        if (parentElement.length) {\n            options.dropdownParent = parentElement;\n        }\n        $(this).select2(options);\n    });\n    // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n    $(selector).each(function (index, el) {\n        var sel2Data = $(el).data('select2');\n        if (sel2Data && sel2Data.$container) {\n            sel2Data.$container.find('*').addClass('needsclick');\n            let found_search_field = sel2Data.$container.find('.select2-search__field');\n            if (found_search_field && found_search_field.length) {\n                let search_field = found_search_field.first();\n                let parent_container = search_field.parent();\n                addLabelToSelect2SearchField(search_field, parent_container);\n            }\n        }\n    });\n};\n\n\nwindow.copy_to_clipboard = function(str) {\n    if(window.safari !== undefined || detect_ie_version() > 0) {\n      return copy_to_clipboard_by_selection(str);\n    }\n  \n    window.copy_to_clipboard_listener = function(e) {\n      e.clipboardData.setData(\"text/html\", str);\n      e.clipboardData.setData(\"text/plain\", str);\n      e.preventDefault();\n    }\n    try{\n      document.addEventListener(\"copy\", copy_to_clipboard_listener);\n      document.execCommand(\"copy\");\n      document.removeEventListener(\"copy\", copy_to_clipboard_listener);\n    }catch(error){\n      return false;\n    }\n    return true;\n  }\n  window.copy_to_clipboard_by_selection = function(str) {\n    var copyDiv = document.createElement('div');\n    copyDiv.style.border = '0';\n    copyDiv.style.padding = '0';\n    copyDiv.style.margin = '0';\n    copyDiv.style.position = 'fixed';\n    copyDiv.style['right'] = '-9999px';\n    copyDiv.style.top = (window.pageYOffset || document.documentElement.scrollTop) + 'px';\n    copyDiv.style.opacity = 0;\n    copyDiv.style.pointerEvents = 'none';\n    copyDiv.style.zIndex = -1;\n    copyDiv.setAttribute('tabindex', '-1');\n    document.body.appendChild(copyDiv);\n  \n  \n    if(str.indexOf(\"<\") != -1) {\n      var iframe = document.createElement('iframe');\n      copyDiv.appendChild(iframe);\n      iframe.contentWindow.document.open();\n      iframe.contentWindow.document.write(str);\n      iframe.contentWindow.document.close();\n  \n      // iframe.contentWindow.document.addEventListener(\"copy\", copy_to_clipboard_listener);\n      // Selection\n      iframe.contentWindow.getSelection().removeAllRanges();\n      var range = iframe.contentWindow.document.createRange();\n      range.setStartBefore(iframe.contentWindow.document.firstChild);\n      range.setEndAfter(iframe.contentWindow.document.lastChild);\n      iframe.contentWindow.getSelection().addRange(range);\n      // Do copy\n      iframe.contentWindow.document.execCommand(\"copy\");\n      // Cleanup\n      // iframe.contentWindow.document.removeEventListener(\"copy\", copy_to_clipboard_listener);\n      iframe.contentWindow.getSelection().removeAllRanges();\n    } else {\n      try {\n        copyDiv.innerHTML = str;\n        // document.addEventListener(\"copy\", copy_to_clipboard_listener);\n        // Selection\n        window.getSelection().removeAllRanges();\n        var range = document.createRange();\n        range.setStartBefore(copyDiv.firstChild);\n        range.setEndAfter(copyDiv.lastChild);\n        window.getSelection().addRange(range);\n        // Do copy\n        document.execCommand(\"copy\");\n        // Cleanup\n        // document.removeEventListener(\"copy\", copy_to_clipboard_listener);\n        window.getSelection().removeAllRanges();\n      } catch (error) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  window.detect_ie_version = function(){\n    var iev=0;\n    var ieold = (/MSIE (\\d+\\.\\d+);/.test(navigator.userAgent));\n    var trident = !!navigator.userAgent.match(/Trident\\/7.0/);\n    var rv=navigator.userAgent.indexOf(\"rv:11.0\");\n  \n    if (ieold) iev=new Number(RegExp.$1);\n    if (navigator.appVersion.indexOf(\"MSIE 10\") != -1) iev=10;\n    if (trident&&rv!=-1) iev=11;\n  \n    return iev;\n  }\n\n\nwindow.loadAppCallout = function(){\n\n    var userAgent = navigator.userAgent;\n    var coookieSet = getCookie(\"hide_smart_banner\");\n    if(coookieSet != \"yes\")\n    {\n      setTimeout(function(){\n        if (/android/i.test(userAgent))\n        {\n          $(\"#smartbanner-download-location\").html(i18n_string(\"common_js.in_google_play\",\"In Google Play\"));\n          $(\".smartbanner-icon\").addClass(\"android\");\n          $(\"html\").addClass(\"has-smartbanner\");\n          $(\"#smart-banner\").show();\n        }\n        else if (/iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream)\n        {\n          $(\"#smartbanner-download-location\").html(i18n_string(\"common_js.on_the_app_store\",\"On the App Store\"));\n          $(\".smartbanner-icon\").addClass(\"apple\");\n          $(\"html\").addClass(\"has-smartbanner\");\n          $(\"#smart-banner\").show();\n        }\n      },300);\n      $(\"#smb-close\").on(\"click\",function(e){\n        e.preventDefault();\n        // Set cookie\n        setCookie(\"hide_smart_banner\", \"yes\", 1);\n        // Close it\n        $(\"html\").addClass(\"removed-smartbanner\").removeClass(\"has-smartbanner\");\n        $(\"#smart-banner\").hide();\n      });\n    }\n    // Desktop app download box\n    if (!(/android/i.test(userAgent)) && !(/iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream))\n    {\n      $(\"#desktop-download-app-div\").show();\n      $(document).off('submit').on('submit', '#mobile-app-send-app', function(e){\n        e.preventDefault();\n        var phoneval = $('#mobile_app_phone_input_field').intlTelInput(\"getNumber\").replaceAll(\"_\", \"\").replaceAll(\"-\", \"\");\n        if(phoneval && phoneval.length > 4)\n        {\n          $.ajax({\n            type: \"POST\",\n            url: \"/api/v1/twilio-webhook\",\n            data: {From:phoneval,Body:\"wbiapp\"},\n            cache: false,\n            success: function(data){\n                let message_sent_text = i18n_string(\"common_js.message_successfully_sent\", \"Message successfully sent\");\n              $(\"#mobile-app-send-app\").html('<div class=\"alert alert-success\" style=\"margin: 0;padding-top: 2px;padding-bottom: 2px;\">'+message_sent_text+'</div>');\n            }\n          });\n        }\n      });\n  \n    }\n  }\n\nwindow.getReportTableAsArray = function(header = false) {\n    var report_table_download_count = 0;\n\n    var formObj = $(\"#report-settings-panel-form\");\n    var chart_type = formObj.find(\"[name='chart_type']:checked\").val();\n    var $table = $(\"#table-data table.table\");\n    if(chart_type == \"table\") {\n        $table = $(\"#ajax_chart_div table.table\");\n    } \n    var $rows = $($table.children(\"tbody\")).children('tr');\n\n    // var csvData = \"\";\n    var tableData = [];\n\n    // Push title\n    var chart_title = $(\"#report-name-holder\").text();\n    tableData.push([chart_title]);\n    tableData.push([]);\n\n    // Push report settings\n    var settings_list = getCurrentReportFilterSettingsForDisplay();\n    var settings_header_row = [];\n    var settings_values_row = [];\n    if(settings_list.length > 0)\n    {\n        for(var i=0;i<settings_list.length;i++) {\n            settings_header_row.push(settings_list[i][0]);\n            settings_values_row.push(settings_list[i][1]);\n        }\n        tableData.push(settings_header_row);\n        tableData.push(settings_values_row);\n    }\n    tableData.push([]);\n\n    if(header == true){\n        var $headers = $($table.children(\"thead\").children(\"tr\"));\n        var current_rows = $rows\n        $rows = $headers\n\n        for(var i = 0; i < current_rows.length; i++){\n            $rows = $rows.add(current_rows[i])\n        }\n    }\n\n    var split_sd_cols = [];\n    var ul_cols = {};\n    for(var i=0;i<$rows.length;i++){\n        var $cells = $($rows[i]).children('th,td'); //header or content cells\n        for(var y=0;y<$cells.length && y<5;y++){\n            var txt = ($($cells[y]).text()).toString().trim();\n            if(txt.indexOf(\"(SD)\") != -1)\n            {\n                split_sd_cols.push(y);\n            }\n            var $nestedULList = $($cells[y]).find('.combined-snapshot-sub-account-table-list');\n            if ($nestedULList.length > 0) {\n                var li_length = $nestedULList.find('li').length;\n                if (li_length > 0) {\n                    if (ul_cols[y]) {\n                        ul_cols[y] = Math.max(ul_cols[y], li_length);\n                    } else {\n                        ul_cols[y] = li_length;\n                    }\n                }\n            }\n        }\n    }\n\n    // console.dir(split_sd_cols);\n    for(var i=0;i<$rows.length;i++){\n        var $cells = $($rows[i]).children('th,td'); //header or content cells\n\n        var extra_from_colspan = 0;\n        var rowData = [];\n        var nestedRows = [];\n        for(var y=0;y<$cells.length;y++){\n            var sd_split = false;\n            if(split_sd_cols.indexOf(y) != -1)\n            {\n                sd_split=true;\n            }\n            // Line charts have tested tables --> check for it within this cell\n            var $nestedTable = $($cells[y]).children('table');\n            // Combined snapshot has columns for sub-accounts using UL list\n            var $nestedULList = $($cells[y]).find('.combined-snapshot-sub-account-table-list');\n            if($nestedTable.length > 0) {\n                for (var z = 0; z < $nestedTable.length; z++) {\n                    var $nestedCells = $($nestedTable[z]).find(\"td,th\");\n                    var nestedRowData = rowData.slice();\n                    for (var z2 = 0; z2 < $nestedCells.length; z2++) {\n                        var sd_split = false;\n                        if (split_sd_cols.indexOf(y + z2) != -1) {\n                            sd_split = true;\n                        }\n                        var txt = ($($nestedCells[z2]).text()).toString().trim();\n                        if (sd_split) {\n                            var myRegexp = /([^\\s]+)\\s*\\(([^\\)]+)\\)/g;\n                            var match = myRegexp.exec(txt);\n                            if (match && match[1]) {\n                                nestedRowData.push(match[1]);\n                            } else {\n                                nestedRowData.push(txt);\n                            }\n                            if (match && match[2]) {\n                                nestedRowData.push(match[2]);\n                            } else {\n                                nestedRowData.push(\"\");\n                            }\n                        } else {\n                            nestedRowData.push(txt);\n                        }\n                    }\n                    nestedRows.push(nestedRowData);\n                }\n            } else if($nestedULList.length > 0) {\n                for (var ulI = 0; ulI < $nestedULList.length; ulI++) {\n                    var $nestedLiElements = $($nestedULList[ulI]).find(\"li\");\n                    for (var liI = 0; liI < $nestedLiElements.length; liI++) {\n                        var liText = ($($nestedLiElements[liI]).text()).toString().trim();\n                        rowData.push(liText);\n                    }\n                }\n            } else {\n                var txt = ($($cells[y]).text()).toString().trim();\n                if (sd_split) {\n                    var myRegexp = /([^\\s]+)\\s*\\(([^\\)]+)\\)/g;\n                    var match = myRegexp.exec(txt);\n                    if (match && match[1]) {\n                        rowData.push(match[1]);\n                    } else {\n                        rowData.push(txt);\n                    }\n                    if (match && match[2]) {\n                        rowData.push(match[2]);\n                    } else {\n                        rowData.push(\"\");\n                    }\n                } else {\n                    rowData.push(txt);\n                }\n\n                // colspan\n                if ($($cells[y]).attr(\"colspan\") > 1) {\n                    var extra_cols = $($cells[y]).attr(\"colspan\") - 1;\n                    extra_from_colspan += extra_cols;\n                    for (var z = 0; z < extra_cols; z++) {\n                        rowData.push(\"\");\n                    }\n                }\n                // extra columns from UL\n                if (ul_cols[y+extra_from_colspan]) {\n                    var extra_ul_cols = ul_cols[y+extra_from_colspan] - 1;\n                    for (var ulZ = 0; ulZ < extra_ul_cols; ulZ++) {\n                        rowData.push(\"\");\n                    }\n                }\n                // csvData += txt;\n            }\n        }\n        // csvData += '\\n';\n        if(nestedRows.length){\n            for(var m=0;m<nestedRows.length;m++){\n                tableData.push(nestedRows[m]);\n            }\n        }else {\n            tableData.push(rowData);\n        }\n    }\n\n    return tableData;\n};\nwindow.getCurrentReportFilterSettingsForDisplay = function(){\n    var filter_setting_list = [];\n    if ($(\"input[name='display_data']\").prop(\"type\") != \"hidden\") {\n        var check_val = $(\"input[name='display_data']:checked\").val();\n        var data_type_text = i18n_string(\"advanced_reports.data_type\", \"Data Type\");\n        if (check_val == \"mean\") {\n            filter_setting_list.push([data_type_text, i18n_string(\"advanced_reports.mean_score\", \"Mean Score\")]);\n        } else if (check_val == \"high_distress\") {\n            filter_setting_list.push([data_type_text, i18n_string(\"advanced_reports.percent_distress\", \"Percent Distress\")]);\n        } else if (check_val == \"assessments\") {\n            filter_setting_list.push([data_type_text, i18n_string(\"reports.assessments\", \"Assessments\")]);\n        } else if (check_val == \"resources\") {\n            filter_setting_list.push([data_type_text, i18n_string(\"advanced_reports.resources_accessed\", \"Resources Accessed\")]);\n        }\n    }\n    if ($(\"input[name='chart_type']:visible\").length > 1) {\n        var check_val = $(\"input[name='chart_type']:checked\").val();\n        var style_text = i18n_string(\"reports.chart_settings.style\", \"Style\");\n        if (check_val == \"line\") {\n            filter_setting_list.push([style_text, i18n_string(\"reports.chart_settings.line_chart\", \"Line Chart\")]);\n        } else if (check_val == \"pie\") {\n            filter_setting_list.push([style_text, i18n_string(\"reports.chart_settings.pie_chart\", \"Pie Chart\")]);\n        } else if (check_val == \"bar\") {\n            filter_setting_list.push([style_text, i18n_string(\"reports.chart_settings.bar_chart\", \"Bar Chart\")]);\n        }\n    }\n    if ($(\"input[name='date_range_select']\").length) {\n        var check_val = $(\"input[name='date_range_select']:checked\").val();\n        var period_text = i18n_string(\"reports.chart_settings.period\", \"Period\");\n        if (check_val == -1) {\n            filter_setting_list.push([period_text, i18n_string(\"reports.chart_settings.all_time\", \"All Time\")]);\n        } else if (check_val == 1 || check_val == 2 || check_val == 3 || check_val == 6 || check_val == 12) {\n            var month_key = check_val+\"_mo\";\n            filter_setting_list.push([period_text, i18n_string(\"reports.chart_settings.\"+month_key, check_val + \" Mo\")]);\n        } else if (check_val === 0 || check_val === \"0\") {\n            var formObj = $(\"#report-settings-panel-form\");\n            var date_format_options = {year: 'numeric', month: 'short', day: 'numeric'};\n            var dateParts = formObj.find(\"[name='start_date']\").val().split(/[- :]/);\n            var startDateObj = new Date(dateParts[0], dateParts[1] - 1, dateParts[2], 1, 1, 1);\n            var locale = \"en-US\";\n            if (window.i18n_locale) {\n                locale = window.i18n_locale;\n            }\n            var custom_date_range = startDateObj.toLocaleDateString(locale, date_format_options);\n            dateParts = formObj.find(\"[name='end_date']\").val().split(/[- :]/);\n            var endDateObj = new Date(dateParts[0], dateParts[1] - 1, dateParts[2], 1, 1, 1);\n            custom_date_range += \" - \" + endDateObj.toLocaleDateString(locale, date_format_options);\n            filter_setting_list.push([period_text, i18n_string(\"reports.chart_settings.custom\", \"Custom\")+\": \" + custom_date_range]);\n        }\n    }\n    if ($(\"input[name='compare']:visible\").length) {\n        var check_val = $(\"input[name='compare']:checked\").val();\n        var compare_to_text = i18n_string(\"reports.chart_settings.compare_to\", \"Compare To\");\n        if (check_val == \"none\") {\n            filter_setting_list.push([compare_to_text, i18n_string(\"reports.chart_settings.none\", \"None\")]);\n        } else if (check_val == \"period\") {\n            filter_setting_list.push([compare_to_text, i18n_string(\"reports.chart_settings.last_period\", \"Last Period\")]);\n        } else if (check_val == \"year\") {\n            filter_setting_list.push([compare_to_text, i18n_string(\"reports.chart_settings.last_year\", \"Last Year\")]);\n        } else if (check_val == \"custom\") {\n            var formObj = $(\"#report-settings-panel-form\");\n            var date_format_options = {year: 'numeric', month: 'short', day: 'numeric'};\n            var dateParts = formObj.find(\"[name='compare_start_date']\").val().split(/[- :]/);\n            var startDateObj = new Date(dateParts[0], dateParts[1] - 1, dateParts[2], 1, 1, 1);\n            var locale = \"en-US\";\n            if (window.i18n_locale) {\n                locale = window.i18n_locale;\n            }\n            var custom_date_range = startDateObj.toLocaleDateString(locale, date_format_options);\n            dateParts = formObj.find(\"[name='compare_end_date']\").val().split(/[- :]/);\n            var endDateObj = new Date(dateParts[0], dateParts[1] - 1, dateParts[2], 1, 1, 1);\n            custom_date_range += \" - \" + endDateObj.toLocaleDateString(locale, date_format_options);\n            filter_setting_list.push([compare_to_text, i18n_string(\"reports.chart_settings.custom\", \"Custom\")+\": \" + custom_date_range]);\n        }\n    }\n    if ($(\"input[name='duration']:visible\").length) {\n        var check_val = $(\"input[name='duration']:checked\").val();\n        var duration_text = i18n_string(\"reports.chart_settings.chart_layout_duration\", \"Chart Layout Duration\");\n        if (check_val == \"week\") {\n            filter_setting_list.push([duration_text, i18n_string(\"reports.chart_settings.week\", \"Week\")]);\n        } else if (check_val == \"month\") {\n            filter_setting_list.push([duration_text, i18n_string(\"reports.chart_settings.month\", \"Month\")]);\n        } else if (check_val == \"year\") {\n            filter_setting_list.push([duration_text, i18n_string(\"reports.chart_settings.year\", \"Year\")]);\n        }\n    }\n    if ($(\"select[name='assess_filter']:visible\").length) {\n        var check_val = $(\"select[name='assess_filter']\").val();\n        var type_of_assess_text = i18n_string(\"reports.chart_settings.type_of_assessment\", \"Type of Assessment\");\n        if (check_val == \"all\") {\n            filter_setting_list.push([type_of_assess_text, i18n_string(\"reports.chart_settings.all_assessments\", \"All Assessments\")]);\n        // } else if (check_val == \"reassess\") {\n        //     filter_setting_list.push([type_of_assess_text, \"Reassessments (all time)\"]);\n        } else if (check_val == \"first\") {\n            filter_setting_list.push([type_of_assess_text, i18n_string(\"reports.chart_settings.first_time_assessments_all_time\", \"First-time Assessments (all time)\")]);\n        } else if (check_val == \"first_in_period\") {\n            filter_setting_list.push([type_of_assess_text, i18n_string(\"reports.chart_settings.only_first_assessment_per_user_for_specified_time_\", \"Only first assessment per user (for specified time period)\")]);\n        } else if (check_val == \"last_in_period\") {\n            filter_setting_list.push([type_of_assess_text, i18n_string(\"reports.chart_settings.only_most_recent_assessment_per_user_for_specified\", \"Only most recent assessment per user (for specified time period)\")]);\n        }\n    }\n    if ($(\"select[name='national_data_type']:visible\").length) {\n        var check_val_text = $(\"select[name='national_data_type'] option:selected\").text();\n        if (check_val_text != \"\") {\n            filter_setting_list.push([i18n_string(\"reports.chart_settings.comparative_data\", \"Comparative Data\"), check_val_text]);\n        }\n    }\n    if ($(\"select[name='facility_grouping']:visible\").length) {\n        var check_val = $(\"select[name='facility_grouping']\").val();\n        var location_group_text = i18n_string(\"reports.chart_settings.location_grouping\", \"Location Grouping\");\n        if (check_val == \"individual\") {\n            filter_setting_list.push([location_group_text, i18n_string(\"reports.chart_settings.individual_bar_per_location\", \"Individual Bar Per Location\")]);\n        } else if (check_val == \"combine\") {\n            filter_setting_list.push([location_group_text, i18n_string(\"reports.chart_settings.combine_all_locations_into_single_bar\", \"Combine All Locations into Single Bar\")]);\n        }\n    }\n    if ($(\"#select2_locations\").length) {\n        var organization_list = [];\n        var option_data_list = $('#select2_locations').select2('data');\n        for (var z = 0; z < option_data_list.length; z++) {\n            organization_list.push(option_data_list[z].text);\n        }\n        filter_setting_list.push([i18n_string(\"reports.chart_settings.locations\", \"Locations\"), organization_list.join(\", \")]);\n    }\n    if ($(\"select[name='show_subspecialty']:visible\").length) {\n        var specialty_display_name = $(\"select[name='show_subspecialty'] > option:selected\").text();\n        if (specialty_display_name) {\n            // The dropdown's label depends on the question (\"Types of Specialties\" on the\n            // physician report, the question's own name on a report that only has it for a\n            // free-text \"Other\"), so read it from the page rather than assuming.\n            var specialty_label = $(\"label[for='show_subspecialty']\").text().trim() || i18n_string(\"reports.chart_settings.types_of_specialties\", \"Types of Specialties\");\n            filter_setting_list.push([specialty_label, specialty_display_name]);\n        }\n    }\n    if ($(\"[name='additional_grouping[]']:visible\").length) {\n        var additional_grouping_list = [];\n        $(\"[name='additional_grouping[]']\").each(function () {\n            if (this.checked) {\n                additional_grouping_list.push($(this).closest(\"label\").text());\n            }\n        });\n        if (additional_grouping_list.length > 0) {\n            filter_setting_list.push([i18n_string(\"reports.chart_settings.additional_filters\", \"Additional Filters\"), additional_grouping_list.join(\", \")]);\n        }\n    }\n    if ($(\".report-config-visual-option:visible\").length) {\n        $(\".report-config-visual-option:visible\").each(function () {\n            var name_text = $(this).find(\"strong\").text();\n            var selected_text = $(this).find(\"select > option:selected\").text();\n            if (name_text && selected_text) {\n                filter_setting_list.push([name_text, selected_text]);\n            }\n        });\n    }\n    if ($(\"input[name='wj_time_period']:visible\").length) {\n        var check_val = $(\"input[name='wj_time_period']:checked\").val();\n        if (check_val == \"campaigns\") {\n            filter_setting_list.push([\"Time Period\", \"Assessments\"]);\n        } else if (check_val == \"date-range\") {\n            filter_setting_list.push([\"Duration\", \"Date Range\"]);\n        } else if (check_val == \"interval\") {\n            filter_setting_list.push([\"Duration\", \"Interval\"]);\n        }\n    }\n\n    return filter_setting_list;\n}\n\n\nwindow.get_surveys = function(){\n\n    // Daily Total\n    $.get(\"home/live_count\", { kind: \"daily\" }).done(function(data){\n      $(\"#daily-total\").html(data.total);\n    });\n  \n    // Weekly Total\n    $.get(\"home/live_count\", { kind: \"weekly\" }).done(function(data){\n      $(\"#weekly-total\").html(data.total);\n    });\n  \n    // Overall Total\n    $.get(\"home/live_count\").done(function(data){\n      $(\"#overall-total\").html(data.total);\n    });\n  }\nwindow.init_mobile_app_soft_keyboard_helper = function() {\n    if ($(\"body.mobile-app\").length) {\n        $(document).off(\"focus\", \"input\").on(\"focus\", \"input\", function() {\n            $(\"body\").addClass(\"soft-keyboard-padding\");\n        }).off(\"blur\", \"input\").on(\"blur\", \"input\", function() {\n            $(\"body\").removeClass(\"soft-keyboard-padding\");\n        });\n    }\n}\nwindow.performed_google_charts_load = false;\nwindow.load_google_charts = function(){\n    if (!window.performed_google_charts_load) {\n        let lang = 'en';\n        if (window.i18n_locale) {\n            lang = window.i18n_locale;\n        }\n        google.charts.load('51', {'packages': ['corechart', 'line', 'bar', 'geochart'], 'language': lang});\n        google.charts.setOnLoadCallback(function(){\n            window.performed_google_charts_load = true;\n        });\n    }\n}\nwindow.add_google_chart_onload_callback = function(functionRef) {\n    if (window.performed_google_charts_load) {\n        functionRef();\n    } else {\n        google.charts.setOnLoadCallback(functionRef);\n    }\n}\nwindow.is_google_charts_already_loaded = function(){\n    return window.performed_google_charts_load;\n}\nwindow.slugify_string = function (str) {\n    return String(str)\n        .normalize('NFKD') // split accented characters into their base characters and diacritical marks\n        .replace(/[\\u0300-\\u036f]/g, '') // remove all the accents, which happen to be all in the \\u03xx UNICODE block.\n        .trim() // trim leading or trailing whitespace\n        .toLowerCase() // convert to lowercase\n        .replace(/[^a-z0-9 -]/g, '') // remove non-alphanumeric characters\n        .replace(/\\s+/g, '-') // replace spaces with hyphens\n        .replace(/-+/g, '-'); // remove consecutive hyphens\n}\nwindow.clean_invite_code_string = function (str) {\n    return String(str)\n        .normalize('NFKD') // split accented characters into their base characters and diacritical marks\n        .replace(/[\\u0300-\\u036f]/g, '') // remove all the accents, which happen to be all in the \\u03xx UNICODE block.\n        .trim() // trim leading or trailing whitespace\n        .replace(/[^a-zA-Z0-9 ]/g, '') // remove non-alphanumeric characters\n        .replace(/\\s+/g, ' '); // replace consectuive spaces\n}\nwindow.normalize_string = function (str) {\n    return String(str)\n        .normalize('NFKD') // split accented characters into their base characters and diacritical marks\n        .replace(/[\\u0300-\\u036f]/g, '') // remove all the accents, which happen to be all in the \\u03xx UNICODE block.\n        .trim() // trim leading or trailing whitespace\n        .toLowerCase() // convert to lowercase\n        .replace(/[^a-z0-9]/g, ''); // remove all non a-z0-9 characters\n}\nwindow.mobileCheck = function() {\n    let check = false;\n    // (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);\n    (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);\n    if (!check) {\n        check = $(\"body\").hasClass(\"mobile-app\");\n        if (!check) {\n            if (window.innerWidth && window.innerWidth <= 800) {\n                check = true;\n            }\n        }\n    }\n    return check;\n};\n\nwindow.i18n_string = function(translation_path_str, fallback_string) {\n    let return_string = fallback_string;\n    if (window.I18n !== undefined) {\n        let have_translation = window.resolve_object_by_path(I18n, translation_path_str);\n        if (have_translation !== undefined && have_translation != '') {\n            return_string = have_translation;\n        }\n    }\n    // console.log(\"i18n_string:return_string=\"+return_string);\n    return return_string;\n}\nwindow.resolve_object_by_path = function(obj, path) {\n    let path_parts = path.split('.');\n    for (let i = 0, n = path_parts.length; i < n; ++i) {\n        let k = path_parts[i];\n        if (k in obj) {\n            obj = obj[k];\n        } else {\n            return;\n        }\n    }\n    return obj;\n}\n\nwindow.recent_events = [];\nwindow.log_event = function(page, data) {\n    // Only send event every two minutes if duplicate event\n    let key = page+\"-\"+data;\n    let seconds = new Date().getTime() / 1000;\n    if (window.recent_events[key] && window.recent_events[key]+120 > seconds) {\n        return;\n    }\n    window.recent_events[key] = seconds;\n    $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/log-event',\n        data: {page: page, data: data},\n        type: 'POST',\n        success: function(e){\n        }\n    });\n}", "/*\nStimulus 3.0.1\nCopyright \u00A9 2021 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    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())\n            .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\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).sort().forEach(key => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName: matches[2],\n        eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n        identifier: matches[5],\n        methodName: matches[7]\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.split(\":\").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 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\nclass Action {\n    constructor(element, index, descriptor) {\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    }\n    static forToken(token) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n    toString() {\n        const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n    }\n    get params() {\n        if (this.eventTarget instanceof Element) {\n            return this.getParamsFromEventTargetAttributes(this.eventTarget);\n        }\n        else {\n            return {};\n        }\n    }\n    getParamsFromEventTargetAttributes(eventTarget) {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n        const attributes = Array.from(eventTarget.attributes);\n        attributes.forEach(({ name, value }) => {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                Object.assign(params, { [camelize(key)]: typecast(value) });\n            }\n        });\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n}\nconst defaultEventNames = {\n    \"a\": e => \"click\",\n    \"button\": e => \"click\",\n    \"form\": e => \"submit\",\n    \"details\": e => \"toggle\",\n    \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n    \"select\": e => \"change\",\n    \"textarea\": e => \"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        if (this.willBeInvokedByEvent(event)) {\n            this.invokeWithEvent(event);\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    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\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 (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(node, attributeName) {\n        const element = node;\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\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\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 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)\n            .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.trim().split(/\\s+/).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));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token);\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        this.invokeChangedCallbacksForDefaultValues();\n    }\n    start() {\n        this.stringMapObserver.start();\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            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    }\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\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        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        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\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.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    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\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\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) => [\n            ...Object.getOwnPropertyNames(object),\n            ...Object.getOwnPropertySymbols(object)\n        ];\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 () { this.a.call(this); };\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\n            || this.findTarget(targetName)\n            || 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 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    }\n    findElement(selector) {\n        return this.element.matches(selector)\n            ? this.element\n            : 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}\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        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    }\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    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};\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    }\n    static start(element, schema) {\n        const application = new Application(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        if (controllerConstructor.shouldLoad) {\n            this.load({ identifier, controllerConstructor });\n        }\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach(definition => this.router.loadDefinition(definition));\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 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);\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) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair);\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]) {\n    return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array: return \"array\";\n        case Boolean: return \"boolean\";\n        case Number: return \"number\";\n        case Object: return \"object\";\n        case String: return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\": return \"boolean\";\n        case \"number\": return \"number\";\n        case \"string\": 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(typeObject) {\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    if (typeFromObject) {\n        const defaultValueType = parseValueTypeDefault(typeObject.default);\n        if (typeFromObject !== defaultValueType) {\n            throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n        }\n        return typeFromObject;\n    }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n    const typeFromObject = parseValueTypeObject(typeDefinition);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    throw new Error(`Unknown value type \"${typeDefinition}\"`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(typeDefinition);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() { return defaultValueForDefinition(typeDefinition); },\n        get hasCustomDefaultValue() { return parseValueTypeDefault(typeDefinition) !== undefined; },\n        reader: readers[type],\n        writer: writers[type] || writers.default\n    };\n}\nconst defaultValuesByType = {\n    get array() { return []; },\n    boolean: false,\n    number: 0,\n    get object() { return {}; },\n    string: \"\"\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(\"Expected array\");\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || value == \"false\");\n    },\n    number(value) {\n        return Number(value);\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 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    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 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 = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus   = application\n\nexport { application }\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"account-launchpad\"\nexport default class extends Controller {\n  connect() {\n    setTimeout(function(){\n      $(\"#location-search\").focus();\n    },250);\n  }\n\n\n  locationSearch(event) {\n    var searchStr = event.target.value\n    var numShown = 0\n   \n    if(searchStr && searchStr.length > 0)\n    {\n      searchStr = searchStr.toLowerCase();\n      searchStr = searchStr.replace(/[^a-z0-9]+/g, '');\n      $(\".choose-location-search-item\").each(function(){\n        var this_searchable_val = $(this).data(\"searchstr\");\n        if(this_searchable_val)\n        {\n          console.log(this_searchable_val.indexOf(searchStr), searchStr)\n\n          if(this_searchable_val.indexOf(searchStr) != -1)\n          {\n            $(this).show();\n            numShown++;\n          }\n          else\n          {\n            $(this).hide();\n          }\n        }\n        else\n        {\n          $(this).hide();\n        }\n      });\n    }\n    else\n    {\n      // Show all\n      $(\".choose-location-search-item\").each(function(){\n        $(this).show();\n        numShown++;\n      });\n    }\n    if(numShown == 0)\n    {\n      $(\"#choose-location-no-items\").show();\n    }\n    else\n    {\n      $(\"#choose-location-no-items\").hide();\n    }\n    var menu_width = $(\"#search-location-menu-item\").parent().width();\n    $(\"#search-location-menu-item\").css(\"width\",menu_width+\"px\");\n  }\n\n  clearSearch(event){\n    event.preventDefault()\n    $(\"#location-search\").val(\"\")\n    \n    $(\".choose-location-search-item\").each(function(){\n      $(this).show();\n    })    \n  }  \n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"account-login-tracking\"\nexport default class extends Controller {\n  connect() {\n    this.initializeTableSearch()\n    this.resizeChartHolder()\n  }\n\n\n  initializeTableSearch() {\n    $.tablesorter.addParser({\n      id: 'data',\n      is: function(s, table, cell, $cell) {\n        return false;\n      },\n      format: function(s, table, cell, cellIndex) {\n        var $cell = $(cell);\n        if (cellIndex === 1) {\n          return $cell.attr('data-date') || s;\n        }\n        return s;\n      },\n      // flag for filter widget (true = ALWAYS search parsed values; false = search cell text)\n      parsed: true,\n      // set type, either numeric or text\n      type: 'numeric'\n    });\n\n    \n    $('#sortable-table').tablesorter({\n      headers: {\n        1: { sorter: 'data' }\n      }\n    });\n\n    $('#sortable-sub-account-table').tablesorter({\n      headers: {\n        2: { sorter: 'data' }\n      }\n    });\n\n    $('#sortable-table-engagement').tablesorter({\n      headers: {\n        1: { sorter: 'data' },\n        2: { sorter: 'data' },\n        3: { sorter: 'data' },\n      }\n    });\n  }\n\n  resetTable(event) {\n    event.preventDefault();\n    $('#search_filter').val('');\n    if($('#sortable-table').length){\n      $('#sortable-table tbody tr').each(function(){\n        $(this).show();\n      });\n    }\n\n    if($('#sortable-table-engagement').length){\n      $('#sortable-table-engagement tbody tr').each(function(){\n        $(this).show();\n      });\n    }\n  }\n\n  resizeChartHolder() {\n    if( $('#participation_chart_holder').length ){\n      if($('#participant_chart').width() > $('#content-body').width()) {\n        $('#participation_chart_holder').css('width', ($('#content-body').width() - $('#navigation-col').width()) + 'px');\n      } else {\n        $('#participation_chart_holder').css('width', '100%');\n      }\n    }\n  }\n\n  searchTable(event) {\n    var f = event.target.value;\n    if($('#sortable-table').length) {\n      $('#sortable-table tbody tr').each(function(){\n        if($(this).text().search(new RegExp(f, \"i\")) < 0){\n          $(this).fadeOut();\n        } else {\n          $(this).show();\n        }\n      });\n    }\n\n    if($('#sortable-table-engagement').length) {\n      $('#sortable-table-engagement tbody tr').each(function(){\n        if($(this).text().search(new RegExp(f, \"i\")) < 0){\n          $(this).fadeOut();\n        } else {\n          $(this).show();\n        }\n      });\n    }\n  }\n\n  searchTableSubmit(event) {\n    event.preventDefault()\n  }\n\n  setCustomerStatus(event) {\n    event.preventDefault()\n\n    // Clear existing selected options\n    $(\"#customer_status option:selected\").prop(\"selected\", false);\n    \n    $('.change-column-filter-modal-type-select-checkbox').each(function(i, obj){\n      if(obj.checked) {\n        // Check option if item is selected\n        $('#customer_status option[value=\"' + obj.value + '\"]').prop('selected', true);\n      }\n    })\n\n    $(\"#change-column-filter-modal\").modal(\"hide\");\n    $(\"#filter_customers\").submit()\n\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"account-retention\"\nexport default class extends Controller {\n\n\n  // buildTable() {\n  //   console.log(\"ARR - buildTable\")\n  //   $(\"#account_management_table\").bootstrapTable({\n  //     fixedColumns: true,\n  //     fixedNumber: 1,\n  //     stickyHeader: true\n  //   })\n\n  //   $('.bi-trash').addClass(\"far fa-trash\");\n  // }\n\n  /* **************************************************************************\n  function: configureSelect2Fields\n  * Internal triggered\n  * Sets up the select2 options\n  ************************************************************************** */\n  configureSelect2Fields(selector, options){\n    console.log(\"ARR: configureSelect2Fields\")\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n\n  connect() {\n    const controllerRef = this \n\n    // $(window).resize(function() {\n    //   if(this.resizeTO) clearTimeout(this.resizeTO);\n    //   this.resizeTO = setTimeout(function() {\n    //     $(this).trigger('resizeEnd');\n    //   }, 200);\n    // });\n\n    // $(window).bind('resizeEnd', function() {\n    //   controllerRef.buildTable()\n    //   controllerRef.resizeTable()\n    // });\n    // controllerRef.configureSelect2Fields('select.select2', {})\n    // controllerRef.buildTable()\n    // controllerRef.resizeTable()\n\n    // document.getElementById('update_chart_button').click()\n  }\n\n  // resizeTable(kind = '') {\n  //   console.log(\"ARR - resizeTable\")\n    \n  //   // Set the default width of the container\n  //   var width = $(window).width();\n  //   var w = 0;\n  //   // We subtract the width of the nav bar (80 or 250) plus the padding of 48 on each size (96)\n\n  //   if($('body').hasClass(\"nav-toggled\")) {\n  //       w = width - 80 - 96;\n  //   } else {\n  //       w = width - 250 - 96;\n  //   }\n\n  //   $('.bootstrap5').css(\"width\", w);\n  // }\n\n\n\n\n  updateSettings(e) {\n    console.log(\"ARR - updateSettings\")\n    var item = e.currentTarget\n\n    $.ajax({\n      type: \"PATCH\",\n      url: \"/account_retention/save\",\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      data: { customer: item.dataset.customer, year: item.dataset.year, retention: item.value },\n      success: function (data) {\n        if(data.status == 200)\n        {\n          $(\"#customer_\" + item.dataset.customer + \"_settings_retention_settings_\" + item.dataset.year ).parent().removeClass().addClass(data.retention.toLowerCase().replace(\" \", \"_\"))\n        }\n        else\n        {\n          alert(\"Error saving. Please try again.\");\n        }\n      }\n    });    \n  }\n\n  updateSubAccountSettings(e) {\n    console.log(\"ARR - updateSubAccountSettings\")\n    var item = e.currentTarget\n\n    $.ajax({\n      type: \"PATCH\",\n      url: \"/account_retention/save_sub_account\",\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      data: { customer_sub_account: item.dataset.customersubaccount, year: item.dataset.year, retention: item.value },\n      success: function (data) {\n        if(data.status == 200)\n        {\n          $(\"#customer_sub_account_\" + item.dataset.customersubaccount + \"_settings_retention_settings_\" + item.dataset.year ).parent().removeClass().addClass(data.retention.toLowerCase().replace(\" \", \"_\"))\n        }\n        else\n        {\n          alert(\"Error saving. Please try again.\");\n        }\n      }\n    });    \n  }\n\n  updateTable(e) {\n    console.log(\"ARR - updateTable\")\n\n    var year = document.getElementById('retention_year_select').value\n    if(year == 'all'){\n      $(\"#arr_changes\").bootstrapTable('showAllColumns')\n      document.getElementById('retention_status_select_holder').classList.add('hidden')\n      document.getElementById('retention_year_select').options.selectedIndex = 0\n    } else {\n      document.querySelectorAll('th[data-field*=\"year_\"]').forEach((obj) =>{\n        if(obj.dataset.field != year) {\n          $(\"#arr_changes\").bootstrapTable('hideColumn', obj.dataset.field)\n        }\n      });\n\n      document.getElementById('retention_status_select_holder').classList.remove('hidden')\n    }\n\n    var status = $(\"#retention_status_select :selected\").map(function(i, el) {\n      return $(el).val()\n    }).get();\n\n    if(status.length == 0 || year == 'all') {\n      document.querySelectorAll('tr[data-index] td:last-child').forEach((obj) =>{\n        obj.parentElement.classList.remove('hidden')\n      });\n    } else {\n      document.querySelectorAll('tr[data-index] td:last-child').forEach((obj) =>{\n        obj.parentElement.classList.add('hidden')\n        status.forEach((cssClass) => {\n          if(obj.classList.contains(cssClass.toLowerCase().replace(\" \", \"_\"))) {\n            obj.parentElement.classList.remove('hidden')\n          }\n        })\n      });\n    }\n\n\n\n    $.ajax({\n      type: \"PATCH\",\n      url: \"/account_retention/update_user_settings\",\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      data: { retention_status: status, retention_year: year },\n      success: function (data) {\n        if(data.status != 200){\n          alert(\"Error saving. Please try again.\");          \n        }\n      }\n    }); \n\n    this.resizeTable()\n  }\n\n  \n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"account-search\"\nexport default class extends Controller {\n  connect() {\n  }\n\n\n  confirmUserBack(e) {\n    e.preventDefault();\n    $(\"#convertUserConfirmModalBackButton\").hide();\n    $(\"#convertUserConfirmModalConfirmFinalButton\").hide();\n    $(\"#convertUserConfirmModalStep2\").html(\"\").hide();\n\n    $(\"#convertUserConfirmModalStep1\").show();\n    $(\"#convertUserConfirmModalConfirmButton\").show();\n  }\n\n  confirmUserConvert(e) {\n    e.preventDefault()\n    var display_list = [];\n    $(\"#customer_sub_account_id > option:selected\").each(function(){\n      display_list.push($(this).text());\n    });\n    var user_email_message = '';\n    var user_email_val = $(\"#email_for_user_account\").val();\n    if(user_email_val && user_email_val.indexOf(\"@\") != -1){\n      user_email_message = '<strong>The old user account will be switched to the email: '+user_email_val+'</strong>';\n    }\n    var confirmation_message = '<div class=\"alert alert-danger\"><strong>Confirm Admin Conversion</strong><br />You will be converting this user to be an administrator for these accounts: <ul><li>'+display_list.join(\"</li><li>\")+'</li></ul>'+user_email_message+'</div>';\n    $(\"#convertUserConfirmModalStep2\").html(confirmation_message);\n    $(\"#convertUserConfirmModalStep1\").hide();\n    $(\"#convertUserConfirmModalConfirmButton\").hide();\n\n    $(\"#convertUserConfirmModalBackButton\").show();\n    $(\"#convertUserConfirmModalConfirmFinalButton\").show();\n    $(\"#convertUserConfirmModalStep2\").show();\n  }\n\n  delete(e) {\n    var item = e.currentTarget\n\n    if($(\"#deleteUserConfirmModalConfirmCheckbox\").is(\":checked\"))\n    {\n      $('#delete-user-button').html('<em class=\"fa fa-spin fa-spinner\"></em> Deleting User');\n\n      $.ajax({\n        type: \"DELETE\",\n        url: \"/users/\" + item.dataset.id + \"/delete\",\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        success: function (data) {\n          if(data.status == 200)\n          {\n            $(\"#account-search-item-row-\"+item.dataset.id).hide();\n            $(\"#system_modal_popup\").modal(\"hide\");\n          }\n          else\n          {\n            $('#delete-user-button').html('Confirm User Delete')\n            alert(data.message);\n          }\n        }\n      });\n    }\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"validate-form\"\nexport default class extends Controller {\n  connect() {\n    // console.log(\"Validate Form Controller:connect\");\n    this.element.addEventListener('turbo:submit-start', this.validateForm);\n    this.element.addEventListener('submit', this.validateForm);\n    this.element.noValidate = false;\n    // change event listener\n    this.element.addEventListener('change', this.checkChangedInputs);\n  }\n\n  checkChangedInputs(event){\n    if (event && event.target) {\n      if (event.target.type == 'radio') {\n        let oneChecked = false;\n        if (event.target.name) {\n          let radioFields = document.getElementsByName(event.target.name);\n          radioFields.forEach((rField) => {\n            if (rField.checked) {\n              oneChecked = true;\n            }\n          });\n        }\n        let parentContainer = event.target.closest(\".radio-group\")\n        if (oneChecked && parentContainer && parentContainer.classList && parentContainer.classList.contains('is-invalid') && event.target.classList && (event.target.classList.contains('required') || event.target.required)) {\n          parentContainer.classList.remove('is-invalid');\n        }\n      } else {\n        if (event.target.classList && event.target.classList.contains('is-invalid') && (event.target.classList.contains('required') || event.target.required)) {\n          if ($(event.target).val()) {\n            event.target.classList.remove('is-invalid');\n          }\n        }\n      }\n    }\n  }\n\n  validateForm(event, container = undefined){\n    let formElement = event.target;\n    let alertContainerId = 'message-container';\n    console.dir(formElement.dataset);\n    if (formElement.dataset && formElement.dataset.alert_container) {\n      alertContainerId =  formElement.dataset.alert_container;\n    } else if (formElement.dataset && formElement.dataset.alertContainer) {\n      alertContainerId =  formElement.dataset.alertContainer;\n    } else if(container !== undefined) {\n      alertContainerId = container\n    }\n    if (formElement.dataset && formElement.dataset.disableSubmitButtons) {\n      let disabled_submit_button_list = formElement.querySelectorAll('button[type=\"submit\"], input[type=\"submit\"]');\n      disabled_submit_button_list.forEach((button) => {\n        button.disabled = true;\n      });\n    }\n    // console.log(\"Validate Form Controller:validateForm\");\n\n    let isValid = true;\n\n    let requiredFieldSelectors = 'textarea:required, input:required, select:required, textarea.required, input.required, select.required';\n    let requiredFields = formElement.querySelectorAll(requiredFieldSelectors);\n\n    let errors = [];\n    let requiredMissingWithoutError = 0;\n    requiredFields.forEach((field) => {\n      if(field.type == 'radio') {\n        let oneChecked = false;\n        if (!field.disabled && isVisible(field) && field.name) {\n          let radioFields = document.getElementsByName(field.name);\n          radioFields.forEach((rField) => {\n            if (rField.checked) {\n              oneChecked = true;\n            }\n          });\n        }\n        let parentContainer = field.closest(\".radio-group\")\n        if (oneChecked) {\n          if (parentContainer) {\n            parentContainer.classList.remove('is-invalid');\n          }\n        } else {\n          requiredMissingWithoutError++;\n          if (parentContainer) {\n            parentContainer.classList.add('is-invalid');\n          }\n          isValid = false;\n        }\n      } else {\n        if (!field.disabled && !field.value.trim() && isVisible(field)) {\n          // field.focus();\n          if (field.dataset && field.dataset.error) {\n            errors.push(field.dataset.error)\n          } else {\n            requiredMissingWithoutError++;\n          }\n          field.classList.add('is-invalid');\n          isValid = false;\n        } else {\n          field.classList.remove('is-invalid');\n        }\n      }\n    });\n\n    let conditionalRequires = 'textarea.conditional-required, input.conditional-required, select.conditional-required';\n    let conditionalRequiredFields = formElement.querySelectorAll(conditionalRequires);\n\n    conditionalRequiredFields.forEach((field) => {\n      if (field.dataset && (field.dataset.conditionalId || field.dataset.conditional_id)) {\n        let conditionalField = document.getElementById(field.dataset.conditionalId ?? field.dataset.conditional_id);\n\n        if (conditionalField && !conditionalField.disabled && conditionalField.value.trim() && isVisible(conditionalField)) {\n          if(field.type == 'radio') {\n            let oneChecked = false;\n            if (!field.disabled && isVisible(field) && field.name) {\n              let radioFields = document.getElementsByName(field.name);\n              radioFields.forEach((rField) => {\n                if (rField.checked) {\n                  oneChecked = true;\n                }\n              });\n            }\n            let parentContainer = field.closest(\".radio-group\")\n            if (oneChecked) {\n              if (parentContainer) {\n                parentContainer.classList.remove('is-invalid');\n              }\n            } else {\n              requiredMissingWithoutError++;\n              if (parentContainer) {\n                parentContainer.classList.add('is-invalid');\n              }\n              isValid = false;\n            }\n          } else {\n            if (!field.disabled && !field.value.trim() && isVisible(field)) {\n              if (field.dataset && field.dataset.error) {\n                errors.push(field.dataset.error)\n              } else {\n                requiredMissingWithoutError++;\n              }\n              field.classList.add('is-invalid');\n              isValid = false;\n            } else {\n              field.classList.remove('is-invalid');\n            }\n          }\n        }\n      }\n    });\n    formElement.querySelectorAll(\"input.confirm-password\").forEach((field) => {\n      if (field.dataset && (field.dataset.conditionalId || field.dataset.conditional_id)) {\n        let conditionalField = document.getElementById(field.dataset.conditionalId ?? field.dataset.conditional_id);\n\n        if (conditionalField && !conditionalField.disabled && conditionalField.value.trim() && isVisible(conditionalField)) {\n          if (!field.disabled && field.value != conditionalField.value && isVisible(field)) {\n            errors.push(i18n_string(\"users.account.error_password_confirmation_does_not_match\",\"Password confirmation does not match.\"));\n            field.classList.add('is-invalid');\n            isValid = false;\n          } else {\n            field.classList.remove('is-invalid');\n          }\n        }\n      }\n    });\n\n\n    if (!isValid){\n      event.preventDefault();\n      // Re-enabled submit buttons\n      if (formElement.dataset && formElement.dataset.disableSubmitButtons) {\n        let disabled_submit_button_list = formElement.querySelectorAll('button[type=\"submit\"], input[type=\"submit\"]');\n        disabled_submit_button_list.forEach((button) => {\n          button.disabled = false;\n        });\n      }\n      if (errors.length == 0 || requiredMissingWithoutError > 0) {\n        errors.unshift(i18n_string(\"general.make_sure_all_required_fields_are_completed\",\"Make sure all required fields are completed.\"));\n      }\n      doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>', alertContainerId);\n    }\n\n    return isValid;\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport ValidateFormController from './validate_form_controller.js'\n\n// Connects to data-controller=\"account-setup\"\n\nvar success = false;\n\nexport default class extends ValidateFormController {\n  connect() {\n    setupTermsScrollBox();\n    const reset_form = this.reset_form\n\n    if($(\"#edit_user_form\").length){\n      this.element.addEventListener('turbo:submit-start', this.accountUpdateValidateForm.bind(this));\n      this.element.addEventListener('submit', this.accountUpdateValidateForm.bind(this));\n    } else {\n      this.element.addEventListener('turbo:submit-start', this.accountSetupValidateForm.bind(this));\n      this.element.addEventListener('submit', this.accountSetupValidateForm.bind(this));\n      this.setupRecaptcha();\n    }\n\n    this.element.noValidate = false;\n    this.element.addEventListener('change', this.checkChangedInputs.bind(this));\n\n    if($(this.element).data(\"demoFormFill\") === true) {\n      setTimeout(function(){\n        $(\"#checking_email_spinner\").removeClass('hidden').addClass(\"alert-success\").html('<em class=\"fa fa-check-circle\"></em> '+i18n_string(\"home.account_setup.this_email_is_good\",\"This email is good\")).show();\n        $(\"#user_email\").data(\"email_valid\", \"yes\");\n      },50);\n      setTimeout(function(){\n        let user_pass_field = document.getElementById('user_password');\n        user_pass_field.dispatchEvent(new Event('change'));\n        let user_confirm_pass_field = document.getElementById('user_password_confirmation');\n        user_confirm_pass_field.dispatchEvent(new Event('change'));\n      },150);\n\n    } else {\n      if ($(\"#user_email\").length && $(\"#user_email\").val() != \"\") {\n        setTimeout(function(){\n          let user_email_field = document.getElementById('user_email');\n          var event = new Event('input', {\n            bubbles: true,\n            cancelable: true,\n          });\n          user_email_field.dispatchEvent(event);\n        }, 100);\n      }\n    }\n\n    this.emailDebouncer = basicDebouncer( 250 );\n\n  }\n\n  // -------------------------------------------------------------- //\n  // ---------------------- EMAIL ADDRESS ------------------------- //\n  // -------------------------------------------------------------- //\n\n  verify_email(event) {\n    this.emailDebouncer(function(){\n      var email_val = event.target.value;\n      //console.log(email_val);\n      if(email_val != undefined && email_val.trim() != \"\" && email_val.indexOf(\"@\") != -1)\n      {\n        $(\"#account_setup_email_error_wrap\").hide().find(\".alert\").html(\"\");\n        $(\"#checking_email_spinner\").removeClass(\"alert-success hidden\").addClass(\"alert-warning\").html('<em class=\"fal fa-circle-notch fa-spin\"></em> '+i18n_string(\"home.account_setup.checking_email\",\"Checking email\")).show();\n        // Validate that email is not used\n        var send_data = {\n          email: email_val,\n          user_kind: $(\"#user_kind\").val()\n        };\n        if($(\"#associate_user_auth\").length && (document.disable_associate_existing_account == undefined || !document.disable_associate_existing_account))\n        {\n          send_data.associate_message = \"yes\";\n        }\n        $(\"#user_email\").data(\"email_valid\",\"no\");\n        $.ajax({\n          url: '/users/check_email_avail',\n          data: send_data,\n          success: function(data) {\n            if(data.available && data.available == \"no\")\n            {\n              $(\"#checking_email_spinner\").hide();\n              $(\"#account_setup_email_error_wrap\").show().find(\".alert\").html(data.message);\n              if(!$(\"#account_setup_email_error_wrap\").elementVisible(50))\n              {\n                $(\"#user_email\").focus();\n              }\n            }\n            else\n            {\n              $(\"#checking_email_spinner\").removeClass(\"alert-warning hidden\").addClass(\"alert-success\").html('<em class=\"fa fa-check-circle\"></em> '+i18n_string(\"home.account_setup.this_email_is_good\",\"This email is good\")).show();\n              $(\"#user_email\").data(\"email_valid\",\"yes\");\n            }\n          },\n          type: 'POST'\n        });\n      } else if(email_val == undefined || email_val.trim() == \"\") {\n        $(\"#account_setup_email_error_wrap\").hide().find(\".alert\").html(\"\");\n      }\n    });\n  }\n\n  verify_email_update(event) {\n    this.emailDebouncer(function(){\n      var email_val = event.target.value;\n      var current_email = $('#current_email').val()\n      console.log(email_val);\n      if(email_val != \"\" && email_val.indexOf(\"@\") != -1 && email_val != current_email )\n      {\n        $(\"#account_setup_email_error_wrap\").hide().find(\".alert\").html(\"\");\n        $(\"#checking_email_spinner\").removeClass(\"alert-success hidden\").addClass(\"alert-warning\").html('<em class=\"fal fa-circle-notch fa-spin\"></em> '+i18n_string(\"home.account_setup.checking_email\",\"Checking email\")).show();\n        // Validate that email is not used\n        var send_data = {\n          email: email_val,\n          user_kind: $(\"#user_kind\").val()\n        };\n        if($(\"#associate_user_auth\").length && (document.disable_associate_existing_account == undefined || !document.disable_associate_existing_account))\n        {\n          send_data.associate_message = \"yes\";\n        }\n        $(\"#user_email\").data(\"email_valid\",\"no\");\n        $.ajax({\n          url: '/users/check_email_avail',\n          data: send_data,\n          success: function(data) {\n            if(data.available && data.available == \"no\")\n            {\n              $(\"#checking_email_spinner\").hide();\n              $(\"#account_setup_email_error_wrap\").show().find(\".alert\").html(data.message);\n              if(!$(\"#account_setup_email_error_wrap\").elementVisible(50))\n              {\n                $(\"#user_email\").focus();\n              }\n            }\n            else\n            {\n              $(\"#checking_email_spinner\").removeClass(\"alert-warning hidden\").addClass(\"alert-success\").html('<em class=\"fa fa-check-circle\"></em> '+i18n_string(\"home.account_setup.this_email_is_good\",\"This email is good\")).show();\n              $(\"#user_email\").data(\"email_valid\",\"yes\");\n            }\n          },\n          type: 'POST'\n        });\n      } else {\n        $(\"#checking_email_spinner\").hide()\n        $(\"#user_email\").data(\"email_valid\",\"yes\")\n        $(\"#account_setup_email_error_wrap\").hide()\n      }\n    });\n  }\n\n  // -------------------------------------------------------------- //\n  // ------------------------ PASSWORDS --------------------------- //\n  // -------------------------------------------------------------- //\n  verify_password(event) {\n    if (typeof NBP !== 'undefined') {\n      var p = event.target.value;\n  \n      var commonPassword = NBP.isCommonPassword(p);\n  \n      if (!commonPassword && p.length >= 8) {\n        $(\"#password_requirement_complex\").html('<em class=\"fa fa-fw fa-check text-success\"></em>');\n      } else {\n        $(\"#password_requirement_complex\").html('<em class=\"fa fa-fw fa-times text-danger\"></em>');\n      }\n      if (p.length >= 8) {\n        $(\"#password_requirement_length\").html('<em class=\"fa fa-fw fa-check text-success\"></em>');\n      } else {\n        $(\"#password_requirement_length\").html('<em class=\"fa fa-fw fa-times text-danger\"></em>');\n      }\n  \n      // password_requirement_length/password_requirement_complex\n      if (commonPassword) {\n        $('#password_valid').hide();\n        $('#password_fail').show();\n        success = false;\n      } else {\n        if (p.length >= 8) {\n          $('#password_valid').show();\n          $('#password_fail').hide();\n          success = true;\n        } else {\n          $('#password_valid').hide();\n          $('#password_fail').show();\n          success = false;\n        }\n      }\n    }\n  }\n\n  verify_confirm_password(event) {\n    var p = event.target.value;\n\n    if(p == $('#user_password').val() && p.length >= 8 && !NBP.isCommonPassword( p )) {\n      $('#password_confirm_valid').show();\n      $('#password_confirm_fail').hide();\n      success = true;\n    } else {\n      $('#password_confirm_valid').hide();\n      $('#password_confirm_fail').show();\n      success = false;\n    }\n  }\n\n  accountSetupValidateForm(event) {\n    if($(event.target).attr(\"submit_pressed\") == \"yes\") {\n      event.preventDefault();\n      return false;\n    }\n    if($(event.target).data(\"demoFormFill\") === true) {\n      this.demoAutoFillInRegistrationFields();\n    }\n    let passedStandardValidation = super.validateForm(event);\n    if (passedStandardValidation) {\n      let passOtherValidation = true;\n      let errors = [];\n      if ($(\"#user_email\").data(\"email_valid\") != \"yes\") {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.please_enter_a_valid_email\",\"Please enter a valid email.\"));\n      }\n      if (!$(\"#agree_terms\").prop(\"checked\")) {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.please_finish_reading_the_eula\",\"Please finish reading the End User License Agreement before continuing.\"));\n      }\n      if ($(\"#user_sms_phone\").val() != \"\" && $(\"#invalid_phone\").length) {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.the_phone_number_is_not_available\",\"The entered phone number is used by another account.\"));\n      }\n      if (!document.password_ok) {\n        passOtherValidation = false;\n        errors.push(\"The password does not meet the requirements.\");\n      }\n      if (!document.password_confirm_ok) {\n        // Let's recheck it now.  Password generators/autofillers may not trigger the change\n        // -- Send Change event\n        var user_password_field_event = new Event('change', {\n          bubbles: true,\n          cancelable: true,\n        });\n        var user_password_confirm_field = document.getElementById(\"user_password_confirmation\");\n        var user_password_field = document.getElementById(\"user_password\");\n        user_password_confirm_field.dispatchEvent(user_password_field_event);\n        // -- Also manually recheck since the event above is not synchronous\n        if (user_password_confirm_field.value == \"\" || user_password_confirm_field.value != user_password_field.value) {\n          passOtherValidation = false;\n          errors.push(\"The password confirmation does not match.\");\n        }\n      }\n      if (passOtherValidation) {\n        // Everything the user typed is valid. If the page carries an invisible reCAPTCHA and\n        // we do not have a token yet, run the challenge now; its callback re-submits the form\n        // and this function then falls through to the real submit.\n        if (this.recaptchaRequired() && !this.recaptchaToken) {\n          event.preventDefault();\n          this.executeRecaptcha();\n          return false;\n        }\n        $(event.target).attr(\"submit_pressed\", \"yes\");\n        return true;\n      } else {\n        doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>');\n      }\n    }\n    event.preventDefault();\n    return false;\n  }\n\n  // \u2500\u2500 Invisible reCAPTCHA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  //\n  // The server renders <div id=\"signup-recaptcha\" data-site-key=\"...\"> outside the form, at the\n  // end of the page, only when signup verification is on (RecaptchaVerifier.signup_enabled?),\n  // plus a hidden g-recaptcha-response field inside the form. Google's api.js is loaded with\n  // render=explicit, so nothing appears until we render the widget into that element. The widget\n  // is invisible: grecaptcha.execute() runs the challenge (usually silently, sometimes with a\n  // puzzle) and the callback hands us a token, which we copy into the hidden field so it travels\n  // with the form post. The container lives outside the columns because Google's fixed-position\n  // badge has no z-index and was painting underneath the right-hand column's card.\n\n  recaptchaContainer() {\n    return document.getElementById('signup-recaptcha');\n  }\n\n  recaptchaResponseField() {\n    return this.element.querySelector('#signup-recaptcha-response');\n  }\n\n  recaptchaRequired() {\n    return this.recaptchaContainer() !== null;\n  }\n\n  setupRecaptcha() {\n    const container = this.recaptchaContainer();\n    if (!container) {\n      return;\n    }\n    this.recaptchaToken = null;\n    this.recaptchaWidgetId = null;\n    this.recaptchaFailed = false;\n    this.recaptchaTimer = null;\n\n    // api.js is loaded async; wait for it rather than relying on a global onload callback.\n    let attempts = 0;\n    const render = () => {\n      if (window.grecaptcha && typeof window.grecaptcha.render === 'function') {\n        this.recaptchaWidgetId = window.grecaptcha.render(container, {\n          sitekey: container.dataset.siteKey,\n          size: 'invisible',\n          badge: 'bottomright',\n          callback: (token) => { this.recaptchaCompleted(token); },\n          'expired-callback': () => { this.recaptchaToken = null; },\n          // Fires when Google cannot run the check at all: network trouble, or the site key\n          // rejecting this domain (localhost is not enabled on a v2 key by default).\n          'error-callback': () => { this.recaptchaToken = null; this.recaptchaFailed = true; this.recaptchaUnavailable(); }\n        });\n        return;\n      }\n      attempts += 1;\n      if (attempts < 100) {\n        setTimeout(render, 100);\n      }\n    };\n    render();\n  }\n\n  executeRecaptcha() {\n    if (this.recaptchaWidgetId === null || !window.grecaptcha || this.recaptchaFailed) {\n      // api.js never loaded (blocked network, extension, Google down) or the widget reported\n      // an error. Without a token the server will refuse the signup, so say so instead of\n      // failing silently.\n      this.recaptchaUnavailable();\n      return;\n    }\n    // Google gives the challenge 30 seconds (execute-ms); if no token has arrived by then the\n    // user is otherwise left with a button that appears to do nothing.\n    clearTimeout(this.recaptchaTimer);\n    this.recaptchaTimer = setTimeout(() => {\n      if (!this.recaptchaToken) {\n        this.recaptchaUnavailable();\n      }\n    }, 31000);\n    window.grecaptcha.execute(this.recaptchaWidgetId);\n  }\n\n  recaptchaUnavailable() {\n    clearTimeout(this.recaptchaTimer);\n    doJsAlert('<div class=\"alert alert-danger\">' + escapeHtml(i18n_string(\"home.account_setup.captcha_could_not_load\", \"The security check could not be loaded. Please reload the page and try again.\")) + '</div>');\n  }\n\n  recaptchaCompleted(token) {\n    clearTimeout(this.recaptchaTimer);\n    this.recaptchaToken = token;\n    const responseField = this.recaptchaResponseField();\n    if (responseField) {\n      responseField.value = token;\n    }\n    // Re-enter the normal submit flow; accountSetupValidateForm now finds the token and lets\n    // the form go through.\n    this.element.requestSubmit();\n  }\n\n  accountUpdateValidateForm(event) {\n    if($(event.target).attr(\"submit_pressed\") == \"yes\") {\n      return false;\n    }\n    let passedStandardValidation = super.validateForm(event);\n    if (passedStandardValidation) {\n      let passOtherValidation = true;\n      let errors = [];\n      if ($(\"#user_email\").data(\"email_valid\") != \"yes\" && $(\"#user_email\").val() != $(\"#current_email\").val()) {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.please_enter_a_valid_email\",\"Please enter a valid email.\"));\n      }\n      if ($(\"#user_sms_phone\").val() != \"\" && $(\"#invalid_phone\").length) {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.the_phone_number_is_not_available\",\"The entered phone number is used by another account.\"));\n      }\n      if (passOtherValidation) {\n        $(event.target).attr(\"submit_pressed\", \"yes\");\n        return true;\n      } else {\n        doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>');\n      }\n    }\n    event.preventDefault();\n    return false;\n  }\n\n  associate_organization_modal(event) {\n    event.preventDefault();\n\n    if( $(\"#user_email\").val() ){\n      $(\"#verify_modal_phone\").val(\"\");\n      $(\"#verify_modal_kind\").val(\"email\");\n      $(\"#verify_modal_email\").val($(\"#user_email\").val()).prop(\"readonly\",true);\n      $(\"#associate-verify-login-modal\").modal(\"show\");\n\n      this.associate_organization_modal_setup_modal_buttons();\n    }\n  }\n\n  associate_organization_modal_phone(event) {\n    event.preventDefault();\n    let phone_code = $('.selected-dial-code').html();\n    let phone_num = $(\"#user_sms_phone\").val();\n    phone_code = phone_code.replace(/\\D/g, '');\n    phone_num = phone_num.replace(/\\D/g, '');\n    let full_phone = phone_code + phone_num;\n\n    if( full_phone.length ){\n      $(\"#verify_modal_email\").val(\"\");\n      $(\"#verify_modal_kind\").val(\"phone\");\n      $(\"#verify_modal_phone\").val(full_phone).prop(\"readonly\",true);\n      $(\"#associate-verify-login-modal\").modal(\"show\");\n\n      this.associate_organization_modal_setup_modal_buttons();\n    }\n  }\n\n  associate_organization_modal_setup_modal_buttons() {\n    let controllerRef = this;\n    $(\".associate-mfa-hide\").show();\n    $(\"#verify_password\").val(\"\");\n    $(\"#associate_mfa_verify_frame\").html(\"\");\n    $(\"#associate-verify-login-process-button\").prop(\"disabled\",false);\n    if (!$(\"#associate-verify-login-process-button\").data(\"click_event_added\")) {\n      $(\"#associate-verify-login-process-button\").data(\"click_event_added\", 1);\n      $(\"#associate-verify-login-process-button\").on(\"click\", function(e){\n        e.preventDefault();\n        var password = $(\"#verify_password\").val();\n        if(password != \"\")\n        {\n          $(\"#associate-verify-login-process-button\").prop(\"disabled\",true);\n          $(\"#processing_verify_submit\").show();\n          $(\"#verify_error_message\").hide();\n          let email = $(\"#verify_modal_email\").val();\n          let phone = $(\"#verify_modal_phone\").val();\n          let kind = $(\"#verify_modal_kind\").val();\n          let post_url = $(\"#associate-verify-login-modal-url\").val();\n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            url: post_url,\n            data: {\n              email: email,\n              phone: phone,\n              kind: kind,\n              password: password\n            },\n            success: function(dataObj) {\n              if (typeof dataObj === \"string\") {\n                dataObj = jQuery.parseJSON(dataObj);\n              }\n              if(dataObj && dataObj.auth) {\n                controllerRef.processSuccessfulAssociateAccount(dataObj);\n              } else if (dataObj && dataObj.mfa_verify_url) {\n                // Clean up modal\n                $(\".associate-mfa-hide\").hide();\n                $(\"#processing_verify_submit\").hide();\n                // Load turbo-frame for 2-step verification stuff\n                const frame = document.getElementById('associate_mfa_verify_frame');\n                frame.src=dataObj.mfa_verify_url;\n                frame.reload();\n              }\n              else\n              {\n                $(\"#verify_password\").val(\"\");\n                if (dataObj && dataObj.error) {\n                  $(\"#verify_error_message\").html(dataObj.error);\n                }\n                $(\"#verify_error_message\").show();\n                $(\"#associate-verify-login-process-button\").prop(\"disabled\",false);\n                $(\"#processing_verify_submit\").hide();\n              }\n            },\n            type: 'POST'\n          });\n        }\n        else\n        {\n          $(\"#verify_password\").focus();\n        }\n      });\n      $(document).on('keypress',function(e) {\n        if(e.which == 13) {\n          if ($(\"#verify_password\").is(\":focus\")) {\n            $(\"#associate-verify-login-process-button\").click();\n          }\n        }\n      });\n\n      document.addEventListener('submit', function(e){\n        let $form = $(e.target);\n        if ($form.attr('id') != 'associate_mfa_form') {\n          return;\n        }\n        e.preventDefault();\n\n        $(\"#verify_error_message\").hide();\n        let code = $form.find(\"[name='code']\").val();\n        if (code && code != \"\") {\n          let kind = $(\"#verify_modal_kind\").val();\n          $.ajax({\n            headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n            url: $form.attr('action'),\n            data: {\n              code: code,\n              kind: kind\n            },\n            success: function (dataObj) {\n              if (typeof dataObj === \"string\") {\n                dataObj = jQuery.parseJSON(dataObj);\n              }\n              if (dataObj && dataObj.auth) {\n                controllerRef.processSuccessfulAssociateAccount(dataObj);\n              } else {\n                if (dataObj && dataObj.error) {\n                  $(\"#verify_error_message\").html(dataObj.error);\n                }\n                $(\"#verify_error_message\").show();\n              }\n            },\n            type: 'POST'\n          });\n        }\n      });\n\n    }\n  }\n\n  demoAutoFillInRegistrationFields() {\n    $(\"select:visible\").each(function(){\n      if ($(this).val() == \"\" || $(this).val() == \"0\" || $(this).val() == \"0000\" || $(this).val() == 0) {\n        var $options = $(this).find('option');\n        var random = ~~(Math.random() * ($options.length-1))+1;\n\n        $options.eq(random).prop('selected', true);\n        //$(this).change();\n        this.dispatchEvent(new Event('change'));\n      }\n    });\n  }\n\n  // 2FA\n  disable2fa(event) {\n    event.preventDefault();\n    this.reset_form()\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: '/users/disable_2fa',\n      type: 'post',\n      success: function(e) {\n        if(e.status == 200) {\n          $('#button-2fa-holder').html('<p><button class=\"btn btn-success text-white\" id=\"enable_2fa_button\" data-action=\"click->account-setup-verification#enable2fa\">Enable 2-Factor Authentication</button></p>');\n          $('#sms_phone_label').addClass('hidden');\n          $('#user_sms_phone').removeAttr(\"disabled\");\n        }\n      }\n    });\n  }\n\n  enable2fa(event) {\n    event.preventDefault();\n    this.reset_form()\n\n    $('#enable-2fa-modal').modal('show');\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: '/users/enable_2fa',\n      type: 'post',\n      success: function(e) {\n        if(e.status == 500) {\n          $('#enable-2fa-modal .modal-body').prepend(\"<p class='text-danger' id='error-message-2fa'>\" + e.message + \"</p>\")\n        }\n      }\n    });\n  }\n\n  processSuccessfulAssociateAccount(dataObj) {\n    // Set PW flags since already authenticated, and password is now hidden\n    document.password_ok = true;\n    document.password_confirm_ok = true;\n    // Make these fields check/marked as valid for verification :)\n    $(\"#agree_terms\").prop(\"checked\", true);\n    $(\"#user_email\").data(\"email_valid\", \"yes\");\n\n    $(\"#associate_user_auth\").val(dataObj.auth);\n    // Hide fields not needed for the existing account\n    $(\".hide-for-existing-account\").hide();\n    // if($(\"#user_kind\").val() && $(\"#user_kind\").val().indexOf(\"admin\") == -1)\n    // {\n    $(\".show-for-existing-account\").show();\n    // }\n    $(\"#submit_existing_account\").show();\n\n    if (dataObj.message) {\n      $(\"#account_setup_associate_message_general\").html(dataObj.message);\n    }\n\n    // Prevent email from being change after authentication\n    $(\"#user_email\").removeClass(\"required\").prop(\"required\", false).prop(\"readonly\", true);\n    $(\"#user_sms_phone\").prop(\"readonly\", true);\n    $(\"#account_setup_email_error_wrap\").hide();\n    $(\"#account_setup_phone_error_wrap\").hide().find(\".alert\").html(\"\");\n    // Close modal\n    $(\"#associate-verify-login-modal\").modal(\"hide\");\n  }\n\n  reset_form() {\n    $('#verify_code').val('');\n    $('#error-message-2fa').remove();\n  }\n\n  updatePasswordCheckbox(event){\n    if(event.currentTarget.checked) {\n      $(\"#update-password-div\").removeClass(\"hidden\");\n    } else {\n      $(\"#update-password-div\").addClass(\"hidden\");\n      $(\"#current_password\").val(\"\");\n      $(\"#user_password\").val(\"\");\n      $(\"#user_password_confirmation\").val(\"\");\n    }\n  }\n\n  // -------------------------------------------------------------- //\n  // ------------------------ Associations ------------------------ //\n  // -------------------------------------------------------------- //\n  add_assoc_checkbox_click(event) {\n    if(event.currentTarget.checked) {\n      $(\"#add_associations_div\").show();\n    } else {\n      $(\"#add_associations_div\").hide();\n      $(\"#associations_all_select\").val('');\n    }\n  }\n\n  add_custom_assoc(event) {\n    event.preventDefault();\n    var custom_association_val = $(\"#add_custom_association\").val();\n    if (custom_association_val != \"\") {\n      var newOption = new Option(custom_association_val, \"custom:\"+custom_association_val, false, true);\n      $('#associations_all_select').append(newOption).trigger('change');\n      $(\"#add_custom_association\").val(\"\");\n    }\n  }\n\n  check_assoc_select_for_featured(event) {\n    // This is not needed currrently -- we do not have any \"featured\" wbi associations\n    // -- if we add any we can update this with javascript to load demographics for those organizations\n  }\n\n}\n", "export class FetchResponse {\n  constructor (response) {\n    this.response = response\n  }\n\n  get statusCode () {\n    return this.response.status\n  }\n\n  get redirected () {\n    return this.response.redirected\n  }\n\n  get ok () {\n    return this.response.ok\n  }\n\n  get unauthenticated () {\n    return this.statusCode === 401\n  }\n\n  get unprocessableEntity () {\n    return this.statusCode === 422\n  }\n\n  get authenticationURL () {\n    return this.response.headers.get('WWW-Authenticate')\n  }\n\n  get contentType () {\n    const contentType = this.response.headers.get('Content-Type') || ''\n\n    return contentType.replace(/;.*$/, '')\n  }\n\n  get headers () {\n    return this.response.headers\n  }\n\n  get html () {\n    if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n      return this.text\n    }\n\n    return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n  }\n\n  get json () {\n    if (this.contentType.match(/^application\\/.*json$/)) {\n      return this.responseJson || (this.responseJson = this.response.json())\n    }\n\n    return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n  }\n\n  get text () {\n    return this.responseText || (this.responseText = this.response.text())\n  }\n\n  get isTurboStream () {\n    return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n  }\n\n  async renderTurboStream () {\n    if (this.isTurboStream) {\n      if (window.Turbo) {\n        await window.Turbo.renderStreamMessage(await this.text)\n      } else {\n        console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n      }\n    } else {\n      return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n    }\n  }\n}\n", "export class RequestInterceptor {\n  static register (interceptor) {\n    this.interceptor = interceptor\n  }\n\n  static get () {\n    return this.interceptor\n  }\n\n  static reset () {\n    this.interceptor = undefined\n  }\n}\n", "export function getCookie (name) {\n  const cookies = document.cookie ? document.cookie.split('; ') : []\n  const prefix = `${encodeURIComponent(name)}=`\n  const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n  if (cookie) {\n    const value = cookie.split('=').slice(1).join('=')\n\n    if (value) {\n      return decodeURIComponent(value)\n    }\n  }\n}\n\nexport function compact (object) {\n  const result = {}\n\n  for (const key in object) {\n    const value = object[key]\n    if (value !== undefined) {\n      result[key] = value\n    }\n  }\n\n  return result\n}\n\nexport function metaContent (name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n  return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n  return [...formData].reduce((entries, [name, value]) => {\n    return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n  }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n  for (const [name, value] of entries) {\n    if (value instanceof window.File) continue\n\n    if (searchParams.has(name)) {\n      searchParams.delete(name)\n      searchParams.set(name, value)\n    } else {\n      searchParams.append(name, value)\n    }\n  }\n}\n", "import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n  constructor (method, url, options = {}) {\n    this.method = method\n    this.options = options\n    this.originalUrl = url.toString()\n  }\n\n  async perform () {\n    try {\n      const requestInterceptor = RequestInterceptor.get()\n      if (requestInterceptor) {\n        await requestInterceptor(this)\n      }\n    } catch (error) {\n      console.error(error)\n    }\n\n    const response = new FetchResponse(await window.fetch(this.url, this.fetchOptions))\n\n    if (response.unauthenticated && response.authenticationURL) {\n      return Promise.reject(window.location.href = response.authenticationURL)\n    }\n\n    if (response.ok && response.isTurboStream) {\n      await response.renderTurboStream()\n    }\n\n    return response\n  }\n\n  addHeader (key, value) {\n    const headers = this.additionalHeaders\n    headers[key] = value\n    this.options.headers = headers\n  }\n\n  get fetchOptions () {\n    return {\n      method: this.method.toUpperCase(),\n      headers: this.headers,\n      body: this.formattedBody,\n      signal: this.signal,\n      credentials: 'same-origin',\n      redirect: this.redirect\n    }\n  }\n\n  get headers () {\n    return compact(\n      Object.assign({\n        'X-Requested-With': 'XMLHttpRequest',\n        'X-CSRF-Token': this.csrfToken,\n        'Content-Type': this.contentType,\n        Accept: this.accept\n      },\n      this.additionalHeaders)\n    )\n  }\n\n  get csrfToken () {\n    return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n  }\n\n  get contentType () {\n    if (this.options.contentType) {\n      return this.options.contentType\n    } else if (this.body == null || this.body instanceof window.FormData) {\n      return undefined\n    } else if (this.body instanceof window.File) {\n      return this.body.type\n    }\n\n    return 'application/json'\n  }\n\n  get accept () {\n    switch (this.responseKind) {\n      case 'html':\n        return 'text/html, application/xhtml+xml'\n      case 'turbo-stream':\n        return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n      case 'json':\n        return 'application/json, application/vnd.api+json'\n      default:\n        return '*/*'\n    }\n  }\n\n  get body () {\n    return this.options.body\n  }\n\n  get query () {\n    const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n    const params = new URLSearchParams(originalQuery)\n\n    let requestQuery = this.options.query\n    if (requestQuery instanceof window.FormData) {\n      requestQuery = stringEntriesFromFormData(requestQuery)\n    } else if (requestQuery instanceof window.URLSearchParams) {\n      requestQuery = requestQuery.entries()\n    } else {\n      requestQuery = Object.entries(requestQuery || {})\n    }\n\n    mergeEntries(params, requestQuery)\n\n    const query = params.toString()\n    return (query.length > 0 ? `?${query}` : '')\n  }\n\n  get url () {\n    return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n  }\n\n  get responseKind () {\n    return this.options.responseKind || 'html'\n  }\n\n  get signal () {\n    return this.options.signal\n  }\n\n  get redirect () {\n    return this.options.redirect || 'follow'\n  }\n\n  get additionalHeaders () {\n    return this.options.headers || {}\n  }\n\n  get formattedBody () {\n    const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n    const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n    if (contentTypeIsJson && !bodyIsAString) {\n      return JSON.stringify(this.body)\n    }\n\n    return this.body\n  }\n}\n", "import { FetchRequest } from './fetch_request'\n\nasync function get (url, options) {\n  const request = new FetchRequest('get', url, options)\n  return request.perform()\n}\n\nasync function post (url, options) {\n  const request = new FetchRequest('post', url, options)\n  return request.perform()\n}\n\nasync function put (url, options) {\n  const request = new FetchRequest('put', url, options)\n  return request.perform()\n}\n\nasync function patch (url, options) {\n  const request = new FetchRequest('patch', url, options)\n  return request.perform()\n}\n\nasync function destroy (url, options) {\n  const request = new FetchRequest('delete', url, options)\n  return request.perform()\n}\n\nexport { get, post, put, patch, destroy }\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"account-switcher\"\nexport default class extends Controller {\n  initialize() {\n    let title = i18n_string(\"general.switch_accounts\",\"Switch Accounts\")\n    let close = i18n_string(\"general.close\",\"Close\")\n    setupBootstrapModal(\"switch-account-modal\", title, '', '<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">'+close+'</button>', 'body', '', '');\n  }\n  connect() {\n    this.element[this.identifier] = this;\n    console.log(\"connect\");\n  }\n  loadingHTML(){\n    let loading_html = \"\";\n    loading_html += '';\n    loading_html += '  <p>'+i18n_string(\"general.select_the_account_you_want_to_switch_to\",\"Select the account you want to switch to.\")+'</p>';\n    loading_html += '  <div class=\"list-group account-switch-list placeholder-glow\">';\n    loading_html += '    <a class=\"list-group-item list-group-item-action disabled\">';\n    loading_html += '      <span class=\"switch-icon\">&nbsp;</span>';\n    loading_html += '      <span class=\"switch-type\"><span class=\"placeholder w-50\"></span></span>';\n    loading_html += '      <span class=\"switch-info\"><span class=\"placeholder w-100\"></span></span>';\n    loading_html += '    </a>';\n    loading_html += '    <a class=\"list-group-item list-group-item-action disabled\">';\n    loading_html += '      <span class=\"switch-icon\">&nbsp;</span>';\n    loading_html += '      <span class=\"switch-type\"><span class=\"placeholder w-50\"></span></span>';\n    loading_html += '     <span class=\"switch-info\"><span class=\"placeholder w-100\"></span></span>';\n    loading_html += '    </a>';\n    loading_html += '    <a class=\"list-group-item list-group-item-action disabled\">';\n    loading_html += '      <span class=\"switch-icon\">&nbsp;</span>';\n    loading_html += '      <span class=\"switch-type\"><span class=\"placeholder w-50\"></span></span>';\n    loading_html += '      <span class=\"switch-info\"><span class=\"placeholder w-100\"></span></span>';\n    loading_html += '    </a>';\n    loading_html += '  </div>';\n    return loading_html\n  }\n  async loadModalContent() {\n    $(\"#switch-account-modal .modal-body\").html(this.loadingHTML());\n    console.log(\"loadModalContent\");\n\n    const request = new FetchRequest(\"get\", \"/users/switch_account_modal\",\n        {\n          responseKind: \"html\"\n        });\n    const response = await request.perform();\n    if (response.ok) {\n      response.html.then(function(modalHTML){\n        $(\"#switch-account-modal .modal-body\").html(modalHTML);\n      });\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"add-association\"\nexport default class extends Controller {\n  static targets = [ \"search\", \"error\", \"custom_input\" ]\n\n  connect() {\n    // Add modal form listener on my account page\n    if (this.hasSearchTarget) {\n      let searchTarget = this.searchTarget;\n      if (this.element.dataset && this.element.dataset.location == \"account\" && this.element.tagName == \"FORM\") {\n        this.element.addEventListener(\"submit\", function (event) {\n          if (!(searchTarget.selectedOptions && searchTarget.selectedOptions.length > 0)){\n            event.preventDefault();\n          }\n        });\n      }\n    }\n  }\n  process_add(event){\n    if (this.hasSearchTarget && this.hasCustom_inputTarget) {\n      let val = this.custom_inputTarget.value;\n      if (val != \"\") {\n        this.custom_inputTarget.value = \"\";\n        let newOption = new Option(val, \"custom:\"+val, false, true);\n        this.searchTarget.options.add(newOption);\n        event.currentTarget.blur(); // Deselect button\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"add-organization\"\nexport default class extends Controller {\n\n  static targets = [ \"error\", \"invite_code\", \"landing_page\" ]\n\n  connect() {\n    console.dir(this.element.dataset.url);\n    if (this.element.dataset && this.element.dataset.url) {\n      this.invite_code_validate_url = this.element.dataset.url;\n    }\n    this.upgrade_account_request = false;\n    if (this.element.dataset && this.element.dataset.upgrade && this.element.dataset.upgrade == \"yes\") {\n      this.upgrade_account_request = true;\n    }\n  }\n\n  check_invite_code(){\n    let check_code = this.invite_codeTarget.value;\n    this.perform_check_invite_code(check_code);\n    /*\n    if (!this.invite_code_validate_url) {\n      return;\n    }\n    // console.log(this.errorTarget);\n    // console.log(this.invite_codeTarget);\n    // console.log(this.landing_pageTarget);\n    this.errorTarget.innerHTML = \"\";\n    this.errorTarget.style.display = 'none';\n    let check_code = this.invite_codeTarget.value;\n    let errorTargetRef = this.errorTarget;\n    let landingPageTargetRef = this.landing_pageTarget;\n    if (check_code && check_code != \"\") {\n      let requestBody = {\n        invite_code: check_code\n      };\n      if (this.upgrade_account_request) {\n        requestBody.upgrade_request = 1;\n      }\n      const request = new FetchRequest(\"post\", this.invite_code_validate_url,\n          { responseKind: \"json\",\n            body: requestBody\n          });\n      const response = await request.perform();\n      if (response.ok) {\n        response.json.then(function (statusData) {\n          if (statusData.status == 'valid_code' && statusData.invite_code && statusData.redirect_url) {\n            document.location = statusData.redirect_url;\n          } else if (statusData.status == 'landing_page' && statusData.landing_page_options && landingPageTargetRef) {\n\n            // let selectorHTML = '<p class=\"mt-3\">Multiple options are available for this invite code.  Please select one below.</p>';\n            // selectorHTML += '<div id=\"\" class=\"list-group\">';\n            // for (let [display_name, invite_code] of Object.entries(statusData.landing_page_options)) {\n            //   selectorHTML += '  <button type=\"button\" class=\"list-group-item list-group-item-action\" data-code=\"'+invite_code+'\">'+display_name+'</button>';\n            // }\n            // selectorHTML += '</div>';\n            // landingPageTargetRef.innerHTML = selectorHTML;\n          } else {\n            errorTargetRef.innerHTML = \"The invite code provided is not valid\";\n            errorTargetRef.style.display = '';\n          }\n        });\n      }\n    } else {\n      this.errorTarget.innerHTML = \"Please enter an invite code\";\n      this.errorTarget.style.display = '';\n    }\n    */\n  }\n\n  async perform_check_invite_code(check_code){\n    if (!this.invite_code_validate_url) {\n      return;\n    }\n    // console.log(this.errorTarget);\n    // console.log(this.invite_codeTarget);\n    // console.log(this.landing_pageTarget);\n    this.errorTarget.innerHTML = \"\";\n    this.errorTarget.style.display = 'none';\n    let errorTargetRef = this.errorTarget;\n    let landingPageTargetRef = this.landing_pageTarget;\n    let addOrgControllerRef = this;\n    if (check_code && check_code != \"\") {\n      let requestBody = {\n        invite_code: check_code\n      };\n      if (this.upgrade_account_request) {\n        requestBody.upgrade_request = 1;\n      }\n      const request = new FetchRequest(\"post\", this.invite_code_validate_url,\n          { responseKind: \"json\",\n            body: requestBody\n          });\n      const response = await request.perform();\n      if (response.ok) {\n        response.json.then(function (statusData) {\n          if (statusData.status == 'valid_code' && statusData.invite_code && statusData.redirect_url) {\n            document.location = statusData.redirect_url;\n          } else if (statusData.status == 'landing_page' && statusData.landing_page_options && landingPageTargetRef) {\n            const p = document.createElement('p');\n            p.className = \"mt-3\";\n            p.innerHTML = i18n_string(\"users.account.multiple_options_for_invite_code\",\"Multiple options are available for this invite code.  Please select one below.\");\n            const list_group_div = document.createElement('div');\n            list_group_div.className = 'list-group';\n            for (let [display_name, invite_code] of Object.entries(statusData.landing_page_options)) {\n              let selector_button = document.createElement('button');\n              selector_button.type = \"button\"\n              selector_button.className = \"list-group-item list-group-item-action\"\n              selector_button.setAttribute(\"data-code\", invite_code);\n              selector_button.innerText = display_name;\n              // Event handler\n              selector_button.addEventListener('click', (event) => {\n                event.preventDefault();\n                addOrgControllerRef.perform_check_invite_code(event.currentTarget.getAttribute(\"data-code\"));\n              });\n              // Append to list\n              list_group_div.appendChild(selector_button);\n            }\n            landingPageTargetRef.appendChild(p);\n            landingPageTargetRef.appendChild(list_group_div);\n            // let selectorHTML = '<p class=\"mt-3\">Multiple options are available for this invite code.  Please select one below.</p>';\n            // selectorHTML += '<div id=\"\" class=\"list-group\">';\n            // for (let [display_name, invite_code] of Object.entries(statusData.landing_page_options)) {\n            //   selectorHTML += '  <button type=\"button\" class=\"list-group-item list-group-item-action\" data-code=\"'+invite_code+'\">'+display_name+'</button>';\n            // }\n            // selectorHTML += '</div>';\n            // landingPageTargetRef.innerHTML = selectorHTML;\n          } else {\n            errorTargetRef.innerHTML = i18n_string(\"users.account.invite_code_provided_is_not_valid\",\"The invite code provided is not valid\");\n            errorTargetRef.style.display = '';\n          }\n        });\n      }\n    } else {\n      this.errorTarget.innerHTML = i18n_string(\"users.account.please_enter_an_invite_code\",\"Please enter an invite code\");\n      this.errorTarget.style.display = '';\n    }\n  }\n\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"additional-tools\"\nexport default class extends Controller {\n  \n  changeSlide(e) {\n    var item = e.currentTarget\n    document.getElementById('additional_tools_popup').className = ''\n    document.getElementById('additional_tools_popup').classList.add(\"slide-\" + item.dataset.bsSlideTo)\n  }\n\n  checkCampaignNotes() {\n    var campaign_notes_panel = document.getElementById('campaign_notes')\n    if(campaign_notes_panel) {\n      if(!campaign_notes_panel.classList.contains('hidden')){\n        if(document.getElementById('selected_campaign')){\n          var campaign_id = document.getElementById('selected_campaign').value\n          var option = document.getElementById('unread_' + campaign_id)\n          if(option !== null && option.classList.contains('unread')){\n            $.ajax({\n              method: \"POST\",\n              url: \"/assessments/\" + campaign_id + \"/update_read_message\",\n              headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n              success: function (data) {\n                if(data.conversations.length > 0) {\n                  option.text = option.text.substring(2)\n                  option.classList.remove('unread')\n\n                  var remove = true\n                  var option_list = document.getElementById('selected_campaign').options\n                  for(var i = 0; i < option_list.length; i++){\n                    if(option_list[i].classList.contains('unread')) {\n                      remove = false\n                    }\n                  }\n\n                  if(remove == true){\n                    document.getElementById('campaign_unread_messages').remove()\n                  }\n\n                } else {\n                  option.text = option.text.substring(2)\n                  option.classList.remove('unread')\n                  document.getElementById('campaign_unread_messages').remove()\n                }\n              }\n            });\n          }\n        }\n      }\n    }\n  }\n\n  \n  closeAlert() {\n    document.getElementById('additional_tools_popup').classList.add('hidden')\n  }\n\n  connect() {\n    document.controllerRef = this\n\n    if(this.element.id == 'additionalToolsOffCanvas'){\n      var offcanvas = document.getElementById('additionalToolsOffCanvas')\n      window.additionalToolsOC = new bootstrap.Offcanvas(offcanvas)\n    }\n\n    if(this.element.id == 'additionalToolsOffCanvas' || this.element.id == 'campaignConversationHolder'){\n      this.checkCampaignNotes()  \n    }\n  }\n\n  editMessage(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n    document.getElementById('new_campaign_conversation').classList.add('hidden')\n    document.getElementById('edit_campaign_conversation').classList.remove('hidden')\n\n    document.getElementById('campaign_conversation_update_message').value = item.dataset.message\n    document.getElementById('campaign_conversation_id').value = item.dataset.id\n  }\n\n  hideAdditionalTools(event) {\n    event.preventDefault()\n    this.resetAdditionalNavPanel(event.currentTarget)\n    window.currentAdditionalStatus = ''\n  }\n\n  loadCampaignNotes(event) {\n    event.preventDefault()\n\n    var item = event.currentTarget\n    var display = this.resetAdditionalNavPanel(item)\n    window.currentAdditionalStatus = item.dataset.id\n\n    if(display == 'show') {\n      document.getElementById('campaign_notes').classList.remove(\"hidden\")\n      $(item).parent().addClass('active')\n\n      document.controllerRef.checkCampaignNotes()\n    }\n  }\n\n  loadPersonalNotes(event) {\n    event.preventDefault()\n\n    var item = event.currentTarget\n    var display = this.resetAdditionalNavPanel(item)\n    window.currentAdditionalStatus = item.dataset.id\n\n    if(display == 'show') {\n      document.getElementById('personal_notes').classList.remove(\"hidden\")\n      $(item).parent().addClass('active')\n    }\n  }\n\n  loadSupportPanel(event) {\n    event.preventDefault()\n\n    var item = event.currentTarget\n    var display = this.resetAdditionalNavPanel(item)\n    window.currentAdditionalStatus = item.dataset.id\n\n    if(display == 'show') {\n      document.getElementById('admin_support').classList.remove(\"hidden\")\n      $(item).parent().addClass('active')\n    }\n  }\n\n\n  resetAdditionalNavPanel(event) {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n\n    // Hide all panels\n    const panels = document.getElementsByClassName('additional-tools')\n    for (let i = 0; i < panels.length; i++) {\n      panels.item(i).classList.add('hidden')\n    }\n\n    // Reset all nav buttons\n    const buttons = document.getElementsByClassName('additional-tool-nav-item')\n    for (let i = 0; i < buttons.length; i++) {\n      buttons.item(i).classList.remove('active')\n    }\n\n    var nav = document.getElementById('additionalToolsOffCanvas')\n    if(event.dataset !== undefined && (window.currentAdditionalStatus != event.dataset.id || !nav.classList.contains('show'))) {\n      window.additionalToolsOC.show()\n      return 'show'\n    } else {\n      window.additionalToolsOC.hide()\n      return 'hide'\n    }\n  }\n\n\n  toggleAdditionalTools(event) {\n    var status = ''\n    var item = event.currentTarget\n    var btn = document.getElementById('additional_tools_toggle')\n    var nav = document.getElementById('additional_tools')\n    if(nav.classList.contains('hidden')){\n      nav.classList.remove('hidden')\n      btn.classList.add('expanded')\n      item.innerHTML = '<em class=\"fa fa-chevron-right\"></em>'\n      item.title = I18n.additional_tools.hide_side_panel\n      item.setAttribute(\"data-bs-original-title\", I18n.additional_tools.hide_side_panel)\n      item.setAttribute(\"aria-label\", I18n.additional_tools.hide_side_panel)\n      status = 'show'\n\n      var w = document.getElementById('content-wrapper').offsetWidth - 50\n      document.getElementById('content-wrapper').style.width = w + \"px\"\n      \n      let cro = document.getElementById('configureReportOptions')\n      if( cro != null ) {\n        cro.classList.add('has-sidepanel')\n      }\n\n      let rso = document.getElementById('wj_report-settings-offcanvas')\n      if( rso != null ) {\n        rso.classList.add('has-sidepanel')\n      }\n    } else {\n      nav.classList.add('hidden')\n      btn.classList.remove('expanded')\n      item.innerHTML = '<em class=\"fa fa-chevron-left\"></em>'\n      item.title = I18n.additional_tools.show_side_panel\n      item.setAttribute(\"data-bs-original-title\", I18n.additional_tools.show_side_panel)\n      item.setAttribute(\"aria-label\", I18n.additional_tools.show_side_panel)\n      status = 'hide'\n\n      var w = document.getElementById('content-wrapper').offsetWidth + 50\n      document.getElementById('content-wrapper').style.width = w + \"px\"\n\n      let cro = document.getElementById('configureReportOptions')\n      if( cro != null ) {\n        cro.classList.remove('has-sidepanel')\n      }\n\n      let rso = document.getElementById('wj_report-settings-offcanvas')\n      if( rso != null ) {\n        rso.classList.remove('has-sidepanel')\n      }\n\n      this.resetAdditionalNavPanel(event)\n    }\n\n    $.ajax({\n      method: \"POST\",\n      url: \"/users/toggle_additional_tools_status\",\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      data: { 'status': status },\n    })\n  }\n\n\n  toggleNotesEditor(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    if(item.dataset.show == 'editor') {\n      document.getElementById('personal_note_holder').classList.add('hidden')\n      document.getElementById('personal_note_editor').classList.remove('hidden')\n      item.dataset.show = 'notes'\n      item.innerHTML = I18n.additional_tools.view_notes\n    } else if(item.dataset.show == 'notes') {\n      document.getElementById('personal_note_holder').classList.remove('hidden')\n      document.getElementById('personal_note_editor').classList.add('hidden')\n      item.dataset.show = 'editor'\n      item.innerHTML = I18n.additional_tools.edit_notes\n    }\n  }\n\n  verifyDelete(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n\n    var ans = confirm(I18n.additional_tools.delete_message)\n    if(ans){\n      $.ajax({\n        type: \"DELETE\",\n        url: \"/assessments/\" + item.dataset.id + \"/delete_conversation\",\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        success: function (data) {\n          if(data.status == 200) {\n            var elem = document.getElementById('campaign_conversation_note_' + item.dataset.id)\n            elem.remove()\n          } else {\n            alert(\"Cannot delete note\")\n          }\n        }\n      });\n    }\n\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"admin-import\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  bulk_action_apply_click(e) {\n    e.preventDefault();\n    var action = $(\"#import-bulk-action-select\").val();\n    if ($(\".import-bulk-action-checkbox:checked\").length && action != \"\") {\n      $(\".import-bulk-action-checkbox:checked\").each(function () {\n        var rowId = $(this).val();\n        if (action == \"admin\") {\n          $(\"#import-bulk-action-permission-type-row-\" + rowId).val(\"admin\").change().triggerNativeEvent('change');\n        } else if (action == \"reports\") {\n          $(\"#import-bulk-action-permission-type-row-\" + rowId).val(\"reports\").change().triggerNativeEvent('change');\n          // Select options\n          $(\"#import-bulk-action-data-type-row-\" + rowId + \" select\").val(\"\").change().triggerNativeEvent('change');\n          $(\"#import-bulk-action-leadership-row-\" + rowId + \" select\").val(\"\").change().triggerNativeEvent('change');\n          var curOptions = $(\"#import-bulk-action-data-type-select\").val();\n          if (curOptions && curOptions.length > 0) {\n            $(\"#import-bulk-action-data-type-row-\" + rowId + \" select\").val(curOptions).change().triggerNativeEvent('change');\n          }\n        } else if (action == \"leadership\") {\n          $(\"#import-bulk-action-permission-type-row-\" + rowId).val(\"leadership\").change().triggerNativeEvent('change');\n          // Select options\n          $(\"#import-bulk-action-data-type-row-\" + rowId + \" select\").val(\"\").change().triggerNativeEvent('change');\n          $(\"#import-bulk-action-leadership-row-\" + rowId + \" select\").val(\"\").change().triggerNativeEvent('change');\n          var curOptions = $(\"#import-bulk-action-leadership-select\").val();\n          if (curOptions && curOptions.length > 0) {\n            $(\"#import-bulk-action-leadership-row-\" + rowId + \" select\").val(curOptions).change().triggerNativeEvent('change');\n          }\n        } else if (action == \"remove\") {\n          $(\"#import-bulk-action-permission-type-row-\" + rowId).val(\"none\").change().triggerNativeEvent('change');\n        } else if (action == \"reset\") {\n          $(\"#import-bulk-action-permission-type-row-\" + rowId).val(\"none\").change().triggerNativeEvent('change');\n        }\n\n      });\n    }\n  }\n\n  bulk_action_checkall(e) {\n    if (e.currentTarget.checked) {\n      $(\".import-bulk-action-checkbox\").each(function () {\n        this.checked = true;\n      });\n    } else {\n      $(\".import-bulk-action-checkbox\").each(function () {\n        this.checked = false;\n      });\n    }\n  }\n\n  bulk_action_select_change(e) {\n    let curVal = $(e.currentTarget).val();\n    if (curVal == \"reports\") {\n      $(\"#import-bulk-action-leadership-div\").find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-leadership-div\").hide();\n      $(\"#import-bulk-action-data-type-div\").removeClass(\"d-none\");\n    } else if (curVal == \"leadership\") {\n      $(\"#import-bulk-action-data-type-div\").find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-data-type-div\").hide();\n      $(\"#import-bulk-action-leadership-div\").show();\n    } else {\n      $(\"#import-bulk-action-data-type-div\").find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-leadership-div\").find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-data-type-div\").addClass(\"d-none\");\n      $(\"#import-bulk-action-leadership-div\").hide();\n    }\n  }\n\n  permission_row_select(e){\n    let newVal = $(e.currentTarget).val();\n    let rowId = $(e.currentTarget).data(\"row_id\");\n    if (newVal == \"none\" || newVal == \"admin\") {\n      $(\"#import-bulk-action-data-type-row-\" + rowId).find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-leadership-row-\" + rowId).find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-data-type-row-\" + rowId).hide();\n      $(\"#import-bulk-action-leadership-row-\" + rowId).hide();\n    } else if (newVal == \"reports\") {\n      $(\"#import-bulk-action-leadership-row-\" + rowId).find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-leadership-row-\" + rowId).hide();\n      $(\"#import-bulk-action-data-type-row-\" + rowId).show();\n    } else if (newVal == \"leadership\") {\n      $(\"#import-bulk-action-data-type-row-\" + rowId).find(\"select\").each(function () {\n        $(this).val(\"\").change().triggerNativeEvent('change');\n      });\n      $(\"#import-bulk-action-data-type-row-\" + rowId).hide();\n      $(\"#import-bulk-action-leadership-row-\" + rowId).show();\n      if($(\"#import-bulk-action-participant-checkbox-row-\" + rowId).length) {\n        $(\"#import-bulk-action-participant-checkbox-row-\" + rowId).show();\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Clipboard from \"../../../public/js/clipboard.min\"\n\n// Connects to data-controller=\"admin-toolkit\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  copySource(e) {\n    e.preventDefault();\n    var html_content = $(\".email-content iframe\").contents().find('html').html();\n    var copy_success = copy_to_clipboard(html_content);\n    if(copy_success) {\n      $(\".copied-message\").show().delay(3000).fadeOut('fast');\n    }\n  }\n\n  copySourceLoad(e) {\n    e.preventDefault()\n    var item = e.currentTarget;\n\n    $.ajax({\n      url: \"/admin_toolkit/\" + item.dataset.template + \"/load_email\", \n      type: 'GET', \n      success(data) {\n        if(data.status == 200) {\n          $('body').prepend('<div id=\"copy-element\" class=\"hidden\">' + data.source_code + '</div>');\n\n          var content = $('#copy-element').html();\n          var copy_success = copy_to_clipboard(content);\n          if(copy_success) {\n            $(\".copied-message\").show().delay(3000).fadeOut('fast');\n          }\n\n          $('#copy-element').remove();\n\n          alert(\"Source code copied\")\n        } else {\n          alert(\"Cannot copy source code.\")\n        }\n      }\n    });\n  }\n\n  copyText(e) {\n    e.preventDefault()\n    var item = e.currentTarget;\n\n    $.ajax({\n      url: \"/admin_toolkit/\" + item.dataset.template + \"/load_email\", \n      type: 'GET', \n      success(data) {\n        if(data.status == 200) {\n          $('body').prepend('<div id=\"copy-element\" class=\"hidden\">' + data.source_code + '</div>');\n\n          var content = $('#copy-element').text();\n          var copy_success = copy_to_clipboard(content);\n          if(copy_success) {\n            $(\".copied-message\").show().delay(3000).fadeOut('fast');\n          }\n\n          $('#copy-element').remove();\n\n          alert(\"Email text copied\")\n        } else {\n          alert(\"Cannot copy email\")\n        }\n      }\n    });\n  }\n\n  downloadQRCode(event) {\n    console.log(\"Download QR code\")\n    event.preventDefault();\n    var url = document.getElementById('custom_signup_url_qr_code').value\n    var kind = event.currentTarget.getAttribute('data-kind')\n\n    document.location = '/administrator/generate_qr_code?signup_url=' + encodeURIComponent(url) + '&download=1&kind=' + kind\n  }\n\n  loadPreview(e) {\n    e.preventDefault()\n  }\n\n\n  scrollTo(e) {\n    e.preventDefault()\n    var item = e.currentTarget.dataset.href\n    document.getElementById(item).scrollIntoView()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"advanced-report-editor\"\nexport default class extends Controller {\n  initialize() {\n    super.initialize();\n\n  }\n\n  connect() {\n    advanced_report_editor_setup(this.element.dataset.comboUrl);\n  }\n\n  disconnect() {\n    super.disconnect();\n  }\n\n  // question_checkbox_click(event) {\n  //   $this_element = $(event.currentTarget);\n  // }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"advanced-report-folders\"\nexport default class extends Controller {\n  static targets = [ \"folderList\", \"unassignedReportList\" ]\n\n  confirm_delete_folder (e) {\n    let confirm_message = i18n_string(\"advanced_reports.are_you_sure_you_want_to_delete_this_folder\", \"Are you sure you want to delete this report folder? Any sub-folders will be re-assigned to the top level. Your reports will NOT be deleted.\")\n    if (!confirm(confirm_message)) {\n      e.preventDefault();\n    }\n  }\n\n  confirm_delete_report (e) {\n    let confirm_message = i18n_string(\"advanced_reports.are_you_sure_you_want_to_delete_this_report\", \"Are you sure you want to delete this report?\");\n    if (!confirm(confirm_message)) {\n      e.preventDefault();\n    }\n  }\n\n  connect() { \n\n    if($('#wellness_snapshot_folders').length) {\n      this.edit_folders()\n    }\n\n  }\n\n  edit_folders(event = null) {\n    if(event !== null){\n      event.preventDefault();\n\n      let $elem = $(event.currentTarget);\n      $elem.toggleClass(\"opened\");\n      this.toggle_folder_status($elem);\n    }\n\n    $('#folder-list ol').nestedSortable({\n      handle: '.dd-content',\n      items: 'li',\n      toleranceElement: '.dd-content',\n      maxLevels: 3,\n      relocate: this.update_nested_order,\n\n      forcePlaceholderSize: true,\n\n      // opacity: .6,\n      // placeholder: 'placeholder',\n      revert: 250,\n      tabSize: 25,\n      tolerance: 'pointer',\n      isTree: true,\n      expandOnHover: 700,\n      // startCollapsed: false\n    });\n\n    $('#create_report_folder').attr('disabled') == 'false' ? 'true' : 'false'\n  }\n\n  folder_click(event) {\n    let elem = event.currentTarget;\n    $(elem).children('em').toggleClass('fa-folder fa-folder-open');\n    // console.log($('#parent_' + $(elem).data('id')));\n    // $('#parent_' + $(elem).data('id')).toggleClass('hidden');\n    $(\".parent-folder-\" + $(elem).data('id')).toggleClass('hidden');\n  }\n\n  mouseleave_dd_content(event) {\n    let elem = event.currentTarget;\n    $(elem).children('.folder-options').hide();\n  }\n  mouseover_dd_content(event) {\n    let elem = event.currentTarget;\n    $(elem).children('.folder-options').show();\n  }\n\n  new_report_folder(event){\n\n  }\n\n  toggle_folder_status(btn) {\n\n    if($(btn).hasClass('opened')){\n      $(btn).html('<em class=\"fa fa-check\"></em> '+i18n_string(\"advanced_reports.finish_editing_folders\", \"Finish Editing Folders\")).removeClass('btn-outline-primary').addClass('btn-success');\n      $('.sub-level').removeClass(\"hidden\");\n      $('.handle-holder').removeClass(\"hidden\");\n      $('#create_report_folder').attr('disabled', 'disabled');\n      $('.assign-folders').attr('disabled', 'disabled');\n      //$('.dd-item').addClass(\"ps-5\");\n      // reloadSorting();\n\n    } else {\n      $(btn).html('<em class=\"fa fa-pencil\"></em> '+i18n_string(\"advanced_reports.edit_report_folders\", \"Edit Report Folders\")).addClass('btn-outline-primary').removeClass('btn-success');\n      $('.sub-level').addClass('hidden');\n      $('.handle-holder').addClass(\"hidden\");\n      $('#create_report_folder').removeAttr('disabled');\n      $('.assign-folders').removeAttr('disabled');\n      //$('.dd-item').removeClass(\"ps-5\");\n    }\n\n    $.each($('button[data-bs-toggle=\"collapse\"]'), function(){\n\n      $(this).children('em').removeClass('fa-folder-open').addClass('fa-folder');\n\n      if($(this).attr('disabled')) {\n        $(this).removeAttr('disabled');\n      } else {\n        $(this).attr(\"disabled\", \"disabled\");\n      }\n\n      $(this).attr('aria-expanded', false);\n      var id = $(this).attr('aria-controls');\n      $('#' + id).removeClass('show');\n      $('#' + id).attr('aria-expanded', false);\n    });\n  }\n\n  update_nested_order(){\n    let data = $('#folder-list ol').nestedSortable('toArray', {startDepthCount: 0});\n    let postData = {}; // folder[folder_id] = parent_id / position[folder_id] = i\n    for(let i=0; i<data.length; i++) {\n      if (data[i]['id']) {\n        postData['folder['+data[i]['id']+']'] = data[i]['parent_id']\n        postData['position['+data[i]['id']+']'] = i\n      }\n    }\n    let update_folder_order_url = $('#folder-list').data('folder-order-url');\n\n    $.ajax({\n      url: update_folder_order_url,\n      type: 'post',\n      data: postData,\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      dataType: 'json',\n      success: function (data) {\n        window.reloadFolders = true;\n        if(data.status != \"success\") {\n          alert(i18n_string(\"advanced_reports.error_saving_folder_order\", \"Error saving folder order.\"));\n        }\n      }\n    });\n\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"alert\"\n// Message with this:  data-alert-message-value=\"Test confirm\"\n// Action with this: data-action=\"click->alert#confirm\"\nexport default class extends Controller {\n  static values = { message: String };\n\n  alert(e) {\n    alert(this.messageValue);\n  }\n  confirm(e) {\n    if (!confirm(this.messageValue)) {\n      e.preventDefault();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"alerts\"\nexport default class extends Controller {\n\n  connect() {\n    this.initializeCkEditor()\n  }\n\n  initializeCkEditor() {\n    if($(\"#content\").length) {\n      let toolbar = [\n        {\n          name: 'basicstyles',\n          groups: ['basicstyles', 'cleanup'],\n          items: ['Source', '-', 'Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat', '-', 'Link', 'Unlink']\n        },\n        {\n          name: 'paragraph',\n          groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n          items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'Link', 'Unlink']\n        },\n        {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n        {name: 'colors', items: ['TextColor', 'BGColor']}\n      ];\n      if ($(\"#content\").hasClass(\"limited-toolbar\")) {\n        toolbar = [\n          { name: 'text',         items: ['Bold', 'Italic', '-', 'RemoveFormat'] },\n          { name: 'links',        items: ['Link', 'Unlink'] },\n          { name: 'clipboard',    items: ['NumberedList','BulletedList','-','Cut', 'Copy', 'Paste'] }\n        ];\n      }\n      var editor = CKEDITOR.instances.content;\n      var ckeditorInstance = CKEDITOR.replace(\"content\", {\n        allowedContent:true, // Need this to allow attributes on elements\n        height: '300px',\n        toolbar: toolbar\n      });\n\n      // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n        /* Here we are latching on an event ... in this case, the dialog open event */\n        CKEDITOR.on('dialogDefinition', function(ev) {\n          try {\n            /* this just gets the name of the dialog */\n      \n            var dialogName = ev.data.name;\n            /* this just gets the contents of the opened dialog */\n      \n            var dialogDefinition = ev.data.definition;\n            /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n            if(dialogName == 'link') {\n              \n              /* Getting the contents of the Target tab */\n              var informationTab = dialogDefinition.getContents('target');\n            \n              /* Getting the contents of the dropdown field \"Target\" so we can set it */\n              var targetField = informationTab.get('linkTargetType');\n            \n              /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n              targetField['default'] = '_blank';\n            \n            }\n          } catch(exception) {\n            alert('Error ' + ev.message);\n          }\n        });\n    }\n  }\n\n  selectCustomers() {\n    $('#customer_holder').html('')\n    $.ajax({\n      url: '/customers/customer_list_with_select',\n      type: 'GET',\n      success: function(e) {\n        if(e.status == 200) {\n          $('#customer_holder').html(e.data)\n        } else {\n          alert(\"Could not load customer list\")\n        }\n      }\n    })\n  }\n\n  selectCustomerSubAccounts(event) {\n    $('#version_holder').html('')\n    if(event.currentTarget.value != ''){\n      $.ajax({\n        url: '/customers/' + event.currentTarget.value + '/customer_sub_account_list_with_select',\n        type: 'GET',\n        success: function(e) {\n          if(e.status == 200) {\n            $('#version_holder').html(e.data)\n          } else {\n            alert(\"Could not load version list\")\n          }\n        }\n      })\n    }\n  }\n\n  verifyDelete(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n    var url = item.href\n    var id = item.dataset.id\n    var ans = confirm(\"Are you sure you want to delete this notice?\")\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: url,\n        type: \"DELETE\",\n        success: function(e) {\n          if(e.status == 200) {\n            $('#notice_' + id).remove();\n          } \n          if( e.status == 400) {\n            alert(\"Notice could not be deleted\")\n          }\n        }\n      })\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"animate\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this\n\n    let elementId = this.element.id;\n\n    if (!this.element.dataset || !this.element.dataset.animation) {\n      //console.log(\"I'm missing something\");\n      return;\n    }\n    let animation = this.element.dataset.animation;\n    let delay = 0;\n    if (this.element.dataset.delay && Number(this.element.dataset.delay) > 0) {\n      delay = Number(this.element.dataset.delay);\n    }\n    let element = this.element;\n    if (animation == 'slideDown') {\n      setTimeout(function(){\n        $(element).slideDown();\n      }, delay);\n    } else if (animation == 'slideUp') {\n      setTimeout(function(){\n        $(element).slideUp();\n      }, delay);\n    }\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Manages the draft AnswerTag structure during the dictionary review flow.\n// Handles add/remove of top-level themes and sub-themes before confirmation.\n// Used on feedback_themes/review.html.erb (dictionary review mode).\n// Connects to data-controller=\"answer-tag-draft-editor\"\nexport default class extends Controller {\n  static targets = [\"themesContainer\", \"themeTemplate\"]\n  static values  = { themeIndex: Number }\n\n  addTheme() {\n    const newTheme = this.themeTemplateTarget.content.cloneNode(true)\n    const themeDiv = newTheme.querySelector('.theme-entry')\n    const idx = this.themeIndexValue\n\n    themeDiv.dataset.themeIndex = idx\n    newTheme.querySelectorAll('[name*=\"__INDEX__\"]').forEach(el => {\n      el.name = el.name.replaceAll('__INDEX__', idx)\n    })\n\n    this.themesContainerTarget.appendChild(newTheme)\n    this.themeIndexValue++\n    this.themesContainerTarget.lastElementChild.querySelector('input[type=\"text\"]').focus()\n  }\n\n  removeTheme(event) {\n    const entry = event.target.closest('.theme-entry')\n    // Require sub-themes to be deleted first so the server never receives a theme\n    // with orphaned sub-theme data \u2014 the form fields are nested and Rails would\n    // silently drop them if the parent theme entry is missing.\n    if (entry.querySelectorAll('.sub-theme-entry').length > 0) {\n      alert(i18n_string(\"feedback_themes.remove_sub_themes\",\"Remove the sub-themes before deleting this theme.\"))\n      return\n    }\n    entry.remove()\n  }\n\n  addSubTheme(event) {\n    const themeEntry = event.target.closest('.theme-entry')\n    const themeIdx = themeEntry.dataset.themeIndex\n    const subThemesContainer = themeEntry.querySelector('.sub-themes-container')\n    const subIndex = subThemesContainer.querySelectorAll('.sub-theme-entry').length\n\n    const newSubTheme = document.createElement('div')\n    newSubTheme.className = 'd-flex align-items-center mb-1 sub-theme-entry'\n    newSubTheme.innerHTML = `\n      <input type=\"hidden\" name=\"themes[${themeIdx}][original_sub_themes][${subIndex}]\" value=\"\">\n      <input type=\"text\" class=\"form-control form-control-sm sub-theme-input flex-grow-1\"\n             name=\"themes[${themeIdx}][sub_themes][${subIndex}]\" value=\"\">\n      <button type=\"button\" class=\"btn btn-outline-secondary btn-sm ms-1\"\n              data-action=\"click->answer-tag-draft-editor#removeSubTheme\" style=\"width: 32px;\">&times;</button>\n    `\n    subThemesContainer.appendChild(newSubTheme)\n    newSubTheme.querySelector('input[type=\"text\"]').focus()\n  }\n\n  removeSubTheme(event) {\n    const entry = event.target.closest('.sub-theme-entry')\n    // The count button is only present on the review page (where existing tags are\n    // displayed alongside the draft editor). Deleting a sub-theme with live\n    // assignments would leave orphaned tags in the database, so we block it and\n    // require the admin to remove the tag assignments first.\n    const countBtn = entry.querySelector('.sub-theme-count-btn')\n    if (countBtn && parseInt(countBtn.innerText) > 0) {\n      alert(i18n_string(\"feedback_themes.sub_theme_has_responses\",\"This sub-theme has responses tagged with it. Remove those tags before deleting.\"))\n      return\n    }\n    entry.remove()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Manages confirmed AnswerTag structure on the edit tags page.\n// Handles add/remove of top-level themes and sub-themes.\n// Used on feedback_themes/edit_dictionary.html.erb and edit_dictionary_modal.html.erb.\n// Connects to data-controller=\"answer-tag-editor\"\nexport default class extends Controller {\n  static targets = [\"editor\"]\n  static values  = { themeIndex: Number }\n\n  connect() {\n    // Attach to the nearest form because the Stimulus controller root element is a\n    // div inside the form, not the form itself.\n    this.element.closest(\"form\")?.addEventListener(\"submit\", this.validateBeforeSubmit.bind(this))\n  }\n\n  // Prevents the form from submitting if any theme name input is blank.\n  // The server silently skips blank names (next if theme_name.blank?), so without\n  // this check a newly added theme with no name would vanish on save with no feedback.\n  validateBeforeSubmit(event) {\n    // name$='[name]' matches themes[0][name] but NOT themes[0][original_name],\n    // ensuring only the visible editable fields are validated.\n    const allNameInputs = this.editorTarget.querySelectorAll(\".theme-group input[type='text'][name$='[name]']\")\n    for (const input of allNameInputs) {\n      if (input.value.trim() === \"\") {\n        event.preventDefault()\n        input.focus()\n        input.classList.add(\"is-invalid\")\n        input.placeholder = i18n_string(\"feedback_themes.theme_name_is_required\", \"Theme name is required\")\n        return  // Fail fast: stop at the first blank so only one field is highlighted.\n      }\n      input.classList.remove(\"is-invalid\")\n    }\n  }\n\n  addTheme() {\n    const idx = this.themeIndexValue\n    const html = `\n      <div class=\"theme-group mb-4 p-3 border rounded\" data-theme-index=\"${idx}\" data-sub-theme-next-index=\"0\">\n        <div class=\"d-flex justify-content-between align-items-center mb-2\">\n          <div class=\"flex-grow-1 me-3\">\n            <input type=\"hidden\" name=\"themes[${idx}][original_name]\" value=\"\">\n            <input type=\"text\" name=\"themes[${idx}][name]\" value=\"\"\n                   class=\"form-control form-control-lg\" placeholder=\"Theme name\">\n          </div>\n          <button type=\"button\" class=\"btn btn-outline-danger btn-sm\"\n                  data-action=\"click->answer-tag-editor#removeTheme\">\n            <i class=\"fa fa-trash\"></i>\n          </button>\n        </div>\n        <div class=\"ms-4 sub-themes\">\n          <button type=\"button\" class=\"btn btn-outline-primary btn-sm\"\n                  data-action=\"click->answer-tag-editor#addSubTheme\">\n            <i class=\"fa fa-plus\"></i> ${i18n_string('process_improvement.add_sub_theme', \"Add Sub-theme\")}\n          </button>\n        </div>\n      </div>\n    `\n    this.editorTarget.insertAdjacentHTML('beforeend', html)\n    this.themeIndexValue++\n    this.editorTarget.lastElementChild.querySelector('input[type=\"text\"]').focus()\n  }\n\n  removeTheme(event) {\n    event.currentTarget.closest('.theme-group').remove()\n  }\n\n  addSubTheme(event) {\n    const themeGroup = event.currentTarget.closest('.theme-group')\n    const themeIdx = themeGroup.dataset.themeIndex\n    const subIdx = parseInt(themeGroup.dataset.subThemeNextIndex) || 0\n\n    const html = `\n      <div class=\"input-group mb-2\">\n        <input type=\"hidden\" name=\"themes[${themeIdx}][original_sub_themes][${subIdx}]\" value=\"\">\n        <span class=\"input-group-text\"><i class=\"fa fa-level-up-alt fa-rotate-90\"></i></span>\n        <input type=\"text\" name=\"themes[${themeIdx}][sub_themes][${subIdx}]\"\n               value=\"\" class=\"form-control\" placeholder=\"${i18n_string(\"feedback_themes.sub_theme\", \"Sub-theme\")}\">\n        <button type=\"button\" class=\"btn btn-outline-secondary\"\n                data-action=\"click->answer-tag-editor#removeSubTheme\">\n          <i class=\"fa fa-times\"></i>\n        </button>\n      </div>\n    `\n    event.currentTarget.insertAdjacentHTML('beforebegin', html)\n    themeGroup.dataset.subThemeNextIndex = subIdx + 1\n  }\n\n  removeSubTheme(event) {\n    event.currentTarget.closest('.input-group').remove()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Handles inline tag editing, approve/reset, and response filtering.\n// Used on feedback_themes/review.html.erb and feedback_themes/results.html.erb\n// Connects to data-controller=\"answer-theme-review\"\nexport default class extends Controller {\n  static values = {\n    reviewUrl:       String,\n    reclassifyUrl:   String,\n    sampleStatusUrl: String,\n    undoOnRemove:    { type: Boolean, default: false }\n  }\n\n  #rebuildObserver = null\n  #pollingTimer    = null\n  #pollCount       = 0\n\n  connect() {\n    this.#setupDropdownListeners()\n    this.#setupThemeRebuildObserver()\n  }\n\n  disconnect() {\n    this.#rebuildObserver?.disconnect()\n    this.#stopPolling()\n  }\n\n  // \u2500\u2500\u2500 Remove Tag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  showRemoveTagForm(event) {\n    event.preventDefault()\n    const { answerThemeId, tagId, tagName } = event.currentTarget.dataset\n    this.element.querySelectorAll('.remove-tag-form').forEach(f => (f.style.display = 'none'))\n    const form = document.getElementById(`remove-tag-form-${answerThemeId}`)\n    if (!form) return\n    form.querySelector('.removing-tag-name').textContent = tagName\n    form.querySelector('.remove-tag-id').value = tagId\n    form.querySelector('.remove-tag-reason').value = ''\n    form.style.display = 'block'\n    form.querySelector('.remove-tag-reason').focus()\n  }\n\n  hideRemoveTagForm(event) {\n    event.currentTarget.closest('.remove-tag-form').style.display = 'none'\n  }\n\n  submitRemoveTag(event) {\n    const form = event.currentTarget.closest('.remove-tag-form')\n    const { answerThemeId } = form.dataset\n    const tagId = form.querySelector('.remove-tag-id').value\n    const reason = form.querySelector('.remove-tag-reason').value\n    const removedTagName = form.querySelector('.removing-tag-name').textContent\n    const topLevelRemoved = this.#topLevelOf(removedTagName)\n    const otherTagsHaveSameTopLevel = this.#responseHasTopLevel(answerThemeId, topLevelRemoved, tagId)\n    const tagBadge = document.getElementById(`tag-${answerThemeId}-${tagId}`)\n    if (tagBadge) tagBadge.innerHTML = '<i class=\"fa fa-spinner fa-spin\"></i>'\n\n    fetch(this.reviewUrlValue, {\n      method: 'PATCH',\n      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': this.#csrfToken },\n      body: JSON.stringify({ answer_theme_id: answerThemeId, action_type: 'remove_tag', tag_id: tagId, reason })\n    })\n    // fetch() resolves to a raw Response; r.json() reads and parses the body stream (also async).\n    // Two .then() calls are needed because both steps are async \u2014 data is the parsed JSON object.\n    .then(r => r.json())\n    .then(data => {\n      if (data.success) {\n        form.style.display = 'none'\n        this.#adjustThemeCount(this.#findSubThemeCountBtn(removedTagName), -1)\n        if (!otherTagsHaveSameTopLevel) this.#adjustThemeCount(this.#findThemeCountBtn(topLevelRemoved), -1)\n        if (tagBadge) {\n          if (this.undoOnRemoveValue) {\n            this.#showUndoBadge(tagBadge, answerThemeId, removedTagName)\n          } else {\n            tagBadge.remove()\n            this.#checkNoThemes(answerThemeId)\n          }\n        }\n      } else {\n        alert('Error: ' + (data.error || 'Failed to remove tag'))\n        location.reload()\n      }\n    })\n    .catch(() => { alert('An error occurred. Please try again.'); location.reload() })\n  }\n\n  undoRemoveTag(event) {\n    const { answerThemeId, themeName } = event.currentTarget.dataset\n    const badge = event.currentTarget.closest('.tag-badge')\n    if (badge) badge.innerHTML = '<i class=\"fa fa-spinner fa-spin\"></i>'\n    fetch(this.reviewUrlValue, {\n      method: 'PATCH',\n      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': this.#csrfToken },\n      body: JSON.stringify({ answer_theme_id: answerThemeId, action_type: 'add_tag', theme: themeName })\n    })\n    .then(r => r.json())\n    .then(data => {\n      if (data.success) { location.reload() }\n      else { alert('Error: ' + (data.error || 'Failed to restore tag')); location.reload() }\n    })\n    .catch(() => location.reload())\n  }\n\n  // \u2500\u2500\u2500 Add Tag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  addTheme(event) {\n    event.preventDefault()\n    const { answerThemeId, themeName } = event.currentTarget.dataset\n    const topLevelAdded = this.#topLevelOf(themeName)\n    const alreadyHasTopLevel = this.#responseHasTopLevel(answerThemeId, topLevelAdded)\n    const dropdown = document.getElementById(`add-theme-dropdown-${answerThemeId}`)\n    const toggle = dropdown?.querySelector('[data-bs-toggle=\"dropdown\"]')\n    if (toggle) {\n      bootstrap.Dropdown.getOrCreateInstance(toggle).hide()\n      toggle.innerHTML = '<i class=\"fa fa-spinner fa-spin\"></i>'\n      toggle.disabled = true\n    }\n\n    fetch(this.reviewUrlValue, {\n      method: 'PATCH',\n      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': this.#csrfToken },\n      body: JSON.stringify({ answer_theme_id: answerThemeId, action_type: 'add_tag', theme: themeName })\n    })\n    .then(r => r.json())\n    .then(data => {\n      if (data.success) {\n        const tagsContainer = document.getElementById(`tags-${answerThemeId}`)\n        document.getElementById(`no-themes-${answerThemeId}`)?.remove()\n        tagsContainer.insertBefore(this.#buildTagBadge(answerThemeId, data.tag_id, data.theme), dropdown)\n        this.#adjustThemeCount(this.#findSubThemeCountBtn(data.theme), +1)\n        if (!alreadyHasTopLevel) this.#adjustThemeCount(this.#findThemeCountBtn(topLevelAdded), +1)\n        const tagCount = tagsContainer.querySelectorAll('.tag-badge').length\n        if (tagCount >= 3) {\n          dropdown?.remove()\n        } else if (toggle) {\n          toggle.innerHTML = '<i class=\"fa fa-plus\"></i>'\n          toggle.disabled = false\n          const searchInput = dropdown?.querySelector('.theme-search-input')\n          if (searchInput) { searchInput.value = ''; this.#applyDropdownFilter(answerThemeId, '') }\n        }\n      } else {\n        alert('Error: ' + (data.error || 'Failed to add theme'))\n        if (toggle) { toggle.innerHTML = '<i class=\"fa fa-plus\"></i>'; toggle.disabled = false }\n      }\n    })\n    .catch(() => {\n      alert('An error occurred. Please try again.')\n      if (toggle) { toggle.innerHTML = '<i class=\"fa fa-plus\"></i>'; toggle.disabled = false }\n    })\n  }\n\n  // \u2500\u2500\u2500 Re-classify \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  reclassify(event) {\n    event.preventDefault()\n    if (!this.hasReclassifyUrlValue || !this.hasSampleStatusUrlValue) return\n    const btn = event.currentTarget\n    btn.disabled = true\n    btn.innerHTML = '<i class=\"fa fa-spinner fa-spin\"></i> Queuing\u2026'\n\n    fetch(this.reclassifyUrlValue, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': this.#csrfToken },\n      body: JSON.stringify({ themes: this.#collectDictionary() })\n    })\n    .then(r => r.json())\n    .then(data => {\n      if (data.queued) {\n        const container = document.getElementById('responses-container')\n        if (container) {\n          container.innerHTML = `\n            <div class=\"text-center py-5\">\n              <i class=\"fa fa-spinner fa-spin fa-2x text-muted\"></i>\n              <p class=\"text-muted mt-3\">${i18n_string('feedback_themes.reclassifying', \"Re-classifying responses with the updated tags\u2026\")}</p>\n              <p class=\"text-muted small\">${i18n_string('feedback_themes.this_may_take_a_minute', \"This may take a minute. The page will refresh automatically.\")}</p>\n            </div>`\n        }\n        this.#startPolling()\n      } else {\n        alert('Error: ' + (data.error || 'Failed to queue re-classification'))\n        btn.disabled = false\n        btn.innerHTML = `${i18n_string('process_improvement.reclassify', \"Re-classify\")} <i class=\"fa fa-sync\"></i>`\n      }\n    })\n    .catch(() => {\n      alert('An error occurred. Please try again.')\n      btn.disabled = false\n      btn.innerHTML = `${i18n_string('process_improvement.reclassify', \"Re-classify\")} <i class=\"fa fa-sync\"></i>`\n    })\n  }\n\n  filterThemeDropdown(event) {\n    const { answerThemeId } = event.currentTarget.dataset\n    this.#applyDropdownFilter(answerThemeId, event.currentTarget.value)\n  }\n\n  // \u2500\u2500\u2500 Approve / Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  approveClassification(event) {\n    const { answerThemeId } = event.currentTarget.dataset\n    const card = document.getElementById(`answer-theme-${answerThemeId}`)\n    const reviewButtons = card?.querySelector('.review-buttons')\n    if (reviewButtons) reviewButtons.innerHTML = '<i class=\"fa fa-spinner fa-spin\"></i>'\n\n    fetch(this.reviewUrlValue, {\n      method: 'PATCH',\n      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': this.#csrfToken },\n      body: JSON.stringify({ answer_theme_id: answerThemeId, action_type: 'accept' })\n    })\n    .then(r => r.json())\n    .then(data => {\n      if (data.success) { this.#updateCardToReviewed(answerThemeId) }\n      else { alert('Error: ' + (data.error || 'Unknown error')); location.reload() }\n    })\n    .catch(() => { alert('An error occurred.'); location.reload() })\n  }\n\n  resetReview(event) {\n    const { answerThemeId } = event.currentTarget.dataset\n    if (!confirm(i18n_string('feedback_themes.reset_classification', 'Reset this classification to pending review?'))) return\n    fetch(this.reviewUrlValue, {\n      method: 'PATCH',\n      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': this.#csrfToken },\n      body: JSON.stringify({ answer_theme_id: answerThemeId, action_type: 'reset' })\n    })\n    .then(r => r.json())\n    .then(data => {\n      if (data.success) { location.reload() }\n      else { alert('Error: ' + (data.error || 'Unknown error')) }\n    })\n  }\n\n  // \u2500\u2500\u2500 Response Filtering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  filterByTheme(event) {\n    const { themeName } = event.currentTarget.dataset\n    let count = 0\n    this.element.querySelectorAll('.response-card').forEach(card => {\n      const themes = card.dataset.themes || ''\n      const match = themes.split('|||').some(t => t === themeName || t.startsWith(themeName + ' > '))\n      card.style.display = match ? '' : 'none'\n      if (match) count++\n    })\n    this.#showFilterIndicator(themeName, count)\n  }\n\n  filterBySubTheme(event) {\n    const { fullThemeName } = event.currentTarget.dataset\n    let count = 0\n    this.element.querySelectorAll('.response-card').forEach(card => {\n      const themes = card.dataset.themes || ''\n      const match = themes.split('|||').includes(fullThemeName)\n      card.style.display = match ? '' : 'none'\n      if (match) count++\n    })\n    this.#showFilterIndicator(fullThemeName, count)\n  }\n\n  clearFilter(event) {\n    event.preventDefault()\n    const cards = this.element.querySelectorAll('.response-card')\n    cards.forEach(c => (c.style.display = ''))\n    this.element.querySelector('#filter-indicator').style.display = 'none'\n    this.element.querySelector('#no-filter-indicator').style.display = ''\n    this.element.querySelector('#visible-count').textContent = cards.length\n  }\n\n  // \u2500\u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  get #csrfToken() {\n    return document.querySelector('meta[name=\"csrf-token\"]').content\n  }\n\n  #buildTagBadge(answerThemeId, tagId, theme) {\n    const badge = document.createElement('span')\n    badge.className = 'badge bg-info d-inline-flex align-items-center tag-badge'\n    badge.id = `tag-${answerThemeId}-${tagId}`\n    badge.dataset.tagId = tagId\n\n    badge.appendChild(document.createTextNode(theme))\n\n    const closeBtn = document.createElement('button')\n    closeBtn.type = 'button'\n    closeBtn.className = 'btn-close btn-close-white ms-2'\n    closeBtn.style.fontSize = '0.6em'\n    closeBtn.title = i18n_string('process_improvement.remove_this_tag', 'Remove this tag')\n    closeBtn.dataset.action = 'click->answer-theme-review#showRemoveTagForm'\n    closeBtn.dataset.answerThemeId = answerThemeId\n    closeBtn.dataset.tagId = tagId\n    closeBtn.dataset.tagName = theme\n    badge.appendChild(closeBtn)\n    return badge\n  }\n\n  #checkNoThemes(answerThemeId) {\n    const container = document.getElementById(`tags-${answerThemeId}`)\n    if (!container || container.querySelectorAll('.tag-badge').length > 0) return\n    if (container.querySelector('.no-themes-badge')) return\n    const badge = document.createElement('span')\n    badge.className = 'badge bg-light text-muted border no-themes-badge'\n    badge.id = `no-themes-${answerThemeId}`\n    badge.textContent = i18n_string('process_improvement.no_themes', 'No themes')\n    container.insertBefore(badge, container.querySelector('.add-theme-dropdown'))\n  }\n\n  #showUndoBadge(tagBadge, answerThemeId, removedTagName) {\n    tagBadge.className = 'badge bg-secondary d-inline-flex align-items-center tag-badge'\n    tagBadge.style.fontSize = '0.75em'\n\n    const strike = document.createElement('span')\n    strike.className = 'text-decoration-line-through me-1'\n    strike.textContent = i18n_string('feedback_themes.removed', 'Removed')\n\n    const undoBtn = document.createElement('button')\n    undoBtn.type = 'button'\n    undoBtn.className = 'btn btn-link btn-sm text-white p-0 ms-1'\n    undoBtn.style.cssText = 'font-size: 0.9em; text-decoration: underline;'\n    undoBtn.dataset.action = 'click->answer-theme-review#undoRemoveTag'\n    undoBtn.dataset.answerThemeId = answerThemeId\n    undoBtn.dataset.themeName = removedTagName\n    undoBtn.textContent = i18n_string('feedback_themes.undo', 'Undo')\n\n    tagBadge.replaceChildren(strike, undoBtn)\n    // Auto-finalize after 10 s: if the admin doesn't undo, remove the badge and\n    // check for an empty state. The parentNode guard prevents a double-remove if\n    // the undo path already removed it before the timer fires.\n    setTimeout(() => {\n      if (tagBadge.parentNode) { tagBadge.remove(); this.#checkNoThemes(answerThemeId) }\n    }, 10000)\n  }\n\n  #updateCardToReviewed(answerThemeId) {\n    const card = document.getElementById(`answer-theme-${answerThemeId}`)\n    if (!card) return\n    card.classList.remove('border-secondary', 'border-danger')\n    card.classList.add('border-success')\n\n    const statusEl = card.querySelector('.review-status')\n    if (statusEl) statusEl.innerHTML = `<i class=\"fa fa-check text-success\"></i> ${i18n_string('feedback_themes.reviewed', 'Reviewed')}`\n\n    const reviewButtons = card.querySelector('.review-buttons')\n    if (reviewButtons) {\n      const btn = document.createElement('button')\n      btn.type = 'button'\n      btn.className = 'btn btn-outline-secondary btn-sm'\n      btn.title = 'Reset to pending'\n      btn.dataset.action = 'click->answer-theme-review#resetReview'\n      btn.dataset.answerThemeId = answerThemeId\n      btn.innerHTML = `<i class=\"fa fa-undo\"></i> ${i18n_string('feedback_themes.reset', 'Reset')}`\n      reviewButtons.replaceChildren(btn)\n    }\n    this.#updateProgressCounter()\n  }\n\n  #updateProgressCounter() {\n    const el = document.querySelector('.alert-success small.text-muted')\n    if (!el) return\n    const match = el.textContent.match(/(\\d+)\\/(\\d+)/)\n    if (!match) return\n    const reviewed = parseInt(match[1]) + 1\n    const total = parseInt(match[2])\n    el.textContent = `${i18n_string('feedback_theme.review_progress', \"Review progress\")}: ${reviewed}/${total} (${Math.round((reviewed / total) * 100)}%)`\n  }\n\n  #showFilterIndicator(filterName, count) {\n    const indicator = this.element.querySelector('#filter-indicator')\n    const noIndicator = this.element.querySelector('#no-filter-indicator')\n    const nameEl = this.element.querySelector('#filter-name')\n    const countEl = this.element.querySelector('#visible-count')\n    if (indicator) indicator.style.display = 'flex'\n    if (noIndicator) noIndicator.style.display = 'none'\n    if (nameEl) nameEl.textContent = filterName\n    if (countEl) countEl.textContent = count\n  }\n\n  #applyDropdownFilter(answerThemeId, searchText) {\n    const list = document.getElementById(`theme-list-${answerThemeId}`)\n    if (!list) return\n    const search = searchText.toLowerCase()\n    const parentsWithMatches = new Set()\n    list.querySelectorAll('.theme-option').forEach(item => {\n      const match = (item.dataset.search || '').includes(search)\n      item.style.display = match ? '' : 'none'\n      if (match && item.dataset.parent) parentsWithMatches.add(item.dataset.parent)\n    })\n    list.querySelectorAll('.theme-header').forEach(header => {\n      const matches = (header.dataset.theme || '').includes(search) || parentsWithMatches.has(header.dataset.theme)\n      header.style.display = matches ? '' : 'none'\n    })\n  }\n\n  #setupDropdownListeners() {\n    this.element.addEventListener('shown.bs.dropdown', (event) => {\n      const dropdown = event.target.closest('.add-theme-dropdown')\n      if (!dropdown) return\n      const input = dropdown.querySelector('.theme-search-input')\n      if (input) {\n        input.value = ''\n        this.#applyDropdownFilter(input.dataset.answerThemeId, '')\n        input.focus()\n      }\n    })\n  }\n\n  #setupThemeRebuildObserver() {\n    // The theme editor (answer-tag-draft-editor) and this review controller share\n    // the same page. We query into the *other* controller's target by its\n    // data-attribute name because Stimulus doesn't provide cross-controller target\n    // access. This is intentional coupling \u2014 both controllers are always co-present\n    // on the review page and the selector is stable.\n    const container = this.element.querySelector('[data-answer-tag-draft-editor-target=\"themesContainer\"]')\n    if (!container) return\n    container.addEventListener('input', e => {\n      if (e.target.matches('input[name*=\"[name]\"]') || e.target.matches('input[name*=\"[sub_themes]\"]')) {\n        this.#rebuildThemeDropdowns()\n      }\n    })\n    // MutationObserver catches theme/sub-theme rows being added or removed (DOM\n    // changes), while the 'input' listener above catches text edits \u2014 both paths\n    // need to trigger a dropdown rebuild.\n    this.#rebuildObserver = new MutationObserver(() => this.#rebuildThemeDropdowns())\n    this.#rebuildObserver.observe(container, { childList: true, subtree: true })\n  }\n\n  #startPolling() {\n    this.#pollCount = 0\n    this.#pollingTimer = setInterval(() => {\n      this.#pollCount++\n      // Hard cap at 200 polls (~10 minutes at 3 s intervals). Without this, a\n      // stuck background job would poll forever and prevent the page from being\n      // reused for a new job.\n      if (this.#pollCount > 200) {\n        this.#stopPolling()\n        alert(i18n_string(\"feedback_themes.reclassification_taking_longer\", 'Re-classification is taking longer than expected. Please refresh the page.'))\n        return\n      }\n      fetch(this.sampleStatusUrlValue)\n        .then(r => r.json())\n        .then(data => {\n          if (data.ready) { this.#stopPolling(); location.reload() }\n          else if (data.error) { this.#stopPolling(); alert(i18n_string(\"feedback_themes.reclassification_error\", 'Re-classification encountered an error. Please refresh and try again.')) }\n        })\n        .catch(() => { this.#stopPolling(); location.reload() })\n    }, 3000)\n  }\n\n  #stopPolling() {\n    if (this.#pollingTimer) { clearInterval(this.#pollingTimer); this.#pollingTimer = null }\n  }\n\n  #collectDictionary() {\n    const themes = {}\n    let themeIdx = 0\n    this.element.querySelectorAll('.theme-entry').forEach(entry => {\n      const name = entry.querySelector('input[name*=\"[name]\"]')?.value.trim()\n      if (!name) return\n      const subThemes = {}\n      let subIdx = 0\n      entry.querySelectorAll('.sub-theme-entry input[type=\"text\"]').forEach(input => {\n        const val = input.value.trim()\n        if (val) { subThemes[subIdx] = val; subIdx++ }\n      })\n      themes[themeIdx] = { name, sub_themes: subThemes }\n      themeIdx++\n    })\n    return themes\n  }\n\n  #topLevelOf(fullTheme) {\n    return fullTheme.includes(' > ') ? fullTheme.split(' > ')[0] : fullTheme\n  }\n\n  #responseHasTopLevel(answerThemeId, topLevel, excludeTagId = null) {\n    const container = document.getElementById(`tags-${answerThemeId}`)\n    if (!container) return false\n    for (const badge of container.querySelectorAll('.tag-badge')) {\n      // When removing a tag, exclude the badge being removed so we don't count it\n      // as \"still present\" \u2014 its DOM element still exists at the time of this check.\n      if (excludeTagId && badge.id === `tag-${answerThemeId}-${excludeTagId}`) continue\n      const closeBtn = badge.querySelector('[data-tag-name]')\n      if (closeBtn && this.#topLevelOf(closeBtn.dataset.tagName) === topLevel) return true\n    }\n    return false\n  }\n\n  #findThemeCountBtn(themeName) {\n    for (const btn of this.element.querySelectorAll('.theme-count-btn')) {\n      if (btn.dataset.themeName === themeName) return btn\n    }\n    return null\n  }\n\n  #findSubThemeCountBtn(fullThemeName) {\n    for (const btn of this.element.querySelectorAll('.sub-theme-count-btn')) {\n      if (btn.dataset.fullThemeName === fullThemeName) return btn\n    }\n    return null\n  }\n\n  #adjustThemeCount(btn, delta) {\n    if (!btn) return\n    btn.textContent = Math.max(0, (parseInt(btn.textContent.trim()) || 0) + delta)\n  }\n\n  #rebuildThemeDropdowns() {\n    const themes = []\n    this.element.querySelectorAll('.theme-entry').forEach(entry => {\n      const name = entry.querySelector('input[name*=\"[name]\"]')?.value.trim()\n      if (!name) return\n      const subs = []\n      entry.querySelectorAll('.sub-theme-entry input[type=\"text\"]').forEach(i => { if (i.value.trim()) subs.push(i.value.trim()) })\n      themes.push({ name, subs })\n    })\n\n    this.element.querySelectorAll('.theme-list').forEach(list => {\n      const atId = list.id.replace('theme-list-', '')\n      let html = ''\n      themes.forEach(({ name, subs }) => {\n        html += `<h6 class=\"dropdown-header small py-1 theme-header fw-bold text-dark\" data-theme=\"${name.toLowerCase()}\" style=\"background-color: #f8f9fa;\">${name}</h6>`\n        if (subs.length > 0) {\n          subs.forEach(sub => {\n            const full = `${name} > ${sub}`\n            html += `<a class=\"dropdown-item small py-1 theme-option\" href=\"#\" style=\"padding-left: 1.5rem;\" `\n            html += `data-action=\"click->answer-theme-review#addTheme\" `\n            html += `data-answer-theme-id=\"${atId}\" data-theme-name=\"${full.replace(/\"/g, '&quot;')}\" `\n            html += `data-theme=\"${full}\" data-search=\"${full.toLowerCase()}\" data-parent=\"${name.toLowerCase()}\">${sub}</a>`\n          })\n        } else {\n          html += `<a class=\"dropdown-item small py-1 theme-option\" href=\"#\" style=\"padding-left: 1.5rem;\" `\n          html += `data-action=\"click->answer-theme-review#addTheme\" `\n          html += `data-answer-theme-id=\"${atId}\" data-theme-name=\"${name.replace(/\"/g, '&quot;')}\" `\n          html += `data-theme=\"${name}\" data-search=\"${name.toLowerCase()}\">(no sub-themes)</a>`\n        }\n      })\n      list.innerHTML = html\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"arr\"\nexport default class extends Controller {\n  \n  buildTable(element, columns = 0) {\n    console.log(\"ARR: buildTable\")\n    $(element).bootstrapTable({\n      fixedColumns: true,\n      fixedNumber: columns\n    })\n  }\n  \n  connect() {\n    console.log(\"ARR: connect\")\n    const controllerRef = this \n\n    $(window).resize(function() {\n      if(this.resizeTO) clearTimeout(this.resizeTO);\n      this.resizeTO = setTimeout(function() {\n        $(this).trigger('resizeEnd');\n      }, 200);\n    });\n    $(window).bind('resizeEnd', function() {\n      controllerRef.resizeTable()\n    })\n\n    if(document.getElementById('clv_submit_button') != undefined) {\n      setTimeout(()=>{\n        document.getElementById('clv_submit_button').click()\n      }, 250)\n    } else if(document.getElementById('arr_submit_button') != undefined) {\n      document.getElementById('arr_submit_button').click()\n    } else if(document.getElementById('arr_changes') != undefined) {\n      this.buildTable('#arr_changes', 1)\n      this.resizeTable()\n    }\n  }\n\n\n  loadPulseData() {\n    console.log(\"ARR: loadPulseData\")\n    var chart = new google.visualization.BarChart(document.getElementById(\"ajax_chart_div\"));\n\n    google.visualization.events.addListener(chart, 'ready', function() {\n      // Download report\n      $(\"#image_data\").val(chart.getImageURI());\n      $('#export_chart_total_text').val(json_data.chart_data.report_table_data);\n    });\n  }\n\n  reloadTooltip(){\n    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n      return new bootstrap.Tooltip(tooltipTriggerEl)\n    })\n  }\n\n\n  resizeTable(kind = '') {\n    console.log(\"ARR: resizeTable\")\n    if(kind == 'modal') {\n      // Set the default width of the container\n      var myModalEl = document.getElementById('system_modal_popup')\n      myModalEl.addEventListener('shown.bs.modal', function (event) {\n        var width = document.getElementById('customer_lifetime_value_holder').offsetWidth;\n        $('#customer_lifetime_value_holder > .bootstrap5').css(\"width\", width);\n\n      })\n\n    } else {\n      // Set the default width of the container\n      var width = $(window).width();\n      var w = 0;\n      // We subtract the width of the nav bar (80 or 250) plus the padding of 48 on each size (96)\n\n      if($('body').hasClass(\"nav-toggled\")) {\n          w = width - 80 - 96;\n      } else {\n          w = width - 250 - 96;\n      }\n\n      $('.bootstrap5').css(\"width\", w);\n    }\n  }\n\n  toggleGrouping(e) {\n    var item = e.currentTarget\n    document.getElementById('selected_grouping').innerHTML = item.dataset.label\n    document.getElementById('clv_grouping').value = item.dataset.value\n  }\n\n\n  toggleReportType(e) {\n    var item = e.currentTarget\n    document.getElementById('report_type').innerHTML = item.dataset.label\n    document.getElementById('arr_type').value = item.dataset.kind\n  }\n\n  toggleRevenueType(e){\n    var item = e.currentTarget\n    document.getElementById('selected_revenue').innerHTML = item.dataset.label\n    document.getElementById('clv_revenue_type').value = item.dataset.value\n  }\n\n  toggleYear(e) {\n    var item = e.currentTarget\n    document.getElementById('selected_year').innerHTML = item.dataset.year\n    document.getElementById('arr_year').value = item.dataset.year\n  }\n\n\n  updateArr(e) {\n    console.log(\"ARR: updateArr\")\n    const controllerRef = this\n    e.preventDefault()\n\n    document.getElementById('account_management_table_holder').innerHTML = ''\n    document.getElementById('arr_loader').classList.remove('hidden')\n\n    var formData = $('#arr_form').serializeArray();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: e.currentTarget.action,\n      method: 'POST',\n      data: formData,\n      success: function (e) {\n        if(e.status == 200) {\n          document.getElementById('arr_loader').classList.add('hidden')\n\n          document.getElementById('gross_prof_services').innerHTML = e.gross_revenue.prof_services\n          document.getElementById('gross_licensing').innerHTML = e.gross_revenue.licensing\n          document.getElementById('gross_arr').innerHTML = e.gross_revenue.arr\n\n          document.getElementById('net_prof_services').innerHTML = e.net_revenue.prof_services\n          document.getElementById('net_licensing').innerHTML = e.net_revenue.licensing\n          document.getElementById('net_arr').innerHTML = e.net_revenue.arr\n\n          document.getElementById('account_management_table_holder').innerHTML = e.content\n\n          controllerRef.buildTable('#account_management_table', 2)\n          controllerRef.resizeTable()\n\n          controllerRef.reloadTooltip()\n\n        } else {\n          alert(\"Issue loading data. Please try again.\")\n        }\n      }\n    });\n  }\n\n\n  updateChanges(e) {\n    console.log(\"ARR: updateChanges\")\n    const controllerRef = this\n    e.preventDefault()\n\n    document.getElementById('account_management_table_holder').innerHTML = ''\n    document.getElementById('arr_loader').classList.remove('hidden')\n\n    var formData = $('#arr_form').serializeArray();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: e.currentTarget.action,\n      method: 'POST',\n      data: formData,\n      success: function (e) {\n        if(e.status == 200) {\n          document.getElementById('arr_loader').classList.add('hidden')\n          document.getElementById('account_management_table_holder').innerHTML = e.content\n\n          controllerRef.buildTable('#arr_changes', 1)\n          controllerRef.resizeTable()\n\n          controllerRef.reloadTooltip()\n        } else {\n          document.getElementById('arr_loader').classList.add('hidden')\n          document.getElementById('account_management_table_holder').innerHTML = '<p class=\"py-5 my-5 text-center\">No results found. Please try again.</p>';\n        }\n      }\n    });\n  }\n\n  updateCustomerLifetimeValue(e) {\n    console.log(\"ARR: updateCustomerLifetimeValue\")\n    e.preventDefault()\n\n    document.getElementById('customer_lifetime_value_holder').innerHTML = ''\n    document.getElementById('clv_loader').classList.remove('hidden')\n\n    const controllerRef = this\n\n    var formData = $('#clv_form').serializeArray();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: e.currentTarget.action,\n      method: 'POST',\n      data: formData,\n      success: function (e) {\n        if(e.status == 200) {\n          document.getElementById('clv_loader').classList.add('hidden')\n          document.getElementById('customer_lifetime_value_holder').innerHTML = e.content\n          controllerRef.buildTable('#customer_lifetime_value', 4)\n          controllerRef.reloadTooltip()\n        } else {\n          alert(\"Issue loading data. Please try again.\")\n        }\n      }\n    });\n    \n  }\n\n\n  updatePulse(e) {\n    console.log(\"ARR: updateChanges\")\n    const controllerRef = this\n    e.preventDefault()\n\n    document.getElementById('pulse_data_holder').innerHTML = ''\n    document.getElementById('pulse_loader').classList.remove('hidden')\n\n    var formData = $('#pulse_form').serializeArray();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: e.currentTarget.action,\n      method: 'POST',\n      data: formData,\n      success: function (e) {\n        if(e.status == 200) {\n          document.getElementById('pulse_loader').classList.add('hidden')\n          document.getElementById('pulse_data_holder').innerHTML = e.content\n\n          controllerRef.reloadTooltip()\n        } else {\n          document.getElementById('pulse_loader').classList.add('hidden')\n          document.getElementById('pulse_data_holder').innerHTML = '<p class=\"py-5 my-5 text-center\">No results found. Please try again.</p>';\n        }\n      }\n    });\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"automated-report-editor\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  delete_automated_report(e) {\n    e.preventDefault();\n    if (confirm(i18n_string(\"advanced_reports.automated_report_delete_confirmation\", \"Are you sure you sure you want to delete this configuration?\"))) {\n      var adv_report_id = $(\"#adv_report_id\").val();\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/advanced-report/\" + adv_report_id + \"/delete_automated_report\",\n        data: \"automated_report_id=\" + $(e.currentTarget).data(\"id\"),\n        type: \"DELETE\",\n        success(dataArr) {\n          if (dataArr && dataArr.deleted_automated_report_id) {\n            var $table = $(\"#automated-report-config-table-body\");\n            $table.find(\"#automated-report-config-row-\" + dataArr.deleted_automated_report_id).remove();\n            $(\"#inner_modal_popup\").modal(\"hide\");\n          }\n        }\n      });\n\n    }\n  }\n\n  delivery_method_change(e) {\n    if ($(\"#ar_delivery_method\").val() == \"email\") {\n      $(\"#ar_email_delivery_input_div\").show();\n      if ($(\"#ar_send_to\").val() == \"sftp\") {\n        $(\"#ar_send_to\").val(\"\");\n      }\n    } else {\n      $(\"#ar_email_delivery_input_div\").hide();\n      if ($(\"#ar_delivery_method\").val() == \"sftp\") {\n        $(\"#ar_send_to\").val(\"sftp\");\n      }\n    }\n  }\n\n  getJSONLoadSettingsString($formObj) {\n    var settings_data = $formObj.serializeArray();\n    var final_data_array = {};\n    var index_array_counter = {};\n    for(var i=0;i<settings_data.length;i++){\n      var name = settings_data[i].name;\n      if(name != 'authenticity_token') {\n        if(name.indexOf(\"[]\") != -1){\n          if(!index_array_counter[name]){\n            index_array_counter[name] = 0;\n          }\n          var new_temp_name = name.replace(\"[]\",\"[\"+index_array_counter[name]+\"]\");\n          index_array_counter[name]++;\n          name = new_temp_name;\n        }\n        final_data_array[name] = settings_data[i].value;\n      }\n    }\n    return JSON.stringify(final_data_array);\n  }\n\n  save_automated_report(e) {\n    e.preventDefault();\n    clearJsAlerts(\"automated-report-jsalert\");\n    var jsonSettings = this.getJSONLoadSettingsString($(\"#automated-report-settings-include\").find(\"select, textarea, input\"));\n    var errorString = \"\";\n    if (jsonSettings.length > 2) {\n      var postData = {\n        automated_report_id: $(\"#automated_report_id\").val(),\n        saved_report_settings: jsonSettings\n      };\n      // Get the rest of the data and validate\n      var ar_name = $(\"#ar_name\").val();\n      var ar_frequency = $(\"#ar_frequency\").val();\n      var ar_next_run_date = $(\"#ar_next_run_date\").val();\n      var ar_timeframe = $(\"#ar_timeframe\").val();\n      var ar_send_to = $(\"#ar_send_to\").val();\n      var adv_report_id = $(\"#adv_report_id\").val();\n      var user_id = 0;\n      if ($(\"#ar_user_id\").length) {\n        user_id = $(\"#ar_user_id\").val();\n      }\n      if (ar_name == \"\") {\n        errorString = i18n_string(\"advanced_reports.automated_report_error_enter_name\",\"Please enter a name\");\n      } else if (ar_frequency == \"\") {\n        errorString = i18n_string(\"advanced_reports.automated_report_error_select_frequency\",\"Please select a Frequency\");\n      } else if (ar_next_run_date == \"\") {\n        errorString = i18n_string(\"advanced_reports.automated_report_error_select_next_report_date\",\"Please select the next reporting date\");\n      } else if (ar_timeframe == \"\") {\n        errorString = i18n_string(\"advanced_reports.automated_report_error_select_timeframe\",\"Please select data pull timeframe\");\n      } else if (ar_send_to == \"\") {\n        errorString = i18n_string(\"advanced_reports.automated_report_error_enter_recipients\",\"Please enter one or more recipients\");\n      } else if ($(\"#ar_account_id\").length && (user_id == 0 || user_id == \"\")) {\n        errorString = i18n_string(\"advanced_reports.automated_report_error_select_report_as\",\"Please select user to run report as\");\n      }\n      if (errorString == \"\") {\n        if($(\"#ar_output_format\").length) {\n          postData.output_format = $(\"#ar_output_format\").val();\n          postData.date_column = $(\"#ar_date_column\").val();\n          postData.date_column_format = $(\"#ar_date_column_format\").val();\n          postData.split_demographics = $(\"#ar_split_demographics\").val();\n          postData.exclude_filter_info = $(\"#ar_exclude_filter_info\").val();\n        }\n        postData.name = ar_name;\n        postData.frequency = ar_frequency;\n        postData.next_run_date = ar_next_run_date;\n        postData.timeframe = ar_timeframe;\n        postData.send_to = ar_send_to;\n        postData.advanced_report_id = adv_report_id;\n        postData.user_id = user_id;\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: \"/advanced-report/\" + adv_report_id + \"/save_automated_report\",\n          data: postData,\n          type: \"POST\",\n          success(dataArr) {\n            if (dataArr && dataArr.success) {\n              let frame = document.getElementById(\"automated_report_list\");\n              frame.reload();\n              clearJsAlerts(\"automated-report-jsalert\");\n              $(\"#inner_modal_popup\").modal(\"hide\");\n            } else if (dataArr && dataArr.error) {\n              doJsAlert('<div class=\"alert alert-danger\">'+dataArr.error+'</div>', \"automated-report-jsalert\");\n            } else {\n              // Display generic saving error\n              doJsAlert('<div class=\"alert alert-danger\">'+i18n_string(\"advanced_reports.automated_report_error_unknown\",\"Unknown error occurred while saving automated report configuration.\")+'</div>', \"automated-report-jsalert\");\n            }\n          }\n        });\n\n      }\n    } else {\n      errorString = i18n_string(\"advanced_reports.automated_report_error_failed_to_get_settings\",\"Failed to get chart settings, please try again.\");\n    }\n\n    if (errorString) {\n      doJsAlert('<div class=\"alert alert-danger\">'+errorString+'</div>', \"automated-report-jsalert\");\n    }\n  }\n\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "import { Controller } from \"@hotwired/stimulus\"\n// import {Html5QrcodeScanner} from \"html5-qrcode\";\nimport {Html5Qrcode} from \"html5-qrcode\";\n\n// Connects to data-controller=\"barcode-scanner\"\nexport default class extends Controller {\n  connect() {\n    this.scanner_id = this.element.dataset.scanner;\n    this.cameraDevices = undefined;\n    this.setupScannerVisibleListener();\n\n    window.addEventListener('message', function(event)  {\n      // Verify the origin of the sender for security\n      if (event.origin === window.origin) {\n        //console.log('Received message:', event.data);\n        this.refreshQRCodeScanner();\n      } else {\n        //console.warn('Received message from untrusted origin:', event.origin);\n      }\n    }.bind(this));\n\n    // Check if the current URL contains the parameter reload_qr_code_scanner and if it does open the modal for the scanner.\n    if (window.location.href.includes('reload_qr_code_scanner')) {\n      setTimeout(function(){\n        let modal_element = document.getElementById(\"qr-code-scanner-modal\");\n        let bsModal = bootstrap.Modal.getInstance(modal_element);\n        if (bsModal) {\n          bsModal.show();\n        } else {\n          bsModal = new bootstrap.Modal(modal_element);\n          if (bsModal) {\n            bsModal.show();\n          }\n        }\n      },100);\n    }\n  }\n\n  cameraDropdownChange(event) {\n    const stimulusController = this;\n    let new_camera_id = event.currentTarget.value;\n    if (this.runningHTML5Qrcode) {\n      this.setQRScannerState(\"loading\");\n      this.runningHTML5Qrcode.stop().then(() => {\n        stimulusController.runningHTML5Qrcode.start(\n            new_camera_id,\n            {fps: 10, qrbox: {width: 250, height: 250}},\n            stimulusController.onScanSignupCodeSuccess.bind(stimulusController),\n            stimulusController.onScanSignupCodeSuccessFailure.bind(stimulusController)\n        ).then(() => {\n          stimulusController.setQRScannerState(\"scanning\");\n        });\n      });\n    }\n  }\n\n  cameraDropdownSetup() {\n    let camera_dropdown = document.getElementById(\"change-camera-select\");\n    let camera_dropdown_container = document.getElementById(\"change-camera-container\");\n    if (this.cameraDevices && this.runningHTML5Qrcode) {\n      // Delete all options from camera_dropdown\n      while (camera_dropdown.firstChild) {\n        camera_dropdown.removeChild(camera_dropdown.firstChild);\n      }\n\n      if (this.cameraDevices.length > 1) {\n        // Loop through this.cameraDevices and add options to camera_dropdown\n        for (let i = 0; i < this.cameraDevices.length; i++) {\n          const device = this.cameraDevices[i];\n          let option = document.createElement(\"option\");\n          option.value = device.id;\n          option.text = device.label;\n          // If device.id is the same as this.defaultCameraId, select it\n          if (device.id === this.defaultCameraId) {\n            option.selected = true;\n          }\n          camera_dropdown.appendChild(option);\n        }\n\n        camera_dropdown_container.classList.remove(\"hidden\");\n      } else {\n        camera_dropdown_container.classList.add(\"hidden\");\n      }\n    } else {\n      camera_dropdown_container.classList.add(\"hidden\");\n    }\n  }\n\n  initializeScanner(scanner_id) {\n    const stimulusController = this;\n    stimulusController.defaultCameraId = undefined;\n    Html5Qrcode.getCameras().then(devices => {\n      /**\n       * devices would be an array of objects of type:\n       * { id: \"id\", label: \"label\" }\n       */\n      if (devices && devices.length) {\n        stimulusController.cameraDevices = devices;\n        stimulusController.defaultCameraId = devices[0].id;\n        // Loop through devices and find one with the \"back\" or \"environment\" label.\n        for (let i = 0; i < devices.length; i++) {\n          const device = devices[i];\n          if (device.label.toLowerCase().indexOf(\"back\") >= 0 || device.label.toLowerCase().indexOf(\"environment\") >= 0) {\n            stimulusController.defaultCameraId = device.id;\n            break;\n          }\n        }\n      }\n      let html5Qrcode = new Html5Qrcode(scanner_id);\n      if (stimulusController.element.dataset && stimulusController.element.dataset.barcode_action && stimulusController.element.dataset.barcode_action === \"parse_signup_code\") {\n        html5Qrcode.start(\n            stimulusController.defaultCameraId,\n            {fps: 10, qrbox: {width: 250, height: 250}},\n            stimulusController.onScanSignupCodeSuccess.bind(stimulusController),\n            stimulusController.onScanSignupCodeSuccessFailure.bind(stimulusController)\n        ).then(() => {\n          stimulusController.setQRScannerState(\"scanning\");\n        });\n        stimulusController.runningHTML5Qrcode = html5Qrcode;\n        stimulusController.cameraDropdownSetup(stimulusController);\n      }\n    }).catch(err => {\n      // handle err\n    });\n\n  }\n\n  onScanSignupCodeSuccess(decodedText, decodedResult) {\n    // console.log(\"onScanSignupCodeSuccess:start\");\n    // Get element with id=\"signup-qr-code-scanner-processing-error-container\" and set class to hidden\n    const processingErrorContainer = document.getElementById('signup-qr-code-scanner-processing-error-container');\n    processingErrorContainer.classList.add('hidden');\n    const processingStatusSpinnerContainer = document.getElementById('signup-qr-code-scanner-processing-status');\n    processingStatusSpinnerContainer.classList.remove('hidden');\n    const scanAgainButton = document.getElementById('signup-qr-code-scanner-processing-scan-again');\n    scanAgainButton.classList.add('hidden');\n\n    if (window.showScanAgainButtonTimeout) {\n      clearTimeout(window.showScanAgainButtonTimeout);\n      window.showScanAgainButtonTimeout = undefined;\n    }\n    window.showScanAgainButtonTimeout = setTimeout(function(){\n      scanAgainButton.classList.remove('hidden');\n      window.showScanAgainButtonTimeout = undefined;\n    }, 4000);\n\n    // Update state -- show processing message, and button for \"Scan Again\"\n    this.setQRScannerState(\"processing\");\n    if (this.runningHTML5Qrcode) {\n      this.runningHTML5Qrcode.pause(true);\n    }\n\n    // decodedText will contain a URL, make sure it is part of the domains mywbi.org or mywellbeingindex.org or anything with HTTP (for testing)\n    let url = new URL(decodedText);\n    let url_path = url.pathname + url.search + url.hash;\n\n    // Do ajax request to server to validate url_path.\n    $.ajax({\n      headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n      method: \"POST\",\n      url: \"/api/v1/validate_qr_code_path\",\n      data: { check_path: url_path, check_host: url.hostname },\n      success: function (dataObj) {\n        if (typeof dataObj === \"string\") {\n          dataObj = jQuery.parseJSON(dataObj);\n        }\n        // If it is a valid path then go to that URL otherwise show error.\n        if (dataObj.redirect_path) {\n          document.location = dataObj.redirect_path;\n        } else {\n          if (window.showScanAgainButtonTimeout) {\n            clearTimeout(window.showScanAgainButtonTimeout);\n            window.showScanAgainButtonTimeout = undefined;\n          }\n          processingStatusSpinnerContainer.classList.add('hidden');\n          processingErrorContainer.classList.remove('hidden');\n          scanAgainButton.classList.remove('hidden');\n        }\n      }\n    });\n\n\n  }\n\n  onScanSignupCodeSuccessFailure(error) {\n    // Ignore and keep scanning.\n  }\n\n  refreshQRCodeScanner() {\n    // Get current url add random number to it and reload the page.\n    let url = new URL(window.location.href);\n    url.searchParams.set('reload_qr_code_scanner', Math.random().toString(36).substring(7));\n    window.location.href = url.toString();\n  }\n\n  scanAgainClicked (event) {\n    event.preventDefault();\n    if (this.runningHTML5Qrcode) {\n      this.runningHTML5Qrcode.resume();\n      this.setQRScannerState(\"scanning\");\n    }\n  }\n\n  setupScannerVisibleListener() {\n    this.setQRScannerState(\"loading\");\n    let scanner_element = document.getElementById(this.scanner_id);\n    const stimulusController = this;\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting) {\n          stimulusController.initializeScanner(this.scanner_id);\n          observer.unobserve(scanner_element);\n        }\n      });\n    });\n\n    observer.observe(scanner_element);\n  }\n\n  stopScanningAndCloseModal(event) {\n    event.preventDefault();\n    if (this.runningHTML5Qrcode) {\n      this.runningHTML5Qrcode.stop();\n      this.runningHTML5Qrcode = undefined;\n    }\n\n    // Close Modal\n    let modal_element = document.getElementById(\"qr-code-scanner-modal\");\n    let bsModal = bootstrap.Modal.getInstance(modal_element);\n    if (bsModal) {\n      bsModal.hide();\n    } else {\n      bsModal = new bootstrap.Modal(modal_element);\n      if (bsModal) {\n        bsModal.hide();\n      }\n    }\n\n    // Reenable listener - just in case it reopens\n    setTimeout(function(){\n      this.setupScannerVisibleListener();\n    }.bind(this), 500);\n  }\n\n  setQRScannerState(state) {\n    const loadingContainer = document.getElementById('signup-qr-code-scanner-loading-container');\n    const processingContainer = document.getElementById('signup-qr-code-scanner-processing-container');\n\n    // Hide all overlays first\n    loadingContainer.classList.add('hidden');\n    processingContainer.classList.add('hidden');\n\n    // Show the appropriate overlay based on state\n    switch(state) {\n      case 'loading':\n        loadingContainer.classList.remove('hidden');\n        break;\n      case 'processing':\n        processingContainer.classList.remove('hidden');\n        break;\n      case 'scanning':\n      default:\n        // Both overlays remain hidden, showing the scanner\n        break;\n    }\n  }\n\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"campaign-manager\"\nexport default class extends Controller {\n  ckeditorInstance = undefined;\n  \n  assessBySegment(e) {\n\n    $('#assessments_by_segment').html('<p class=\"text-center py-5 my-5\"><em class=\"far fa-spin fa-circle-notch fa-5x\"></em></p>')\n    $('#assessments_by_segment_chart').html('')\n\n    var kind = ''\n    var html = ''\n    var data = new google.visualization.DataTable();\n\n    if(e.currentTarget.name == 'commit'){\n      if($('#label-assessors').hasClass('btn-primary')) {\n        kind = 'assessors'\n      } else {\n        kind = 'alphabetical'\n      }\n    } else {\n\n      var item = e.currentTarget\n    \n      if(item.dataset.kind == 'assessors') {\n        $('#label-assessors').addClass('btn-primary').removeClass('btn-outline-primary')\n        $('#label-alphabetical').addClass('btn-outline-primary').removeClass('btn-primary')\n      } else {\n        $('#label-assessors').addClass('btn-outline-primary').removeClass('btn-primary')\n        $('#label-alphabetical').addClass('btn-primary').removeClass('btn-outline-primary')\n      }\n\n      kind = item.dataset.kind\n    }\n\n    data.addColumn(\"string\", i18n_string(\"signup_questions.option\", 'Option'))\n    data.addColumn(\"number\", i18n_string(\"campaign_manager.total\", 'Total'))\n    data.addColumn({ type: \"string\", role: \"annotation\" })\n    data.addColumn({role: \"tooltip\", type: \"string\", p: { html: true, role: \"tooltip\"}})\n\n    var arr = [];\n\n    $.get(\"/assessments/\" + $('#campaign_id').val() + \"/get_assess_by_segment_options\", { kind: kind, primary_option_id: $('#option_list_primary').val(),  secondary_option_id: $('#option_list_secondary').val()}, function(content){\n      if(content.status == 200) {\n        \n        var total = 0\n        $.each(content.data, function(k, v){\n          total += v[1]\n          html += '<tr><td>' + v[0] + '</td><td>' + v[1] + '</td></tr>'\n          arr.push([v[0].slice(0,65), v[1], v[1] + \" \", \"<strong>\" + v[0] + \"</strong><br />Total: \" + v[1]])\n        })\n\n        data.addRows(arr);\n\n        var options = {\n          annotations: {\n            alwaysOutside: false,\n            textStyle: {\n              fontSize: 12\n            }\n          },\n          bar: {\n            groupWidth: \"70%\"\n          },\n          chartArea: {\n            height: arr.length * 40,\n            left: 235,\n            top: 40,\n            width: \"100%\",\n          },\n          height: arr.length * 40 + 75,\n          legend: 'none',\n          colors: ['#4285f4'],\n          hAxis: {\n            textStyle: {\n              fontSize: 12\n            }\n          },\n          vAxis: {\n            textStyle: {\n              fontSize: 12\n            },\n            viewWindowMode: \"pretty\"\n          },\n          tooltip: {\n            isHtml: true\n          }\n        };\n        \n        if(total > 0) {\n          var chart = new google.visualization.BarChart(document.getElementById('assessments_by_segment'));\n          chart.draw(data, options);\n        } else {\n          $('#assessments_by_segment').html(\"\")\n        }\n\n        let total_participants_text = i18n_string(\"campaign_manager.total_participants\", \"Total Participants\")\n        html += '<tr><td><strong>'+total_participants_text+'</strong></td><td><strong>' + total + '</strong></td></tr>'\n        $('#total_participants').html('<strong>'+total_participants_text+': ' + total + '</strong>');\n        $('#assessments_by_segment_chart').html('<thead><th width=\"75%\">Group</th><th width=\"25%\">'+i18n_string(\"campaign_manager.number_of_participants\", \"# of Participants\")+'</th></thead><tbody>' + html + '</tbody>')\n        \n      } else {\n        alert(i18n_string(\"general.error_loading_data_please_try_again\", \"Error loading data. Please try again.\"))\n      }\n    });\n  }\n\n  connect() {\n    const controllerRef = this\n\n    if( $('.ckeditor').length ){\n      this.initializeCkEditor()\n    }\n\n    if( document.getElementById('comparison_group_id') !== null ){\n\n      var item = document.getElementById('comparison_group_id')\n      this.loadComparisonGroups( item.dataset.id, item.value)\n    }\n\n    // Only initialize select2/multiselect if matching elements exist on the page\n    // (these plugins are not needed on wizard pages and may throw if not loaded)\n    if ($(\"select.select2\").length) {\n      this.initializeSelect2(\"select.select2\", {})\n    }\n    if ($(\".multiselect\").length) {\n      let placeholder_text = i18n_string(\"campaign_manager.select_options\",\"Select Options\")\n      let search_text = i18n_string(\"campaign_manager.search_options\",\"Search Options\")\n      this.initializeMultiselect(\".multiselect\", {columns: 2, search: true, selectAll: true, texts: { placeholder: placeholder_text, search: search_text}})\n    }\n\n    // Determine if we have the snapshot updates modal to show\n    if($('#campaign-wizard-callout-modal').length){\n      $(\"#campaign-wizard-callout-modal\").modal()\n      $('#campaign-wizard-callout-modal').modal('show')\n    }\n  }\n\n  calculateDate() {\n    const controller = this\n    $.get('/assessments/calculate_end_date', { start_date: $('#campaign_start_date').val(), weeks: $('#campaign_number_of_weeks').val()}, function(data){\n      $('#campaign_end_date').attr('min', $('#campaign_start_date').val());\n      $('#campaign_end_date').val(data.date);\n      controller.validateEndDate()\n    })\n  }\n\n  validateEndDate() {\n    const startDate = document.getElementById('campaign_start_date')?.value\n    const endDate = document.getElementById('campaign_end_date')?.value\n    const endDateField = document.getElementById('campaign_end_date')\n    const errorDiv = document.getElementById('end-date-error')\n\n    if (startDate && endDate && endDate < startDate) {\n      endDateField.classList.add('is-invalid')\n      if (errorDiv) errorDiv.textContent = 'End date must be on or after the start date'\n    } else {\n      endDateField.classList.remove('is-invalid')\n      if (errorDiv) errorDiv.textContent = ''\n    }\n  }\n\n  calculateTotal() {\n    var total = 0;\n    $.each( $('.option-list-input'), function(k, v){\n      if(v.value != '') {\n        total = total + parseInt(v.value);\n      }\n    });\n\n    $('#invite_total').val(total);\n  }\n\n  changeDefaultCampaign() {\n    var current_template = document.getElementById('customer_sub_account_campaign_current')\n    var template = document.getElementById('customer_sub_account_campaign_default')\n    var frequency = document.getElementById('customer_sub_account_campaign_frequency')\n    var start_date = document.getElementById('next_campaign_start_date')\n\n    start_date.disabled = false\n\n    var option = template.options[template.selectedIndex]\n    const today = new Date();\n\n    if(template.value > 0 && template.value != current_template.value) {\n      if(option.dataset.endDate <= today.toISOString().split('T')[0]){\n        // Set the minimum start date to tomorrow\n        var next_start_date_min = new Date(today)\n        next_start_date_min.setDate(next_start_date_min.getDate() + 1)\n\n        // Parse date string as local date to avoid timezone issues\n        const [year1, month1, day1] = option.dataset.startDate.split('-').map(num => parseInt(num, 10))\n        var next_start_date_display = new Date(year1, month1 - 1, day1)\n        next_start_date_display.setMonth(next_start_date_display.getMonth() + parseInt(frequency.value))\n      } else {\n        // Parse date string as local date to avoid timezone issues\n        const [year2, month2, day2] = option.dataset.startDate.split('-').map(num => parseInt(num, 10))\n        var next_start_date_min = new Date(year2, month2 - 1, day2)\n        next_start_date_min.setDate(next_start_date_min.getDate() + 1)\n\n        const [year3, month3, day3] = option.dataset.startDate.split('-').map(num => parseInt(num, 10))\n        var next_start_date_display = new Date(year3, month3 - 1, day3)\n        next_start_date_display.setMonth(next_start_date_display.getMonth() + parseInt(frequency.value))\n\n      }\n\n      // We need to set the display for the next available start date to tomorrow.\n      // This has to be done differently than setting the next_start_date_min above because we already have the next_start_date_display set.\n      if(next_start_date_display <= today){\n        const tomorrow = new Date(today)\n        tomorrow.setDate(tomorrow.getDate() + 1)\n        next_start_date_display = tomorrow\n      }\n\n      start_date.min = next_start_date_min.toISOString().split('T')[0]\n      start_date.value = next_start_date_display.toISOString().split('T')[0]\n    } else {\n      // Parse date string as local date to avoid timezone issues\n      const dateStr = option.dataset.startDate\n      const [year, month, day] = dateStr.split('-').map(num => parseInt(num, 10))\n      var next_start_date_display = new Date(year, month - 1, day) // month is 0-indexed\n      next_start_date_display.setMonth(next_start_date_display.getMonth() + parseInt(frequency.value))\n\n      start_date.value = next_start_date_display.toISOString().split('T')[0]\n    }\n  }\n\n  chooseQuestion1(event) {\n    var val = event.target.value\n    if(val != \"\"){\n      $.get(\"/assessments/get_question_options\", { id: val, question: 1 }, function(data){\n        if(data.status == 200) {\n          $('#question_1_options').html(data.html)\n          // If modal\n          if(document.getElementById('new_campaign_modal')) {\n            $(\"#question_1_1\").select2({width:'100%', dropdownParent: $('#new_campaign_modal .modal-content')})\n          } else {\n            $(\"#question_1_1\").select2({width:'100%'})\n          }\n          // Else\n\n          $.each($(\"#question_2 option\"), function(){\n            $(this).removeClass(\"hidden\");\n          });\n\n          $('#question_2 option[value=\"' + val + '\"]').addClass(\"hidden\");\n          $('#question_2').prop('selectedIndex', 0);\n\n          $('#question_2_options').html('');\n        }\n      });\n      $('#question_2_category, #question_1_options').removeClass('hidden');\n      $('#new-comparative-groups-options').collapse('show');\n    } else {\n      $('#question_2_category, #question_1_options').addClass('hidden');\n      $('#new-comparative-groups-options').collapse('hide');\n      $('#question_2_options').html('');\n      $('#question_1_options').html('')\n    }\n  }\n\n  chooseQuestion2(event) {\n    if(event.target.value == '') {\n      $('#question_2_options').addClass('hidden')\n      $('#question_2_options').html('');\n    } else {\n      $.get(\"/assessments/get_question_options\", { id: event.target.value, question: 2 }, function(data){\n        if(data.status == 200) {\n          $('#question_2_options').html(data.html);\n          if(document.getElementById('new_campaign_modal')) {\n            $(\"#question_2_1\").select2({width:'100%', dropdownParent: $('#new_campaign_modal .modal-content')});\n          } else {\n            $(\"#question_2_1\").select2({width:'100%'})\n          }\n          $('#question_2_options').removeClass('hidden');\n        }\n      })\n    }\n    $('#new-comparative-groups-options').collapse('show');\n  }\n\n  clearAll(e) {\n    var item = e.currentTarget\n    $(\"#\" + $(item).data('field') + \" > option\").prop(\"selected\", false);\n    $(\"#\" + $(item).data('field') ).trigger(\"change\");\n  }\n\n  selectAll(e) {\n    var item = e.currentTarget\n    $(\"#\" + $(item).data('field') + \" > option\").prop(\"selected\", true);\n    $(\"#\" + $(item).data('field') ).trigger(\"change\");\n  }\n\n  closeNewOption() {\n    var modalEl = document.getElementById('add_new_option_modal');\n    if (modalEl) {\n      var modal = bootstrap.Modal.getInstance(modalEl);\n      if (modal) modal.hide();\n    }\n    $('#question_1_1_new').prop(\"selectedIndex\", 0);\n    $('#question_2_1_new').prop(\"selectedIndex\", 0);\n    $('#question_invites_new').val('');\n  }\n\n  createComparisonGroups(event) {\n    event.preventDefault()\n    $('#saved-comparative-groups').collapse(\"show\");\n    $('#new-comparative-groups').collapse('hide');\n\n    $.get(\"/assessments/create_comparison_groups\", { \"question_1_id\": $('#question_1').val(), \"question_1\": $('#question_1_1').val(), \"question_2_id\": $('#question_2').val(), \"question_2\": $(\"#question_2_1\").val() }, function(data) {\n      if(data.status == 200) {\n        $('#set-invitees').html(data.html);\n      }\n    });\n  }\n\n  deleteCampaign(event) {\n    var ans = confirm(i18n_string(\"campaign_manager.are_you_sure_you_want_to_delete_this_campaign\", \"Are you sure you want to delete this campaign?\"))\n    if(!ans) {\n      event.preventDefault()\n    }\n  }\n\n  deleteNewRow(event) {\n    let controllerRef = this\n    event.preventDefault();\n    controllerRef.closeNewOption();\n  }\n\n  deleteRow(event) {\n    let controllerRef = this\n\n    event.preventDefault();\n    var item = event.target\n    var ans = confirm(i18n_string(\"campaign_manager.are_you_sure_you_want_to_delete_this_row\", \"Are you sure you want to delete this row?\"));\n    if(ans) {\n      if(item.classList.contains(\"fa-trash\")){\n        item = item.parentElement\n      }\n\n      var elem = document.getElementById(item.dataset.id)\n      $(elem).attr('style', 'display: none !important');\n\n      elem = document.getElementById('deleted_' + item.dataset.id)\n      $(elem).val(1)\n\n      elem = document.getElementById('invitees_' + item.dataset.id)\n      $(elem).val(0)\n\n      controllerRef.calculateTotal();\n    }\n  }\n\n  initializeMultiselect(selector, options) {\n    $(selector).each(function () {\n      $(this).multiselect(options);\n    });\n  }\n\n  initializeSelect2(selector, options) {\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n  \n  initializeCkEditor() {\n    // Initialize CKEditor    \n    var editor = CKEDITOR.instances.resource_content;\n    if(!editor) {\n      this.ckeditorInstance = CKEDITOR.replace(\"customer_sub_account_campaign_help\", {\n        height: '300px',\n        toolbar: [\n          {\n            name: 'basicstyles',\n            groups: ['basicstyles', 'cleanup'],\n            items: ['Bold', 'Italic','RemoveFormat','-']\n          },\n          { name: 'links', items: ['Link','Unlink'] },\n          {\n            name: 'paragraph',\n            groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n            items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n          },\n          {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n          {name: 'colors', items: ['TextColor', 'BGColor']}\n        ]\n      });\n\n      // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n      /* Here we are latching on an event ... in this case, the dialog open event */\n      CKEDITOR.on('dialogDefinition', function(ev) {\n        try {\n          /* this just gets the name of the dialog */\n    \n          var dialogName = ev.data.name;\n          /* this just gets the contents of the opened dialog */\n    \n          var dialogDefinition = ev.data.definition;\n          /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n          if(dialogName == 'link') {\n            \n            /* Getting the contents of the Target tab */\n            var informationTab = dialogDefinition.getContents('target');\n          \n            /* Getting the contents of the dropdown field \"Target\" so we can set it */\n            var targetField = informationTab.get('linkTargetType');\n          \n            /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n            targetField['default'] = '_blank';\n          \n          }\n        } catch(exception) {\n          alert('Error ' + ev.message);\n        }\n      });\n    }\n  }\n\n  insertNewRow(event) {\n\n    let controllerRef = this\n\n    event.preventDefault();\n    var grouping_id = $(\"#all_option_list > li\").first().attr('id').split(\"_\")[1];\n    var d = new Date();\n    var now = d.getTime();\n    var name = $('#question_1_1_new option:selected').text();\n    var id = \"grouping_\" + grouping_id + \"_\" + $('#question_1_1_new').val();\n    if( $('#question_2_1_new').val() ) {\n      id += \"-\" + $('#question_2_1_new').val();\n      name += \" - \" + $('#question_2_1_new option:selected').text();\n    }\n\n    var li = '<li class=\"list-group-item d-flex justify-content-between border\" id=\"item_' + now + '\" >';\n    li += '<input type=\"hidden\" name=\"leadership_group_id[]\" value=\"\" />';\n    li += '<input type=\"hidden\" name=\"question_slug[]\" value=\"' + id + '\" />';\n    li += '<input type=\"hidden\" name=\"new[]\" value=\"true\" />';\n    li += '<input type=\"hidden\" name=\"delete[]\" id=\"deleted_item_' + now + '\" value=\"0\" class=\"delete\">';\n    li += '<input type=\"hidden\" name=\"option_1[]\" value=\"' + $('#question_1_1_new').val() + '\">';\n    if( $('#question_2_1_new').val() ) {\n      li += '<input type=\"hidden\" name=\"option_2[]\" value=\"' + $('#question_2_1_new').val() + '\">';\n    }\n    li += '<input type=\"hidden\" name=\"name[]\" value=\"' + name + '\">';\n    li += '<label class=\"mt-1\"><input type=\"checkbox\" data-id=\"item_' + now + '\" class=\"mass-delete me-2\"><small>' + name + '</small></label>';\n    li += '<span class=\"d-flex justify-content-end w-25\"><input type=\"hidden\" id=\"invitees_item_' + now + '\" name=\"comparison_group_invites[]\"><button class=\"btn btn-link delete-row\" data-action=\"campaign-manager#deleteRow\" data-id=\"item_' + now + '\"><em class=\"fa fa-trash text-danger\"></em></button></span>';\n    li += '</li>';\n    $('#all_option_list').append(li);\n\n    controllerRef.calculateTotal();\n    controllerRef.closeNewOption();\n  }\n\n  loadComparisonGroups(campaign_id, comparison_group_id) {\n    let controllerRef = this\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: \"/assessments/load_comparison_group_options\",\n      data: { campaign_id: campaign_id, comparison_group_id: comparison_group_id },\n      type: \"GET\",\n      success: function(e) {\n        if(e.status == 200) {\n          $('#new_groups').val(false);\n          $('#set-invitees').html(e.html);\n          $('#new-comparative-groups').removeClass('show')\n          controllerRef.calculateTotal();\n        } else {\n          $('#set-invitees').html(\"<p class='text-danger'>\"+i18n_string(\"campaign_manager.error_loading_comparison_groups\",\"Error loading comparison groups.\")+\"</p>\")\n        }\n      }\n    })\n  }\n\n  massDeleteRows(event) {\n    let controllerRef = this\n\n    event.preventDefault();\n    var ans = confirm(i18n_string(\"campaign_manager.are_you_sure_you_want_to_delete_these_rows\",\"Are you sure you want to delete these rows?\"));\n    if(ans) {\n      $.each( $('input.mass-delete'), function(k, v){\n        if( $(v).prop(\"checked\") ){\n          $('#deleted_' + $(v).data(\"id\")).val(1);\n          $('#invitees_' + $(v).data(\"id\")).val(0);\n          $('#' + $(v).data(\"id\")).attr('style', 'display: none !important');\n        }\n      });\n\n      controllerRef.calculateTotal();\n    }\n  }\n\n  resetComparisonGroups(event) {\n    event.preventDefault();\n    var ans = confirm(i18n_string(\"campaign_manager.are_you_sure_you_want_to_reset_your_groups\",\"Are you sure you want to reset your invited groups and start over?\"));\n    if(ans) {\n      $('#set-invitees').html('<p class=\"text-center py-5\"><em class=\"fa fa-circle-notch fa-spin fa-4x text-light\"></em></p>');\n      $('#invitee_total').val('');\n      $('#saved-comparative-groups').collapse('hide');\n      $('#new-comparative-groups').collapse('show');\n  \n      $('#question_1').prop(\"selectedIndex\", 0);\n      $('#question_2').prop(\"selectedIndex\", 0);\n      $('#question_2_category').addClass(\"hidden\");\n      $('#new-comparative-groups-options').collapse('hide');\n      $(\"#question_1_options\").html('');\n      $(\"#question_2_options\").html('');\n  \n      $('#invite_total').val('');\n  \n      $('#new_groups').val('true');\n      $('#comparison_group_id').remove();\n  \n      $.each( $('#saved-comparative-groups-list > a'), function(key){\n        $(this).removeClass(\"active\");\n      });\n    }\n  }\n\n  sendCampaignNotification(event) {\n    var ans = confirm(\"Are you sure you want to send a notification to your particpants about the assessment period being open?\")\n    if(ans) {\n\n    } else {\n      event.preventDefault();\n    }    \n  }\n\n\n  showModal(event) {\n    event.preventDefault()\n    var myModal = new bootstrap.Modal(document.getElementById('campaign_overview_video'), {})\n\n    myModal.show()\n    $('#campaign_overview_video_iframe').attr('src', 'https://player.vimeo.com/video/894966568?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479')\n  }\n\n\n  toggleFeedbackQuestions(e) {\n    var max_piq_questions = document.getElementById('max_piq_questions').value\n    var checked = []\n    var elem = document.getElementById('feedback_questions').getElementsByTagName('input')\n    for(var i = 0; i < elem.length; i++){\n      if(elem[i].checked) {\n        checked.push(i)\n      }\n    }\n\n    if(checked.length > max_piq_questions) {\n      e.preventDefault()\n      var string = i18n_string(\"campaign_manager.too_many_checked\", \"You can only have at most \" + max_piq_questions + \" questions checked at a time\").replace(\"%{total}\", max_piq_questions)\n      alert( string )\n    }\n  }\n\n  toggleLeadershipAdmin(event) {\n    event.preventDefault()\n\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n\n    var item = event.currentTarget\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: \"/assessments/toggle_admin_status\",\n      data: { id: item.dataset.id, campaign: item.dataset.campaign },\n      type: \"POST\",\n      success: function(e) {\n        if(e.status == 200) {\n          $('#leadership_status_' + item.dataset.id).html( e.html ) \n        }\n      }\n    })\n  }\n\n  toggleLeadershipOptions(event) {\n    var element = document.getElementById('import-bulk-action-leadership-row-' + event.target.dataset.row_id)\n    if(event.target.value == \"leadership\") {\n      element.style.display = 'block'\n    } else {\n      element.style.display = 'none'\n    }\n  }\n\n  // toggleQuestionOptions(e) {\n  //   var item = e.currentTarget\n\n\n  //   console.log(\"woot woot\")\n\n  //   if(item.id == \"option_list_primary\" && item.value == \"\") {\n  //     // $('#option_list_secondary').val('none');\n  //     $(\"#option_list_secondary\").val(null).trigger(\"change\");\n  //   } else if(item.id == \"option_list_primary\" && item.value == \"none\") {\n  //     $(\"#option_list_secondary\").val(null).trigger(\"change\");\n  //   } else if(item.id == \"option_list_primary\" && item.value > 0 ) {\n  //     $(\"#option_list_secondary\").val(null).trigger(\"change\");\n  //   }\n  //   // } else if(item.id == \"option_list_secondary\" && item.value > 0) {\n  //   //   $('#option_list_primary').val(\"\");\n  //   // } else if(item.id == \"option_list_secondary\" && item.value == \"\") {\n  //   //   $('#option_list_primary').val(\"none\");\n  //   // } else if(item.id == \"option_list_secondary\" && item.value == \"none\") {\n  //   //   $('#option_list_primary').val(\"\");\n  //   // }\n  // }\n\n  updateParticipationGoal(event) {\n    var total = event.target.dataset.invites\n    var goal = event.target.value\n\n    document.getElementById('total_respondents').innerHTML = Math.round(total * (goal / 100))\n  }\n\n  verifyAutoSettings(event) {\n    var campaigns = document.getElementById('customer_sub_account_campaign_default')\n    var start_date = document.getElementById('next_campaign_start_date')\n\n    var alerts = []\n\n    if(campaigns.value == \"\") {\n     alerts.push(i18n_string(\"campaign_manager.please_select_a_campaign\", \"Please select a campaign\"))\n    }\n\n    if(start_date.value == \"\"){\n      alerts.push(i18n_string(\"campaign_manager.please_select_start_date\", \"Please the start date for the new campaign\"))\n    }\n\n    if(alerts.length > 0){\n      alert(alerts.join(\"\\n\"))\n      event.preventDefault()\n    }\n  }\n\n  verifySendingData(event) {\n    \n    var auto_notification = document.getElementById('campaign_inform_at_start')\n    var notification_time = document.getElementById('campaign_inform_at_time')\n    var notification_zone = document.getElementById('campaign_inform_at_timezone')\n    if(auto_notification.value == 'true' && (notification_time.value == '' || notification_zone.value == '') ) {\n      alert(i18n_string(\"campaign_manager.please_select_automatic_settings\", \"Please select an Automatic Notification Time and Automatic Notification Timezone\"))\n      event.preventDefault()\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport ValidateFormController from './validate_form_controller.js'\n\n// Connects to data-controller=\"certificate\"\nexport default class extends ValidateFormController {\n  formElement = undefined;\n  processingCertificateDownload = false;\n\n  connect() {\n    this.element.addEventListener('turbo:submit-start', this.validateCertificateForm.bind(this));\n    this.element.addEventListener('submit', this.validateCertificateForm.bind(this));\n    this.element.noValidate = false;\n    this.element.addEventListener('change', this.checkChangedInputs.bind(this));\n\n    this.formElement = this.element;\n  }\n\n  hidePreviewConfirmation(event) {\n    event.preventDefault();\n    $(\"#email-transcript-organization-preview-div\").slideUp();\n    $(\"#email-transcript-organization-form-div\").slideDown();\n  }\n\n  showPreviewConfirmation(event) {\n    event.preventDefault();\n    let valid = true;\n    if (!$(\"#name\").val()) {\n      valid = false;\n    }\n    if (!$(\".transcript-checkbox:checked\").length) {\n      valid = false;\n    }\n    if(valid) {\n      clearJsAlerts();\n\n      var versionSelectedImage = $(\"input[name='wbi_version_id']:checked\").data('image');\n      $('.transcript-preview-holder').css('background-image', 'url(' + versionSelectedImage + ')');\n      var nameStr = $(\"#name\").val();\n      var dateStr = '';\n      $(\".transcript-checkbox:checked\").each(function(){\n        if(dateStr != '')\n        {\n          dateStr += \", \";\n        }\n        dateStr += $(this).data(\"preview\");\n      });\n      $(\"#transcript-preview-name\").html(nameStr);\n      $(\"#transcript-preview-dates\").html(dateStr);\n      $(\"#email-transcript-organization-form-div\").slideUp();\n      $(\"#email-transcript-organization-preview-div\").slideDown();\n    } else {\n      doJsAlert('<div class=\"alert alert-danger\">'+i18n_string(\"certificate.enter_your_name_and_select_date\", \"Enter your name and select at least one date to continue.\")+'</div>');\n    }\n  }\n\n  submitClick(event) {\n    let kind = $(event.currentTarget).data(\"kind\");\n    if (kind) {\n      $(\"#delivery_kind\").val(kind);\n    }\n  }\n\n  validateCertificateForm(event) {\n    let isValid = true;\n    let errors = [];\n\n    $('#message-container').html('')\n\n    if (this.processingCertificateDownload){\n      event.preventDefault();\n      return false;\n    }\n\n    this.processingCertificateDownload = true;\n\n    let passedStandardValidation = super.validateForm(event);\n\n    if (passedStandardValidation) {\n      // Make sure at least one date is selected\n      if ($(\".transcript-checkbox:checked\").length == 0) {\n        isValid = false;\n        errors.push(i18n_string(\"certificate.please_select_at_least_one_date\",\"Please select at least one date\"));\n      }\n      if (!isValid){\n        event.preventDefault();\n        doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>');\n      }\n    }\n\n    if (isValid && passedStandardValidation) {\n      let delivery_kind = $(\"#delivery_kind\").val();\n      // Disable buttons\n      $(this.formElement).find(\"button\").each(function(){\n        this.disabled = true;\n      });\n      // Show processing message\n      $(\"#certificate_processing_message_download\").hide();\n      $(\"#certificate_processing_message_email\").hide();\n      if (delivery_kind == \"download\") {\n        $(\"#certificate_processing_message_download\").show();\n      } else {\n        $(\"#certificate_processing_message_email\").show();\n      }\n      $(\"#certificate_processing_message_box\").show();\n      let controllerRef = this;\n      if (delivery_kind == \"download\") {\n        setTimeout(function () {\n          // Enable buttons\n          $(controllerRef.formElement).find(\"button\").each(function(){\n            this.disabled = false;\n          });\n          // hide processing messages\n          $(\"#certificate_processing_message_box\").hide();\n          controllerRef.processingCertificateDownload = false;\n        }, 1800);\n      }\n    } else {\n      this.processingCertificateDownload = false;\n    }\n\n    return isValid && passedStandardValidation;\n  }\n\n  versionClick(event){\n    let wbi_version_id = $(event.currentTarget).data(\"wbi_version_id\");\n    // ' %>\" id=\"transcript-perm-checkboxes-\n    let $thisContainer = $(\"#transcript-perm-checkboxes-\"+wbi_version_id);\n    if ($thisContainer.hasClass(\"faded-container\")) {\n      // Changed\n      $(\".transcript-perm-checkboxes\").not(\".faded-container\").each(function(){\n        $(this).find(\"input\").each(function(){\n          this.checked = false;\n          this.disabled = true;\n        });\n        $(this).addClass(\"faded-container\");\n      });\n      $thisContainer.find(\"input\").each(function(){\n        this.disabled = false;\n      });\n      $thisContainer.removeClass(\"faded-container\");\n\n    }\n\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"checkbox-toggle\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this\n\n    if (!this.element.dataset || !this.element.dataset.toggletarget) {\n      //console.log(\"I'm missing something\");\n      return;\n    }\n\n    let toggleTarget = this.element.dataset.toggletarget;\n    this.element.addEventListener('click', function (event) {\n      if (this.checked) {\n        $(toggleTarget).show();\n      } else {\n        $(toggleTarget).hide();\n      }\n    }, false);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"ckeditor-browser\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  file_clicked(e) {\n    let file_path = e.currentTarget.dataset.file;\n    let ckeditor_func = e.currentTarget.dataset.func;\n    if (file_path && ckeditor_func) {\n      window.opener.CKEDITOR.tools.callFunction(ckeditor_func, file_path);\n      window.close();\n    }\n  }\n\n  file_upload_form_changed(e) {\n    let file_field = document.getElementById(\"file_upload_field\");\n    if (file_field && file_field.files.length > 0) {\n      let upload_container_overlay = document.getElementById(\"uploading-container\");\n      if (upload_container_overlay) {\n        upload_container_overlay.style.display = '';\n        document.body.classList.add(\"noscroll\");\n      }\n      e.currentTarget.submit();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"combined-question\"\nexport default class extends Controller {\n\n  connect() {\n    this.new_row_index = (new Date().getTime() / 1000) | 0; // The \"| 0\" truncates to whole number\n\n    if (document.inititialzedLoadCombinedQuestionDataListener == undefined) {\n      document.addEventListener('loadCombinedQuestionData', this.loadCombinedQuestionData.bind(this));\n      document.inititialzedLoadCombinedQuestionDataListener = true;\n    }\n    if (document.inititialzedLoadCombinedSubAccountDataListener == undefined) {\n      document.addEventListener('loadCombinedSubAccountData', this.loadCombinedSubAccountData.bind(this));\n      document.inititialzedLoadCombinedSubAccountDataListener = true;\n    }\n\n    window.combinedQuestionOptionCustomRendering = function(option,container) {\n      if (!option.id || !option.title) {\n        return option.text;\n      }\n\n      // Find selects that contain this option\n      // let name_str = $(\"option[value='\"+option.id+\"']\").closest(\"select\").attr(\"name\");\n      // let name_str_array = name_str.split(/[\\[|\\]]/)\n      // let customer_sub_account_id = name_str_array[1];\n\n      // option.title should contain customer_sub_account_id=[id]\n      let csa_parts = option.title.split(':')\n      let customer_sub_account_id = csa_parts[1];\n\n      let option_already_selected = false;\n      document.querySelectorAll(\".sub-account-question-option-cell-\" + customer_sub_account_id).forEach(function (optionCell) {\n        let select_element = optionCell.querySelector('select');\n        for (let check_option of select_element.selectedOptions) {\n          if (check_option.value == option.id) {\n            option_already_selected = true;\n            return;\n          }\n        }\n      });\n\n      if (option_already_selected) {\n        return null;\n      }\n\n      // console.dir(option);\n      // console.dir(container.dataset.select2Id);\n      return option.text;\n    };\n  }\n\n  ///////\n\n  addAllOptions(event, perform_only_for_customer_sub_account_id=null) {\n    if (event) {\n      event.preventDefault();\n      event.currentTarget.blur();\n    }\n    let header_cell_list = document.getElementsByClassName('sub-account-question-header-cell');\n\n    let table = document.getElementById(\"edit_question_group_table\");\n    let tbody = table.querySelector('tbody');\n    for(let i = 0; i < header_cell_list.length; i++) {\n      let header_cell = header_cell_list[i];\n      if (header_cell.querySelector('select').value) {\n        let option_list = JSON.parse(header_cell.dataset.optionList);\n        let customer_sub_account_id = header_cell.dataset.customerSubAccountId;\n        let existing_option_cells = document.getElementsByClassName('sub-account-question-option-cell-'+customer_sub_account_id);\n        let existing_option_names = document.getElementsByClassName('option-name');\n\n        if (perform_only_for_customer_sub_account_id) {\n          if (parseInt(perform_only_for_customer_sub_account_id) != parseInt(customer_sub_account_id)) {\n            continue;\n          }\n        }\n\n        for (let j = 0; j < option_list.length; j++) {\n          // option_list[j][0/1] 0=name / 1=option_id\n          // Make sure this option_id is not already used in dropdown in this column\n          let is_option_id_used = false;\n          for(let k = 0; k < existing_option_cells.length; k++) {\n            let existing_option_cell = existing_option_cells[k];\n            if (existing_option_cell.querySelector('select').value == option_list[j][1]) {\n              is_option_id_used = true;\n              break;\n            }\n          }\n          if (!is_option_id_used) {\n            // See if the option name matches an existing option and link to that\n            let matching_row = null;\n            for(let k = 0; k < existing_option_names.length; k++) {\n              let option_name = existing_option_names[k].value;\n              if (option_name !== ''){\n                if (normalize_string(option_name) == normalize_string(option_list[j][0])) {\n                  matching_row = existing_option_names[k].closest('tr');\n                  break;\n                }\n              }\n            }\n            // Check for a similar match if no exact match found\n            if (!matching_row) {\n              for(let k = 0; k < existing_option_names.length; k++) {\n                let option_name = existing_option_names[k].value;\n                if (option_name !== ''){\n                  if (are_strings_similar(normalize_string(option_name), normalize_string(option_list[j][0]), 80)) {\n                    matching_row = existing_option_names[k].closest('tr');\n                    break;\n                  }\n                }\n              }\n            }\n            if (matching_row) {\n              // Select this option_id for this row\n              let matching_select = matching_row.querySelector('.sub-account-question-option-cell-'+customer_sub_account_id+' select');\n              if (matching_select) {\n                let optionToSelect = matching_select.querySelector('option[value=\"'+option_list[j][1]+'\"]');\n                if (optionToSelect) {\n                  optionToSelect.selected = true;\n                }\n                matching_select.dispatchEvent(new Event('change'));\n              }\n            } else {\n              // Otherwise add it as a new option row\n              this.new_row_index += 1;\n              let newRow = this.addStandardOptionRow(tbody, this.new_row_index, option_list[j][0], '');\n              // Loop through columns and add cells -- When we get to the current customer_sub_account_id then we make sure that option is selected!\n              table.querySelectorAll('.sub-account-question-header-cell').forEach(function(newRowHeaderCell){\n                let new_row_customer_sub_account_id = newRowHeaderCell.dataset.customerSubAccountId;\n                let selected_options_array = [];\n                let option_list = JSON.parse(newRowHeaderCell.dataset.optionList);\n                if (parseInt(new_row_customer_sub_account_id) === parseInt(customer_sub_account_id)) {\n                  selected_options_array.push(parseInt(option_list[j][1]));\n                }\n                this.addOptionCell(newRow, option_list, selected_options_array, new_row_customer_sub_account_id);\n              }.bind(this));\n            }\n\n          }\n\n        }\n      }\n    }\n    if (perform_only_for_customer_sub_account_id) {\n      this.refreshRemainingOptionCounts(null, perform_only_for_customer_sub_account_id);\n    }\n  }\n\n  addAllOptionsForSubAccount(event) {\n    event.preventDefault();\n    let link = event.currentTarget;\n    let sub_account_id = link.dataset.subAccountId;\n    if (sub_account_id) {\n      this.addAllOptions(null, sub_account_id);\n      let selectElement = document.getElementById(\"sub_account_question_\"+sub_account_id);\n      if (selectElement) {\n        $(selectElement).popover('hide');\n      }\n    }\n  }\n\n  addAllOptionsForSubAccountPopoverCancel(event) {\n    event.preventDefault();\n    let link = event.currentTarget;\n    let sub_account_id = link.dataset.subAccountId;\n    if (sub_account_id) {\n      let selectElement = document.getElementById(\"sub_account_question_\"+sub_account_id);\n      if (selectElement) {\n        $(selectElement).popover('hide');\n      }\n    }\n  }\n\n  bulkAddOptionNamesCancel(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n\n    document.getElementById(\"combined-question-edit-bulk-add-wrapper\").style.display = 'none';\n    document.getElementById(\"combined-question-edit-form-wrapper\").classList.remove('inactive');\n  }\n\n  bulkAddOptionNamesProcess(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n\n    let bulk_str = document.getElementById(\"bulk_add_option_names_input\").value;\n    let bulk_str_array = bulk_str.split(\"\\n\");\n    let controllerRef = this;\n    let first_new_row_index = -1;\n    bulk_str_array.forEach(function(option_name){\n      option_name = option_name.trim();\n      if (option_name !== '') {\n        controllerRef.new_row_index += 1;\n        if (first_new_row_index == -1) {\n          first_new_row_index = controllerRef.new_row_index;\n        }\n        controllerRef.addOptionGroupRow(controllerRef.new_row_index, option_name, '');\n      }\n    });\n\n    document.getElementById(\"combined-question-edit-bulk-add-wrapper\").style.display = 'none';\n    document.getElementById(\"combined-question-edit-form-wrapper\").classList.remove('inactive');\n\n    if (first_new_row_index !== -1) {\n      let newOptionField = document.querySelector('input[name=\"option_name['+first_new_row_index+']\"]');\n      if (newOptionField) {\n        newOptionField.focus();\n      }\n    }\n  }\n\n  bulkAddOptionNamesShow(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n\n    document.getElementById(\"bulk_add_option_names_input\").value = \"\";\n\n    document.getElementById(\"combined-question-edit-bulk-add-wrapper\").style.display = 'block';\n    document.getElementById(\"combined-question-edit-form-wrapper\").classList.add('inactive');\n  }\n\n  addOptionCell(tableRow, option_list, selected_options_array, customer_sub_account_id) {\n    let newRowCell = tableRow.insertCell(-1);\n    let optionNameInput = tableRow.querySelector(\".option-name\");\n    let name_str = optionNameInput.name;\n    let new_name_str = 'mapped_options['+customer_sub_account_id+']'+name_str.replace('option_name','')+'[]';\n    let cellHTML = '';\n    let delay_html = '';\n    if (document.combined_question_load_data && document.combined_question_load_row_data && document.combined_question_load_row_data[0] && document.combined_question_load_row_data[0]['selected_options']) {\n      let csa_count = Object.keys(document.combined_question_load_row_data[0]['selected_options']).length;\n      let total_cells = csa_count * document.combined_question_load_row_data.length;\n      if (total_cells > 200) {\n        let current_rows = tableRow.closest('table').rows.length;\n        // (total_cells-200)/10.0) | 0\n        delay_html = 'data-delay_init=\"'+(40+((current_rows/2.0) | 0))+'\"';\n      }\n    }\n    cellHTML += '<select name=\"'+new_name_str+'\" class=\"form-select form-select-sm\" multiple=\"multiple\" data-controller=\"select2\" '+delay_html+' data-show_select_all=\"yes\" data-show_close_btn=\"yes\" data-exclusive_options=\"yes\" data-dropdown_parent=\"body\" data-select2_template_result=\"combinedQuestionOptionCustomRendering\" data-action=\"change->combined-question#refreshRemainingOptionCounts\" data-customer-sub-account-id=\"'+customer_sub_account_id+'\">';\n    // option_list, selected_options\n    if (option_list && option_list != '') {\n      cellHTML += '';//'<option value=\"\"></option>';\n      for (let j = 0; j < option_list.length; j++) {\n        let sel = '';\n        if (selected_options_array && selected_options_array.indexOf(parseInt(option_list[j][1])) !== -1) {\n          sel = 'selected=\"selected\"';\n        }\n        cellHTML += '<option value=\"'+option_list[j][1]+'\" '+sel+' title=\"customer_sub_account_id:'+customer_sub_account_id+'\">'+option_list[j][0]+'</option>';\n      }\n    }\n    cellHTML += '</select>';\n    newRowCell.classList.add('sub-account-question-cell-'+customer_sub_account_id);\n    newRowCell.classList.add('sub-account-question-option-cell-'+customer_sub_account_id);\n    newRowCell.classList.add('sub-account-question-option-cell');\n    newRowCell.classList.add('small-table-cell');\n    newRowCell.style.width = '200px';\n    newRowCell.innerHTML = cellHTML;\n  }\n\n  addOptionGroupRow(index, option_name, combined_option_id) {\n    let table = document.getElementById(\"edit_question_group_table\");\n    let thead = table.querySelector('thead');\n    let tbody = table.querySelector('tbody');\n\n    let newRow = this.addStandardOptionRow(tbody, index, option_name, combined_option_id);\n    // let newRow = tbody.insertRow(-1);\n    // let checkboxCell = newRow.insertCell(-1);\n    // checkboxCell.classList.add('text-center');\n    // checkboxCell.innerHTML = '<input type=\"checkbox\" value=\"'+index+'\" class=\"bulk-action-checkbox\" />';\n    // let nameCell = newRow.insertCell(-1);\n    // let cellHTML = '<input type=\"text\" name=\"option_name['+index+']\" value=\"'+escapeHtml(option_name)+'\" class=\"option-name form-control form-control-sm\" />';\n    // cellHTML += '<input type=\"hidden\" name=\"combined_option_id['+index+']\" value=\"'+escapeHtml(option_id)+'\" />';\n    // cellHTML += '<input type=\"hidden\" name=\"option_delete['+index+']\" value=\"0\" id=\"option_delete_'+index+'\" />';\n    // nameCell.innerHTML = cellHTML;\n\n    table.querySelectorAll('.sub-account-question-header-cell').forEach(function(headerCell){\n      let option_list = JSON.parse(headerCell.dataset.optionList);\n      this.addOptionCell(newRow, option_list, [], headerCell.dataset.customerSubAccountId);\n    }.bind(this));\n\n    // $(\"#combined-question-add-all-options-btn\").hide();\n  }\n\n  addOptionGroupRowClick(event) {\n    event.preventDefault();\n    this.new_row_index += 1;\n    this.addOptionGroupRow(this.new_row_index, '', '');\n    let newOptionField = document.querySelector('input[name=\"option_name['+this.new_row_index+']\"]');\n    if (newOptionField) {\n      newOptionField.focus();\n    }\n  }\n\n  addStandardOptionRow(tbody, index, option_name, combined_option_id) {\n    let newRow = tbody.insertRow(-1);\n    newRow.id = \"option-row-\"+index;\n    let checkboxCell = newRow.insertCell(-1);\n    checkboxCell.classList.add('text-center');\n    checkboxCell.classList.add('fixed-left-checkbox');\n    checkboxCell.innerHTML = '<input type=\"checkbox\" value=\"'+index+'\" class=\"bulk-action-checkbox\" data-action=\"click->combined-question#checkboxCheckForAvailableBulkActions\" />';\n    let nameCell = newRow.insertCell(-1);\n    nameCell.classList.add('fixed-left-name');\n    let cellHTML = '<input type=\"text\" name=\"option_name['+index+']\" value=\"'+escapeHtml(option_name)+'\" class=\"option-name form-control form-control-sm\" maxlength=\"255\" />';\n    cellHTML += '<input type=\"hidden\" name=\"combined_option_id['+index+']\" value=\"'+escapeHtml(combined_option_id)+'\" />';\n    cellHTML += '<input type=\"hidden\" name=\"option_delete['+index+']\" value=\"0\" id=\"option_delete_'+index+'\" />';\n    nameCell.innerHTML = cellHTML;\n\n    return newRow;\n  }\n\n  addSubAccountColumn(sub_account_name, customer_sub_account_id, question_list, selected_question, option_list, selected_options) {\n    //function addNewColumn(tableId, headerText, defaultCellValue = \"\") {\n    let table = document.getElementById(\"edit_question_group_table\");\n    let thead = table.querySelector('thead');\n    let tbody = table.querySelector('tbody');\n\n    // Add new header cell to the table head\n    if (thead) {\n      let headerRow = thead.rows[0];\n      let question_selected = false;\n      if (headerRow) {\n        let newHeaderCell = headerRow.insertCell(-1);\n        let headerHTML = '<div class=\"pt-3\">' + sub_account_name + '</div>';\n        headerHTML += '<select name=\"sub_account_question[' + customer_sub_account_id + ']\" id=\"sub_account_question_' + customer_sub_account_id + '\" data-customer-sub-account-id=\"' + customer_sub_account_id + '\" data-action=\"change->combined-question#subAccountQuestionChanged\" class=\"form-select form-select-sm\">';\n        headerHTML += '<option value=\"\"></option>';\n        if (question_list && question_list != '') {\n          for (let i = 0; i < question_list.length; i++) {\n            let sel = '';\n            if (selected_question && selected_question != '' && parseInt(selected_question) == parseInt(question_list[i][1])) {\n              sel = 'selected=\"selected\"';\n              question_selected = true;\n            }\n            headerHTML += '<option value=\"' + question_list[i][1] + '\" ' + sel + '>' + question_list[i][0] + '</option>';\n          }\n        }\n        headerHTML += '</select>';\n\n        // Old classes:  position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger\n        headerHTML += '<span id=\"csa_sub_account_unassigned_option_badge_' + customer_sub_account_id + '\" ';\n        let unassigned_option_text = i18n_string(\"combined_question.unassigned_options\", \"Unassigned options\");\n        headerHTML += '  class=\"position-absolute top-0 start-0 badge rounded-pill bg-danger hidden\" data-bs-toggle=\"tooltip\" title=\"'+unassigned_option_text+'\" data-bs-placement=\"bottom\">';\n        headerHTML += '  <span id=\"csa_sub_account_unassigned_option_count_' + customer_sub_account_id + '\">0</span>';\n        headerHTML += '  <span class=\"visually-hidden\">'+unassigned_option_text+'</span>';\n        headerHTML += '</span>';\n\n        headerHTML += '<div class=\"dropdown dropleft sub-account-question-header-config-btn\">';\n        headerHTML += '  <button class=\"btn btn-link custom-csa-header-dropdown dropdown-toggle\" type=\"button\" id=\"csa_sub_account_config_dropdown_' + customer_sub_account_id + '\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">';\n        headerHTML += '    <i class=\"fas fa-cog\"></i><span class=\"visually-hidden\">' + i18n_string(\"combined_question.configure_sub_account_question\", \"Configure sub-account question\") + '</span>';\n        headerHTML += '  </button>';\n        headerHTML += '  <div class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"csa_sub_account_config_dropdown_' + customer_sub_account_id + '\">';\n        headerHTML += '    <a class=\"dropdown-item\" href=\"#\" data-action=\"click->combined-question#removeSubAccountColumn\" data-sub-account-id=\"' + customer_sub_account_id + '\">' + i18n_string(\"combined_question.remove_this_sub_account\", \"Remove this sub-account\") + '</a>';\n        headerHTML += '    <a class=\"dropdown-item\" href=\"#\" data-action=\"click->combined-question#addAllOptionsForSubAccount\" data-sub-account-id=\"' + customer_sub_account_id + '\">' + i18n_string(\"combined_question.automatically_add_matching_question_options\", \"Automatically add matching question options\") + '</a>';\n        headerHTML += '    <a class=\"dropdown-item\" href=\"#\" data-action=\"click->combined-question#removeAllOptionsForSubAccount\" data-sub-account-id=\"' + customer_sub_account_id + '\">' + i18n_string(\"combined_question.remove_all_question_options\", \"Remove all question options\") + '</a>';\n        headerHTML += '  </div>';\n        headerHTML += '</div>';\n        newHeaderCell.classList.add('sub-account-question-cell-' + customer_sub_account_id);\n        newHeaderCell.classList.add('sub-account-question-header-cell');\n        if (!question_selected) {\n          newHeaderCell.classList.add('needs-attention');\n        }\n        newHeaderCell.dataset.optionList = JSON.stringify(option_list);\n        newHeaderCell.dataset.customerSubAccountId = customer_sub_account_id;\n        newHeaderCell.style.width = '200px';\n        newHeaderCell.innerHTML = headerHTML;\n      }\n\n      let colgroup = table.querySelector('colgroup');\n      if (colgroup) {\n        let col = document.createElement('col');\n        if (!question_selected) {\n          col.classList.add('sub-account-question-col-needs-attention');\n        }\n        col.classList.add('sub-account-question-col-' + customer_sub_account_id);\n        col.classList.add('sub-account-question-col');\n        colgroup.appendChild(col);\n      }\n      initTooltips();\n      if (question_selected) {\n        this.refreshRemainingOptionCounts(null, customer_sub_account_id);\n      }\n    }\n\n    // Add new cells to each row in the table body\n    if (tbody) {\n      let selected_options_array = undefined;\n      if (selected_options && selected_options != '') {\n        if (typeof selected_options === 'string') {\n          selected_options_array = selected_options.split(\",\");\n        } else if (Array.isArray(selected_options)) {\n          selected_options_array = selected_options;\n        }\n      }\n      for (let i = 0; i < tbody.rows.length; i++) {\n        this.addOptionCell(tbody.rows[i], option_list, selected_options_array, customer_sub_account_id);\n      }\n    }\n\n\n    // Fix table width\n    this.fixTableWidth();\n    this.updateSubAccountWithoutQuestionWarning();\n  }\n\n  cancelCombinedSubAccountGroup(event) {\n    event.preventDefault();\n    this.loadCombinedSubAccountData_resetSelectObj();\n    let selectObj = document.getElementById(\"sub_account_choice_list\");\n    $(selectObj).multiselect('reload');\n    let nameObj = document.getElementById(\"sub_account_group_name\");\n    nameObj.value = \"\";\n    document.edit_sub_account_group_row_index = undefined;\n    $(\"#cancel-combined-sub-account-edit-button\").hide();\n    $(\"#sub_account_group_name_label_edit\").hide();\n    $(\"#sub_account_group_name_label_new\").show();\n  }\n\n  checkboxToggleAllOptionNames(event) {\n    // Get all checkbox with bulk-action-checkbox class. Set their checked property to event.currentTarget.checked\n    let checkboxes = document.querySelectorAll(\".bulk-action-checkbox\");\n    checkboxes.forEach(function(checkbox){\n      checkbox.checked = event.currentTarget.checked;\n    });\n    this.checkboxCheckForAvailableBulkActions();\n  }\n\n  checkboxCheckForAvailableBulkActions() {\n    // Count the number of checked checkboxes with the class \"bulk-action-checkbox\"\n    let checked_checkboxes = document.querySelectorAll(\".bulk-action-checkbox:checked\");\n    let num_checked = checked_checkboxes.length;\n    let num_available = document.querySelectorAll(\".bulk-action-checkbox\").length;\n\n    const check_all_checkbox = document.getElementById(\"combined_question_edit_select_all_checkbox\");\n    const merge_button = document.getElementById(\"combined-question-bulk-question-merge-btn\");\n    const bulk_action_div = document.getElementById(\"combined-question-bulk-question-action-div\");\n\n    if (num_checked > 0) {\n      const span_number_text = document.getElementById(\"combined-question-bulk-question-action-number-text\");\n      const span_number_value = document.getElementById(\"combined-question-bulk-question-action-number-value\");\n      const span_all_text = document.getElementById(\"combined-question-bulk-question-action-all-text\");\n      span_number_text.style.display = 'none';\n      span_all_text.style.display = 'none';\n      if (num_checked > 1) {\n        merge_button.style.display = 'inline-block';\n      } else {\n        merge_button.style.display = 'none';\n      }\n      if (num_checked == num_available) {\n        span_all_text.style.display = '';\n        check_all_checkbox.checked = true;\n        check_all_checkbox.indeterminate = false;\n      } else {\n        span_number_text.style.display = '';\n        span_number_value.innerHTML = num_checked;\n        check_all_checkbox.indeterminate = true;\n      }\n      bulk_action_div.style.display = 'block';\n    } else {\n      bulk_action_div.style.display = 'none';\n      check_all_checkbox.indeterminate = false;\n      check_all_checkbox.checked = false;\n    }\n  }\n\n  customerSubAccountsSelectChanged(event, selectObj) {\n    let selectElement = selectObj;\n    if (event && event.currentTarget) {\n      selectElement = event.currentTarget;\n    }\n    let selectedValues = Array.from(selectElement.selectedOptions).map((option) => option.value);\n    let previousValues = JSON.parse(selectElement.dataset.previousValues || \"[]\");\n    let addedValues = selectedValues.filter((value) => !previousValues.includes(value));\n    let removedValues = previousValues.filter((value) => !selectedValues.includes(value));\n    let stimulusRef = this;\n    addedValues.forEach(function(customer_sub_account_id){\n      // Make sure this column does not already exist\n      if (!document.querySelector('.sub-account-question-cell-'+customer_sub_account_id)) {\n        $.ajax({\n          headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n          type: \"GET\",\n          url: \"/combined_question/get_sub_account_questions\",\n          data: {customer_sub_account_id: customer_sub_account_id},\n          success: function (data) {\n            if (data && data.status == 200) {\n              this.addSubAccountColumn(data.display_name, data.customer_sub_account_id, data.question_list, '', '', '');\n              // {status: xxx, display_name, customer_sub_account_id, question_list}\n            }\n          }.bind(stimulusRef)\n        });\n      }\n    });\n    removedValues.forEach(function(customer_sub_account_id){\n      // Remove column\n      let match_class = \"sub-account-question-cell-\"+customer_sub_account_id;\n      let table = document.getElementById(\"edit_question_group_table\");\n      let tbody = table.querySelector('tbody');\n      Array.from(table.rows).forEach(function(row) {\n        Array.from(row.cells).forEach(function(cell, index) {\n          if (cell.classList.contains(match_class)) {\n            row.deleteCell(index);\n          }\n        });\n\n      });\n      // Remove col from colgroup\n      let colgroup = table.querySelector('colgroup');\n      if (colgroup) {\n        let match_class = \"sub-account-question-col-\"+customer_sub_account_id;\n        Array.from(colgroup.children).forEach(function(col) {\n          if (col.classList.contains(match_class)) {\n            colgroup.removeChild(col);\n          }\n        });\n      }\n    });\n    selectElement.dataset.previousValues = JSON.stringify(selectedValues);\n\n    // Need this call delayed by a few MS to allow for DOM updates from the removal stuff above.\n    setTimeout(function(){\n      this.updateSubAccountWithoutQuestionWarning();\n    }.bind(stimulusRef), 50);\n\n  }\n\n  deleteCombinedSubAccountGroup(event){\n    event.preventDefault();\n    let rowIndex = event.currentTarget.dataset.row;\n    if (!rowIndex){\n      return;\n    }\n    event.currentTarget.blur();\n\n    if (confirm(i18n_string(\"combined_question.confirm_sub_account_group_removal\", \"Are you sure you want to delete this sub-account group?\"))) {\n      let tableBody = document.getElementById(\"sub_account_group_table_body\");\n      let selectObj = document.getElementById(\"sub_account_choice_list\");\n      let tableRow = document.getElementById(\"sub_account_group_table_row_\"+rowIndex);\n      tableRow.querySelector(\".hidden-delete\").value = 1;\n      tableRow.querySelector(\".hidden-sub-account-list\").value = \"\";\n\n      let usedCSAList = [];\n      tableBody.querySelectorAll(\".hidden-sub-account-list\").forEach(function(csa_input){\n        let csa_list = csa_input.value.split(\",\");\n        csa_list.forEach(function(csa_id){\n          usedCSAList.push(Number.parseInt(csa_id))\n        })\n      });\n      selectObj.dataset.usedOptions = JSON.stringify(usedCSAList);\n      this.loadCombinedSubAccountData_resetSelectObj();\n      $(selectObj).multiselect('reload');\n      tableRow.style.display = 'none';\n      this.cancelCombinedSubAccountGroup(event);\n    }\n  }\n\n  deleteSelectedOptions(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n    let selected_checkboxes = document.querySelectorAll(\".bulk-action-checkbox:checked\");\n    if (selected_checkboxes && selected_checkboxes.length > 0) {\n      for (let i=0; i<selected_checkboxes.length; i++) {\n        let row_index = selected_checkboxes[i].value;\n        let row_tr = document.getElementById(\"option-row-\"+row_index);\n\n        // Hide/Delete this row\n        // Delete input\n        let delete_input = row_tr.querySelector(\"input[name=\\\"option_delete[\"+row_index+\"]\\\"]\");\n        delete_input.value = 1;\n        // Hide\n        row_tr.style.display = 'none';\n\n        selected_checkboxes[i].checked = false;\n        selected_checkboxes[i].classList.remove('bulk-action-checkbox');\n        selected_checkboxes[i].classList.add('bulk-action-checkbox-deleted');\n      }\n    }\n    this.checkboxCheckForAvailableBulkActions();\n  }\n\n  editCombinedSubAccountGroup(event) {\n    event.preventDefault();\n    let rowIndex = event.currentTarget.dataset.row;\n    if (!rowIndex){\n      return;\n    }\n    event.currentTarget.blur();\n\n    if (document.edit_sub_account_group_row_index && document.edit_sub_account_group_row_index !== undefined) {\n      this.cancelCombinedSubAccountGroup(event);\n    }\n    document.edit_sub_account_group_row_index = rowIndex;\n\n    let selectObj = document.getElementById(\"sub_account_choice_list\");\n    let nameObj = document.getElementById(\"sub_account_group_name\");\n\n    let tableRow = document.getElementById(\"sub_account_group_table_row_\"+rowIndex);\n    nameObj.value = tableRow.querySelector(\".hidden-name\").value;\n    tableRow.querySelector(\".hidden-delete\").value = 0;\n    let csa_ids = tableRow.querySelector(\".hidden-sub-account-list\").value.split(\",\").map(num => parseInt(num, 10));\n\n    let optionList = JSON.parse(selectObj.dataset.options); // options formatted in [['Option name', 'value']]\n    // loop through optionList array and add my current selected options to list\n    optionList.forEach(option => {\n      if (csa_ids.indexOf(parseInt(option[1])) !== -1) {\n        let newOption = document.createElement(\"option\");\n        newOption.text = option[0]; // Option name\n        newOption.value = option[1]; // Option value\n        newOption.selected = true;\n        selectObj.add(newOption);\n      }\n    });\n    $(selectObj).multiselect('reload');\n\n    $(\"#cancel-combined-sub-account-edit-button\").show();\n    $(\"#sub_account_group_name_label_new\").hide();\n    $(\"#sub_account_group_name_label_edit\").show();\n  }\n\n\n  fixTableWidth() {\n    let table = document.getElementById(\"edit_question_group_table\");\n    let form = document.getElementById(\"edit_combined_question_form\");\n    if (table) {\n      let thead = table.querySelector('thead');\n      if (thead) {\n        table.style.width = '';\n        let new_width = 50; // checkbox\n        new_width += 220; // name\n        new_width += 220*(thead.rows[0].cells.length-2); // question cells\n        if (new_width > form.clientWidth) {\n          table.style.width = new_width+'px';\n          // Set a fixed width for name column as well\n          document.getElementById(\"option_name_column_header\").style.width = '300px';\n        }\n      }\n    }\n  }\n\n  focusNextSubAccountColumn(event) {\n    event.preventDefault();\n    const selects = document.querySelectorAll(\".sub-account-question-header-cell select\");\n    for (const selectElement of selects) {\n      if (selectElement.value === '') {\n        const table = document.getElementById(\"edit_question_group_table\");\n        const container = document.getElementById(\"edit_question_group_table_container\");\n\n        // Check if both the table and container exist\n        if (table && container) {\n          const thead = table.tHead;\n\n          // Ensure the table has a <thead> and at least one row with two cells\n          if (thead && thead.rows.length > 0 && thead.rows[0].cells.length > 1) {\n            const firstColumnsWidth =\n                thead.rows[0].cells[0].getBoundingClientRect().width +\n                thead.rows[0].cells[1].getBoundingClientRect().width;\n\n            const padding = 4;\n\n            // Check that selectElement and container have valid bounding rectangles\n            const selectRect = selectElement.getBoundingClientRect();\n            const containerRect = container.getBoundingClientRect();\n\n            if (selectRect && containerRect) {\n              container.scrollLeft +=\n                  selectRect.x - containerRect.x - firstColumnsWidth - padding;\n            }\n          }\n        }\n\n\n        selectElement.focus();\n        break;\n      }\n    }\n  }\n\n  loadCombinedQuestionData(event) {\n    if (document.combined_question_load_data && document.combined_question_load_row_data) {\n      // combined_question_load_data[csa_id] = {question_list: [], selected_question_id: 0000, option_list: [], question_display_name: xxx}\n      // combined_question_load_row_data[] {id, name, selected_options: {csa_id: [option_id, option_id]}}\n      let sub_account_data = document.combined_question_load_data;\n      let accounts_to_include = [];\n      for (const [csa_id, sub_data] of Object.entries(sub_account_data)) {\n        accounts_to_include.push(csa_id);\n        this.addSubAccountColumn(sub_data.sub_account_display_name, csa_id, sub_data.question_list, sub_data.selected_question_id, sub_data.option_list, '');\n      }\n      // sub_account_data.forEach(function(sub_data, csa_id){\n      //   accounts_to_include.push(csa_id);\n      //   // console.log(\"Have data.similar:forEach \"+sub_data.display_name);\n      //   this.addSubAccountColumn(sub_data.question_display_name, csa_id, sub_data.question_list, sub_data.selected_question_id, sub_data.option_list, '');\n      // }.bind(this));\n\n      let table = document.getElementById(\"edit_question_group_table\");\n      // let thead = table.querySelector('thead');\n      let tbody = table.querySelector('tbody');\n\n      // Populate options and insert first column with question already preselected\n      let option_row_data = document.combined_question_load_row_data;\n      option_row_data.forEach(function(option){\n        this.new_row_index += 1;\n        let newRow = this.addStandardOptionRow(tbody, this.new_row_index, option.name, option.id);\n        // Go through each CSA and add cell in column\n        for (const [csa_id, sub_data] of Object.entries(sub_account_data)) {\n          // Get the selection options for this CSA\n          let selected_option_array = []\n          // console.log(\"option_row_data.selected_options[csa_id]=\"+option.selected_options[csa_id]);\n          if (option.selected_options && option.selected_options[csa_id]) {\n            selected_option_array = option.selected_options[csa_id];\n          }\n          this.addOptionCell(newRow, sub_data.option_list, selected_option_array, csa_id);\n        }\n      }.bind(this));\n\n      // Update \"Accounts to include\" dropdown\n      let customer_sub_accounts_select = document.getElementById(\"customer_sub_accounts\");\n      customer_sub_accounts_select.dataset.previousValues = JSON.stringify(accounts_to_include);\n      $(customer_sub_accounts_select).val(accounts_to_include).trigger(\"change\");\n\n      if (document.combined_question_load_all_sub_accounts) {\n        // Add unused subaccounts - document.combined_question_load_all_sub_accounts\n        $(customer_sub_accounts_select).find(\"option\").each(function(){\n          if (this.value != '' && this.value != '0' && !this.selected)\n          {\n            this.selected = true;\n          }\n        });\n        $(customer_sub_accounts_select).multiselect('reload');\n        this.customerSubAccountsSelectChanged(null, customer_sub_accounts_select);\n      }\n\n      document.getElementById(\"loading_question_div\").style.display = 'none';\n      document.getElementById(\"add_question_group_step2_div\").style.display = '';\n      document.getElementById(\"save_question_group_button\").style.display = '';\n    }\n    this.refreshRemainingOptionCounts(null, null);\n  }\n\n  loadCombinedSubAccountData(event) {\n    let selectObj = document.getElementById(\"sub_account_choice_list\");\n    this.loadCombinedSubAccountData_resetSelectObj();\n    $(selectObj).multiselect();\n    // Init Group table\n\n  }\n\n  loadCombinedSubAccountData_resetSelectObj() {\n    let selectObj = document.getElementById(\"sub_account_choice_list\");\n    // Make sure everything is unselected\n    for (let option of selectObj.options) {\n      option.selected = false;\n    }\n    // Used option ids\n    let usedOptionIds = JSON.parse(selectObj.dataset.usedOptions); // formatted in ['value1','value2']\n    // Clear options\n    selectObj.options.length = 0;\n    let optionList = JSON.parse(selectObj.dataset.options); // options formatted in [['Option name', 'value']]\n    // loop through optionList array and add options to selectObj\n    optionList.forEach(option => {\n      if (usedOptionIds.indexOf(option[1]) === -1) {\n        let newOption = document.createElement(\"option\");\n        newOption.text = option[0]; // Option name\n        newOption.value = option[1]; // Option value\n        selectObj.add(newOption);\n      }\n    });\n  }\n\n  // fixTableWidth();\n\n  //     if (thead.rows[0].length > )\n  //     table.parent.clientWidth\n\n  mergeSelectedOptions(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n    let selected_checkboxes = document.querySelectorAll(\".bulk-action-checkbox:checked\");\n    if (selected_checkboxes && selected_checkboxes.length > 1) {\n      let table = document.getElementById(\"edit_question_group_table\");\n      let merge_to_index = selected_checkboxes[0].value;\n      let merge_to_row_tr = document.getElementById(\"option-row-\"+merge_to_index);\n      let merge_to_option_name_input = merge_to_row_tr.querySelector(\"input[name=\\\"option_name[\"+merge_to_index+\"]\\\"]\");\n\n      for (let i=1; i<selected_checkboxes.length; i++) {\n        let row_index = selected_checkboxes[i].value;\n        let row_tr = document.getElementById(\"option-row-\"+row_index);\n        // Merge name\n        let option_name_input = row_tr.querySelector(\"input[name=\\\"option_name[\"+row_index+\"]\\\"]\");\n        merge_to_option_name_input.value += \", \"+option_name_input.value;\n\n        // Go through columns and select options in the top row\n        table.querySelectorAll('.sub-account-question-header-cell').forEach(function(headerCell){\n          // let option_list = JSON.parse(headerCell.dataset.optionList);\n          let column_csa_id = headerCell.dataset.customerSubAccountId;\n          let merge_to_select = merge_to_row_tr.querySelector(\"select[name=\\\"mapped_options[\"+column_csa_id+\"][\"+merge_to_index+\"][]\\\"]\");\n          let new_selected_options = Array.from(merge_to_select.selectedOptions).map(option => option.value);\n\n          let merge_from_select = row_tr.querySelector(\"select[name=\\\"mapped_options[\"+column_csa_id+\"][\"+row_index+\"][]\\\"]\");\n          new_selected_options = new_selected_options.concat(Array.from(merge_from_select.selectedOptions).map(option => option.value));\n          $(merge_to_select).val(new_selected_options).trigger(\"change\");\n\n        }.bind(this));\n\n        // Hide/Delete this row\n        // Delete input\n        let delete_input = row_tr.querySelector(\"input[name=\\\"option_delete[\"+row_index+\"]\\\"]\");\n        delete_input.value = 1;\n        // Hide\n        row_tr.style.display = 'none';\n      }\n      // Uncheck all\n      for (let i=0; i<selected_checkboxes.length; i++) {\n        selected_checkboxes[i].checked = false;\n      }\n    }\n  }\n\n  newSetupQuestionChange(event) {\n    let selectElement = event.currentTarget;\n    let question_id = selectElement.value;\n    let question_text = selectElement.options[selectElement.selectedIndex].text;\n    let customer_sub_account_id = document.getElementById('new_setup_sub_account_select').value;\n    let stimulusRef = this;\n    // Get options\n    $.ajax({\n      headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n      type: \"GET\",\n      url: \"/combined_question/get_question_options\",\n      data: {question_id: question_id, customer_sub_account_id: customer_sub_account_id, find_similar: 1},\n      success: function (data) {\n        if (data && data.status == 200) {\n          this.addSubAccountColumn(document.new_combined_question_setup_last_sub_account_name, data.customer_sub_account_id, document.new_combined_question_setup_last_question_list, data.question_id, data.option_list, '');\n\n          if (data.similar) {\n            // console.log(\"Have data.similar\");\n            // {customer_sub_account_id: sub_account.id, question_id: matching_question.id, option_list: option_list, display_name: sub_account.name_version, question_list: xxxx}\n            data.similar.forEach(function(sub_data){\n              // console.log(\"Have data.similar:forEach \"+sub_data.display_name);\n              this.addSubAccountColumn(sub_data.display_name, sub_data.customer_sub_account_id, sub_data.question_list, sub_data.question_id, sub_data.option_list, '');\n            }.bind(this));\n          }\n\n          let table = document.getElementById(\"edit_question_group_table\");\n          // let thead = table.querySelector('thead');\n          let tbody = table.querySelector('tbody');\n          // Populate options and insert first column with question already preselected\n          data.option_list.forEach(function(option){\n            this.new_row_index += 1;\n            let newRow = this.addStandardOptionRow(tbody, this.new_row_index, option[0], '');\n            this.addOptionCell(newRow, data.option_list, [option[1]], data.customer_sub_account_id);\n            // Add cells for similar matches\n            if (data.similar) {\n              // {customer_sub_account_id: sub_account.id, question_id: matching_question.id, option_list: option_list, display_name: sub_account.name_version, question_list: xxxx}\n              data.similar.forEach(function(sub_data){\n                let sub_option_id = '';\n                for(let z=0;z<sub_data.option_list.length; z++) {\n                  // Compare option names to see if we have a match and then select that one if we do!\n                  if (normalize_string(sub_data.option_list[z][0]) == normalize_string(option[0])) {\n                    sub_option_id = sub_data.option_list[z][1];\n                    break;\n                  }\n                }\n                // If sub_option_id is empty see if there is an option that is \"close enough\"\n                if (sub_option_id === '') {\n                  for (let z = 0; z < sub_data.option_list.length; z++) {\n                    // Compare option names to see if we have a match and then select that one if we do!\n                    if (are_strings_similar(normalize_string(sub_data.option_list[z][0]), normalize_string(option[0]), 80)) {\n                      sub_option_id = sub_data.option_list[z][1];\n                      break;\n                    }\n                  }\n                }\n                this.addOptionCell(newRow, sub_data.option_list, [sub_option_id], sub_data.customer_sub_account_id);\n              }.bind(this));\n            }\n          }.bind(stimulusRef));\n\n          document.getElementById('add_question_group_step1_div').style.display = 'none';\n          document.getElementById('add_question_group_step2_div').style.display = '';\n          document.getElementById('save_question_group_button').style.display = '';\n\n          // Update question input with - question_text\n          document.getElementById('nameInput').value = question_text;\n          // Update \"Accounts to include\" dropdown\n          let accounts_to_include = [data.customer_sub_account_id];\n          if (data.similar) {\n            data.similar.forEach(function(sub_data){\n              accounts_to_include.push(sub_data.customer_sub_account_id);\n            }.bind(this));\n          }\n          $(\"#customer_sub_accounts\").val(accounts_to_include).trigger(\"change\");\n\n        }\n      }.bind(stimulusRef)\n    });\n  }\n\n  newSetupStartWithBlank(event) {\n    event.preventDefault();\n    $(\"#add_question_group_step0_div\").hide();\n    $(\"#add_question_group_step2_div\").show();\n    $(\"#save_question_group_button\").show();\n  }\n  newSetupStartWithQuestion(event) {\n    event.preventDefault();\n    $(\"#add_question_group_step0_div\").hide();\n    $(\"#add_question_group_step1_div\").show();\n  }\n\n  newSetupSubAccountChange(event) {\n    let selectElement = event.currentTarget;\n    let customer_sub_account_id = selectElement.value;\n    let stimulusRef = this;\n    document.new_combined_question_setup_last_sub_account_name = selectElement.options[selectElement.selectedIndex].text;\n    document.new_combined_question_setup_last_question_list = undefined;\n    if (parseInt(customer_sub_account_id) > 0) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"GET\",\n        url: \"/combined_question/get_sub_account_questions\",\n        data: { customer_sub_account_id: customer_sub_account_id },\n        success: function (data) {\n          if(data && data.status == 200) {\n            let questionSelect = document.getElementById('new_setup_question_select');\n            let questionDiv = document.getElementById('add_question_group_step1_question_div');\n            let optionHTML = '<option value=\"\"></option>';\n            if (data.question_list && data.question_list != '') {\n              document.new_combined_question_setup_last_question_list = data.question_list;\n              for (let i = 0; i < data.question_list.length; i++) {\n                optionHTML += '<option value=\"'+data.question_list[i][1]+'\">'+data.question_list[i][0]+'</option>';\n              }\n            }\n            questionSelect.innerHTML = optionHTML;\n            questionDiv.style.display = '';\n            // {status: xxx, display_name, customer_sub_account_id, question_list}\n          }\n        }.bind(stimulusRef)\n      });\n    } else {\n      // TODO: hide and clear question dropdown\n    }\n  }\n\n  /**\n   * Refreshes the count of remaining unused options for sub-account question headers\n   * and updates the associated badge display accordingly.\n   *\n   * @param {Event} event - The event object triggered by the user interaction. Determines the relevant sub-account for the refresh.\n   * @param {string|null} customer_sub_account_id - The optional sub-account ID to target specific headers. If not provided, all headers are targeted.\n   * @return {void} This method does not return a value, but updates the DOM elements to reflect the refreshed option counts.\n   */\n  refreshRemainingOptionCounts(event, customer_sub_account_id=null) {\n    if (event) {\n      customer_sub_account_id = event.currentTarget.getAttribute('data-customer-sub-account-id');\n    }\n\n    let headerCells ;\n    if (customer_sub_account_id) {\n      headerCells = document.querySelectorAll('.sub-account-question-header-cell.sub-account-question-cell-'+customer_sub_account_id);\n    } else {\n      headerCells = document.querySelectorAll('.sub-account-question-header-cell');\n    }\n\n    headerCells.forEach(function (cell) {\n      let unusedOptionCount = 0;\n      let subAccountId = cell.getAttribute('data-customer-sub-account-id');\n      let optionList = JSON.parse(cell.getAttribute('data-option-list'));\n      let badgeElement = document.getElementById('csa_sub_account_unassigned_option_badge_'+subAccountId);\n      let badgeCountElement = document.getElementById('csa_sub_account_unassigned_option_count_'+subAccountId);\n      if (subAccountId && optionList) {\n        optionList.forEach(function (option) {\n          let option_already_selected = false;\n          document.querySelectorAll(\".sub-account-question-option-cell-\" + subAccountId).forEach(function (optionCell) {\n            let select_element = optionCell.querySelector('select');\n            for (let check_option of select_element.selectedOptions) {\n              if (parseInt(check_option.value) == parseInt(option[1])) {\n                option_already_selected = true;\n                return;\n              }\n            }\n          });\n          if (!option_already_selected) {\n            unusedOptionCount += 1;\n          }\n        });\n      }\n      badgeCountElement.innerHTML = unusedOptionCount;\n      if (unusedOptionCount > 0) {\n        badgeElement.classList.remove('hidden');\n      } else {\n        badgeElement.classList.add('hidden');\n      }\n    });\n  }\n\n  /**\n   * Copied from wellness_common_custom_list_controller.js\n   *  -- same functionality needed here -- in the future combine into a shared controller that they both extend\n   * @param item\n   * @param reset_chosen_list\n   * @param prefix\n   */\n  reloadListGrouping(item, reset_chosen_list = false, prefix = '') {\n    if($(\"select[name='\" + item + \"']\").length > 0){\n      var id = $(\"#\" + prefix + item).attr('data-question-id')\n      var type = $(\"#\" + prefix + item).attr('data-question-type')\n      if(prefix == '' && id === undefined) {\n        prefix = \"wj_\"\n        id = $(\"#wj_\" + item).attr('data-question-id')\n        type = $(\"#wj_\" + item).attr('data-question-type')\n      }\n\n      var question_level = item.split('_')[0]\n\n      if(reset_chosen_list == true) {\n        var chosen_option_list_id = undefined\n      } else {\n        var chosen_option_list_id = $(\"#\" + prefix + item).val()\n      }\n      if (id === \"combined_snapshot_sub_accounts\") {\n        // Custom callback created - https://www.betterstimulus.com/interaction/callbacks.html\n        $(document).trigger('wellness_common_controller.state', function(wellnessCommon) {\n          wellnessCommon.getSignUpQuestionOptionList(id, chosen_option_list_id, question_level, item, prefix)\n        })\n      } else if(parseInt(id) > 0) {\n        // Custom callback created - https://www.betterstimulus.com/interaction/callbacks.html\n        $(document).trigger('wellness_common_controller.state', function(wellnessCommon) {\n          wellnessCommon.getSignUpQuestionOptionList(id+\"-\"+type, chosen_option_list_id, question_level, item, prefix)\n        })\n      }\n    }\n  }\n\n  removeAllOptionsForSubAccount(event) {\n    event.preventDefault();\n    let link = event.currentTarget;\n    let sub_account_id = link.dataset.subAccountId;\n    if (sub_account_id) {\n      // Get all tablecells from the selector \".sub-account-question-option-cell-\"+sub_account_id, then get the select element in each and clear out all options\n      let tableCells = document.querySelectorAll(\".sub-account-question-option-cell-\"+sub_account_id);\n      tableCells.forEach(function(tableCell){\n        let selectElement = tableCell.querySelector(\"select\");\n        if (selectElement) {\n          $(selectElement).val([]).trigger(\"change\");\n        }\n      });\n\n    }\n  }\n\n  removeAutoCombineSuggestion(event) {\n    event.preventDefault();\n    let link = event.currentTarget;\n    // Get attribute value from data-question-key and use this to send an ajax request to the path /combined-question/ignore_auto_combine_key\n    const question_key = link.dataset.questionKey;\n    if (question_key) {\n      $.ajax({\n        headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n        type: \"POST\",\n        url: \"/combined_question/ignore_auto_combine_key\",\n        data: {question_key: question_key},\n        success: function (data) {\n          if (data && data.status == 200) {\n            // Hide the li element with the id auto_combine_question_+question_key\n            let liElement = document.getElementById(\"auto_combine_question_\"+question_key.replaceAll(' ','_'));\n            if (liElement) {\n              liElement.style.setProperty('display', 'none', 'important');\n            }\n          }\n        }\n      })\n    }\n  }\n\n  removeSubAccountColumn(event) {\n    event.preventDefault();\n    // Get data attribute from data-sub-account-id from this link, then unselect that option from the customer_sub_accounts dropdown\n    let link = event.currentTarget;\n    let sub_account_id = link.dataset.subAccountId;\n    if (sub_account_id) {\n      let customer_sub_accounts_select = document.getElementById(\"customer_sub_accounts\");\n      let option = customer_sub_accounts_select.querySelector(\"option[value='\" + sub_account_id + \"']\");\n      if (customer_sub_accounts_select && option) {\n        option.selected = false;\n        $(customer_sub_accounts_select).multiselect('reload');\n        this.customerSubAccountsSelectChanged(null, customer_sub_accounts_select);\n      }\n    }\n  }\n\n  saveCombinedSubAccountGroup(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n    // Validate: name and 1+ sub-accounts needs to be selected\n    let selectObj = document.getElementById(\"sub_account_choice_list\");\n    let nameObj = document.getElementById(\"sub_account_group_name\");\n    let sub_account_ids = Array.from(selectObj.options).filter(option => option.selected).map(option => option.value);\n    console.dir(sub_account_ids);\n    if (!sub_account_ids || sub_account_ids.length < 1) {\n      selectObj.focus();\n      return;\n    }\n    if (!nameObj || nameObj.value == '') {\n      nameObj.focus();\n      return;\n    }\n\n    //           <tbody id=\"sub_account_group_table_body\">\n    //             <template id=\"sub_account_group_table_row_template\">\n    let tableBody = document.getElementById(\"sub_account_group_table_body\");\n\n    let rowIndex = 0;\n    // Determine if editing or new\n    if (document.edit_sub_account_group_row_index && document.edit_sub_account_group_row_index > 0) {\n      rowIndex = document.edit_sub_account_group_row_index;\n    } else {\n      rowIndex = new Date().getTime();\n      let templateElement = document.getElementById(\"sub_account_group_table_row_template\");\n      // Insert new\n      let next_order = $(tableBody).find(\"tr\").length + 2;\n      let content = templateElement.innerHTML.replace(/TEMPLATE_RECORD/g, \"\"+rowIndex);\n      content = content.replace(\"TEMPLATE_NAME\", \"\");\n      content = content.replace(\"999999\", next_order);\n      tableBody.insertAdjacentHTML('beforeend', content);\n    }\n\n    // Table update\n    let tableRow = document.getElementById(\"sub_account_group_table_row_\"+rowIndex);\n    console.dir(tableRow);\n    if (tableRow) {\n      tableRow.querySelector(\".hidden-name\").value = nameObj.value;\n      tableRow.querySelector(\".hidden-delete\").value = 0;\n      tableRow.querySelector(\".hidden-sub-account-list\").value = sub_account_ids.join(\",\");\n\n      tableRow.cells[0].textContent = nameObj.value;\n      tableRow.cells[1].textContent = sub_account_ids.length;\n    }\n    let usedCSAList = [];\n    tableBody.querySelectorAll(\".hidden-sub-account-list\").forEach(function(csa_input){\n      let csa_list = csa_input.value.split(\",\");\n      csa_list.forEach(function(csa_id){\n        usedCSAList.push(Number.parseInt(csa_id))\n      })\n    });\n    selectObj.dataset.usedOptions = JSON.stringify(usedCSAList);\n\n    // Clear form -- set up for \"new\"\n    this.cancelCombinedSubAccountGroup(event);\n  }\n\n  setDefaultCombinedQuestionVariation(event) {\n    const controllerRef = this;\n    var item = event.currentTarget;\n    event.preventDefault();\n    item.blur();\n\n    var answer = confirm(i18n_string(\"combined_question.change_default_option\", \"Changing the default question variation will change this for all users.\"));\n    if(answer) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: '/combined_question/update_default_variation',\n        data: { new_combined_question_id: item.dataset.combinedQuestionId },\n        success: function (data) {\n          if(data.status == 200) {\n\n            // Need to reload the existing option group IF its show on the main page, while maintaining the currently selected item.\n            var fields = ['primary_option_kinds', 'secondary_option_kinds', 'tertiary_option_kinds']\n            fields.forEach(function(item){\n              controllerRef.reloadListGrouping(item, true)\n            });\n\n            $('#system_modal_popup').modal('hide')\n          }\n        }\n      })\n    }\n  }\n\n  setDefaultCombinedSubAccountList(event) {\n    const controllerRef = this;\n    var item = event.currentTarget;\n    event.preventDefault();\n    item.blur();\n\n    var answer = confirm(i18n_string(\"combined_question.change_default_sub_account_list\", \"Changing the default sub-account list will change this for all users.\"));\n    if(answer) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: '/combined_question/update_default_sub_account_list',\n        // data-combined-sub-account-id\n        data: { new_combined_sub_account_id: item.dataset.combinedSubAccountId },\n        success: function (data) {\n          if(data.status == 200) {\n\n            // Need to reload the existing option group IF its show on the main page, while maintaining the currently selected item.\n            var fields = ['primary_option_kinds', 'secondary_option_kinds', 'tertiary_option_kinds'];\n            fields.forEach(function(item){\n              controllerRef.reloadListGrouping(item, true);\n            });\n\n            $('#system_modal_popup').modal('hide');\n\n            if (data.default_sub_account_name) {\n              // <option value=\"combined_snapshot_sub_accounts\">Sub-accounts</option>\n              // Select all options with the value \"combined_snapshot_sub_accounts\"\n              document.querySelectorAll('option[value=\"combined_snapshot_sub_accounts\"]').forEach(function (option) {\n                // Update their text to the new default name\n                option.textContent = data.default_sub_account_name;\n              });\n            }\n\n          }\n        }\n      })\n    }\n  }\n\n  subAccountQuestionChanged(event) {\n    let selectElement = event.currentTarget;\n    let question_id = selectElement.value;\n    let customer_sub_account_id = selectElement.dataset.customerSubAccountId;\n    let stimulusRef = this;\n    let headerCell = document.querySelector(\".sub-account-question-cell-\"+customer_sub_account_id+\".sub-account-question-header-cell\");\n\n    if (!question_id || question_id === '') {\n      // Clear out old selections\n      document.querySelectorAll(\".sub-account-question-option-cell-\" + customer_sub_account_id).forEach(function (optionCell) {\n        let select_element = optionCell.querySelector('select');\n        if (select_element) {\n          select_element.innerHTML = '';\n          $(select_element).trigger('change.select2');\n        }\n      });\n      // Highlight Column\n      if (headerCell) {\n        headerCell.classList.add(\"needs-attention\");\n      }\n      let colElement = document.querySelector(\".sub-account-question-col-\"+customer_sub_account_id);\n      if (colElement) {\n        colElement.classList.add(\"sub-account-question-col-needs-attention\");\n      }\n    } else {\n      $.ajax({\n        headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n        type: \"GET\",\n        url: \"/combined_question/get_question_options\",\n        data: {question_id: question_id, customer_sub_account_id: customer_sub_account_id},\n        success: function (data) {\n          if (data && data.status == 200) {\n            // { status: 200, question_id: question.id, option_list: option_list, customer_sub_account_id }\n            let headerCell = document.querySelector('.sub-account-question-cell-' + data.customer_sub_account_id)\n            if (headerCell) {\n              headerCell.dataset.optionList = JSON.stringify(data.option_list);\n              let optionHTML = ''; //'<option value=\"\"></option>';\n              for (let j = 0; j < data.option_list.length; j++) {\n                optionHTML += '<option value=\"' + data.option_list[j][1] + '\" title=\"customer_sub_account_id:'+customer_sub_account_id+'\">' + data.option_list[j][0] + '</option>';\n              }\n              document.querySelectorAll(\".sub-account-question-option-cell-\" + data.customer_sub_account_id).forEach(function (optionCell) {\n                let select_element = optionCell.querySelector('select');\n                if (select_element) {\n                  select_element.innerHTML = optionHTML;\n                  $(select_element).trigger('change.select2');\n                }\n              });\n              // Unhighlight Column\n              if (headerCell) {\n                headerCell.classList.remove(\"needs-attention\");\n              }\n              let colElement = document.querySelector(\".sub-account-question-col-\"+data.customer_sub_account_id);\n              if (colElement) {\n                colElement.classList.remove(\"sub-account-question-col-needs-attention\");\n              }\n            }\n          }\n        }.bind(stimulusRef)\n      });\n\n      let content = i18n_string(\"combined_question.add_all_matching_question_options\", \"Add all matching question options?\") + '<br />';\n      content += ' <a href=\"#\" class=\"btn btn-sm btn-success\" data-action=\"click->combined-question#addAllOptionsForSubAccount\" data-sub-account-id=\"'+customer_sub_account_id+'\">'+i18n_string(\"general.yes_str\", \"Yes\")+'</a>';\n      content += ' <a href=\"#\" class=\"btn btn-sm btn-danger\" data-action=\"click->combined-question#addAllOptionsForSubAccountPopoverCancel\" data-sub-account-id=\"'+customer_sub_account_id+'\">'+i18n_string(\"general.no_str\", \"No\")+'</a>';\n      $(selectElement).popover({\n        'content': content,\n        'placement': 'top',\n        'html': true,\n        'trigger': 'manual',\n        // These are important to be able to call stimulus methods in this controller\n        'container': '#combined_question_modal_wrapper',\n        'sanitize': false,\n        // 'template': '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><span class=\"btn btn-link float-right combined-question-pop-close\">&times;</span><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'\n        // 'template': '<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><span class=\"btn btn-link float-right combined-question-pop-close\">&times;</span><div class=\"popover-inner\">'+content+'</div></div>'\n      }).popover('show');\n\n      // $(\".combined-question-pop-close\").click(function() {\n      //   console.log(\"Running: $(selectElement).popover('hide');\");\n      //   $(selectElement).popover('hide');\n      // });\n    }\n\n    this.updateSubAccountWithoutQuestionWarning();\n  }\n\n  updateSubAccountWithoutQuestionWarning() {\n    let unselected_question_count = 0;\n    $(\".sub-account-question-header-cell select\").each(function () {\n      if ($(this).val() === '') {\n        unselected_question_count += 1;\n      }\n    });\n    if (unselected_question_count > 0) {\n      document.getElementById(\"sub-account-count-without-question\").innerHTML = unselected_question_count;\n      document.getElementById(\"sub-account-without-question-button\").style.visibility = 'visible';\n    } else {\n      document.getElementById(\"sub-account-without-question-button\").style.visibility = 'hidden';\n    }\n  }\n\n  validateSubAccountListForm(event) {\n    let listNameInput = document.getElementById(\"combined_sub_account_name\");\n    if (!listNameInput || listNameInput.value == \"\") {\n      listNameInput.focus();\n      event.preventDefault();\n      return;\n    }\n    let selectObj = document.getElementById(\"sub_account_choice_list\");\n    let haveAtLeastOneSelected = false;\n    if (selectObj.dataset.usedOptions) {\n      let selectOptionList = JSON.parse(selectObj.dataset.usedOptions);\n      if (selectOptionList && selectOptionList.length > 0) {\n        haveAtLeastOneSelected = true;\n      }\n    }\n    if (!haveAtLeastOneSelected) {\n      alert(i18n_string(\"combined_question.please_create_at_least_one_sub_account_group\", \"Please create at least one sub-account group.\"));\n      event.preventDefault();\n      return;\n    }\n  }\n\n  wizardAccountCheckboxClick(event) {\n    let checkbox = event.currentTarget;\n    let col = checkbox.dataset.col;\n    this.wizardUpdateColumnStyling(col);\n  }\n\n  wizardContinueClicked(event) {\n    event.preventDefault();\n\n    let is_first_col = true;\n    let other_sub_account_option_lists = [];\n    let first_option_list = null;\n    let first_sub_account_id = null;\n    let first_question_text = null;\n    let accounts_to_include = [];\n    let checked_sub_account_elements = document.querySelectorAll(\".wizard-account-checkbox:checked\");\n    checked_sub_account_elements.forEach(function(checkbox){\n      // Get data-sub-account-id attribute from the checkbox element\n      let sub_account_id = checkbox.dataset.subAccountId;\n      accounts_to_include.push(sub_account_id);\n      let sub_account_name = checkbox.dataset.subAccountName;\n      let col_index = parseInt(checkbox.dataset.col);\n      // Get checked radio button with the name \"wizard_question_\"+sub_account_id\n      let radio_button = document.querySelector(\"input[name='wizard_question_\"+sub_account_id+\"']:checked\");\n      let selected_question_id = parseInt(radio_button.value);\n      let selected_question_text = '';\n      let question_list = [];\n      let option_list = [];\n      // Get the select dropdown with the id \"sample_quesiton_\"+sub_account_id+\"_\"+selected_quesiton_id, loop through the options and add them to option_list array.\n      let select_element = document.getElementById(\"sample_question_\"+sub_account_id+\"_\"+selected_question_id);\n      if (select_element) {\n        select_element.querySelectorAll(\"option\").forEach(function(option){\n          if (option.value != \"\") {\n            option_list.push([option.text, option.value]);\n          }\n        });\n      }\n      let question_selects = document.querySelectorAll(\".wizard-col-\"+col_index+\" select\");\n      question_selects.forEach(function(question_select){\n        // data-question-text, data-question-id\n        let question_text = question_select.dataset.questionText;\n        let question_id = parseInt(question_select.dataset.questionId);\n        question_list.push([question_text, question_id]);\n        if (question_id == selected_question_id) {\n          selected_question_text = question_text;\n        }\n      }.bind(this));\n\n      if (is_first_col) {\n        first_option_list = option_list;\n        first_sub_account_id = sub_account_id;\n        first_question_text = selected_question_text;\n        is_first_col = false;\n      } else {\n        other_sub_account_option_lists.push([sub_account_id, option_list]);\n      }\n\n      this.addSubAccountColumn(sub_account_name, sub_account_id, question_list, selected_question_id, option_list, '');\n    }.bind(this));\n\n    let table = document.getElementById(\"edit_question_group_table\");\n    // let thead = table.querySelector('thead');\n    let tbody = table.querySelector('tbody');\n    // Populate options and insert first column with question already preselected\n    first_option_list.forEach(function(option){\n      this.new_row_index += 1;\n      let newRow = this.addStandardOptionRow(tbody, this.new_row_index, option[0], '');\n      this.addOptionCell(newRow, first_option_list, [parseInt(option[1])], first_sub_account_id);\n      // Add cells for similar matches\n      if (other_sub_account_option_lists) {\n        // {customer_sub_account_id: sub_account.id, question_id: matching_question.id, option_list: option_list, display_name: sub_account.name_version, question_list: xxxx}\n        other_sub_account_option_lists.forEach(function(sub_data){\n          let sub_option_id = '';\n          for(let z=0;z<sub_data[1].length; z++) {\n            // Compare option names to see if we have a match and then select that one if we do!\n            if (normalize_string(sub_data[1][z][0]) == normalize_string(option[0])) {\n              sub_option_id = sub_data[1][z][1];\n              break;\n            }\n          }\n          // If sub_option_id is empty see if there is an option that is \"close enough\"\n          if (sub_option_id === '') {\n            for (let z = 0; z < sub_data[1].length; z++) {\n              // Compare option names to see if we have a match and then select that one if we do!\n              if (are_strings_similar(normalize_string(sub_data[1][z][0]), normalize_string(option[0]), 80)) {\n                sub_option_id = sub_data[1][z][1];\n                break;\n              }\n            }\n          }\n          this.addOptionCell(newRow, sub_data[1], [parseInt(sub_option_id)], sub_data[0]);\n        }.bind(this));\n      }\n    }.bind(this));\n\n    document.getElementById('add_question_group_step1_div').style.display = 'none';\n    document.getElementById('add_question_group_step2_div').style.display = '';\n    document.getElementById('save_question_group_button').style.display = '';\n\n    // Update question input with - question_text\n    document.getElementById('nameInput').value = first_question_text;\n    $(\"#customer_sub_accounts\").val(accounts_to_include).trigger(\"change\");\n\n    this.refreshRemainingOptionCounts(null, null);\n  }\n\n  wizardFocusNextSubAccountColumn(event) {\n    event.preventDefault();\n    event.currentTarget.blur();\n    if (document.wizard_first_sub_account_column_with_issue >= 0) {\n      const table = document.getElementById(\"add_question_wizard_table\");\n      const container = document.getElementById(\"add_question_wizard_table_container\");\n      const nextFocusColumn = document.querySelector(\"th.wizard-col-\"+document.wizard_first_sub_account_column_with_issue);\n\n      // Check if both the table and container exist\n      if (table && container) {\n        const thead = table.tHead;\n\n        // Ensure the table has a <thead> and at least one row with two cells\n        if (thead && thead.rows.length > 0 && thead.rows[0].cells.length > 0) {\n          const firstColumnsWidth = thead.rows[0].cells[0].getBoundingClientRect().width;\n\n          const padding = 4;\n\n          // Check that selectElement and container have valid bounding rectangles\n          const colRect = nextFocusColumn.getBoundingClientRect();\n          const containerRect = container.getBoundingClientRect();\n\n          if (colRect && containerRect) {\n            container.scrollLeft +=\n                colRect.x - containerRect.x - firstColumnsWidth - padding;\n          }\n        }\n      }\n    }\n  }\n\n  wizardQuestionSelectRadioClick(event){\n    let radio = event.currentTarget;\n    let col = radio.dataset.col;\n    this.wizardUpdateColumnStyling(col);\n    if (parseInt(col) == 0) {\n      // Get all elements with the \"wizard-highlight-matching\" class and remove the class\n      let highlightedElements = document.querySelectorAll(\".wizard-highlight-matching\");\n      highlightedElements.forEach((element) => {\n        element.classList.remove(\"wizard-highlight-matching\");\n      });\n\n      let selectedQuestionText = radio.dataset.questionText;\n      let questionWrappers = document.querySelectorAll(\".wizard-question-wrapper\");\n\n      questionWrappers.forEach((wrapper) => {\n        let wrapperQuestionText = wrapper.dataset.questionText;\n\n        if (normalize_string(selectedQuestionText) === normalize_string(wrapperQuestionText)) {\n          wrapper.classList.add(\"wizard-highlight-matching\");\n        }\n      });\n\n    }\n  }\n\n  wizardUpdateColumnStyling(column_index) {\n    let checkbox = document.querySelector(\"th.wizard-col-\"+column_index+\" input[type='checkbox']\");\n    let removeClasses = [];\n    let addClasses = [];\n    // Get the checked radio button with the attribute data-col=\"column_index\"\n    if (checkbox && checkbox.checked) {\n      let radioButton = document.querySelector(\"td.wizard-col-\"+column_index+\" input[type='radio'][data-col='\"+column_index+\"']:checked\");\n      removeClasses.push(\"wizard-sub-account-question-col-ignore\");\n      if (radioButton) {\n        removeClasses.push(\"wizard-sub-account-question-col-needs-attention\");\n      } else {\n        addClasses.push(\"wizard-sub-account-question-col-needs-attention\");\n      }\n    } else {\n      removeClasses.push(\"wizard-sub-account-question-col-needs-attention\");\n      addClasses.push(\"wizard-sub-account-question-col-ignore\");\n      // Uncheck radio buttons in this column\n      let allRadiosInColumn = document.querySelectorAll(\"td.wizard-col-\"+column_index+\" input[type='radio'][data-col='\"+column_index+\"']\");\n      allRadiosInColumn.forEach((radioElement) => {\n        radioElement.checked = false;\n      });\n    }\n    let elements = document.querySelectorAll(\".wizard-col-\" + column_index);\n    elements.forEach((element) => {\n      removeClasses.forEach((removeClass) => {\n        element.classList.remove(removeClass);\n      });\n      addClasses.forEach((addClass) => {\n        element.classList.add(addClass);\n      });\n    });\n\n    this.wizardValidateForContinue();\n  }\n\n  wizardValidateForContinue() {\n    let continueButton = document.getElementById(\"wizard-continue-button\");\n    let subAccountAttentionButton = document.getElementById(\"wizard-sub-account-without-question-button\");\n    let subAccountAttentionCount = document.getElementById(\"wizard-sub-account-count-without-question\");\n\n    document.wizard_first_sub_account_column_with_issue = -1;\n    let subAccountIssueCount = 0;\n    let allCheckboxes = document.querySelectorAll(\".wizard-account-checkbox:checked\");\n    allCheckboxes.forEach((checkboxElement) => {\n      let col = checkboxElement.dataset.col;\n      let radioButton = document.querySelector(\"td.wizard-col-\"+col+\" input[type='radio'][data-col='\"+col+\"']:checked\");\n      if (!radioButton) {\n        subAccountIssueCount++;\n        if (document.wizard_first_sub_account_column_with_issue == -1) {\n          document.wizard_first_sub_account_column_with_issue = col;\n        }\n      }\n    });\n\n    subAccountAttentionCount.innerHTML = subAccountIssueCount;\n    if (subAccountIssueCount > 0) {\n      subAccountAttentionButton.style.visibility = 'visible';\n      continueButton.disabled = true;\n    } else {\n      subAccountAttentionButton.style.visibility = 'hidden';\n      continueButton.disabled = false;\n    }\n\n\n  }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"combined-select\"\nexport default class extends Controller {\n    initialize() {\n    }\n\n    disconnect() {\n        let $element = $(this.element);\n        if ($element.hasClass('select2-hidden-accessible')) {\n            $element.select2('destroy');\n        }\n    }\n\n    connect() {\n        this.element[this.identifier] = this;\n\n        let $element = $(this.element);\n        //$element.data(\"last_value\", $element.val());\n        // Sent last_value to blank -- that way if we are editing it can trigger the change event right away to init the hidden fields\n        $element.data(\"last_value\", \"\");\n\n        var options = {\n            // placeholder: \"Please Select\",\n            theme: \"bootstrap-5\",\n            containerCssClass: \"select2--small\",\n            dropdownCssClass: \"select2--small\",\n            // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n            templateResult: function (result, container) {\n                if (!result.id && !result.disabled) {\n                    return result.text;\n                }\n                container.className += ' needsclick';\n\n                // Check for snapshot tree data attributes (used by snapshot quick select)\n                if (result.element) {\n                    var isFolder = result.element.getAttribute('data-is-folder');\n                    var depth = parseInt(result.element.getAttribute('data-depth') || '0', 10);\n                    var breadcrumb = result.element.getAttribute('data-breadcrumb');\n\n                    if (isFolder === 'true') {\n                        // Render folder header with icon and indentation\n                        var paddingLeft = (depth * 20) + 5;\n                        return $('<div style=\"padding-left:' + paddingLeft + 'px; font-weight:600; color:#333; padding-top:4px; padding-bottom:2px;\">' +\n                            '<i class=\"far fa-folder\" style=\"margin-right:6px;\"></i>' + result.text + '</div>');\n                    }\n\n                    if (breadcrumb) {\n                        // Render snapshot with breadcrumb path in gray and indentation\n                        var paddingLeft = (depth * 20) + 5;\n                        return $('<div style=\"padding-left:' + paddingLeft + 'px;\">' +\n                            '<div style=\"font-size:80%;color:#999;margin-bottom:-2px;\">' + breadcrumb + ' &gt;</div>' +\n                            result.text + '</div>');\n                    }\n                }\n\n                // Existing optgroup-based logic (backward compatibility for other selects)\n                if (result && result.element && result.element.parentElement && result.element.parentElement.tagName == 'OPTGROUP' && result.element.parentElement.label) {\n                    var parentLabel = result.element.parentElement.label;\n                    if (parentLabel.indexOf(\"Internal Medicine\") != -1) {\n                        parentLabel = \"Internal Med.\";\n                    } else if (parentLabel.indexOf(\"Pediatric\") != -1) {\n                        parentLabel = \"Pediatrics\";\n                    } else if (parentLabel.indexOf(\"Surgical\") != -1) {\n                        parentLabel = \"Surgical\";\n                    }\n                    return $('<div style=\"padding-left:10px;\"><div style=\"font-size:80%;color:#787878;margin-bottom:-2px;\">' + parentLabel + ' &gt;</div>' + result.text + '</div>');\n                }\n                return result.text;\n            },\n            templateSelection: function (item) {\n                if (!item || !item.element || !item.element.parentElement) {\n                    return \"\";\n                }\n\n                // For snapshot quick select items with breadcrumb data, show only the name\n                if (item.element.getAttribute('data-breadcrumb')) {\n                    return item.text;\n                }\n\n                // Existing optgroup-based logic (backward compatibility for other selects)\n                if ((item.element.parentElement.tagName != 'OPTGROUP') || !item.element.parentElement.label) {\n                    return item.text;\n                } else {\n                    var parentLabel = item.element.parentElement.label;\n                    if (parentLabel.indexOf(\"Internal Medicine\") != -1) {\n                        parentLabel = \"Internal Med.\";\n                    } else if (parentLabel.indexOf(\"Pediatric\") != -1) {\n                        parentLabel = \"Pediatrics\";\n                    } else if (parentLabel.indexOf(\"Surgical\") != -1) {\n                        parentLabel = \"Surgical\";\n                    }\n                    return parentLabel + \" > \" + item.text;\n                }\n            },\n            matcher: function (params, data) {\n                // If there are no search terms, return all of the data\n                if ($.trim(params.term) === '') {\n                    return data;\n                }\n\n                var textUC = data.text.toUpperCase();\n                var termUC = params.term.toUpperCase();\n\n                //console.log(textUC);\n                if (textUC.indexOf(\"OTHER\") > -1) {\n                    return data;\n                }\n\n                // `params.term` should be the term that is used for searching\n                // `data.text` is the text that is displayed for the data object\n                if (textUC.indexOf(termUC) > -1) {\n                    return data;\n                }\n\n                var filteredChildren = [];\n                if (data.children && data.children.length > 0) {\n                    $.each(data.children, function (idx, child) {\n                        if (child.text.toUpperCase().indexOf(params.term.toUpperCase()) > -1) {\n                            filteredChildren.push(child);\n                        } else if (child.text.toUpperCase().indexOf(\"OTHER\") > -1) {\n                            filteredChildren.push(child);\n                        }\n                    });\n                }\n\n                if (filteredChildren.length) {\n                    var modifiedData = $.extend({}, data, true);\n                    modifiedData.children = filteredChildren;\n\n                    // You can return modified objects from here\n                    // This includes matching the `children` how you want in nested data sets\n                    return modifiedData;\n                }\n\n                // Return `null` if the term should not be displayed\n                return null;\n            }\n\n        };\n        var parentElement = $element.closest(\".select2-wrapper-div\");\n        if (parentElement.length) {\n            options.dropdownParent = parentElement;\n        }\n\n        $element.select2(options);\n        // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n        var sel2Data = $element.data('select2');\n        if (sel2Data && sel2Data.$container) {\n            sel2Data.$container.find('*').addClass('needsclick');\n        }\n        if (parentElement.length) {\n            // Fix missing placeholder text\n            var selectObj = $element;\n            setTimeout(function () {\n                if (selectObj.data(\"placeholder\")) {\n                    if (parentElement.find(\".select2-selection__placeholder\").html() == \"\") {\n                        parentElement.find(\".select2-selection__placeholder\").html(selectObj.data(\"placeholder\"));\n                    }\n                }\n            }, 50);\n        }\n        $element.on('select2:open', function(e){\n            const select2 = $(e.target).data('select2');\n            if (select2 && select2.dropdown && select2.dropdown.$search && select2.dropdown.$search.get(0)) {\n                if (!mobileCheck()) {\n                    select2.dropdown.$search.get(0).focus();\n                }\n                let search_field = select2.dropdown.$search;\n                let parent_container = search_field.parent();\n                addLabelToSelect2SearchField(search_field, parent_container);\n            }\n        });\n\n        // Need to fire native event to trigger stimulus action\n        $element.on('select2:select', function () {\n          let event = new Event('change', { bubbles: true }) // fire a native event\n          this.dispatchEvent(event);\n        });\n\n        if ($element.val() != \"\") {\n            // Fire change event\n            let event = new Event('change', { bubbles: true });\n            $element[0].dispatchEvent(event);\n        }\n    }\n\n    process_input_change(e) {\n      // console.log(\"process_input_change\");\n        let $element = $(e.currentTarget);\n        let last_value = $element.data(\"last_value\");\n        let current_value = $element.val();\n        if (last_value != current_value) {\n            //console.log(\"New val: \" + current_value);\n            $element.data(\"last_value\", current_value);\n\n            var mainSelectObj = $element;\n            var selValue = current_value;\n            var $selOption = $element.find(\"option:selected\");\n\n            // dont update if they are \"hidden\" inputs\n            $(\"input.combined-select-hidden\").each(function () {\n                var $thisObj = $(this);\n                if (!$thisObj.data(\"dontupdate\")) {\n                    $thisObj.val(\"\");\n                }\n            });\n\n            var quest_id = $element.data(\"question_id\");\n            var option_other = $selOption.data(\"option_other\");\n            var quest_id_for_other = 0;\n            if (selValue.indexOf(\"!\") > -1) {\n                var valParts = selValue.split(\"!\");\n                $(\"#combined_select_hidden_field_\" + quest_id).val(valParts[0]);\n                $(\"#combined_select_hidden_field_\" + quest_id).change();\n                var sub_quest_id = $selOption.data(\"question_id\");\n                var $subInput = $(\"#combined_select_hidden_field_\" + sub_quest_id);\n                if ($subInput.length > 0 && !$subInput.data(\"dontupdate\")) {\n                    $subInput.val(valParts[1]);\n                    $subInput.change();\n                }\n                quest_id_for_other = sub_quest_id;\n            } else {\n                $(\"#combined_select_hidden_field_\" + quest_id).val(selValue);\n                $(\"#combined_select_hidden_field_\" + quest_id).change();\n                quest_id_for_other = quest_id;\n            }\n            if (quest_id_for_other > 0 && option_other == \"yes\") {\n                $(\".combined-select-other-text-container\").each(function () {\n                    if (\"other-text-container-\"+quest_id_for_other == this.id) {\n                        $(this).removeClass(\"hidden\");\n                    } else {\n                        $(this).find(\"input\").val(\"\");\n                        $(this).addClass(\"hidden\");\n                    }\n                });\n            } else {\n                $(\".combined-select-other-text-container\").each(function () {\n                    $(this).find(\"input\").val(\"\");\n                    $(this).addClass(\"hidden\");\n                });\n            }\n            // if (quest_id_for_other > 0 && option_other == \"yes\") {\n            //   var option_label_name = $selOption.data(\"option_other_name\");\n            //   if (option_label_name) {\n            //     $(\"#label-other-combined-select\").html(option_label_name);\n            //   } else {\n            //     $(\"#label-other-combined-select\").html(\"Other\");\n            //   }\n            //   $(\"#other-text-container-combined-select\").removeClass(\"hidden\");\n            // } else {\n            //   $(\"#other-text-container-combined-select\").addClass(\"hidden\");\n            //   $(\"#question_other_combined_select\").val(\"\");\n            // }\n\n        }\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"comparison-chart-modal\"\nexport default class extends Controller {\n  initialize() {\n    let close_text = i18n_string(\"general.close\", \"Close\");\n    setupBootstrapModal(\"wbi-comparison-chart-modal\", \"\", \"\", '<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">'+close_text+'</button>', 'body', '', 'modal-lg');\n\n    window.drawWbiComparisonChart = function (){\n      // Make sure connected chart_data is loaded\n      if (!window.wbi_comparison_chart_data) {\n        setTimeout(drawWbiComparisonChart, 500);\n        return;\n      }\n      var data = new google.visualization.DataTable();\n      data.addColumn('string', i18n_string(\"general.dashboard.roles\",\"Roles\"));\n      data.addColumn('number', i18n_string(\"general.dashboard.index_score\",\"Index Score\"));\n      data.addColumn({type:'string', role:'annotation'});\n      data.addColumn({type:'string', role:'style'});\n      data.addRows(window.wbi_comparison_chart_data);\n\n      var options = {\n        annotations: {\n          textStyle: {color: '#494949'},\n          boxStyle: {\n            stroke: '#dfdfdf',\n            strokeWidth: 1,\n            rx: 3,\n            ry: 3,\n            gradient: {\n              color1: '#fefefe',\n              color2: '#f2f2f2',\n              x1: '0%', y1: '0%',\n              x2: '100%', y2: '100%',\n              useObjectBoundingBoxUnits: true\n            }\n          }\n        },\n        chartArea:{\n          //left: 'auto',\n          // width: 'auto',\n          top: 20,\n          right: 20,\n          left: 150,\n          height: '80%'\n        },\n        backgroundColor: 'transparent',\n        pointSize: 14,\n        colors:['#2258b1'],\n\n        legend: 'none',\n        vAxis: {\n          minValue: 0,\n          maxValue: 7,\n          direction: -1,\n          ticks: [{v:1, f:i18n_string(\"general.dashboard.wbi_over_time_excellent\",\"Excellent\")},\n            {v:2, f:i18n_string(\"general.dashboard.wbi_over_time_above_avg\",\"Above Average\")},\n            {v:3, f:i18n_string(\"general.dashboard.wbi_over_time_avg\",\"Average\")},\n            {v:4, f:i18n_string(\"general.dashboard.wbi_over_time_below_avg\",\"Below Average\")},\n            {v:5, f:i18n_string(\"general.dashboard.wbi_over_time_low\",\"Low\")},\n            {v:6, f:i18n_string(\"general.dashboard.wbi_over_time_very_low\",\"Very Low\")},\n            {v:7, f:i18n_string(\"general.dashboard.wbi_over_time_extra_low\",\"Extremely Low\")}],\n          baseline: {\n            color: '#d8d8d8'\n          },\n          gridlines: {\n            count: 7,\n            color: '#CCCCCC'\n          },\n          textStyle: {\n            color: '#000000',\n            fontSize: '13'\n          },\n          titleTextStyle: {\n            color: '#000000',\n            fontSize: '15',\n            bold: true\n          },\n          title: i18n_string(\"general.dashboard.index_score\",\"Index Score\")\n        },\n        hAxis: {\n          textStyle: {\n            color: '#000000',\n            fontSize: '11'\n          },\n          titleTextStyle: {\n            color: '#000000',\n            fontSize: '15',\n            bold: true\n          },\n          title: ''\n        },\n        tooltip: {\n          trigger: 'none',\n          isHtml: true,\n          textStyle: {\n            color: '#7E7F74',\n            fontSize: '14'\n          }\n        }\n      }\n\n      // Instantiate and draw our chart, passing in some options.\n      var chart = new google.visualization.ScatterChart(document.getElementById('wbi-comparison-chart-div'));\n\n      chart.draw(data, options);\n    };\n\n    load_google_charts();\n    add_google_chart_onload_callback(drawWbiComparisonChart);\n\n    $(document).on('shown.bs.modal', '#wbi-comparison-chart-modal', function(){\n      drawWbiComparisonChart(); // Redraw\n    });\n  }\n  connect() {\n    this.element[this.identifier] = this;\n\n    // Return if modal/data is already setup\n    if (window.wbi_comparison_chart_data) {\n      return;\n    }\n    if (!this.element.dataset || !this.element.dataset.chartData || !this.element.dataset.group) {\n      //console.log(\"I'm missing something\");\n      return;\n    }\n    let chart_data = JSON.parse(this.element.dataset.chartData);\n    for (let i=0;i<chart_data.length;i++) {\n      chart_data[i][1] = Number.parseFloat(chart_data[i][1]);\n    }\n    let group = this.element.dataset.group.toLowerCase();\n    let org_compare = this.element.dataset.orgCompare;\n    let org_name = this.element.dataset.orgName;\n\n    // Title\n    $(\"#wbi-comparison-chart-modal .modal-title\").html(i18n_string(\"survey.comparison.my_score_vs_average_for\", \"My Well-Being Index Score vs. Average for\")+\" \"+group);\n    // Modal Body Setup\n    let body_html = '<h2 style=\"margin-bottom: -52px;\">'+i18n_string(\"survey.comparison.compare_your_score_vs_average_for\", \"Compare your Well-Being Index score against the average for\")+' '+group+'.</h2>';\n    body_html += '<div id=\"wbi-comparison-chart-div\" class=\"responsive-chart\"></div>';\n    body_html += '<div class=\"text-center\">';\n    for (let i=0;i<chart_data.length;i++){\n      body_html += '<span class=\"text-nowrap me-3\" ><span class=\"report-client-dot \" ';\n      body_html += ' style=\"background-color:'+chart_data[i][3]+';float:none;display:inline-block;margin:9px 3px 0px 0px;\"></span>';\n      body_html += chart_data[i][2];\n      body_html += '</span>';\n    }\n    body_html += '</div>';\n    if (org_compare && org_compare > 0 && org_name) {\n      body_html += '<div class=\"clearfix\"></div>';\n      body_html += '<div class=\"mt-3\" style=\"font-size:90%; color: #898989;\">';\n      body_html += '  ' + i18n_string(\"survey.comparison.this_report_is_generate_when_at_least\", \"This report is generated when at least\") + ' ' + org_compare + ' ';\n      body_html += '  ' + group + ' ' + i18n_string(\"survey.comparison.from_your_organization_have_assessed\", \"from your organization have assessed.\");\n      body_html += '</div>';\n    }\n    $(\"#wbi-comparison-chart-modal .modal-body\").html(body_html);\n\n\n    window.wbi_comparison_chart_data = chart_data;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"conditional-question\"\nexport default class extends Controller {\n  initialize() {\n  }\n\n  connect() {\n    this.element[this.identifier] = this;\n\n    let $element = $(this.element);\n    $element.data(\"last_value\", $element.val());\n  }\n\n  process_input_change (e){\n    let $element = $(e.currentTarget);\n    let last_value = $element.data(\"last_value\");\n    let current_value = $element.val();\n    if (last_value != current_value) {\n      $element.data(\"last_value\", current_value);\n      let question_id = $element.data(\"questionId\");\n      // Check for \"Other Selection\"\n      let other_options = $element.data(\"other\");\n      let have_other_selected = false;\n      if (other_options && other_options.length > 0) {\n        for(let i=0;i<other_options.length;i++){\n          if (current_value == other_options[i][0]){\n            have_other_selected = true;\n            let other_name = \"Other\";\n            if (other_options[i][1]) {\n              other_name = other_options[i][1];\n            }\n            $(\"#label-other-\"+question_id).html(other_name);\n            $(\"#other-text-container-\"+question_id).removeClass(\"hidden\");\n            break;\n          }\n        }\n      }\n      if (have_other_selected) {\n        // If we have an \"Other\" option selected we should remove any children questions for this question since we can not have both\n        if ($(\".child-question-\"+question_id).length) {\n          $(\".child-question-\" + question_id).remove();\n        }\n      } else {\n        $(\"#other-text-container-\"+question_id+\" input[type=text]\").val(\"\");\n        $(\"#other-text-container-\"+question_id).addClass(\"hidden\");\n        // If not then check if we need to load conditional\n        if ($element.data(\"subQuestions\")) {\n          this.load_conditional_question (e);\n        }\n      }\n    }\n  }\n\n  async load_conditional_question (e){\n    let $element = $(e.currentTarget);\n    let last_value = $element.data(\"last_value\");\n    let current_value = $element.val();\n    let question_id = $element.data(\"questionId\");\n    // console.log(\"load_conditiona_question -- last_value:\"+last_value+\" -- question_id=\"+question_id);\n\n    // Make sure value actually changed\n    // if (last_value != current_value) {\n    //   $element.data(\"last_value\", current_value);\n      // Remove old dropdown\n      let postData = {\n        question_id: question_id, option_id: current_value\n      }\n      $(\".child-question-\"+question_id).remove();\n      if ($element.closest(\".customer-sub-account-container\").length) {\n        postData.load_for_customer_sub_account_id = $element.closest(\".customer-sub-account-container\").data(\"id\");\n      }\n      // Load dependent question from server\n      if (Number(current_value) > 0) {\n        const request = new FetchRequest(\"post\", \"/signup-questions/sub_question\",\n            {\n              responseKind: \"html\",\n              body: postData\n            });\n        const response = await request.perform();\n        // console.dir(response);\n        if (response.ok) {\n          // console.log(\"OK=\"+response.json);\n          // console.dir(response.json);\n          response.html.then(function(formData){\n            // formData.options\n            //console.log(formData);\n            $element.closest(\".form-control-outer-container\").after(formData);\n          });\n        }\n      }\n    //}\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"contracts\"\nexport default class extends Controller {\n  \n  static targets = [\"customer\"]\n\n\n  calculateInvoiceTotal(e) {\n    let wrapper = e.currentTarget.closest('.nested-fields');\n\n    let license_total             = parseFloat(wrapper.querySelector(\"input[id$='license_total']\").value)\n    let setup_total               = parseFloat(wrapper.querySelector(\"input[id$='setup_total']\").value)\n    let one_time_total            = parseFloat(wrapper.querySelector(\"input[id$='one_time_total']\").value)\n    let leadership_license_total  = parseFloat(wrapper.querySelector(\"input[id$='leadership_license_total']\").value)\n    let pharmacist_total          = parseFloat(wrapper.querySelector(\"input[id$='pharmacist_total']\").value)\n    let dentist_total             = parseFloat(wrapper.querySelector(\"input[id$='dentist_total']\").value)\n\n    wrapper.querySelectorAll(\"input[class*='invoice_total']\").forEach(el => { \n      el.value = (license_total + setup_total + leadership_license_total + one_time_total + pharmacist_total + dentist_total).toFixed(2)\n    })\n  } \n\n  calculateRoyalties(e) {\n    e.preventDefault()\n    let wrapper = e.currentTarget.closest('.nested-fields')\n\n    const date = new Date(wrapper.querySelector(\"input[id$='invoice_date']\").value)\n\n    let license_total             = wrapper.querySelector(\"input[id$='license_total']\").value\n    let setup_total               = wrapper.querySelector(\"input[id$='setup_total']\").value\n    let one_time_total            = wrapper.querySelector(\"input[id$='one_time_total']\").value\n    let leadership_license_total  = wrapper.querySelector(\"input[id$='leadership_license_total']\").value\n    let pharmacist_total          = wrapper.querySelector(\"input[id$='pharmacist_total']\").value\n    let dentist_total             = wrapper.querySelector(\"input[id$='dentist_total']\").value\n\n\n    wrapper.querySelectorAll(\"input[class*='license_royalty']\").forEach(el => {\n      var percentage = ''\n      if(date < new Date('2023-01-01')) {\n        el.value = (parseFloat(license_total) * 0.55).toFixed(2)\n        percentage = '(55%)'\n      } else {\n        el.value = (parseFloat(license_total) * 0.45).toFixed(2)\n        percentage = '(45%)'\n      }\n\n      wrapper.querySelectorAll(\"small[class*='license-royalty-label']\").forEach(el2 => {\n        el2.innerText = percentage\n      })\n    })\n\n    wrapper.querySelectorAll(\"input[class*='one_time_royalty']\").forEach(el => { \n      el.value = (parseFloat(one_time_total) * 0.05).toFixed(2)\n    });\n\n    wrapper.querySelectorAll(\"input[class*='setup_royalty']\").forEach(el => {\n      el.value = (parseFloat(setup_total) * 0.05).toFixed(2)\n    })\n\n    wrapper.querySelectorAll(\"input[class*='one_time_royalty']\").forEach(el => { \n      el.value = (parseFloat(one_time_total) * 0.05).toFixed(2)\n    });\n\n    wrapper.querySelectorAll(\"input[class*='leadership_license_impact_royalty']\").forEach(el => { \n      el.value = (parseFloat(leadership_license_total) * 0.45).toFixed(2) \n    })\n    \n    wrapper.querySelectorAll(\"input[class*='logo_license_royalty']\").forEach(el => {\n      el.value = (parseFloat(license_total) * 0.02).toFixed(2)\n    })\n\n    wrapper.querySelectorAll(\"input[class*='logo_setup_royalty']\").forEach(el => {\n      el.value = (parseFloat(setup_total) * 0.02).toFixed(2)\n    })\n\n    wrapper.querySelectorAll(\"input[class*='one_time_logo_field_royalty']\").forEach(el => {\n      el.value = (parseFloat(one_time_total) * 0.02).toFixed(2)\n    })\n\n    wrapper.querySelectorAll(\"input[class*='pharmacist_royalty']\").forEach(el => {\n      var percentage = ''\n      if(date <= new Date('2021-07-09')) {\n        // no fee\n        percentage = '(0%)'\n      } else if(date >= new Date('2021-07-10') && date <= new Date(\"2022-07-09\")) {\n        el.value = (parseFloat(pharmacist_total) * 0.10).toFixed(2)\n        percentage = '(10%)'\n      } else if(date >= new Date('2022-07-10') && date <= new Date(\"2022-12-31\")) {\n        el.value = (parseFloat(pharmacist_total) * 0.15).toFixed(2)\n        percentage = '(15%)'\n      }\n\n      wrapper.querySelectorAll(\"small[class*='pharmacist-royalty-label']\").forEach(el2 => {\n        el2.innerText = percentage\n      })\n    })\n\n    wrapper.querySelectorAll(\"input[class*='dentist_royalty']\").forEach(el => {\n      var percentage = ''\n      if(date <= new Date('2022-11-01')) {\n        el.value = (parseFloat(dentist_total) * 0.30).toFixed(2)\n        percentage = '(30%)'\n      } else if(date >= new Date('2022-11-02') && date <= new Date(\"2022-12-31\")) {\n        el.value = (parseFloat(dentist_total) * 0.55).toFixed(2)\n        percentage = '(55%)'\n      }\n\n      wrapper.querySelectorAll(\"small[class*='dentist-royalty-label']\").forEach(el2 => {\n        el2.innerText = percentage\n      })\n    })\n\n    wrapper.querySelectorAll(\"input[class*='royalty_total']\").forEach(el => {\n      el.value = ( parseFloat(wrapper.querySelector(\"input[id$='license_royalty']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id$='setup_royalty']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id$='logo_license_royalty']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id$='logo_setup_royalty']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id='one_time_logo_royalty_field']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id$='one_time_royalty']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id$='leadership_license_royalty']\").value) +\n                   parseFloat(wrapper.querySelector(\"input[id$='pharmacist_royalty']\").value) + \n                   parseFloat(wrapper.querySelector(\"input[id$='dentist_royalty']\").value)).toFixed(2)\n    })\n\n  }\n\n  changeContractDate(e) {\n    let start_date = document.getElementById('contract_start_date').value\n    let years = document.getElementById('contract_years').value\n    if(start_date != '' && years != '') {\n      const date = new Date(start_date)\n      let new_date = new Date(date.setFullYear(date.getFullYear() + parseInt(years))).toISOString().split('T')[0];\n      Array.from(document.getElementsByClassName(\"contract-end-date\")).forEach(\n        function(element, index, array) {\n            element.value = new_date\n        }\n      );\n    }\n  }\n\n\n\n  changeInvoiceDate(e) {\n    const date = new Date(e.currentTarget.value)\n    let wrapper = e.currentTarget.closest('.nested-fields')\n    let net_terms = wrapper.querySelector(\"select[id$='net_days']\").value \n    if(net_terms != '') {      \n      wrapper.querySelector(\"input[id$='due_date']\").value = new Date(date.setDate(date.getDate() + parseInt(net_terms))).toISOString().split('T')[0]\n    }\n\n    if(date < new Date(\"2023-01-01\")){\n      wrapper.querySelectorAll(\"div[class*='additional-license-fees']\").forEach(el => { \n        el.classList.remove('hidden')\n      })\n    } else {\n      wrapper.querySelectorAll(\"div[class*='additional-license-fees']\").forEach(el => { \n        el.classList.add('hidden')\n      })\n      wrapper.querySelector(\"input[id$='pharmacist_total']\").value = 0.00\n      wrapper.querySelector(\"input[id$='dentist_total']\").value = 0.00\n      \n      wrapper.querySelectorAll(\"input[class*='pharmacist_royalty']\").forEach(el => {\n        el.value = 0.00\n      })\n\n      wrapper.querySelectorAll(\"input[class*='dentist_royalty']\").forEach(el => {\n        el.value = 0.00\n      })\n    }\n\n    this.calculateInvoiceTotal(e)\n    this.calculateRoyalties(e)\n  }\n\n\n  changeNetTerms(e) {\n    let wrapper = e.currentTarget.closest('.nested-fields')\n    let invoice_date = wrapper.querySelector(\"input[id$='invoice_date']\").value\n    if(invoice_date != '') {\n      const date = new Date(invoice_date)\n      wrapper.querySelector(\"input[id$='due_date']\").value = new Date(date.setDate(date.getDate() + parseInt(e.currentTarget.value))).toISOString().split('T')[0]\n    }\n  }\n\n  clearTooltips() {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n  }\n\n\n  configureSelect2Fields(selector, options){\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n\n\n  connect() {\n    console.log(\"CONTRACTS: connect\")\n    if( document.getElementById('contract_form') ){\n      // https://psmy.medium.com/rails-6-stimulus-and-select2-de4a4d2b59e4\n\n      this.configureSelect2Fields('select.select2', {})\n\n      $('#contract_customer_id').on('select2:select', function(){\n        let event = new Event('change', { bubbles: true })\n        this.dispatchEvent(event)\n      })\n    }\n\n    if( document.getElementById('contracts_table_holder') ){\n      $('#account_management_table').bootstrapTable({\n        search: \"true\",\n        searchable: \"true\"\n      })\n    }\n  }\n\n\n  delete(e) {\n    e.preventDefault()\n    var ans = confirm('Are you sure you want to delete this contract?')\n\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: e.currentTarget.href,\n        method: 'PATCH',\n        success: function (e) {\n          if(e.status == 200) {\n            var frame = document.querySelector('turbo-frame#customer_contracts')\n            frame.reload();\n          } else {\n            alert(\"Issue deleteing contract. Please try again.\")\n          }\n        }\n      });\n    }\n\n    this.clearTooltips()\n  }\n\n  fulfilled(e) {\n    e.preventDefault()\n    var ans = confirm('Are you sure you want to mark this contract fulfilled? Fulfilling the contract will remove it from ongoing ARR.')\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: e.currentTarget.href,\n        method: 'PATCH',\n        success: function (e) {\n          if(e.status == 200) {\n            var frame = document.querySelector('turbo-frame#customer_contracts')\n            frame.reload();\n          } else {\n            alert(\"Issue marking contract fulfilled. Please try again.\")\n          }\n        }\n      });\n    }\n  }\n\n\n\n  save(event) {\n    event.preventDefault()\n\n    var formData = $('#contract_form').serializeArray();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: event.currentTarget.action,\n      method: 'POST',\n      data: formData,\n      success: function (e) {\n        if(e.status == 200) {\n          if(document.querySelector('turbo-frame#customer_contracts') != undefined) {\n            var frame = document.querySelector('turbo-frame#customer_contracts')\n            frame.reload();\n          } else if (document.getElementById('arr_submit_button') != undefined) {\n            document.getElementById('arr_submit_button').click()\n          }\n\n          $('#system_modal_popup').modal('hide')\n        } else {\n          alert(\"Issue saving contract. Please try again.\")\n        }\n      }\n    });\n\n    this.clearTooltips()\n  }\n\n\n\n  selectCustomer(event) {\n    document.getElementById('contract_customer_documents_attributes_0_customer_id').value = event.currentTarget.value    \n  }\n\n  \n  \n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"cost-of-burnout-filter\"\nexport default class extends Controller {\n  static targets = [\"questionSelect\", \"optionsContainer\", \"optionsSelect\"]\n  static values = { optionsUrl: String }\n\n  connect() {\n    // Check if question dropdown already has a value (from saved settings restore)\n    if (this.questionSelectTarget.value) {\n      this.loadOptions(this.questionSelectTarget.value, true)\n    }\n  }\n\n  questionChanged() {\n    let questionId = this.questionSelectTarget.value\n    if (questionId) {\n      this.loadOptions(questionId, false)\n    } else {\n      this.hideOptions()\n    }\n  }\n\n  loadOptions(questionId, restoreSaved) {\n    let controller = this\n    let $optionsSelect = $(this.optionsSelectTarget)\n\n    // Destroy existing Select2 if initialized\n    if ($optionsSelect.hasClass('select2-hidden-accessible')) {\n      $optionsSelect.select2('destroy')\n    }\n    $optionsSelect.empty()\n\n    $.ajax({\n      url: this.optionsUrlValue,\n      type: 'GET',\n      data: { question_id: questionId },\n      success: function(response) {\n        if (response.status == 200 && response.options.length > 0) {\n          response.options.forEach(function(option) {\n            $optionsSelect.append(new Option(option.name, option.id, false, false))\n          })\n\n          // Restore saved selections if loading from saved settings\n          if (restoreSaved && document.saved_report_settings_last) {\n            try {\n              let savedSettings = JSON.parse(document.saved_report_settings_last)\n              let savedOptionIds = []\n              Object.keys(savedSettings).forEach(function(key) {\n                if (key.indexOf('bc_demographic_option_ids') !== -1) {\n                  savedOptionIds.push(savedSettings[key])\n                }\n              })\n              if (savedOptionIds.length > 0) {\n                $optionsSelect.val(savedOptionIds)\n              }\n            } catch(e) {\n              // Ignore parse errors\n            }\n          }\n\n          controller.showOptions()\n          controller.initSelect2($optionsSelect)\n        } else {\n          controller.hideOptions()\n        }\n      }\n    })\n  }\n\n  initSelect2($element) {\n    let selectParent = $element.parent()\n    let options = {\n      theme: \"bootstrap-5\",\n      dropdownParent: selectParent\n    }\n    if ($element.data(\"show_select_all\") == \"yes\") {\n      options.dropdownAdapter = $.fn.select2.amd.require('select2/selectAllAdapter')\n    }\n    $element.select2(options)\n\n    // Fire native change event when item is selected\n    $element.on('select2:select select2:unselect select2:clear', function() {\n      let event = new Event('change', { bubbles: true })\n      this.dispatchEvent(event)\n    })\n  }\n\n  showOptions() {\n    this.optionsContainerTarget.style.display = ''\n  }\n\n  hideOptions() {\n    let $optionsSelect = $(this.optionsSelectTarget)\n    if ($optionsSelect.hasClass('select2-hidden-accessible')) {\n      $optionsSelect.select2('destroy')\n    }\n    $optionsSelect.empty()\n    this.optionsContainerTarget.style.display = 'none'\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"customer-sub-account-search\"\nexport default class extends Controller {\n  connect() {\n    $('.main-choose-location').on('shown.bs.dropdown', function () {\n      $(\"#main-choose-location-search\").focus();\n    });\n    document.account_search_input_id = \"main-choose-location-search\";\n  }\n  refreshSearch(event){\n    // console.log(\"refreshSearch\");\n    let searchStr = $(\"#\"+document.account_search_input_id).val();\n    let numShown = 0;\n    // console.log(\"searchStr='\"+searchStr+\"'\");\n    if(searchStr && searchStr.length > 0)\n    {\n      searchStr = searchStr.toLowerCase();\n      searchStr = searchStr.replace(/[^a-z0-9]+/g, '');\n      $(\".choose-location-search-item\").each(function(){\n        let this_searchable_val = $(this).data(\"searchstr\");\n        if(this_searchable_val)\n        {\n          if(this_searchable_val.indexOf(searchStr) != -1)\n          {\n            // $(this).show();\n            $(this).removeClass(\"d-none\");\n            numShown++;\n          }\n          else\n          {\n            // $(this).hide();\n            $(this).addClass(\"d-none\");\n          }\n        }\n        else\n        {\n          // $(this).hide();\n          $(this).addClass(\"d-none\");\n        }\n      });\n    }\n    else\n    {\n      // Show all\n      $(\".choose-location-search-item\").each(function(){\n        $(this).show();\n        numShown++;\n      });\n    }\n    if(numShown == 0)\n    {\n      $(\"#choose-location-no-items\").show();\n    }\n    else\n    {\n      $(\"#choose-location-no-items\").hide();\n    }\n  }\n  clearSearch(event){\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    // console.log(\"clearSearch\");\n    $(\"#\"+document.account_search_input_id).val(\"\");\n    this.refreshSearch(event);\n    $(\"#\"+document.account_search_input_id).focus();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"customers\"\nexport default class extends Controller {\n\n  cust_hubspot_vid = undefined;\n  hs_data_cust = {}\n  current_modal_sync_type = ''\n  hubspot_vid = \"\"\n  wbi_data = {}\n  hs_data = {}\n  field_common_billing = [\"fname\",\"lname\",\"email\",\"company\",\"phone\",\"renewal\",\"instadmin\",\"brand\"]\n  field_common_ro = [\"fname\",\"lname\",\"email\",\"rolloutcontact\",\"brand\"]\n\n  connect() {\n    // Store original plan_id for Essentials Basic confirmation\n    const planSelect = document.getElementById('customer_plan_id');\n    if (planSelect) {\n      this.originalPlanId = planSelect.value;\n    }\n\n    this.initializeSelect2(\"select.select2\", {})\n\n    this.initializeCkEditor();\n\n    // Re-initialize after turbo frame loads (for lazy-loaded sub-account forms)\n    this.frameLoadHandler = (event) => {\n      const frame = event.target;\n      // Only re-initialize select2/ckeditor within the loaded frame\n      // Use \"select.select2\" to target actual <select> elements, not select2 container <span>s\n      $(frame).find(\"select.select2\").each((_, el) => {\n        if (!$(el).data('select2')) {\n          var parentElement = $(el).closest(\".select2-wrapper-div\");\n          var options = {};\n          if (parentElement.length) {\n            options.dropdownParent = parentElement;\n          }\n          $(el).select2(options);\n        }\n      });\n      this.initializeCkEditor();\n    };\n    document.addEventListener(\"turbo:frame-load\", this.frameLoadHandler);\n\n    if ($(\".ckeditor-landing-page-custom-message\").length) {\n      $(\".ckeditor-landing-page-custom-message\").each(function(){\n        CKEDITOR.replace(this, {\n          allowedContent:true, // Need this to allow attributes on elements\n          height: '300px',\n          toolbar: [\n            {\n              name: 'basicstyles',\n              groups: ['basicstyles', 'cleanup'],\n              items: ['Source', '-', 'Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat', '-', 'Link', 'Unlink']\n            },\n            {\n              name: 'paragraph',\n              groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n              items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'Link', 'Unlink']\n            },\n            {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n            {name: 'colors', items: ['TextColor', 'BGColor']}\n          ]\n        });\n      });\n    }\n\n    window.startGroupColumnStyle = (value, row, index) => {\n      return {\n        css: {\n          'border-left': '8px solid #f2f2f2;'\n        }\n      }\n    };\n\n    if (document.getElementById('account_management_table_container')) {\n      this.sizeAccountManagementTableToViewport();\n      this.resizeDebouncer = basicDebouncer( 250 );\n\n      window.addEventListener('resize', function(){\n        this.resizeDebouncer(function(){\n          this.sizeAccountManagementTableToViewport();\n        }.bind(this));\n      }.bind(this));\n    }\n  }\n\n  disconnect() {\n    if (this.frameLoadHandler) {\n      document.removeEventListener(\"turbo:frame-load\", this.frameLoadHandler);\n    }\n  }\n\n  addLandingPageOption(event) {\n    event.preventDefault()\n    var item = event.currentTarget;\n    var count = parseInt(item.dataset.count)\n    $('#dropdown_list_' + item.dataset.form + ' > table > tbody').append('<tr><td><input type=\"text\" name=\"option[][option_name]\" class=\"form-control\"></td><td><input type=\"text\" name=\"option[][option_code]\" class=\"form-control\"></td><td><input type=\"text\" name=\"option[][option_order]\" value=\"' + item.dataset.count + '\" class=\"form-control\"></td><td><input type=\"checkbox\" name=\"option[][option_delete]\" id=\"option_delete_\" value=\"true\"></td></tr>');\n    document.getElementById(\"add_row_btn_\" + item.dataset.form).dataset.count = count + 1\n    document.getElementById(\"auto_populate_btn_\" + item.dataset.form).dataset.count = count\n  }\n\n  autoFillHubspotData(event) {\n    event.preventDefault();\n    $(\"#customer_name\").val(this.hs_data_cust[\"company\"]);\n    $(\"#customer_contact_fname\").val(this.hs_data_cust[\"fname\"]);\n    $(\"#customer_contact_lname\").val(this.hs_data_cust[\"lname\"]);\n    $(\"#customer_contact_email\").val(this.hs_data_cust[\"email\"]);\n    $(\"#customer_contact_phone\").val(this.hs_data_cust[\"phone\"]);\n  }\n\n  autoFillLandingPage(event) {\n    event.preventDefault();\n    var data = event.currentTarget.dataset;\n    document.getElementById('redirect_path').value = slugify_string(data.path);\n    document.getElementById('redirect_redirect').value = \"landing-page/\" + encodeURIComponent(data.path);\n  }\n\n  autoFillSignup(event) {\n    event.preventDefault();\n    var data = event.currentTarget.dataset;\n    document.getElementById('redirect_path').value = slugify_string(data.code);\n    document.getElementById('redirect_redirect').value = \"signup?code=\" + encodeURIComponent(data.code);\n  }\n\n  autoPopulateLandingPage(event) {\n    event.preventDefault()\n    var item = event.target\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: \"/customers/\" + item.dataset.id + \"/landing_page_options\",\n      data: { start: parseInt(item.dataset.count) + 1 },\n      type: \"GET\",\n      success: function(e) {\n        if(e.status == 200) {\n          $('#dropdown_list_' + item.dataset.form + ' > table > tbody').append(e.fields)\n          document.getElementById(\"add_row_btn_\" + item.dataset.form).dataset.count = e.count + 1\n          document.getElementById(\"auto_populate_btn_\" + item.dataset.form).dataset.count = e.count\n        }\n      }\n    })\n  }\n\n  cancelAutoFillHubspotData(event) {\n    event.preventDefault();\n    this.hs_data_cust = {};\n    this.cust_hubspot_vid = undefined;\n    $(\"#hubspot_vid_customer_form\").val(0);\n    $(\".hubspot-select-contact-button-cust\").each(function () {\n      $(this).remove();\n    });\n    $(\"#hubspot-sync-search-results-none-cust\").hide();\n    $(\"#hubspot-sync-search-results-cust-selected\").hide();\n    $(\"#hubspot-sync-search-results-cust\").show();\n    $(\"#hubspot-sync-search-group-cust\").show();\n  }\n\n  cancelEditSetting(event) {\n    event.preventDefault();\n\n    var item = event.target;\n    if(!item.classList.contains('cancel-setting')){\n      item = event.target.parentNode;\n    }\n\n    var id = item.dataset.id;\n    var type = item.dataset.type;\n    var $row = $(\"#settings-\" + type + \"-row-\" + id);\n    $row.find(\".save-setting\").addClass('hidden');\n    $row.find(\".edit-setting\").removeClass('hidden');\n    $(item).addClass('hidden');\n    $(\"#settings_\" + type + \"s_value_\" + id).addClass('hidden');\n    $row.find(\".setting-value-display\").removeClass('hidden');\n  }\n\n  cancelHiddenSignupQuestion(event) {\n    event.preventDefault()\n\n    var item = event.currentTarget\n    var id = item.dataset.id\n    var type = item.dataset.type\n\n    item.classList.add('hidden')\n\n    var row = document.getElementById(\"settings-\" + type + '-row-' + id)\n    row.getElementsByClassName('edit-setting')[0].classList.remove('hidden')\n    row.getElementsByClassName('save-setting')[0].classList.add('hidden')\n    row.getElementsByClassName('setting-value-display')[0].classList.remove('hidden')\n    \n    document.getElementById(\"settings_\" + type + 's_value_' + id).classList.add('hidden')\n  }\n\n  certificateReportFrequencyChange(event) {\n    let $item = $(event.target);\n    if ($item.val() == \"custom\") {\n      $item.closest(\".auto_send_cert_report_frequency_custom_wrapper_div\").find(\".auto_send_cert_report_frequency_custom_div\").show();\n    } else {\n      $item.closest(\".auto_send_cert_report_frequency_custom_wrapper_div\").find(\".auto_send_cert_report_frequency_custom_div\").hide();\n    }\n    if ($item.val() == \"weekly\" || $item.val() == \"biweekly\") {\n      $item.closest(\".auto_send_cert_report_frequency_custom_wrapper_div\").find(\".bi_weekly_day_of_week_div\").show();\n    } else {\n      $item.closest(\".auto_send_cert_report_frequency_custom_wrapper_div\").find(\".bi_weekly_day_of_week_div\").hide();\n    }\n  }\n\n  changeRenewalType(event) {\n    var item = event.currentTarget\n    if(item.value == 'false') {\n      document.getElementById('customer_renewal').classList.remove(\"hidden\")\n      document.getElementById('customer_renewal_contact').classList.remove(\"hidden\")\n      document.getElementById('customer_renewal_alert').classList.add('hidden')\n    } else if(item.value == 'true') {\n      document.getElementById('customer_renewal').classList.add('hidden')\n      document.getElementById('customer_renewal_contact').classList.add(\"hidden\")\n      document.getElementById('customer_renewal_alert').classList.remove('hidden')\n    }\n  }\n\n  checkCancelledStatus(event) {\n    var item = event.currentTarget\n\n    $('#customer_cancellation_date').attr(\"disabled\", true)\n\n    if(item.value != 1){\n      $('#customer-account-status-email-alert').removeClass(\"hidden\");\n      $('#customer_send_status_change_alert_no').prop('checked', true)\n      $('#customer-cancelled-reason').removeClass('hidden');\n    } else {\n      $('#customer-account-status-email-alert').addClass(\"hidden\");\n      $('#customer_send_status_change_alert_yes').prop('checked', false)\n      $('#customer_send_status_change_alert_no').prop('checked', false)\n      $('#customer-cancelled-reason').addClass('hidden');\n    }\n\n    if(item.value == 4) {\n      $('#customer_cancellation_date').attr(\"disabled\", false)\n    }\n  }\n\n  planChanged(event) {\n    const select = event.currentTarget;\n    const essentialsPlanId = select.dataset.customersEssentialsPlanIdValue;\n\n    if (select.value === essentialsPlanId) {\n      // Show confirmation modal\n      const modal = new bootstrap.Modal(document.getElementById('essentials-basic-confirmation-modal'));\n      modal.show();\n\n      const cancelBtn = document.getElementById('essentials-basic-cancel-btn');\n      const confirmBtn = document.getElementById('essentials-basic-confirm-btn');\n\n      // Cancel: revert to original plan\n      const handleCancel = () => {\n        select.value = this.originalPlanId || select.dataset.customersOriginalPlanIdValue || '';\n        modal.hide();\n        cancelBtn.removeEventListener('click', handleCancel);\n        confirmBtn.removeEventListener('click', handleConfirm);\n      };\n\n      // Confirm: just close modal and let form submit normally\n      const handleConfirm = () => {\n        modal.hide();\n        cancelBtn.removeEventListener('click', handleCancel);\n        confirmBtn.removeEventListener('click', handleConfirm);\n      };\n\n      cancelBtn.addEventListener('click', handleCancel);\n      confirmBtn.addEventListener('click', handleConfirm);\n    } else {\n      // Update stored original plan when user picks a non-essentials plan\n      this.originalPlanId = select.value;\n    }\n  }\n\n  clearSearchFilter(event) {\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    var type = event.target.dataset.type\n    $(\"#filter-\" + type + \"-settings-table-input\").val(\"\");\n    $(\"#filter-\" + type + \"-settings-table-clear-button\").hide();\n    $(\"#filter-\" + type + \"-settings-table tbody tr\").each(function(index, item){\n      $(item).attr('style', '');\n    })\n  }\n\n  clearTestAccounts(event) {\n    if ($(\"#confirm_clear_test_accounts\").prop('checked')) {\n      event.currentTarget.querySelector('button[type=\"submit\"]').innerHTML = '<em class=\"fa fa-spin fa-spinner\"></em> Clearing Test Accounts';\n      event.currentTarget.querySelector('button[type=\"submit\"]').setAttribute('disabled', 'disabled');\n      event.currentTarget.submit();\n    } else {\n      event.preventDefault();\n    }\n  }\n\n\n  confirmChangeStarred (e) {\n    if (!confirm(\"Are you sure you want to change the last reminder dates for starred admins? This action is not reversible.\")) {\n      e.preventDefault();\n    }\n  }\n\n  confirmChangeAny (e) {\n    if (!confirm(\"Are you sure you want to change the last reminder dates for any admin type? This action is not reversible.\")) {\n      e.preventDefault();\n    }\n  }\n\n  default_country_change(event) {\n    let new_val = $(event.target).val();\n    let closest_form = $(event.target).closest('form');\n    if (new_val == \"\") {\n      closest_form.find(\".input-state-question-id\").val(\"\");\n      closest_form.find(\".input-state\").val(\"\");\n      closest_form.find(\".default-state-div\").addClass(\"hidden\");\n    } else {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/customers/get_state_options?country=\"+new_val,\n        type: \"GET\",\n        success: function(data) {\n          if(data.status == 200) {\n            // console.log(data.state_question_id);\n            if (data.state_question_id && data.state_question_id > 0 && data.option_list) {\n              closest_form.find(\".input-state-question-id\").val(data.state_question_id);\n              closest_form.find(\".input-state\").html(\"\");\n              for (let i = 0; i<data.option_list.length; i++){\n                let opt = document.createElement('option');\n                opt.value = data.option_list[i][1];\n                opt.innerHTML = data.option_list[i][0];\n                closest_form.find(\".input-state\").append(opt);\n              }\n              closest_form.find(\".default-state-div\").removeClass(\"hidden\");\n            } else {\n              closest_form.find(\".input-state-question-id\").val(\"\");\n              closest_form.find(\".input-state\").val(\"\");\n              closest_form.find(\".default-state-div\").addClass(\"hidden\");\n            }\n          }\n        }\n      });\n    }\n  }\n\n  deleteHiddenSignupQuestion(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n    var type = item.dataset.type\n    var obj_id = item.dataset.id.split('-')\n\n    console.log(obj_id)\n\n    var ans = confirm(\"Are you sure you want to remove this setting?\")\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"DELETE\",\n        url: \"/customers/delete_hidden_question\",\n        data: {\n          customer_sub_account_id: obj_id[0],\n          question_id: obj_id[1]\n        },\n        success: function (e) {\n          if(e.status == 200) {\n            document.getElementById('settings-' + type + '-row-' + item.dataset.id).remove()\n          }\n        }\n      })\n    }\n  }\n\n  deleteRedirect(event) {\n    event.preventDefault();\n    var item = event.target;\n    var url = item.href\n    var id = item.dataset.id\n    var ans = confirm(\"Are you sure you want to delete this redirect?\")\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: url,\n        type: \"DELETE\",\n        success: function(e) {\n          if(e.status == 200) {\n            $('#redirect_' + id).remove();\n          }\n        }\n      })\n    }\n  }\n\n  deleteUpload(event) {\n    event.preventDefault();\n    var item = event.currentTarget;\n    var url = item.href;\n    var id = item.dataset.id;\n    var hidden_id = item.dataset.hidden;\n    var ans = confirm('Are you sure you want to delete this file?');\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: url,\n        type: 'DELETE',\n        success: function(e){\n          if(e.status == 200) {\n            $('#upload_' + id).remove();\n            $('#' + hidden_id).remove();\n          }\n        }\n      });\n    }\n  }\n\n  deleteLogo(event) {\n    event.preventDefault();\n    var item = event.currentTarget;\n    var url = item.href;\n    var containerId = item.dataset.container;\n    var ans = confirm('Are you sure you want to delete this logo?');\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: url,\n        type: 'DELETE',\n        success: function(e){\n          if(e.status == 200) {\n            $('#' + containerId).remove();\n          }\n        }\n      });\n    }\n  }\n\n  document_selected(event) {\n    var input_field = event.target;\n    if (input_field && input_field.value && input_field.id) {\n      var name_id = input_field.id.replace('_file','_name');\n      var name_field = document.getElementById(name_id);\n      if (name_field) {\n        var filename = input_field.value.replace(/^.*\\\\/, \"\");\n        name_field.value = filename;\n      }\n    }\n  }\n\n  editHiddenSignupQuestion(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n    var id = item.dataset.id\n    var type = item.dataset.type\n\n    item.classList.add('hidden')\n\n    var row = document.getElementById(\"settings-\" + type + '-row-' + id)\n    row.getElementsByClassName('save-setting')[0].classList.remove('hidden')\n    row.getElementsByClassName('cancel-setting')[0].classList.remove('hidden')\n    row.getElementsByClassName('setting-value-display')[0].classList.add('hidden')\n\n    document.getElementById(\"settings_\" + type + 's_value_' + id).classList.remove('hidden')\n    document.getElementById(\"settings_\" + type + 's_value_' + id).focus()\n  }\n\n\n  filterHiddenSignupQuestions(event) {\n    var item = event.target\n    var searchStr = item.value\n    var type = item.dataset.type\n\n    var numShown = 0\n\n    if (searchStr && searchStr.length > 0) {\n      document.getElementById(\"filter-\" + type + \"-settings-table-clear-button\").classList.remove('hidden')\n      searchStr = searchStr.toLowerCase();\n      searchStr = searchStr.replace(/[^a-z0-9]+/g, '');\n      $(\"#filter-\" + type + \"-settings-table tbody tr.searchable-row\").each(function () {\n        var this_searchable_val = $(this).data(\"searchstr\");\n        if (this_searchable_val) {\n          if (this_searchable_val.indexOf(searchStr) != -1) {\n            $(this).show();\n            numShown++;\n          } else {\n            $(this).hide();\n          }\n        } else {\n          $(this).hide();\n        }\n      });\n    } else {\n      document.getElementById(\"filter-\" + type + \"-settings-table-clear-button\").classList.add('hidden')\n      // Show all\n      $(\"#filter-\" + type + \"-settings-table tbody tr.searchable-row\").each(function () {\n        $(this).show();\n        numShown++;\n      });\n    }\n    if (numShown == 0) {\n      document.getElementById(\"no-items-match\").classList.remove('hidden')\n    } else {\n      document.getElementById(\"no-items-match\").classList.add('hidden')\n    }\n  }\n\n\n  initializeCkEditor() {\n    if ($('.ckeditor').length) {\n      CKEDITOR.config.extraPlugins = 'justify';\n      $('.ckeditor').each(function(){\n        // Make sure this is an textarea element.\n        if (!$(this).is('textarea')) return;\n        // Check attribute on this element to see if the editor is already initialized, and return if it is.\n        if ($(this).data('ckeditor-initialized')) return;\n        $(this).data('ckeditor-initialized', true);\n\n        let toolbar = [\n          {\n            name: 'basicstyles',\n            groups: ['basicstyles', 'cleanup'],\n            items: ['Source', '-', 'Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat']\n          },\n          {\n            name: 'paragraph',\n            groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n            items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'Link', 'Unlink']\n          },\n          {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n          {name: 'colors', items: ['TextColor', 'BGColor']}\n        ];\n        if ($(this).hasClass('limited-toolbar')) {\n          toolbar = [\n            { name: 'text',         items: ['Bold', 'Italic', '-', 'RemoveFormat'] },\n            { name: 'links',        items: ['Link', 'Unlink'] },\n            { name: 'clipboard',    items: ['NumberedList','BulletedList','-','Cut', 'Copy', 'Paste'] }\n          ];\n        }\n        CKEDITOR.replace($(this).prop('id'), {\n          allowedContent:true, // Need this to allow attributes on elements\n          height: '300px',\n          toolbar: toolbar\n        });\n\n          // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n          /* Here we are latching on an event ... in this case, the dialog open event */\n          CKEDITOR.on('dialogDefinition', function(ev) {\n            try {\n              /* this just gets the name of the dialog */\n\n              var dialogName = ev.data.name;\n              /* this just gets the contents of the opened dialog */\n\n              var dialogDefinition = ev.data.definition;\n              /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n              if(dialogName == 'link') {\n\n                /* Getting the contents of the Target tab */\n                var informationTab = dialogDefinition.getContents('target');\n\n                /* Getting the contents of the dropdown field \"Target\" so we can set it */\n                var targetField = informationTab.get('linkTargetType');\n\n                /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n                targetField['default'] = '_blank';\n\n              }\n            } catch(exception) {\n              alert('Error ' + ev.message);\n            }\n          });\n      });\n    }\n  }\n\n  initializeSelect2(selector, options) {\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n\n  landingPageCodeChanged(event) {\n    let item = event.target;\n    let $form = $(item).closest(\"form\");\n    let $landing_page_url_field = $form.find(\".landing-page-url\");\n    if ($landing_page_url_field.val() == \"\") {\n      let generated_url = slugify_string(item.value);\n      $landing_page_url_field.val(generated_url);\n    }\n  }\n\n  participationThreshold(event) {\n    if( $('#participation_amount_holder_' + event.target.dataset.id).hasClass('hidden')) {\n      $('#participation_amount_holder_' + event.target.dataset.id).removeClass('hidden');\n    } else {\n      $('#participation_amount_holder_' + event.target.dataset.id).addClass('hidden');\n    }\n\n    $('#participation_amount_holder_' + event.target.dataset.id).children('input').val('');\n  }\n\n  promptForDemographicQuestions(event){\n    var ans = confirm(\"Are you sure you want prompt all users from these accounts to update their demographics upon next login?\")\n    if(!ans) {\n      event.preventDefault()\n    }\n  }\n\n\n  removeHubspotSync(event) {\n    event.preventDefault();\n    var item = event.target;\n    if(confirm(\"Are you sure you want to remove the Hubspot sync for this account?\"))\n    {\n      var customer_id = item.dataset.customerId;\n      this.current_modal_sync_type = item.dataset.syncType;\n      if(!this.current_modal_sync_type)\n      {\n        this.current_modal_sync_type = \"billing\";\n      }\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"PATCH\",\n        url: \"/customers/\" + customer_id + \"/remove_hubspot_sync\",\n        data: { sync_type: this.current_modal_sync_type },\n        success: function (e) {\n          if( e.status == 200) {\n            window.location.reload(true);\n          } \n          else if(e && e.error)\n          {\n            alert(e.error);\n          }\n          else\n          {\n            alert(\"Unexpected error, please try again\");\n          }\n        }\n      });\n    }\n  }\n\n  saveHiddenSignupQuestion(event) {\n    event.preventDefault()\n\n    var item = event.currentTarget\n    var id = item.dataset.id\n    var type = item.dataset.type\n    var obj_id = id.split('-')\n\n    var row = document.getElementById(\"settings-\" + type + '-row-' + id)\n    var option = document.getElementById(\"settings_\" + type + \"s_value_\" + id)\n\n    row.getElementsByClassName('saving-progress')[0].classList.remove('hidden');\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"PATCH\",\n      url: \"/customers/update_hidden_question\",\n      data: {\n        customer_sub_account_id: obj_id[0],\n        question_id: obj_id[1],\n        option_id: option.value\n      },\n      success: function (e) {\n        if(e.status == 200) {\n          row.getElementsByClassName('setting-value-display')[0].innerHTML = option.options[option.selectedIndex].innerHTML;\n          row.getElementsByClassName('cancel-setting')[0].click()\n          row.getElementsByClassName('saving-progress')[0].classList.add('hidden');\n        } else {\n          row.getElementsByClassName('saving-progress')[0].classList.add('hidden');\n        }\n      }\n\n    });\n  }\n\n  searchHubspotAccounts(event) {\n    event.preventDefault()\n    var item = event.target;\n    var search_val = $(\"#hubspot-sync-search-input-cust\").val();\n    var customer_id = item.dataset.customerId;\n    \n    $.ajax({\n      type: \"GET\",\n      url: \"/customers/search_hubspot_sync_data\",\n      data: { form: 'cust', search: encodeURI(search_val), customer_id: customer_id },\n      success: function (results_html) {\n        $(\".hubspot-select-contact-button-cust\").each(function () {\n          $(this).remove();\n        });\n        if (results_html) {\n          $(\"#hubspot-sync-search-results-cust\").html('');\n          $(\"#hubspot-sync-search-results-none-cust\").hide();\n          $.each(results_html, function(index, item){\n            $(\"#hubspot-sync-search-results-cust\").append(item);\n          });\n        } else {\n          $(\"#hubspot-sync-search-results-none-cust\").show();\n        }\n      }\n    });\n  }\n\n  searchHubspotAccountsSync(event) {\n    console.log(\"searchHubspotAccountsSync\")\n    event.preventDefault()\n    var item = event.target;\n    var search_val = $(\"#hubspot-sync-search-input-cust\").val();\n    var customer_id = item.dataset.customerId;\n\n    this.current_modal_sync_type = \"billing\"\n    \n    $.ajax({\n      type: \"GET\",\n      url: \"/customers/search_hubspot_sync_data\",\n      data: { search: encodeURI(search_val), customer_id: customer_id },\n      success: function (results_html) {\n        $(\".hubspot-select-contact-button-cust\").each(function () {\n          $(this).remove();\n        });\n        if (results_html) {\n          $(\"#hubspot-sync-search-results-none-cust\").hide();\n          $(\"#hubspot-sync-search-results-cust\").html('');\n          $.each(results_html, function(index, item){\n            $(\"#hubspot-sync-search-results-cust\").append(item);\n          });\n        } else {\n          $(\"#hubspot-sync-search-results-none-cust\").show();\n        }\n      }\n    });\n  }\n\n  select_all_sub_accounts(event) {\n    event.preventDefault();\n    $(\"#sub_accounts > option\").prop(\"selected\", true);\n    $(\"#sub_accounts\").trigger(\"change\");\n  }\n\n  selectHubspotAccount(event) {\n    console.log(\"selectHubspotAccount\")\n    event.preventDefault();\n    var item = event.target\n\n    this.hubspot_vid = item.dataset.hubspot_vid\n    var field_common = this.field_common_billing\n    if(this.current_modal_sync_type == \"rollout\")\n    {\n      field_common = this.field_common_ro;\n      $(\".sync-type-rollout-row\").show();\n      $(\".sync-type-billing-row\").hide();\n    }\n    else\n    {\n      $(\".sync-type-rollout-row\").hide();\n      $(\".sync-type-billing-row\").show();\n    }\n\n    for(var i=0;i<field_common.length;i++)\n    {\n\n      console.log(field_common[i])\n\n      if(this.current_modal_sync_type == \"rollout\" && (field_common[i] == \"fname\" || field_common[i] == \"lname\" || field_common[i] == \"email\"))\n      {\n        this.wbi_data[field_common[i]] = item.getAttribute(\"data-wbi_\"+field_common[i] + \"_ro\")\n      }\n      else\n      {\n        this.wbi_data[field_common[i]] = item.getAttribute(\"data-wbi_\"+field_common[i])\n      }\n\n\n      this.hs_data[field_common[i]] = item.getAttribute(\"data-\" + field_common[i])\n\n      if(this.wbi_data[field_common[i]] == this.hs_data[field_common[i]])\n      {\n        $(\"input[name='hs_sync_val_\"+field_common[i]+\"']\").hide();\n      }\n      else\n      {\n        $(\"input[name='hs_sync_val_\"+field_common[i]+\"']\").show();\n      }\n      $(\"#hs-sync-display-\"+field_common[i]+\"-wbi\").html(this.wbi_data[field_common[i]]);\n      $(\"#hs-sync-display-\"+field_common[i]+\"-hubspot\").html(this.hs_data[field_common[i]]);\n      $(\"#hubspot-sync-modal-setup-step1\").hide();\n      $(\"#hubspot-sync-modal-setup-step2\").show();\n    }\n  }\n\n  selectHubspotAccountCustomer(event) {\n    console.log(\"selectHubspotAccountCustomer\")\n    event.preventDefault();\n    var item = event.target\n    var field_common = [\"fname\", \"lname\", \"email\", \"company\", \"phone\"];\n    var field_name = [\"First Name\", \"Last Name\", \"Email\", \"Organization\", \"Phone\"];\n    this.cust_hubspot_vid = item.dataset.hubspot_vid\n\n    $(\"#hubspot_vid_customer_form\").val(this.cust_hubspot_vid);\n    var display_html = '<div class=\"row\">';\n    for (var i = 0; i < field_common.length; i++) {\n      this.hs_data_cust[field_common[i]] = item.dataset[field_common[i]]\n\n      display_html += '<div class=\"col-6\">';\n      display_html += '<strong>' + field_name[i] + ':</strong> ' + this.hs_data_cust[field_common[i]];\n      display_html += '</div>';\n\n    }\n    display_html += '<div class=\"col-12\"><a href=\"#\" data-action=\"click->customers#autoFillHubspotData\">Autofill Primary Contact/Company Information <em class=\"fa fa-chevron-down\"></em></a>';\n    display_html += ' | <a href=\"#\" data-action=\"click->customers#cancelAutoFillHubspotData\" >New Search / Cancel Sync</a></div>';\n    display_html += '</div>';\n    $(\"#hubspot-sync-search-results-cust-selected\").html(display_html);\n    $(\"#hubspot-sync-search-results-cust\").hide();\n    $(\"#hubspot-sync-search-group-cust\").hide();\n    $(\"#hubspot-sync-search-results-cust-selected\").show();\n  }\n\n  selectQuestionsByCustomerSubAccount(event) {\n    var item = event.currentTarget\n    var id = item.value\n\n    let frame = document.querySelector('turbo-frame#csa_signup_questions')\n    if(id === '') {\n      frame.innerHTML = ''\n    } else {\n      frame.src = '/customers/signup_questions?id=' + id\n      frame.reload() \n    }\n\n    let frame2 = document.querySelector('turbo-frame#csa_signup_question_options')\n    frame2.innerHTML = ''\n\n    $('#save-new-hidden-question').attr('disabled', true)\n  }\n\n  selectQuestionOptionsByCustomerSubAccount(event) {\n    var item = event.currentTarget\n    var id = item.value\n\n    let frame = document.querySelector('turbo-frame#csa_signup_question_options')\n    frame.src = '/customers/signup_question_options?id=' + id\n    frame.reload() \n    $('#save-new-hidden-question').attr('disabled', false)\n  }\n\n  // Currently only used for account search: /users/account_search\n  selectSubAccounts(event) {\n    var item = event.currentTarget\n    $.ajax({\n      url: '/customers/' + item.value + '/customer_sub_account_list', \n      type: 'GET', \n      success: function(e){\n        if(e.status == 200) {\n          if(item.dataset.container) {\n            var select = '<select name=\"customer_sub_account_id[]\" id=\"customer_sub_account_id\" multiple=\"\" class=\"form-select form-select-sm required select2-hidden-accessible\" data-controller=\"select2\" style=\"width: 100%;\" tabindex=\"-1\" aria-hidden=\"true\"><option value=\"\"></option>'\n            e.data.forEach( function(element) {\n              select += '<option value=\"' + element.id + '\">' + element.name + ' (' + element.wbi_version + ')</option>'\n            })\n            select += '</select>'\n            $('#' + item.dataset.container).html(select)\n          }\n        }\n      }\n    });\n  }\n\n  // toggleAccountOwner(event) {\n  //   event.preventDefault();\n  //   var item = event.currentTarget;\n  //   var icon = item.firstChild;\n  //\n  //   if( icon.classList.contains(\"fas\")) {\n  //     var ans = confirm(\"Are you sure you want to unmark this account?\")\n  //     if(ans) {\n  //       $.ajax({\n  //         headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n  //         url: item.href,\n  //         data: { toggle: false },\n  //         type: 'PATCH',\n  //         success: function(e){\n  //           if(e.status == 200) {\n  //             icon.classList.remove('fas', 'text-success');\n  //             icon.classList.add('far', 'text-black-50');\n  //             item.title = 'Mark as master account';\n  //             item.dataset.bsOriginalTitle = 'Mark as master account';\n  //             item.ariaLabel = 'Mark as master account';\n  //           }\n  //         }\n  //       });\n  //     }\n  //   }\n  // }\n\n  service_dropdown_change(event) {\n    let item = event.currentTarget\n    if (item && item.dataset) {\n      let customer_id = item.dataset.customerId;\n      let service_field = item.dataset.serviceField;\n      let customer_sub_account_id = item.dataset.customerSubAccountId;\n\n      if (customer_id && service_field) {\n        $.ajax({\n          url: '/customers/' + customer_id + '/update_service_value',\n          headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n          data: {service_field: service_field, service_value: item.value},\n          type: 'PATCH',\n          success: function (e) {\n            // console.log(\"service_dropdown_change\",e);\n            if (e.select_classes) {\n              item.className = e.select_classes;\n            }\n            // Fututure: Show flash indicator that value was saved.\n\n            // if (e.status == 200) {\n            //\n            // }\n          }\n        });\n      } else if(customer_sub_account_id && service_field) {\n        $.ajax({\n          url: '/customers/' + customer_sub_account_id + '/update_service_value_csa',\n          headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n          data: {service_field: service_field, service_value: item.value},\n          type: 'PATCH',\n          success: function (e) {\n            // console.log(\"service_dropdown_change\",e);\n            if (e.select_classes) {\n              item.className = e.select_classes;\n            }\n            // Fututure: Show flash indicator that value was saved.\n\n            // if (e.status == 200) {\n            //\n            // }\n          }\n        });\n      }\n    }\n  }\n  service_dropdown_focus(event) {\n    // This is done to stop the bootstrap table from expanding the 'detailed' view\n    event.stopPropagation();\n  }\n\n  sizeAccountManagementTableToViewport() {\n    const div = document.querySelector('#account_management_table_container .bootstrap-table .fixed-table-container .fixed-table-body');\n    if (div) {\n      const rect = div.getBoundingClientRect();\n      const viewportHeight = window.innerHeight;\n\n      const footerHeight = 70;\n      // Calculate the height needed so the bottom reaches viewport bottom\n      const newHeight = viewportHeight - rect.top - footerHeight;\n\n      div.style.height = `${newHeight}px`;\n    }\n  }\n\n  slugify_url_path(event) {\n    let input = event.currentTarget;\n    input.value = slugify_string(input.value);\n  }\n\n  stop_propagation(event) {\n    event.stopPropagation();\n  }\n\n  toggleAccountOwner(event) {\n    event.preventDefault();\n    var item = event.currentTarget;\n    var icon = item.firstChild;\n    if( icon.classList.contains(\"far\") ){\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: item.href,\n        data: { owner: true },\n        type: 'PATCH', \n        success: function(e){\n          if(e.status == 200) {\n            icon.classList.add('fas', 'text-success');\n            icon.classList.remove('far', 'text-black-50');\n            item.title = 'Unmark as owner account';\n            item.dataset.bsOriginalTitle = 'Unmark as owner account';\n            item.ariaLabel = 'Unmark as owner account';\n          }\n        }\n      });   \n    } else {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: item.href,\n        data: { owner: false },\n        type: 'PATCH', \n        success: function(e){\n          if(e.status == 200) {\n            icon.classList.remove('fas', 'text-success');\n            icon.classList.add('far', 'text-black-50');\n            item.title = 'Mark as owner account';\n            item.dataset.bsOriginalTitle = 'Mark as owner account';\n            item.ariaLabel = 'Mark as owner account';\n          }\n        }\n      }); \n    }\n  }\n\n  toggleAssignSubAccount(event) {\n    if(event.currentTarget.value != '') {\n      $(\"#assign_sub_account_button\").attr('disabled', false);\n    } else {\n      $(\"#assign_sub_account_button\").attr('disabled', true);\n    }\n  }\n\n  toggleAutoAlertReassessSpecificDate(event) {\n    event.preventDefault();\n    var item = event.target\n\n    if(item.value == 'date') {\n      $('#auto_alert_reassess_specific_date_' + item.dataset.subaccount + '_holder').removeClass('hidden');\n    } else {\n      $('#auto_alert_reassess_specific_date_' + item.dataset.subaccount + '_holder').addClass('hidden');\n      $('#auto_alert_reassess_specific_date_' + item.dataset.subaccount).val('')\n    }\n    \n  }\n\n  toggleLandingPageOptions(event) {\n    event.preventDefault();\n    var item = event.target;\n\n    if(item.value == \"true\") {\n      document.getElementById(\"dropdown_list_\" + event.target.dataset.id).classList.add(\"hidden\")\n      document.getElementById(\"custom_html_\" + event.target.dataset.id).classList.remove(\"hidden\")\n    } else {\n      document.getElementById(\"dropdown_list_\" + event.target.dataset.id).classList.remove(\"hidden\")\n      document.getElementById(\"custom_html_\" + event.target.dataset.id).classList.add(\"hidden\")\n    }\n  }\n\n  toggleMasterAccount(event) {\n    event.preventDefault();\n    var item = event.target;\n\n    if( item.classList.contains(\"fas\")){\n      var ans = confirm(\"Are you sure you want to unmark this sub-account as Master?\")\n      if(ans) {\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: event.target.parentNode.href, \n          data: { toggle: false },\n          type: 'PATCH', \n          success: function(e){\n            if(e.status == 200) {\n              item.classList.remove('fas', 'text-success');\n              item.classList.add('far', 'text-black-50');\n              item.parentNode.title = 'Mark as master account';\n              item.parentNode.dataset.bsOriginalTitle = 'Mark as master account';\n              item.parentNode.ariaLabel = 'Mark as master account';\n            }\n          }\n        });\n      }\n    } else {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: event.target.parentNode.href,\n        data: { toggle: true }, \n        type: 'PATCH', \n        success: function(e){\n          if(e.status == 200) {\n            item.classList.remove('far', 'text-black-50');\n            item.classList.add('fas', 'text-success');\n            item.parentNode.title = 'Unmark as master account';\n            item.parentNode.dataset.bsOriginalTitle = 'Unmark as master account';\n            item.parentNode.ariaLabel = 'Unmark as master account';\n          }\n        }\n      });\n    }\n  }\n\n\n  toggleUnlimitedLicenses(event) {\n    if(event.currentTarget.checked == 1) {\n      document.getElementById(event.currentTarget.dataset.field).disabled = true\n    } else {\n      document.getElementById(event.currentTarget.dataset.field).disabled = false\n    }\n  }\n\n  unassignAccount(event) {\n    event.preventDefault();\n    var ans = confirm(\"Are you sure you want to un-assign this account?\");\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: event.target.parentNode.href, \n        type: 'PATCH', \n        success: function(e){\n          if(e.status == 200) {\n            $('#account_' + event.target.parentNode.dataset.id).remove();\n          }\n        }\n      });\n    }\n  }\n\n\n  updateHubspotSync(event) {\n    event.preventDefault();\n    $(\"#hubspot-sync-modal-setup-error-div\").hide();\n    var missing_radio = false;\n    var final_data = {};\n    var field_common = this.field_common_billing;\n    var customer_id = event.target.dataset.customer_id\n    if(this.current_modal_sync_type == \"rollout\")\n    {\n      field_common = this.field_common_ro;\n    }\n    for(var i=0;i<field_common.length;i++)\n    {\n      if(field_common[i] != \"instadmin\" && field_common[i] != \"rolloutcontact\" && field_common[i] != \"brand\")\n      {\n        if(this.wbi_data[field_common[i]] != this.hs_data[field_common[i]])\n        {\n          if($(\"input[name='hs_sync_val_\"+field_common[i]+\"']:checked\").length)\n          {\n            if($(\"input[name='hs_sync_val_\"+field_common[i]+\"']:checked\").val() == \"wbi\")\n            {\n              final_data[field_common[i]] = this.wbi_data[field_common[i]];\n            }\n            else\n            {\n              final_data[field_common[i]] = this.hs_data[field_common[i]];\n            }\n          }\n          else\n          {\n            missing_radio = true;\n            break;\n          }\n        }\n        else\n        {\n          final_data[field_common[i]] = this.hs_data[field_common[i]];\n        }\n      }\n    }\n    if(!missing_radio)\n    {\n      // Not missing any data -- finish this up by setting up the sync!\n      $.ajax({\n        type: \"PATCH\",\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/customers/\" + customer_id + \"/update_hubspot_sync\",\n        data: { \n          setup_sync: '1', \n          sync_data: final_data, \n          hubspot_vid: this.hubspot_vid, \n          sync_type: this.current_modal_sync_type \n        },\n        success: function (results_json) {          \n          if(results_json && results_json.success)\n          {\n            $(\"#hubspot-sync-modal\").modal(\"hide\");\n            window.location.reload(true);\n          }\n          else if(results_json && results_json.error)\n          {\n            alert(results_json.error);\n          }\n          else\n          {\n            alert(\"Unexpected error, please try again\");\n          }\n        }\n      });\n\n    }\n    else\n    {\n      $(\"#hubspot-sync-modal-setup-error-div\").html('Please select a value to use for each field.').show();\n    }\n  }\n\n\n\n\n  validateSubmittedDocument(e) {\n    if($('#customer_customer_documents_attributes_0_name').val() != '' && $(\"#customer_customer_documents_attributes_0_file\").val() == ''){\n      e.preventDefault();\n      alert(\"You must choose a file or clear the name / label field.\");\n    }\n\n    if($('#customer_customer_documents_attributes_0_name').val() == '' && $(\"#customer_customer_documents_attributes_0_file\").val() != ''){\n      e.preventDefault();\n      alert(\"You must enter a name / label or file field\");\n    }\n  }\n\n  \n  verifyDelete(e) {\n    \n    var ans = confirm(\"Are you sure you want to delete this customer?\")\n    if(!ans) {\n      e.preventDefault()\n    }\n  }\n\n  toggleCollapseChevron(event) {\n    const button = event.currentTarget\n    const chevronRight = button.querySelector('.fa-chevron-right')\n    const chevronDown = button.querySelector('.fa-chevron-down')\n\n    if (chevronRight && chevronDown) {\n      chevronRight.classList.toggle('d-none')\n      chevronDown.classList.toggle('d-none')\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"dashboard\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  loadAdditionalOptions(e) {\n    var item = e.currentTarget;\n\n    $(\"#sub-account-other-options\").html(\"\").hide();\n\n    $.ajax({\n      url: \"/customers/\" + item.value + \"/get_customer_sub_account_other_options\",\n      type: \"GET\",\n      success: function(html) {\n        if(html) {\n          $(\"#sub-account-other-options\").html(html).show();\n        }\n      }\n    });\n  }\n\n  selectSubAccount(e) {\n    var item = e.currentTarget\n\n    $('#sub-account-div').hide()\n\n    $.ajax({\n      url: \"/customers/\" + e.target.value + \"/get_customer_sub_accounts\",\n      type: \"GET\",\n      success: function(e) {\n        if(e.status == 200) {\n          $('#sub-account-div').show()\n          var data = '<option value>Select...</option>'\n          $(e.accounts).each(function(index, item){\n            data += '<option value=\"' + item.id + '\">' + item.name + ' (' + item.group_content + ')</option>';\n          })\n          \n          $('#customer_sub_account_id').html(data);\n        }\n      }\n    });\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"dev-test-tools\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  autofill(e) {\n    e.preventDefault();\n    if (e.currentTarget.dataset.kind == \"random\") {\n      for (var i = 1; i <= 7; i++) {\n        var ans = \"0\";\n        if (Math.random() * 100 < 45) {\n          ans = \"1\"\n        }\n        document.getElementById(\"survey_survey_detail_attributes_answer_\" + i + \"_\" + ans).checked = true;\n      }\n      if (document.getElementById(\"answer_8\")) {\n        let range_input = document.getElementById(\"answer_8\")\n        range_input.value = ~~(Math.random() * 7)\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        range_input.dispatchEvent(event);\n      }\n      if (document.getElementById(\"answer_9\")) {\n        let range_input = document.getElementById(\"answer_9\")\n        range_input.value = ~~(Math.random() * 5)\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        range_input.dispatchEvent(event);\n      }\n    } else if (e.currentTarget.dataset.kind == \"positive\") {\n      for (var i = 1; i <= 7; i++) {\n        var ans = \"0\";\n        document.getElementById(\"survey_survey_detail_attributes_answer_\" + i + \"_\" + ans).checked = true;\n      }\n      if (document.getElementById(\"answer_8\")) {\n        let range_input = document.getElementById(\"answer_8\")\n        range_input.value = 7\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        range_input.dispatchEvent(event);\n      }\n      if (document.getElementById(\"answer_9\")) {\n        let range_input = document.getElementById(\"answer_9\")\n        range_input.value = 5\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        range_input.dispatchEvent(event);\n      }\n    } else if (e.currentTarget.dataset.kind == \"negative\") {\n      for (var i = 1; i <= 7; i++) {\n        var ans = \"1\";\n        document.getElementById(\"survey_survey_detail_attributes_answer_\" + i + \"_\" + ans).checked = true;\n      }\n      if (document.getElementById(\"answer_8\")) {\n        let range_input = document.getElementById(\"answer_8\")\n        range_input.value = 1\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        range_input.dispatchEvent(event);\n      }\n      if (document.getElementById(\"answer_9\")) {\n        let range_input = document.getElementById(\"answer_9\")\n        range_input.value = 1\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        range_input.dispatchEvent(event);\n      }\n    }\n  }\n  autofill_inputs(e) {\n    e.preventDefault();\n    var controllerRef = this;\n    $(\"select:visible\").each(function(){\n      if (!$(this).val()) {\n        var $options = $(this).find('option'),\n            random = ~~(Math.random() * $options.length);\n\n        $options.eq(random).prop('selected', true);\n\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        this.dispatchEvent(event);\n      }\n    });\n    $(\"input:visible\").each(function(){\n      if (!$(this).val()) {\n        if (this.type == \"email\") {\n          $(this).val(\"youremail+\"+controllerRef.random_string(25)+\"@cws.net\");\n\n          let event = new Event('input', { bubbles: true }) // fire a native event\n          this.dispatchEvent(event);\n        } else if (this.type == \"tel\") {\n          // Skip for now\n        } else if (this.type == \"password\") {\n          $(this).val(\"P@ssw0rd1\");\n        } else {\n          var rand_string = controllerRef.random_string(20);\n          $(this).val(rand_string);\n        }\n        let event = new Event('change', { bubbles: true }) // fire a native event\n        this.dispatchEvent(event);\n      }\n    });\n  }\n\n  process_modal_info_date(e){\n    e.preventDefault();\n    var date_val = $(\"#dev_test_tool_demographics_date\").val();\n    $.ajax({\n      url: '/dev_test_tools/change_demographic_date',\n      type: 'post',\n      data: {date: date_val},\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      dataType: 'json',\n      success: function (data) {\n        $(\"#devTestToolsModal\").modal(\"hide\");\n      }\n    });\n  }\n\n  process_reminder_send(e) {\n    e.preventDefault();\n    var date_val = $(\"#dev_test_tool_survey_date\").val();\n    $.ajax({\n      url: '/dev_test_tools/process_reminder_send',\n      type: 'post',\n      data: {},\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      dataType: 'json',\n      success: function (data) {\n        alert(\"Reminder sending is running in the background.  This can take a while to process through everything.\");\n      }\n    });\n  }\n\n  process_modal_report_dates(e) {\n    e.preventDefault();\n    setCookie('dev_test_tool_report_date_start', $(\"#dev_test_tool_report_date_start\").val(), 100);\n    setCookie('dev_test_tool_report_date_end', $(\"#dev_test_tool_report_date_end\").val(), 100);\n    $(\"#devTestToolsModal\").modal(\"hide\");\n    setTimeout(function(){document.location=document.location;}, 25);\n  }\n\n  process_modal_report_dates_clear(e) {\n    e.preventDefault();\n    setCookie('dev_test_tool_report_date_start', '', -100);\n    setCookie('dev_test_tool_report_date_end', '', -100);\n    $(\"#devTestToolsModal\").modal(\"hide\");\n    setTimeout(function(){document.location=document.location;}, 25);\n  }\n\n  process_modal_survey_date(e){\n    e.preventDefault();\n    var date_val = $(\"#dev_test_tool_survey_date\").val();\n    $.ajax({\n      url: '/dev_test_tools/change_survey_date',\n      type: 'post',\n      data: {date: date_val},\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      dataType: 'json',\n      success: function (data) {\n        $(\"#devTestToolsModal\").modal(\"hide\");\n        setTimeout(function(){document.location=document.location;}, 25);\n      }\n    });\n  }\n\n  modal_info_date(e) {\n    e.preventDefault();\n    $(\"#dev-test-tool-survey-date\").hide();\n    $(\"#dev-test-tool-report-dates\").hide();\n    $(\"#dev-test-tool-demographic-date\").show();\n    $(\"#devTestToolsModal\").modal(\"show\");\n  }\n  modal_report_dates(e) {\n    e.preventDefault();\n    $(\"#dev-test-tool-survey-date\").hide();\n    $(\"#dev-test-tool-demographic-date\").hide();\n    $(\"#dev-test-tool-report-dates\").show();\n    $(\"#devTestToolsModal\").modal(\"show\");\n  }\n  modal_survey_date(e) {\n    e.preventDefault();\n    $(\"#dev-test-tool-demographic-date\").hide();\n    $(\"#dev-test-tool-report-dates\").hide();\n    $(\"#dev-test-tool-survey-date\").show();\n    $(\"#devTestToolsModal\").modal(\"show\");\n  }\n\n  random_string(length) {\n    let result = '';\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    const charactersLength = characters.length;\n    let counter = 0;\n    while (counter < length) {\n      result += characters.charAt(Math.floor(Math.random() * charactersLength));\n      counter += 1;\n    }\n    return result;\n  }\n\n  reload_permissions(e) {\n    e.preventDefault();\n    $.ajax({\n      url: '/dev_test_tools/reload_permissions',\n      type: 'post',\n      data: {},\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      dataType: 'json',\n      success: function (data) {\n\n      }\n    });\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"disassociate-organization\"\nexport default class extends Controller {\n\n  initialize() {\n    $(\"#disassociate-organization-modal-form\").on(\"submit\", function (e) {\n      if ($(\"#disassociate-organization-new-primary-div\").is(\":visible\")) {\n        if (!$(\"input[name='new_primary_customer_sub_account_id']:checked\").length) {\n          e.preventDefault();\n        }\n      }\n    });\n  }\n  connect() {\n  }\n  disassociate_confirm(event){\n    //console.log(\"func: disassociate_confirm\");\n    event.preventDefault();\n    let $button = $(event.currentTarget);\n\n    // Clear hidden inputs\n    $(\"#disassociate-organization-assoc-account-id-input\").val(\"\");\n    $(\"#disassociate-organization-is-asssoc-input\").val(\"\");\n    $(\"#disassociate-organization-hospital-assoc-account-id-input\").val(\"\");\n    $(\"#disassociate-organization-is-hospital-asssoc-input\").val(\"\");\n    $(\"#disassociate-organization-customer-sub-account-id-input\").val(\"\");\n    if ($(\"input[name='new_primary_customer_sub_account_id']:checked\").length) {\n      $(\"input[name='new_primary_customer_sub_account_id']:checked\").prop('checked', false);\n    }\n\n    var is_primary = $button.data(\"is_primary\");\n    var customer_sub_account_id = $button.data(\"customer_sub_account_id\");\n    var display_name = $button.data(\"display_name\");\n    var is_association = $button.data(\"association\");\n    var is_hospital_association = $button.data(\"hospital_association\");\n    $(\"#disassociate-organization-display-name\").html(display_name);\n    if(is_association == \"yes\") {\n      var association_account_id = $button.data(\"id\");\n      $(\"#disassociate-organization-assoc-account-id-input\").val(association_account_id);\n      $(\"#disassociate-organization-is-asssoc-input\").val(\"yes\");\n    } else if(is_hospital_association == \"yes\") {\n      var hospital_account_id = $button.data(\"id\");\n      $(\"#disassociate-organization-hospital-assoc-account-id-input\").val(hospital_account_id);\n      $(\"#disassociate-organization-is-hospital-asssoc-input\").val(\"yes\");\n    } else {\n      $(\"#disassociate-organization-customer-sub-account-id-input\").val(customer_sub_account_id);\n    }\n    if (is_primary == 1 && $(\"input[name='new_primary_customer_sub_account_id']\").length) {\n      $(\"#disassociate-organization-new-primary-div\").show();\n    } else {\n      $(\"#disassociate-organization-new-primary-div\").hide();\n    }\n    $(\"#disassociate-organization-modal\").modal(\"show\");\n\n  }\n\n  change_version(event){\n    event.preventDefault();\n    let $button = $(event.currentTarget);\n\n    var customer_sub_account_id = $button.data(\"customer_sub_account_id\");\n    $(\"#change-version-customer-sub-account-id-input\").val(customer_sub_account_id);\n    $(\"#change-version-modal\").find(\"input[type='radio']\").prop('checked', false);\n    $(\"#change-version-modal\").find(\".change-version-type\").show();\n    var $chkObjDiv = $(\"#change-version-modal\").find(\"#change-version-type-\" + customer_sub_account_id);\n    $chkObjDiv.find(\"input\").prop(\"checked\",true);\n    $(\"#change-version-modal\").modal(\"show\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"dismiss-alert\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('closed.bs.alert', async function () {\n      if (this.dataset && this.dataset.dismiss_path) {\n        let notice_id = this.dataset.notice_id;\n        // let formData = new FormData();\n        // formData.append('id', notice_id);\n        // const request = new FetchRequest(\"post\", this.dataset.dismiss_path, { responseKind: \"json\", body: formData});\n        const request = new FetchRequest(\"post\", this.dataset.dismiss_path, { responseKind: \"json\"});\n        const response = await request.perform();\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"diy-checklist\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  itemCheckboxClicked(event) {\n    let element = event.currentTarget;\n    let status_val = 0;\n    if (element.checked) {\n      status_val = 1;\n    }\n\n    $.ajax({\n      headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n      url: '/dashboard/diy_checklist_item_update',\n      data: {item_tag: element.value, status: status_val},\n      type: 'POST',\n      success: function (data) {\n        // {percent: 00, steps_completed: 00, steps_total: 00}\n        let progressPieElement = document.getElementById(\"diy_progress_pie_wrapper\");\n        let progressStepsDiv = document.getElementById(\"diy_progress_step_count\");\n        if (progressPieElement && progressStepsDiv && data && data.steps_total) {\n          var prefix = \"progress-\";\n          var classes = progressPieElement.className.split(\" \").filter(function(c) {\n            return c.lastIndexOf(prefix, 0) !== 0;\n          });\n          classes.push(\"progress-\"+data.percent);\n          progressPieElement.className = classes.join(\" \").trim();\n\n          progressStepsDiv.innerHTML = data.steps_completed+\"/\"+data.steps_total;\n        }\n      }\n    });\n  }\n\n  scrollTo(e) {\n    e.preventDefault()\n    var item = e.currentTarget.dataset.href\n    document.getElementById(item).scrollIntoView()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"download-reports\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  downloadCsv(e) {\n    e.preventDefault();\n    this.downloadReportTableAsCsv()\n  }\n\n  downloadJpeg(e) {\n    e.preventDefault();\n    $(\"#export-report-file-type-input\").val(\"jpeg\");\n    $(\"#export_chart_filter_settings\").val( this.getCurrentReportFilterSettingsForDisplayHTML() );\n    $(\"#download-chart-form\").submit();\n    setTimeout(function(thisRef){\n      $(thisRef).blur();\n    }.bind(undefined, this),500);\n  }\n\n  downloadPdf(e) {\n    e.preventDefault()\n    $(\"#export-report-file-type-input\").val(\"pdf\");\n    $(\"#export_chart_filter_settings\").val( this.getCurrentReportFilterSettingsForDisplayHTML() );\n    $(\"#download-chart-form\").submit();\n    setTimeout(function(thisRef){\n      $(thisRef).blur();\n    }.bind(undefined, this),500);\n  }\n\n  downloadReportTableAsCsv() {\n    var tableData = getReportTableAsArray(true);\n    var dataStr = JSON.stringify(tableData);\n    document.report_table_download_count++;\n    var formId = \"download_report_table\" + document.report_table_download_count;\n    $('body').append('<form method=\"POST\" id=\"' + formId + '\" action=\"/reports/download_report_csv\"><input type=\"hidden\" name=\"chart_title\" value=\"\" /><input type=\"hidden\" name=\"data\" value=\"\" /></form>');\n    $(\"#\" + formId).find(\"input[name='data']\").val(dataStr.replace(\"&nbsp;\", \" \"));\n    $(\"#\" + formId).find(\"input[name='chart_title']\").val($(\"#export_chart_title\").val());\n    $(\"#\" + formId).submit();\n  }\n\n\n  getCurrentReportFilterSettingsForDisplay() {\n    return window.getCurrentReportFilterSettingsForDisplay();\n  }\n\n  getCurrentReportFilterSettingsForDisplayHTML()\n  {\n    var settings_list = this.getCurrentReportFilterSettingsForDisplay();\n    var return_html = \"\";\n    if(settings_list.length > 0)\n    {\n      return_html += '<h2>Chart Settings</h2>';\n      for(var i=0;i<settings_list.length;i++){\n        return_html += '<p class=\"setting-print\">';\n        return_html += '<strong>'+settings_list[i][0]+'</strong><br />';\n        return_html += settings_list[i][1];\n        return_html += '</p>';\n      }\n    }\n    return return_html;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"enable-from-checkbox\"\nexport default class extends Controller {\n  static targets = [ \"item\", \"checkbox\" ]\n  connect() {\n    if (this.hasCheckboxTarget && this.hasItemTarget)\n    {\n      let itemList = this.itemTargets;\n      this.checkboxTarget.addEventListener('change', function (event) {\n        for(let i=0;i<itemList.length;i++){\n          let elemType = itemList[i].tagName;\n          if (elemType == \"INPUT\" || elemType == \"SELECT\" || elemType == \"BUTTON\" || elemType == \"TEXTAREA\") {\n            itemList[i].disabled = !event.currentTarget.checked\n          } else if (elemType == \"DIV\") {\n            // Hide/show item\n            if (event.currentTarget.checked) {\n              itemList[i].style.display = '';\n            } else {\n              itemList[i].style.display = 'none';\n            }\n          }\n        }\n        if (this.checked && this.tagName == \"INPUT\" && this.type == \"radio\") {\n          // Get others with same name and trigger change\n          let radio_list = document.getElementsByName(this.name);\n          for (let i=0; i<radio_list.length; i++) {\n            if (!radio_list[i].checked){\n              let newevent = new Event('change');\n              radio_list[i].dispatchEvent(newevent);\n            }\n          }\n        }\n      });\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"export-question\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  deselectAll(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    $(\"#\" + item.dataset.option).find(':checkbox').each(function(){\n      this.checked = false\n    })\n  }\n\n  selectAll(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    $(\"#\" + item.dataset.option).find(':checkbox').each(function(){\n      this.checked = true\n    })\n  }  \n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"bar\", \"processedRows\", \"totalRows\"]\n  static values = { jobId: Number }\n\n  connect() {\n    this.handleUpdate = this.handleUpdate.bind(this)\n    document.addEventListener(\"theme-job:update\", this.handleUpdate)\n  }\n\n  disconnect() {\n    document.removeEventListener(\"theme-job:update\", this.handleUpdate)\n  }\n\n  handleUpdate(event) {\n    const data = event.detail\n    if (data.job_id !== this.jobIdValue) return\n\n    if (data.event === \"progress\") {\n      this.#updateProgress(data)\n    }\n  }\n\n  #updateProgress(data) {\n    const pct = data.progress_percentage || 0\n    if (this.hasBarTarget) {\n      this.barTarget.style.width = `${pct}%`\n      this.barTarget.setAttribute(\"aria-valuenow\", pct)\n      this.barTarget.textContent = `${pct}%`\n    }\n    if (this.hasProcessedRowsTarget) {\n      this.processedRowsTarget.textContent = data.processed_rows ?? 0\n    }\n    if (this.hasTotalRowsTarget) {\n      this.totalRowsTarget.textContent = data.total_rows ?? 0\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport AccountSetupVerificationController from './account_setup_verification_controller'\n\n// Connects to data-controller=\"free-assessment\"\nexport default class extends AccountSetupVerificationController {\n  connect() {\n    if (this.element.dataset && this.element.dataset.step) {\n      switch (this.element.dataset.step){\n        case 1:\n        case '1':\n          setupTermsScrollBox();\n          this.element.addEventListener('turbo:submit-start', this.validateVersionSelection.bind(this));\n          this.element.addEventListener('submit', this.validateVersionSelection.bind(this));\n          this.element.noValidate = false;\n          break;\n        case 3:\n        case '3':\n          this.element.addEventListener('turbo:submit-start', this.validateDemographics.bind(this));\n          this.element.addEventListener('submit', this.validateDemographics.bind(this));\n          this.element.noValidate = false;\n          this.element.addEventListener('change', this.checkChangedInputs.bind(this));\n          // Country Change\n            let country_select = document.getElementById(\"question_22\");\n            if (country_select) {\n              country_select.addEventListener('change', this.countrySelectChanged.bind(this));\n            }\n          break;\n        case 4:\n        case '4':\n          this.element.addEventListener('turbo:submit-start', this.validateEmailPassword.bind(this));\n          this.element.addEventListener('submit', this.validateEmailPassword.bind(this));\n          this.element.noValidate = false;\n          this.element.addEventListener('change', this.checkChangedInputs.bind(this));\n          break;\n      }\n    }\n    this.emailDebouncer = basicDebouncer( 250 );\n  }\n  countrySelectChanged(event) {\n    let sel = event.target;\n    if (sel.options[sel.selectedIndex].text == \"United States\") {\n      $(\"#use_state_in_search_container\").show();\n    } else {\n      $(\"#use_state_in_search\").prop(\"checked\",false);\n      $(\"#use_state_in_search_container\").hide();\n    }\n  }\n  validateDemographics(event) {\n    let isValid = true;\n    let errors = [];\n\n    let passedStandardValidation = super.validateForm(event);\n\n    if (passedStandardValidation) {\n      // Make sure organization is selected/entered\n      if ($(\"#institution\").val() == \"\") {\n        isValid = false;\n        errors.push(i18n_string(\"free_assess.please_enter_a_hospital_institution\",\"Please enter a hospital/institution\"));\n      }\n      if (!isValid){\n        event.preventDefault();\n        doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>');\n      }\n    }\n\n    return isValid && passedStandardValidation;\n  }\n  validateEmailPassword(event){\n    if($(event.target).attr(\"submit_pressed\") == \"yes\") {\n      return false;\n    }\n    let passedStandardValidation = super.validateForm(event);\n    if (passedStandardValidation) {\n      let passOtherValidation = true;\n      let errors = [];\n      if ($(\"#user_email\").data(\"email_valid\") != \"yes\") {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.please_enter_a_valid_email\", \"Please enter a valid email.\"));\n      }\n      if ($(\"#user_sms_phone\").val() != \"\" && $(\"#invalid_phone\").length)\n      {\n        passOtherValidation = false;\n        errors.push(i18n_string(\"home.account_setup.the_phone_number_is_not_available\", \"The entered phone number is used by another account.\"));\n      }\n      if (passOtherValidation) {\n        $(event.target).attr(\"submit_pressed\", \"yes\");\n        return true;\n      } else {\n        doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>');\n      }\n    }\n    event.preventDefault();\n    return false;\n  }\n  validateVersionSelection(event) {\n    let isValid = true;\n    let errors = [];\n    // Make sure version is selected\n    if ($(\"#wbi_version_id\").val() == \"\" || parseInt($(\"#wbi_version_id\").val()) < 1) {\n      errors.push(i18n_string(\"free_assess.please_select_your_group\",\"Please select your group\"));\n      isValid = false;\n    }\n    // Make sure agree_terms is checked\n    if (!$(\"#agree_terms\").prop(\"checked\")) {\n      errors.push(i18n_string(\"home.account_setup.please_finish_reading_the_eula\",\"Please finish reading the End User License Agreement before continuing.\"));\n      isValid = false;\n    }\n\n    if (!isValid){\n      event.preventDefault();\n      doJsAlert('<div class=\"alert alert-danger\">'+removeDuplicates(errors).join('<br />')+'</div>');\n    }\n\n    return isValid;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\nimport {Gauge} from \"../src/gauge/gauge\"\n\n// Connects to data-controller=\"gauge\"\nexport default class extends Controller {\n  initialize() {\n    // This is called once per controller\n    window.getCursorPosition = function(canvas, event) {\n      var rect = canvas.getBoundingClientRect();\n      var x = event.clientX - rect.left;\n      var y = event.clientY - rect.top;\n      console.log(\"x: \" + (x*2) + \" y: \" + (y*2));\n    };\n    window.drawArrowhead = function(ctx, locx, locy, angle, sizex, sizey) {\n      var hx = sizex / 2;\n      var hy = sizey / 2;\n\n      ctx.translate((locx ), (locy));\n      ctx.rotate(angle);\n      ctx.translate(-hx,-hy);\n\n      ctx.beginPath();\n      ctx.moveTo(0,0);\n      ctx.lineTo(0,1*sizey);\n      ctx.lineTo(1*sizex,1*hy);\n      ctx.closePath();\n      ctx.fill();\n\n      ctx.translate(hx,hy);\n      ctx.rotate(-angle);\n      ctx.translate(-locx,-locy);\n    };\n\n    // returns radians\n    window.findAngle = function(sx, sy, ex, ey) {\n      // make sx and sy at the zero point\n      return Math.atan2((ey - sy), (ex - sx));\n    }\n    window.fillTextMultiLine = function(ctx, text, x, y) {\n      var lineHeight = ctx.measureText(\"M\").width * 1.2;\n      var lines = text.split(\"\\n\");\n      for (var i = 0; i < lines.length; ++i) {\n        ctx.fillText(lines[i], x, y);\n        y += lineHeight;\n      }\n    }\n    window.gauge_list = [];\n    window.gauge_first_render_complete = {};\n\n    let gaugeControllerSelf = this;\n    // Resize Scroll Listeners\n    window.addEventListener('scroll', function(event) {\n      gaugeControllerSelf.check_gauges_for_animation();\n    });\n    window.addEventListener('resize', function(event) {\n      gaugeControllerSelf.check_gauges_for_animation();\n    });\n\n    // Timeout to check if gauges are all loaded\n    setTimeout(this.check_gauge_rendering_after_inits, 500, gaugeControllerSelf);\n\n    // Setup modal\n    setupBootstrapModal(\"wbi-score-graph-modal\", \"Chart\", \"\", '<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">' +  I18n.general.close + '</button>', 'body', 'modal-custom-score-graph');\n\n    $(document).on('click', '.wbi-score-graph-link', function (event){\n      event.preventDefault();\n      var linkObj = $(this);\n      var footnote = linkObj.data('footnote');\n      var footnote_gobal = $(\"#wbi-score-footnote-global\").html();\n      var modalObj = $(\"#wbi-score-graph-modal\");\n      if(linkObj.data(\"gauge_config\"))\n      {\n        var canvasObj = linkObj.find(\"canvas\");\n        var title = canvasObj.attr(\"alt\");\n        var position = linkObj.data(\"position\");\n        var gauge_config = linkObj.data(\"gauge_config\");\n        var bodyHTML = '';\n        bodyHTML += '<div class=\"gauge-wrapper placeholder-glow\"><span class=\"placeholder placeholder-box-4\"></span></div>';\n        bodyHTML += '<div class=\"info-text\">'+footnote+'<br /><br />'+footnote_gobal+'</div>';\n\n        modalObj.find('.modal-title').text(title);\n        modalObj.find('.modal-body').html(bodyHTML);\n\n        modalObj.data(\"gaugePosition\",position);\n        modalObj.data(\"gaugeConfig\",gauge_config);\n\n        modalObj.modal('show');\n      }\n    });\n    $(document).on(\"shown.bs.modal\", \"#wbi-score-graph-modal\", function (event) {\n      let modalObj = $(this);\n      let gauge_config = modalObj.data(\"gaugeConfig\");\n      let position = modalObj.data(\"gaugePosition\");\n      // console.log(\"shown.bs.modal:\"+gauge_config+\" - \"+position);\n      if(gauge_config && position)\n      {\n        modalObj.find('.gauge-wrapper').html('<canvas id=\"gauge_image_modal\" class=\"gauge-canvas\" data-controller=\"gauge\" data-position=\"'+position+'\" data-gauge_config=\"'+gauge_config+'\" data-animate_now=\"yes\" width=\"600\" height=\"300\"></canvas>');\n      }\n    });\n  }\n\n  check_gauges_for_animation(){\n    if(gauge_list && gauge_list.length)\n    {\n      for(var i=0;i<gauge_list.length;i++)\n      {\n        if(gauge_list[i].animationDone){\n          continue;\n        }\n        var gaugeJQObj = $(\"#\"+gauge_list[i].elementId);\n        if(gaugeJQObj.length)\n        {\n          if(gaugeJQObj.visible(80))\n          {\n            var configData = gaugeJQObj.data(\"configData\");\n            if(configData && configData.c_max_val)\n            {\n              gauge_list[i].animationDone = true;\n              gauge_list[i].gauge.set(configData.c_max_val-gauge_list[i].position);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  check_gauge_rendering_after_inits(gaugeControllerObj){\n    let gaugesReady = 0;\n    if(gauge_list && gauge_list.length)\n    {\n      for(var i=0;i<gauge_list.length;i++)\n      {\n        if(gauge_first_render_complete[gauge_list[i].elementId])\n        {\n          gaugesReady++;\n        }\n      }\n    }\n    if(gaugesReady == gauge_list.length)\n    {\n      gaugeControllerObj.check_gauges_for_animation()\n    }\n    else\n    {\n      setTimeout(this.check_gauge_rendering_after_inits, 500, gaugeControllerObj);\n    }\n  }\n\n  async connect() {\n    // This is called for every connected DOM\n    this.element[this.identifier] = this\n\n    let elementId = this.element.id;\n\n    //console.log(\"Gauge Connect : \"+elementId);\n\n    if (!this.element.dataset || !this.element.dataset.gauge_config || !this.element.dataset.position) {\n      //console.log(\"I'm missing something\");\n      return;\n    }\n    let gauge_config_url = this.element.dataset.gauge_config;\n    let position = this.element.dataset.position;\n    let animate_now = this.element.dataset.animate_now == \"yes\";\n\n    const request = new FetchRequest(\"get\", gauge_config_url, { responseKind: \"json\"});\n    const response = await request.perform();\n    if (response.ok) {\n      response.json.then(function(configData){\n        configData.renderBefore = function(ctx){\n          var devicePixelRatio = window.devicePixelRatio || 1;\n          var backingStorePixelRatio = (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1)\n          var displayScale = devicePixelRatio / backingStorePixelRatio;\n          var multipler = displayScale/2;\n          // console.log(\"displayScale=\"+displayScale+\" - multipler=\"+multipler+\" - width=\"+ctx.canvas.clientWidth);\n\n          var textDisplayScale = 1;\n          var canvas_width = ctx.canvas.style.width;\n          if(canvas_width) {\n            var width = parseFloat(canvas_width.replace(\"px\", \"\"));\n            textDisplayScale = width/600;\n          }\n\n          // var displayScale = this.gauge.displayScale;\n          if(this.c_render && this.c_render.length)\n          {\n            for(var i=0;i<this.c_render.length;i++)\n            {\n              switch (this.c_render[i].type) {\n                case \"font\":\n                  var fontString = this.c_render[i].value;\n                  if(displayScale < 2) {\n                    var fontParts = fontString.split(\"px\");\n                    var adjustedFontSize = Number(fontParts[0] ) * multipler * textDisplayScale;\n                    fontString = (adjustedFontSize+(adjustedFontSize/10)) + \"px \" + fontParts[1];\n                  } else if(displayScale > 2) {\n                    var fontParts = fontString.split(\"px\");\n                    var adjustedFontSize = Number(fontParts[0] ) * multipler * textDisplayScale;\n                    fontString = adjustedFontSize + \"px \" + fontParts[1];\n                  } else {\n                    var fontParts = fontString.split(\"px\");\n                    var adjustedFontSize = Number(fontParts[0] ) * textDisplayScale;\n                    fontString = adjustedFontSize + \"px \" + fontParts[1];\n                  }\n                  ctx.font=fontString;\n                  break;\n                case \"fillText\":\n                  ctx.fillText(this.c_render[i].value,this.c_render[i].x*multipler*textDisplayScale, this.c_render[i].y*multipler*textDisplayScale);\n                  break;\n                case \"lineWidth\":\n                  if(displayScale < 2) {\n                    ctx.lineWidth = this.c_render[i].value * textDisplayScale;\n                  } else {\n                    ctx.lineWidth = this.c_render[i].value * multipler * textDisplayScale;\n                  }\n                  break;\n                case \"strokeStyle\":\n                  ctx.strokeStyle=this.c_render[i].value;\n                  break;\n                case \"beginPath\":\n                  ctx.beginPath();\n                  break;\n                case \"moveTo\":\n                  ctx.moveTo(this.c_render[i].x*multipler * textDisplayScale, this.c_render[i].y*multipler*textDisplayScale);\n                  break;\n                case \"quadraticCurveTo\":\n                  ctx.quadraticCurveTo(this.c_render[i].x1*multipler * textDisplayScale, this.c_render[i].y1*multipler*textDisplayScale, this.c_render[i].x2*multipler*textDisplayScale, this.c_render[i].y2*multipler*textDisplayScale);\n                  break;\n                case \"stroke\":\n                  ctx.stroke();\n                  break;\n                case \"drawArrowhead\":\n                  // if(displayScale < 2) {\n                  //   drawArrowhead(ctx, this.c_render[i].x2 * multipler * textDisplayScale, this.c_render[i].y2 * multipler * textDisplayScale, findAngle(this.c_render[i].x1 * multipler * textDisplayScale, this.c_render[i].y1 * multipler * textDisplayScale, this.c_render[i].x2 * multipler * textDisplayScale, this.c_render[i].y2 * multipler * textDisplayScale), 14, 14);\n                  // } else {\n                  drawArrowhead(ctx, this.c_render[i].x2 * multipler * textDisplayScale, this.c_render[i].y2 * multipler * textDisplayScale, findAngle(this.c_render[i].x1 * multipler * textDisplayScale, this.c_render[i].y1 * multipler * textDisplayScale, this.c_render[i].x2 * multipler * textDisplayScale, this.c_render[i].y2 * multipler * textDisplayScale), 20 * multipler * textDisplayScale, 20 * multipler * textDisplayScale);\n                  // }\n                  break;\n                case \"fillTextMultiLine\":\n                  fillTextMultiLine(ctx, this.c_render[i].value, this.c_render[i].x*multipler * textDisplayScale, this.c_render[i].y*multipler * textDisplayScale);\n                  break;\n              }\n\n            }\n          }\n          gauge_first_render_complete[this.elementId] = true;\n        };\n        configData.elementId = elementId;\n        configData.responsive = true;\n        configData.autoWidthToHeightRatio = 0.5;\n        //configData.displayScaleOverride = 2; // Override dispalyscale 7/3/2019 - neil\n        // 9/9/2019 - disabling the displayScaleOverride - that is causing crappy text scaling :(\n        var target = document.getElementById(elementId);\n        $(target).data(\"configData\", configData);\n        var myGauge = new Gauge(target).setOptions(configData);\n        myGauge.minValue = 0;\n        myGauge.maxValue = configData.c_max_val;\n        myGauge.animationSpeed = 1;\n        myGauge.set(configData.c_max_val);\n        myGauge.animationSpeed = 120;\n\n\n        if(animate_now) {\n          myGauge.set(configData.c_max_val-position);\n        } else {\n          gauge_list.push({\n            \"elementId\": elementId,\n            \"gauge\": myGauge,\n            \"position\": position\n          });\n        }\n      });\n\n    }\n  }\n\n  somefunction() {\n    // access item in data-something=\"\" with this.element.dataset.something OR this.data.get(\"something\");\n  }\n  /*\n  data-position=\"<%= percent_position %>\" data-gauge_config=\"<%= Rails.configuration.wbi_cdn_url %>/gauges/<%= gauge.id %>.json\" width=\"300\" height=\"150\" alt=\"<%= gauge.display_name %>\n   */\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Super-admin tool: preview gauges with a configurable needle position.\n// Reuses the existing \"gauge\" Stimulus controller by inserting a canvas with\n// the right data attributes; on each change we wipe and recreate the canvas.\nexport default class extends Controller {\n  static targets = [\n    \"gaugeSelect\", \"localeSelect\", \"localeOption\", \"localeStatus\",\n    \"modeRadio\", \"slider\", \"sliderValue\", \"sliderRange\",\n    \"positionSelect\",\n    \"sliderGroup\", \"positionGroup\",\n    \"canvasWrapper\", \"cursorReadout\",\n    \"metadataCard\", \"metaName\", \"metaKind\", \"metaWbiVersion\",\n    \"metaCMaxVal\", \"metaConfigUrl\", \"metaFootnote\"\n  ]\n\n  // Coordinate space used by c_render entries in /public/gauges/*.json.\n  // Derived from gauge.js: c_render x/y are multiplied by `multipler * textDisplayScale`,\n  // where multipler = displayScale/2 and textDisplayScale = displayedWidth / 600.\n  // On retina (displayScale=2), c_render x=1200 maps to displayed pixel = displayedWidth.\n  // Combined with autoWidthToHeightRatio=0.5 (height = width/2), c_render y=600 maps to\n  // the bottom of the displayed canvas. Hence the config space is 1200 \u00D7 600.\n  static CONFIG_WIDTH = 1200\n  static CONFIG_HEIGHT = 600\n\n  static values = {\n    positionsUrl: String,\n    cdnUrl: String\n  }\n\n  static STORAGE_KEY = \"gauge_previewer_state_v1\"\n\n  connect() {\n    this.state = this.loadState()\n    this.currentGaugeData = null\n    this.currentCMaxVal = null\n    this.currentLocaleOverrides = {}\n    this.sliderDebounceTimer = null\n    this.SLIDER_DEBOUNCE_MS = 200\n\n    // Restore selections from localStorage\n    if (this.state.gaugeId && this.hasGaugeSelectTarget) {\n      this.gaugeSelectTarget.value = this.state.gaugeId\n    }\n    if (this.state.locale && this.hasLocaleSelectTarget) {\n      this.localeSelectTarget.value = this.state.locale\n    }\n    if (this.state.mode) {\n      this.modeRadioTargets.forEach(r => { r.checked = (r.value === this.state.mode) })\n    }\n    this.updateModeVisibility()\n\n    if (this.state.gaugeId) {\n      this.loadGaugeData(this.state.gaugeId, /* restoring */ true)\n    }\n  }\n\n  // --- Persistence ---\n\n  loadState() {\n    try {\n      const raw = localStorage.getItem(this.constructor.STORAGE_KEY)\n      if (raw) return JSON.parse(raw)\n    } catch (e) { /* ignore */ }\n    return { gaugeId: \"\", mode: \"slider\", percent: 0, positionId: \"\", locale: \"en\" }\n  }\n\n  saveState() {\n    try {\n      localStorage.setItem(this.constructor.STORAGE_KEY, JSON.stringify(this.state))\n    } catch (e) { /* ignore */ }\n  }\n\n  // --- Event handlers ---\n\n  gaugeChanged() {\n    const gaugeId = this.gaugeSelectTarget.value\n    this.state.gaugeId = gaugeId\n    this.state.percent = 0\n    this.state.positionId = \"\"\n    this.saveState()\n\n    if (!gaugeId) {\n      this.clearPreview()\n      return\n    }\n    this.loadGaugeData(gaugeId, false)\n  }\n\n  localeChanged() {\n    this.state.locale = this.localeSelectTarget.value\n    this.saveState()\n    this.updateLocaleStatus()\n    this.render()\n  }\n\n  modeChanged() {\n    const mode = this.currentMode()\n    this.state.mode = mode\n    this.saveState()\n    this.updateModeVisibility()\n    this.render()\n  }\n\n  sliderChanged() {\n    const val = parseFloat(this.sliderTarget.value)\n    this.state.percent = val\n    this.state.positionId = \"\"\n    this.sliderValueTarget.textContent = val.toFixed(2)\n    this.saveState()\n\n    if (this.sliderDebounceTimer) clearTimeout(this.sliderDebounceTimer)\n    this.sliderDebounceTimer = setTimeout(() => {\n      this.sliderDebounceTimer = null\n      this.render()\n    }, this.SLIDER_DEBOUNCE_MS)\n  }\n\n  disconnect() {\n    if (this.sliderDebounceTimer) {\n      clearTimeout(this.sliderDebounceTimer)\n      this.sliderDebounceTimer = null\n    }\n  }\n\n  attachCursorReadout(canvas) {\n    if (!this.hasCursorReadoutTarget) return\n    const readout = this.cursorReadoutTarget\n    const W = this.constructor.CONFIG_WIDTH\n    const H = this.constructor.CONFIG_HEIGHT\n\n    canvas.addEventListener(\"mousemove\", (event) => {\n      const rect = canvas.getBoundingClientRect()\n      if (rect.width === 0 || rect.height === 0) return\n      const x = (event.clientX - rect.left) * (W / rect.width)\n      const y = (event.clientY - rect.top) * (H / rect.height)\n      readout.textContent = `Cursor: x=${x.toFixed(1)}  y=${y.toFixed(1)}  (config space ${W} \u00D7 ${H}, displayed ${Math.round(rect.width)} \u00D7 ${Math.round(rect.height)})`\n    })\n\n    canvas.addEventListener(\"mouseleave\", () => {\n      readout.textContent = `Cursor: (move mouse over gauge to see coordinates in ${W} \u00D7 ${H} config space)`\n    })\n  }\n\n  positionChanged() {\n    const select = this.positionSelectTarget\n    const opt = select.options[select.selectedIndex]\n    if (!opt || !opt.value) return\n    const percent = parseFloat(opt.dataset.percent)\n    this.state.positionId = opt.value\n    this.state.percent = percent\n    this.saveState()\n    this.render()\n  }\n\n  reset() {\n    this.state = { gaugeId: \"\", mode: \"slider\", percent: 0, positionId: \"\", locale: \"en\" }\n    this.saveState()\n    if (this.hasGaugeSelectTarget) this.gaugeSelectTarget.value = \"\"\n    if (this.hasLocaleSelectTarget) this.localeSelectTarget.value = \"en\"\n    this.modeRadioTargets.forEach(r => { r.checked = (r.value === \"slider\") })\n    this.sliderTarget.value = 0\n    this.sliderValueTarget.textContent = \"0\"\n    this.positionSelectTarget.innerHTML = \"\"\n    this.updateModeVisibility()\n    this.clearPreview()\n  }\n\n  // --- Helpers ---\n\n  currentMode() {\n    const checked = this.modeRadioTargets.find(r => r.checked)\n    return checked ? checked.value : \"slider\"\n  }\n\n  updateModeVisibility() {\n    const mode = this.currentMode()\n    this.sliderGroupTarget.style.display = (mode === \"slider\") ? \"\" : \"none\"\n    this.positionGroupTarget.style.display = (mode === \"position\") ? \"\" : \"none\"\n  }\n\n  async loadGaugeData(gaugeId, restoring) {\n    const url = `${this.positionsUrlValue}?gauge_id=${encodeURIComponent(gaugeId)}`\n    let data\n    try {\n      const resp = await fetch(url, { headers: { \"Accept\": \"application/json\" } })\n      if (!resp.ok) throw new Error(`HTTP ${resp.status}`)\n      data = await resp.json()\n    } catch (e) {\n      this.canvasWrapperTarget.innerHTML = `<div class=\"alert alert-danger\">Failed to load gauge data: ${e.message}</div>`\n      return\n    }\n\n    this.currentGaugeData = data\n    this.currentLocaleOverrides = data.locale_overrides || {}\n\n    // Populate positions dropdown\n    this.positionSelectTarget.innerHTML = \"\"\n    const placeholder = document.createElement(\"option\")\n    placeholder.value = \"\"\n    placeholder.textContent = \"-- choose --\"\n    this.positionSelectTarget.appendChild(placeholder)\n    data.positions.forEach(p => {\n      const opt = document.createElement(\"option\")\n      opt.value = p.id\n      opt.dataset.percent = p.percent\n      opt.textContent = `score ${p.score} \u2192 percent ${p.percent}`\n      this.positionSelectTarget.appendChild(opt)\n    })\n    if (restoring && this.state.positionId) {\n      this.positionSelectTarget.value = this.state.positionId\n    }\n\n    // Fetch gauge JSON to discover c_max_val for slider range\n    const configUrl = this.gaugeConfigUrl()\n    try {\n      const cfgResp = await fetch(configUrl, { headers: { \"Accept\": \"application/json\" } })\n      if (cfgResp.ok) {\n        const cfg = await cfgResp.json()\n        this.currentCMaxVal = cfg.c_max_val || 100\n      } else {\n        this.currentCMaxVal = 100\n      }\n    } catch (e) {\n      this.currentCMaxVal = 100\n    }\n\n    this.sliderTarget.max = this.currentCMaxVal\n    this.sliderRangeTarget.textContent = `(range 0 \u2013 ${this.currentCMaxVal})`\n\n    // Restore slider value if applicable\n    if (restoring && typeof this.state.percent === \"number\") {\n      const clamped = Math.max(0, Math.min(this.currentCMaxVal, this.state.percent))\n      this.sliderTarget.value = clamped\n      this.sliderValueTarget.textContent = clamped.toFixed(2)\n    } else {\n      this.sliderTarget.value = 0\n      this.sliderValueTarget.textContent = \"0\"\n    }\n\n    this.updateLocaleStatus()\n    this.updateMetadata()\n    this.render()\n  }\n\n  gaugeConfigUrl() {\n    if (!this.currentGaugeData) return null\n    const gaugeId = this.currentGaugeData.gauge_id\n    const locale = this.state.locale || \"en\"\n    let path = `gauges/${gaugeId}.json`\n    if (locale !== \"en\" && this.currentLocaleOverrides[locale]) {\n      path = `gauges/locale/${locale}/${gaugeId}.json`\n    }\n    const base = this.cdnUrlValue || \"\"\n    return `${base}/${path}`\n  }\n\n  updateLocaleStatus() {\n    if (!this.hasLocaleStatusTarget) return\n    const locale = this.localeSelectTarget.value\n    if (locale === \"en\") {\n      this.localeStatusTarget.textContent = \"\"\n      return\n    }\n    if (!this.currentGaugeData) {\n      this.localeStatusTarget.textContent = \"\"\n      return\n    }\n    const hasOverride = !!this.currentLocaleOverrides[locale]\n    this.localeStatusTarget.textContent = hasOverride\n      ? `Using locale override: gauges/locale/${locale}/${this.currentGaugeData.gauge_id}.json`\n      : `No locale override for ${locale}; falling back to default config.`\n    this.localeStatusTarget.className = hasOverride ? \"form-text text-success\" : \"form-text text-warning\"\n  }\n\n  updateMetadata() {\n    if (!this.currentGaugeData) {\n      this.metadataCardTarget.style.display = \"none\"\n      return\n    }\n    this.metadataCardTarget.style.display = \"\"\n    const g = this.currentGaugeData\n    this.metaNameTarget.textContent = `${g.display_name} (internal name: ${g.name})`\n    this.metaKindTarget.textContent = g.kind || \"(none)\"\n    this.metaWbiVersionTarget.textContent = g.wbi_version_name || \"(none)\"\n    this.metaCMaxValTarget.textContent = this.currentCMaxVal != null ? this.currentCMaxVal : \"(unknown)\"\n    this.metaConfigUrlTarget.textContent = this.gaugeConfigUrl()\n    this.metaFootnoteTarget.textContent = g.footnote || \"(empty)\"\n  }\n\n  clearPreview() {\n    this.canvasWrapperTarget.innerHTML = '<div class=\"text-muted text-center py-5\">No gauge selected.</div>'\n    this.metadataCardTarget.style.display = \"none\"\n    this.positionSelectTarget.innerHTML = \"\"\n    this.currentGaugeData = null\n  }\n\n  render() {\n    if (!this.currentGaugeData) return\n    const configUrl = this.gaugeConfigUrl()\n    const percent = this.state.percent || 0\n\n    // Wipe wrapper and insert a fresh canvas; the existing \"gauge\" Stimulus\n    // controller picks it up via its connect() lifecycle and draws.\n    this.canvasWrapperTarget.innerHTML = \"\"\n    const canvas = document.createElement(\"canvas\")\n    const elId = `gauge_previewer_canvas_${Date.now()}`\n    canvas.id = elId\n    canvas.className = \"gauge-canvas\"\n    canvas.width = 600\n    canvas.height = 300\n    canvas.setAttribute(\"data-controller\", \"gauge\")\n    canvas.setAttribute(\"data-position\", String(percent))\n    canvas.setAttribute(\"data-gauge_config\", configUrl)\n    canvas.setAttribute(\"data-animate_now\", \"yes\")\n    canvas.setAttribute(\"alt\", this.currentGaugeData.display_name || \"\")\n    this.canvasWrapperTarget.appendChild(canvas)\n    this.attachCursorReadout(canvas)\n\n    // The Gauge library reads parentNode.clientWidth during its initial draw.\n    // When we swap the canvas in dynamically, that width may not be settled\n    // (or the gauge instance is built before the next layout pass), leaving\n    // a blank canvas until the next window resize. Dispatching a resize on\n    // the next animation frame forces the gauge to recompute and redraw.\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        window.dispatchEvent(new Event(\"resize\"))\n      })\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n    this.element.textContent = \"Hello World!\"\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wellness-snapshot\"\nexport default class extends Controller {\n  connect() {\n    console.log(\"HSBS: connect\")\n\n    if(document.getElementById('hotspot-brightspot-settings')) {\n      this.initializeSettings()\n    }\n  }\n\n \n  initializeSettings() {\n    console.log(\"HSBS: initializeSettings\")\n\n    var hotspotInput = document.getElementById('hotspot_threshold_slider');\n    var hotspotOutput = document.getElementById('hotspot_threshold_value');\n\n    // Force re-render by setting value programmatically\n    var hotspotValue = hotspotInput.getAttribute('value') || hotspotInput.value;\n    hotspotInput.value = hotspotValue;\n    hotspotOutput.textContent = hotspotValue;\n\n    var brightspotInput = document.getElementById('brightspot_threshold_slider');\n    var brightspotOutput = document.getElementById('brightspot_threshold_value');\n\n    // Force re-render by setting value programmatically\n    var brightspotValue = brightspotInput.getAttribute('value') || brightspotInput.value;\n    brightspotInput.value = brightspotValue;\n    brightspotOutput.textContent = brightspotValue;\n\n    \n    hotspotInput.addEventListener('input', function() {\n      hotspotOutput.textContent = this.value;\n    });\n\n    \n    brightspotInput.addEventListener('input', function() {\n      brightspotOutput.textContent = this.value;\n    });\n  }\n\n\n  toggleHotBrightSpots(e) {\n    e.preventDefault();\n    var item = e.currentTarget\n    var formData = new FormData();\n    var showFilter = false\n\n    // Enable or disable the currently clicked button\n    if(item.classList.contains('btn-disabled')){\n      item.classList.remove('btn-disabled')\n      showFilter = true\n    } else {\n      item.classList.add('btn-disabled')\n    }\n\n    // Add the hotspot setting to the form\n    if(document.getElementById('hsbs_hotspot').classList.contains('btn-disabled')) {\n      formData.append('hsbs_hotspot', 'off');\n    } else {\n      formData.append('hsbs_hotspot', 'on');\n      showFilter = true\n    }\n\n    // Add the brightspot setting to the form\n    if(document.getElementById('hsbs_brightspot').classList.contains('btn-disabled')) {\n      formData.append('hsbs_brightspot', 'off');\n    } else {\n      formData.append('hsbs_brightspot', 'on');\n      showFilter = true\n    }\n\n    if(showFilter == true) {\n      document.getElementById('hsbs_filter').classList.remove('d-none')\n    } else {\n      document.getElementById('hsbs_filter').classList.add('d-none')\n    }\n\n    // We need to check the filter settings differently as we do not want to run the filter when there are not other setting selected.\n    if(document.getElementById('hsbs_filter').classList.contains('btn-disabled')) {\n      formData.append('hsbs_filter', 'off');\n    } else {\n      if(!document.getElementById('hsbs_brightspot').classList.contains('btn-disabled') || !document.getElementById('hsbs_hotspot').classList.contains('btn-disabled')) {\n        formData.append('hsbs_filter', 'on');\n      } else {\n        formData.append('hsbs_filter', 'off');\n        document.getElementById('hsbs_filter').classList.add('btn-disabled')\n      } \n    }\n\n    var data = Object.fromEntries(formData);\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/users/update_hotspot_settings\",\n      data: { hotspot_settings: data },\n      async: false,\n      success: function (data) {\n        if(data.status == 500) {\n          alert(\"Settings were not saved\")\n        } else {\n          document.getElementById('submit').click()\n        }\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: updateHotspotSettings\n  * Internal triggered\n  * Updates the hotspot settings from the modal into the side panel and saves settings to users profile\n  ************************************************************************** */\n\n  updateHotspotSettings(e) {\n    e.preventDefault(); // Prevent form from submitting normally\n\n    // Debounce: prevent double-click from firing multiple requests\n    if (this.isSaving) return;\n    this.isSaving = true;\n\n    var saveButton = document.querySelector('#hotspot-brightspot-settings input[type=\"submit\"], #hotspot-brightspot-settings button[type=\"submit\"]');\n    if (saveButton) {\n      saveButton.disabled = true;\n    }\n\n    var form = document.getElementById('hotspot-settings-form')\n    var formData = new FormData();\n\n    form.querySelectorAll('input[name], select[name], textarea[name]').forEach(input => {\n      if ((input.type === 'radio' || input.type === 'checkbox') && !input.checked) {\n        return; // Skip unchecked radio/checkbox\n      }\n      formData.append(input.name, input.value);\n    });\n\n    var data = Object.fromEntries(formData);\n    var self = this;\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/customers/update_hotspot_settings\",\n      data: { hotspot_settings: data },\n      success: function (data) {\n        // Close the modal programmatically before triggering page refresh\n        var modalEl = document.querySelector('.modal.show');\n        if (modalEl) {\n          var modal = bootstrap.Modal.getInstance(modalEl);\n          if (modal) modal.hide();\n        }\n\n        if(data.status == 200) {\n          var submitBtn = document.getElementById('submit');\n          if (submitBtn) submitBtn.click();\n        }\n        if(data.status == 500) {\n          alert(\"Settings were not saved\")\n          // Re-enable on error so user can retry\n          self.isSaving = false;\n          if (saveButton) saveButton.disabled = false;\n        }\n      },\n      error: function() {\n        alert(\"Settings were not saved\")\n        self.isSaving = false;\n        if (saveButton) saveButton.disabled = false;\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"institution-search\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this;\n\n    let $element = $(this.element);\n    $element.css('width', '100%');\n    let search_url = $element.data(\"url\");\n\n    let selectParent = $element.parent();\n    let options = {\n      tags: true,\n      // Needed to fix IOS/fastclick issue - 6/23/2017 neil\n      templateResult: function(result, container) {\n        if (!result.id) {\n          return result.content;\n        }\n        container.className += ' needsclick';\n        return result.content;\n      },\n      templateSelection: function(result){\n        return result.content || result.text;\n      },\n      minimumInputLength: 2,\n      dropdownParent: selectParent,\n      placeholder: i18n_string(\"users.account.enter_hospital_organization\",\"Enter Hospital/Organization\"),\n      escapeMarkup: function (markup) {\n        return markup;\n      },\n      ajax: {\n        url: search_url,\n        dataType: 'json',\n        type: \"POST\",\n        quietMillis: 100,\n        data: function (term) {\n          var thedata = {\n            search: term,\n            only_active: 1\n          };\n          if($(\"#use_state_in_search\").is(\":checked\"))\n          {\n            if ($(\".child-question-22\").length && $(\".child-question-22 select\").length) {\n              let $state_select = $(\".child-question-22 select\");\n              if ($state_select.val()) {\n                thedata.state_question_id = $state_select.data(\"question-id\");\n                thedata.state_option_id = $state_select.val();\n              }\n            }\n          }\n          // Mobile app search\n          if ($(\"#appSplashSetupAccordion\").length) {\n            thedata = {\n              search: term,\n              wbi_version_id: $(\"#wbi_version_id\").val()\n            };\n          }\n          return thedata;\n        }\n      },\n      theme: \"bootstrap-5\",\n      containerCssClass: \"select2--small\",\n      dropdownCssClass: \"select2--small\"\n    };\n    if ($element.data(\"allow_custom\") == \"yes\") {\n      options.createTag = function (params) {\n        //console.log(\"TTTTTTTTTTag\");\n        return {\n          id: \"custom:\" + params.term,\n          text: params.term,\n          newOption: true\n        }\n      };\n    }\n    $element.select2(options);\n    let sel2Data = $element.data('select2');\n    if(sel2Data && sel2Data.$container)\n    {\n      sel2Data.$container.find('*').addClass('needsclick');\n    }\n    $element.on('select2:open', function(e){\n      const select2 = $(e.target).data('select2');\n      if (select2 && select2.dropdown && select2.dropdown.$search && select2.dropdown.$search.get(0)) {\n        select2.dropdown.$search.get(0).focus();\n        let search_field = select2.dropdown.$search;\n        let parent_container = search_field.parent();\n        addLabelToSelect2SearchField(search_field, parent_container);\n      }\n\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"invitation-toggle\"\n//\n// Toggles between the Checklist and Planning views on the Invitation &\n// Communication wizard step. Updates button active states and shows/hides\n// the corresponding view panels.\n//\n// Usage:\n// - app/views/campaigns/wizard/invitation_communication.html.erb\nexport default class extends Controller {\n  static targets = [\"checklistView\", \"planningView\", \"checklistBtn\", \"planningBtn\"]\n\n  showChecklist() {\n    // Update button states\n    if (this.hasChecklistBtnTarget && this.hasPlanningBtnTarget) {\n      this.checklistBtnTarget.classList.add('active')\n      this.planningBtnTarget.classList.remove('active')\n    }\n\n    // Toggle views\n    if (this.hasChecklistViewTarget) {\n      this.checklistViewTarget.style.display = \"block\"\n    }\n    if (this.hasPlanningViewTarget) {\n      this.planningViewTarget.style.display = \"none\"\n    }\n  }\n\n  showPlanning() {\n    // Update button states\n    if (this.hasChecklistBtnTarget && this.hasPlanningBtnTarget) {\n      this.planningBtnTarget.classList.add('active')\n      this.checklistBtnTarget.classList.remove('active')\n    }\n\n    // Toggle views\n    if (this.hasChecklistViewTarget) {\n      this.checklistViewTarget.style.display = \"none\"\n    }\n    if (this.hasPlanningViewTarget) {\n      this.planningViewTarget.style.display = \"block\"\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"invites\"\nexport default class extends Controller {\n  connect() {\n  }\n\n\n  deleteInvite(event) {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n\n    var ans = confirm(i18n_string(\"administrator.are_you_sure_you_want_do_delete_this_invite\", \"Are you sure you want to delete this invite?\"))\n    if(!ans) {\n      event.preventDefault();\n    }\n  }\n\n  resendInvite(event) {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"login\"\nexport default class extends Controller {\n  initialize() {\n    this.login_button_processing = false;\n  }\n\n  connect() {\n    if ($('#login_name').length) {\n      /* Added polling because if a browser login manager autofills in input \n       it does not always fire event and then requires user to click in and \n       then out of input - neil 2/27/2020 */\n      setInterval((function(controllerObj){\n        controllerObj.loginInputChange();\n      })(this), 200);\n    }\n    // Verification page\n    if ($('.login-submit-button').length) {\n      setInterval((function(controllerObj){\n        controllerObj.validationInputChange();\n      })(this), 200);\n    }\n  }\n\n  loginInputChange() {\n    if($('#login_name').val().length > 0) {\n      $('button[type=\"submit\"]').removeAttr(\"disabled\");\n    } else {\n      $('button[type=\"submit\"]').attr(\"disabled\", \"disabled\");\n    }\n  }\n\n  validationInputChange() {\n    if($('.login-verification-input').val().length > 0) {\n      $('.login-submit-button').prop(\"disabled\", false);\n    } else {\n      $('.login-submit-button').prop(\"disabled\", true);\n    }\n  }\n\n  processLogin(e) {\n    if(!this.login_button_processing) {\n      var buttonClicked = $(e.currentTarget);\n      e.preventDefault();\n      this.login_button_processing = true;\n      var type = buttonClicked.val();\n      $('button').attr('disabled', \"disabled\");\n      $(\"<input />\").attr(\"type\", \"hidden\").attr(\"name\", \"login_type\").attr(\"value\", type).appendTo('#login_form');\n      $('#login_form')[0].submit();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"manage-administrator\"\nexport default class extends Controller {\n\n  connect() {\n    $(\"#invite_administrator_button\").prop(\"disabled\",true);\n    $(\"#invite_folder_administrator_button\").prop(\"disabled\",true);\n    $(\"#add_new_administrator_form\").data(\"add_new_administrator_email_ok\",0);\n  }\n\n  additional_sub_account_dropdown_change(e) {\n    // .additional-customer-sub-account-permission-div\n    let sub_account_ids = $(\"#add_additional_org1\").val();\n    sub_account_ids = sub_account_ids.map(function (x) {\n      return parseInt(x, 10);\n    });\n    $(\".additional-customer-sub-account-permission-div\").each(function(){\n      // console.log($(this).data(\"id\"));\n      let customer_sub_account_id = parseInt($(this).data(\"id\"));\n      if (sub_account_ids.indexOf(customer_sub_account_id) != -1) {\n        $(this).show();\n      } else {\n        $(this).find(\"select\").each(function(){\n          $(this).val(\"\").change();\n        });\n        $(this).hide();\n      }\n    });\n  }\n\n  admin_email_change(e) {\n    $(\"#add_new_administrator_form\").data(\"add_new_administrator_email_ok\",0);\n    $(\"#invite_administrator_button\").prop(\"disabled\",true);\n    $(\"#invite_folder_administrator_button\").prop(\"disabled\",true);\n    var user_email_val = $(e.currentTarget).val();\n    if(user_email_val){\n      $(\"#email_for_admin_invite_error_div\").html('<div class=\"alert alert-warning mb-0 py-1 px-2 small\"><em class=\"fal fa-circle-notch fa-spin\"></em> Checking email address</div>').show();\n      var send_data = {\n        email: user_email_val,\n        user_type: $(\"#permission_level\").val(),\n        associate_message: 1\n      };\n      $.ajax({\n        url: '/users/check_email_avail',\n        data: send_data,\n        success: function(dataObj) {\n          // The dataObj.same_user_type check is needed because this is set to allow associating existing accounts to a new admin assignment - neil\n          if ( (dataObj.available && dataObj.available == \"yes\") || (dataObj.same_user_kind && dataObj.same_user_kind == \"yes\") ) {\n            // show_confirm_user_convert();\n            $(\"#add_new_administrator_form\").data(\"add_new_administrator_email_ok\",1);\n            $(\"#invite_administrator_button\").prop(\"disabled\",false);\n            $(\"#invite_folder_administrator_button\").prop(\"disabled\",false);\n            $(\"#email_for_admin_invite_error_div\").html('<div class=\"alert alert-success mb-0 py-1 px-2 small\"><em class=\"fa fa-check-circle\"></em> This email is good</div>').show();\n          } else {\n            if(dataObj.message != '') {\n              $(\"#email_for_admin_invite_error_div\").html('<div class=\"alert alert-danger mb-0 py-1 px-2 small\">' + dataObj.message + '</div>').show();\n            } else {\n              $(\"#email_for_admin_invite_error_div\").html('<div class=\"alert alert-danger mb-0 py-1 px-2 small\">This email belongs to NON-admin user</div>').show();\n            }\n          }\n        },\n        type: 'POST'\n      });\n    } else {\n      $(\"#email_for_admin_invite_error_div\").html(\"\").hide();\n    }\n  }\n\n  adv_perm_checkbox_clicked(e) {\n    if (e.currentTarget.checked) {\n      $(\"#advanced_permissions_list_new\").removeClass(\"hidden\");\n    } else {\n      $(\"#advanced_permissions_list_new\").addClass(\"hidden\");\n    }\n  }\n\n  check_data_type_option_selection(e) {\n    let $selectObj = $(e.currentTarget);\n    let val_list = $selectObj.val();\n    // console.dir(val_list);\n    var all_selected = false;\n    if(val_list && val_list.length)\n    {\n      for(var i=0;i<val_list.length;i++)\n      {\n        if(val_list[i] == \"all\")\n        {\n          all_selected = true;\n        }\n      }\n    }\n    if(all_selected && val_list.length > 1)\n    {\n      // Deselect everything except for \"All\"\n      $selectObj.val('all').change();\n    }\n\n    // See if this dropdown has subspecialties that we need to check\n    var this_id = $selectObj.data(\"questionId\");\n    if(this_id) {\n      var parentContainer = $selectObj.closest(\".customer-sub-account-data-type-permission-div\");\n      // console.log(\"------------======== \"+parentContainer.length);\n      // console.log(\"------------======== \"+parentContainer.find(\"[data-parent_question_id='\"+this_id+\"']\").length);\n      // console.log(\"this_id========\"+this_id);\n      if(parentContainer.find(\"[data-parent_question_id='\"+this_id+\"']\").length) {\n        // This dropdown does have children -- now check to see if any of them need to be hidden or shown :)\n        if(all_selected) {\n          // Show all\n          parentContainer.find(\"[data-parent_question_id='\"+this_id+\"']\").show();\n        } else if (val_list.length > 0) {\n          // Loop through and check selected options\n          parentContainer.find(\"[data-parent_question_id='\"+this_id+\"']\").each(function(){\n            var compareVal = $(this).data(\"parent_option_id\");\n            var isSelectedInParent = false;\n            if(val_list && val_list.length)\n            {\n              for(var i=0;i<val_list.length;i++)\n              {\n                if(val_list[i] == compareVal) {\n                  isSelectedInParent = true;\n                }\n\n              }\n            }\n            if(isSelectedInParent) {\n              $(this).show();\n            } else {\n              $(this).find(\"select\").each(function() {\n                $(this).val(\"\").change();\n              });\n              $(this).hide();\n            }\n          });\n        } else {\n          parentContainer.find(\"[data-parent_question_id='\"+this_id+\"']\").find(\"select\").each(function() {\n            $(this).val(\"\").change();\n          });\n          parentContainer.find(\"[data-parent_question_id='\"+this_id+\"']\").hide();\n        }\n      }\n    }\n  }\n\n  confirm_delete_invite(e) {\n    if (!confirm(\"Are you sure you want to delete this invite?\")) {\n      e.preventDefault();\n    }\n  }\n\n  edit_permission_checkbox_checked(e) {\n    if (e.currentTarget.value == \"reports\") {\n      if (e.currentTarget.checked) {\n        $(\"#advanced-permission-new-user\").show();\n      } else {\n        $(\"#advanced-permission-new-user\").find(\"input[type=checkbox]\").prop('checked',false);\n        $(\"#advanced-permission-new-user\").find(\"select\").val(\"\").change();\n        $(\"#advanced_permissions_list_new\").hide();\n        $(\"#specialty-list-div-new\").hide();\n        $(\"#advanced-permission-new-user\").hide();\n      }\n    }\n  }\n\n  limited_report_type_clicked(e) {\n    var selected_val = $(\"input[name='limited_report_type']:checked\").val();\n    if (selected_val == \"report\") {\n      $(\"#limited_report_type_data\").hide();\n      $(\"#limited_report_type_report\").show();\n    } else if (selected_val == \"data\") {\n      $(\"#limited_report_type_report\").hide();\n      $(\"#limited_report_type_data\").show();\n    }\n  }\n\n  permission_select_change(e) {\n    var val_list = $(e.currentTarget).val();\n    var have_reports = false;\n    if(val_list && val_list.length)\n    {\n      for(var i=0;i<val_list.length;i++)\n      {\n        if(val_list[i] == \"reports\")\n        {\n          have_reports = true;\n        }\n      }\n    }\n    if(have_reports)\n    {\n      $(\"#advanced-permission-new-user\").show();\n    }\n    else\n    {\n      $(\"#advanced-permission-new-user\").hide();\n      $(\"#advanced_permissions_checkbox_new\").prop(\"checked\",false);\n      $(\"#advanced_permissions_list_new\").hide();\n    }\n  }\n\n  specialty_report_clicked(e) {\n    if (e.currentTarget.checked) {\n      $(\"#specialty-list-div-new\").show();\n    } else {\n      $(\"#specialty-list-div-new\").hide();\n    }\n  }\n\n  submit_add_form(e) {\n    if (!$(\"#add_new_administrator_form\").data(\"add_new_administrator_email_ok\")) {\n      e.preventDefault();\n    }\n  }\n\n  submit_add_from_folder_permissions(e) {\n    if (!$(\"#add_new_administrator_form\").data(\"add_new_administrator_email_ok\")) {\n      e.preventDefault();\n      return;\n    }\n    let kind = $(\"#add_new_administrator_form\").data(\"kind\");\n    let url = $(\"#add_new_administrator_form\").data(\"url\");\n    let folder_id = $(\"#invite_administrator_folder_id\").val();\n    let email = $(\"#add_administrator\").val();\n    let sub_account = $(\"#invite_administrator_customer_sub_account_id\").val();\n\n    //console.log(\"folder_id=\"+folder_id+\" email=\"+email+\" url=\"+url+\"\");\n    if (folder_id && email && url && sub_account) {\n      var adv_report_arr = {};\n      var wellness_snapshot_arr = {};\n      var combined_wellness_snapshot_arr = [];\n      var wellness_journey_arr = {};\n      if(kind == 'advanced_report') {\n        adv_report_arr[sub_account] = \"1\";\n      }\n      var folder_arr = {};\n      folder_arr[sub_account] = [folder_id];\n\n      if(kind == 'combined_wellness_snapshot') {\n        combined_wellness_snapshot_arr.push(folder_id.toString());\n        adv_report_arr[sub_account] = \"1\";\n        folder_arr = {};\n      }\n      if(kind == 'wellness_snapshot') {\n        wellness_snapshot_arr[sub_account] = \"1\";\n        adv_report_arr[sub_account] = \"1\";\n      }\n      if (kind == 'wellness_journey') {\n        wellness_journey_arr[sub_account] = \"1\";\n        adv_report_arr[sub_account] = \"1\";\n      }\n\n      let exclude_sub_account_ids = [];\n      if ($(\"#exclude_additional_org1\").length && $(\"#exclude_sub_accounts_checkbox\").length && $(\"#exclude_sub_accounts_checkbox\").is(\":checked\")) {\n        let sub_account_ids = $(\"#exclude_additional_org1\").val();\n        exclude_sub_account_ids = sub_account_ids.map(function (x) {\n          return parseInt(x, 10);\n        });\n      }\n\n      let add_customer_sub_account_id_list = [];\n      if ($(\"#add_additional_org1\").length) {\n        let sub_account_ids = $(\"#add_additional_org1\").val();\n        add_customer_sub_account_id_list = sub_account_ids.map(function (x) {\n          return parseInt(x, 10);\n        });\n        if (exclude_sub_account_ids.length > 0) {\n          add_customer_sub_account_id_list = add_customer_sub_account_id_list.filter(function (x) {\n            return exclude_sub_account_ids.indexOf(x) == -1;\n          });\n        }\n      }\n\n      var postData = {\n        add_administrator: email,\n        advanced_permissions: 1,\n        adv_report_folder: adv_report_arr,\n        wellness_snapshot_folder: wellness_snapshot_arr,\n        combined_snapshot_folders: combined_wellness_snapshot_arr,\n        wellness_journey_folder: wellness_journey_arr,\n        advanced_permissions_for_multiple: 1,\n        limited_report_type: 'report',\n        permissions: ['reports'],\n        action: 'add_admin',\n        kind: \"modal_created\",\n        add_customer_sub_account_id: add_customer_sub_account_id_list,\n        folder_id: folder_arr\n      }\n\n      $.ajax({\n        url: url,\n        type: 'post',\n        data: postData,\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        dataType: 'json',\n        success: function (json) {\n          if(json.status == 200) {\n            $('#add_administrator').val('');\n            $('#invite_folder_administrator_button').attr('disabled', true);\n            $('#email_for_admin_invite_error_div').html('').hide();\n            $('#folder_id').val('');\n\n            $('#system_modal_popup').modal('hide');\n\n            alert( json.message );\n          } else {\n            // Show error message if set, otherwise show general error\n            if (json.message) {\n              alert(json.message);\n            } else {\n              alert(\"Error. Please try again later.\");\n            }\n          }\n        }\n      });\n\n    } else {\n      e.preventDefault();\n      return;\n    }\n  }\n\n\n  toggleChildFolders(e) {\n    var item = e.currentTarget\n\n    if(item.checked) {\n      $(item).parent().parent().parent().find('.dd-list').find(\"input[type=checkbox]\").each(function(index, item){\n        item.checked = true\n        item.disabled = true\n      })\n      // $(item).parent().parent().parent().find('.dd-list').find(\"input[type=checkbox]\").attr('checked', true).attr('disabled', true)\n    } else {\n      $(item).parent().parent().parent().find('.dd-list').find(\"input[type=checkbox]\").each(function(index, item){\n        item.checked = false\n        item.disabled = false\n      })\n      // $(item).parent().parent().parent().find('.dd-list').find(\"input[type=checkbox]\").attr('checked', false).attr('disabled', false)\n    }\n  }\n\n  togglePermissionsNav(e) {\n    var item = e.currentTarget\n    $('#myTab .nav-link').removeClass('active');\n    $(item).addClass('active')\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"mobile-app-signup\"\nexport default class extends Controller {\n  connect() {\n    $('.accordion-vh-100 .collapse').on('show.bs.collapse', function (e) {\n      $(this).parents('.accordion-item').addClass('show');\n    });\n\n    $('.accordion-vh-100 .collapse').on('hide.bs.collapse', function (e) {\n      if ($('.accordion-item.show').length <= 1) {\n        e.preventDefault();\n        return false;\n      }\n      $(this).parents('.accordion-item').removeClass('show');\n\n    });\n\n    $(window).resize(function() {\n      var headerHeights = $(\".no-auth-header\").outerHeight();;\n      $(\".accordion-header\").each(function(){\n        headerHeights += $(this).outerHeight();\n      });\n      headerHeights += 20;\n      var windowHeight = $(window).height();\n      var heightLeftOver = windowHeight - headerHeights;\n      // $(\".collapse\").height($(window).height() - headerHeights);\n      $(\".collapse\").each(function(){\n        $(this).height(heightLeftOver);\n        $(this).css({\n          \"overflow\": \"auto\",\n          \"max-height\": heightLeftOver\n        });\n      });\n\n    }).resize();\n    $(document).on(\"change\",\"#country_search_select\",function(e){\n      let selected_option = $(this).find('option:selected');\n      let country_code = selected_option.data(\"code\");\n      $(\"#country_code\").val(country_code);\n      $(\"#country_option_id\").val(selected_option.val());\n      //console.log(\"change event: code=\"+country_code+\"/option_id=\"+selected_option.val());\n      if (country_code == \"US\" || country_code == \"CA\") {\n        $(\"#institution-other-container\").hide();\n        $(\"#institution-search-container\").show();\n      } else {\n        $(\"#institution-search-container\").hide();\n        $(\"#institution-other-container\").show();\n      }\n    });\n  }\n\n  no_invite_continue(e){\n    clearJsAlerts('message-container2');\n    if ($(\"#wbi_version_id\").val() != \"\") {\n      $(\"#no_invite_step1\").hide();\n      $(\"#no_invite_step2\").show();\n    } else {\n      doJsAlert('<div class=\"alert alert-danger px-2\">'+i18n_string(\"mobile_app.please_select_your_profession\",\"Please select your profession\")+'</div>','message-container2');\n    }\n  }\n  no_invite_back(e){\n    $(\"#no_invite_step2\").hide();\n    $(\"#no_invite_step1\").show();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Appended to the DOM via turbo_stream after a successful modal form save.\n// On connect: closes the Bootstrap modal, marks the preview as dirty, and removes itself.\n//\n// Usage (injected via turbo_stream in Ruby controllers, not directly in views):\n// - app/controllers/campaigns/wizard_controller.rb\n// - app/controllers/signup_questions_controller.rb\nexport default class extends Controller {\n  connect() {\n    const modalEl = document.getElementById('system_modal_popup')\n    if (modalEl) {\n      const modal = bootstrap.Modal.getInstance(modalEl)\n      if (modal) modal.hide()\n    }\n\n    document.dispatchEvent(new CustomEvent('wizard-questions:dirty'))\n\n    this.element.remove()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\nimport { Offcanvas } from \"bootstrap\"\n\n// Connects to data-controller=\"modal\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  clearTooltips() {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n  }\n\n  clickOffering(e) {\n    var item = e.currentTarget\n    document.getElementById('wbi_offering_holder').classList.add('close')\n\n    $.ajax({\n      type: \"PATCH\",\n      url: \"/offerings/mark_as_closed\",\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      data: { offering: item.dataset.id },\n      success: function (data) {}\n    });\n  }\n\n  closeOffering(e) {\n    var item = e.currentTarget\n    document.getElementById('wbi_offering_holder').classList.add('close')\n\n    e.preventDefault()\n    $.ajax({\n      type: \"PATCH\",\n      url: \"/offerings/mark_as_closed\",\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      data: { offering: item.dataset.id },\n      success: function (data) {}\n    });\n  }\n\n\n\n\n  loadModal(event) {\n    let focus_modal = true;\n    // Change for data-focus=\"no\"\n    if (event.currentTarget.dataset && event.currentTarget.dataset.focus && (event.currentTarget.dataset.focus == \"no\")) {\n      focus_modal = false;\n    }\n\n    if (event.currentTarget.dataset && event.currentTarget.dataset.bsToggle && event.currentTarget.dataset.bsToggle == 'tooltip') {\n      // Tooltips on buttons that open modals do not always cleanly close -- remove with force :)\n      $(event.currentTarget).blur();\n      setTimeout(function(){\n        $(\".tooltip[role='tooltip']\").remove();\n      },100);\n      // $(event.currentTarget).tooltip('dispose');\n    }\n\n    this.modal = new Modal(document.getElementById('system_modal_popup'), {\n      keyboard: false,\n      focus: focus_modal\n    });\n\n    let modal_container = document.querySelector('#system_modal_popup');\n    this.removeBootstrapModalSizes(modal_container);\n    if (event.currentTarget.dataset && event.currentTarget.dataset.modalSize) {\n      if (modal_container) {\n        let dialog_container = modal_container.querySelector('.modal-dialog');\n        if (dialog_container) {\n          dialog_container.className = \"modal-dialog \" + event.currentTarget.dataset.modalSize;\n        }\n      }\n    } else {\n      this.setDefaultBootstrapModalSize(modal_container);\n    }\n\n    this.modal.show();\n    this.clearTooltips();\n  }\n\n  loadInnerModal(event) {\n    let focus_modal = true;\n    // Change for data-focus=\"no\"\n    if (event.currentTarget.dataset && event.currentTarget.dataset.focus && (event.currentTarget.dataset.focus == \"no\")) {\n      focus_modal = false;\n    }\n    this.modal = new Modal(document.getElementById('inner_modal_popup'), {\n      keyboard: false,\n      focus: focus_modal\n    });\n\n    let modal_container = document.querySelector('#inner_modal_popup');\n    this.removeBootstrapModalSizes(modal_container);\n    if (event.currentTarget.dataset && event.currentTarget.dataset.modalSize) {\n      if (modal_container) {\n        let dialog_container = modal_container.querySelector('.modal-dialog');\n        if (dialog_container) {\n          dialog_container.className = \"modal-dialog \" + event.currentTarget.dataset.modalSize;\n        }\n      }\n    } else {\n      this.setDefaultBootstrapModalSize(modal_container);\n    }\n\n    this.modal.show();\n    this.clearTooltips();\n  }\n\n  loadLoginAsModal(event) {\n    $(\"#recent-customers-holder\").hide();\n    $(\"#organization-search-holder\").hide();\n    this.modal = new Modal(document.getElementById('login_as_modal_popup'), {\n      keyboard: false\n    });\n\n    if (event.currentTarget.dataset && event.currentTarget.dataset.modalSize) {\n      let modal_container = document.querySelector('#login_as_modal_popup');\n      if (modal_container) {\n        let dialog_container = modal_container.querySelector('.modal-dialog');\n        if (dialog_container) {\n          dialog_container.className = \"modal-dialog \" + event.currentTarget.dataset.modalSize;\n        }\n      }\n    }\n\n    this.modal.show();\n    this.clearTooltips();\n  }\n\n  removeBootstrapModalSizes(modal_container) {\n    let class_list = [\"modal-sm\",\"modal-md\",\"modal-lg\",\"modal-xl\"]\n    if (modal_container) {\n      let dialog_container = modal_container.querySelector('.modal-dialog');\n      if (dialog_container) {\n        class_list.forEach(function (class_str, index) {\n          if (dialog_container.classList.contains(class_str)) {\n            dialog_container.classList.remove(class_str);\n          }\n        });\n      }\n    }\n  }\n\n  setDefaultBootstrapModalSize(modal_container) {\n    if (modal_container) {\n      let dialog_container = modal_container.querySelector('.modal-dialog');\n      // data-default-size = dialog_container.dataset.defaultSize;\n      if (dialog_container && dialog_container.dataset && dialog_container.dataset.defaultSize) {\n        dialog_container.classList.add(dialog_container.dataset.defaultSize);\n      }\n    }\n  }\n\n  verify_2fa_enable(event) {\n    event.preventDefault();\n    $('#error-message-2fa').remove();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: '/sessions/verify_mfa_account',\n      type: 'post',\n      data: { code: $('#verify_code').val() },\n      success: function(e) {\n        if(e.status == 200) {\n          $('#enable-2fa-modal').modal('hide');\n          $('#button-2fa-holder').html('<p class=\"alert alert-success\">2-Factor Authentication is enabled.</p><p><button class=\"btn btn-danger\" id=\"disable_2fa_button\" data-action=\"click->account-setup-verification#disable2fa\">Disable 2-Factor Authentication</button></p>');\n          $('#sms_phone_label').removeClass('hidden');\n          $('#user_sms_phone').attr(\"disabled\", \"disabled\");\n          $('#enable-2fa-modal').modal('hide');\n        }\n        if(e.status == 500) {\n          $('#enable-2fa-modal .modal-body').prepend(\"<p class='text-danger' id='error-message-2fa'>\" + e.message + \"</p>\")\n        }\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"multi-select\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this;\n\n    this.initMultiSelect(this.element);\n  }\n\n  initMultiSelect(element) {\n    let $element = $(element);\n    $element.css('width', '100%');\n\n    let placeholder_text = i18n_string(\"campaign_manager.select_options\",\"Select Options\")\n    let search_text = i18n_string(\"campaign_manager.search_options\",\"Search Options\")\n    $element.multiselect({\n      columns: 3,\n      search: true,\n      selectAll: true,\n      texts: {\n        placeholder: placeholder_text,\n        search: search_text\n      }\n    });\n\n    $element.on('change', function (jqEvent) {\n      let last_data = $(this).data('last_data');\n      let new_data = JSON.stringify($(this).val());\n      // Only trigger reload and native event if the value has acually change, otherwise it will get in an infinite loop\n      if (last_data != new_data) {\n        $(this).data('last_data', new_data);\n        $(this).multiselect('reload');\n        let event = new Event('change', { bubbles: true, cancelable: true }) // fire a native event\n        this.dispatchEvent(event);\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"nested-form\"\nexport default class extends Controller {\n  \n  static targets = [\"links\", \"template\"]\n  \n\n  addAssociation(event) {\n    event.preventDefault();\n\n    var content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime())\n    this.linksTarget.insertAdjacentHTML('beforebegin', content)\n  }\n\n  connect() {\n  }\n\n\n  removeAssociation(event) {\n    event.preventDefault();\n    \n    let wrapper = event.currentTarget.closest('.nested-fields')\n    if(wrapper.dataset.newRecord == 'true') {\n      wrapper.remove()\n    } else {\n      var ans = confirm('Are you sure you want to remove this item?')\n      if(ans) {\n        wrapper.querySelector(\"input[name*='_destroy']\").value = 1\n        wrapper.style.display = 'none'\n      }\n    }\n  }\n}\n", "import { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n", "import consumer from \"./consumer\"\n\n// Relay pattern: the channel receives server pushes and re-emits them as a DOM\n// CustomEvent so any Stimulus controller on the page can react without being\n// coupled to ActionCable directly. The channel is a single shared subscription;\n// controllers filter by job_id / notification_id on the event detail.\nconsumer.subscriptions.create(\"AdminNotificationsChannel\", {\n  connected() {},\n  disconnected() {},\n\n  received(data) {\n    const event = new CustomEvent(\"admin-notification:update\", { detail: data, bubbles: true })\n    document.dispatchEvent(event)\n  }\n})\n", "import { Controller } from \"@hotwired/stimulus\"\nimport \"../channels/admin_notifications_channel\"\n\nexport default class extends Controller {\n  static targets = [\"badge\", \"list\", \"hint\"]\n  static values  = { url: String }\n\n  connect() {\n    this.handleUpdate = this.load.bind(this)\n    document.addEventListener(\"admin-notification:update\", this.handleUpdate)\n    this.load()\n    if (this.hasHintTarget) this.#showHint()\n  }\n\n  disconnect() {\n    document.removeEventListener(\"admin-notification:update\", this.handleUpdate)\n  }\n\n  onOpen() {\n    this.load()\n  }\n\n  load() {\n    fetch(this.urlValue, { headers: { Accept: \"application/json\" } })\n      .then(r => r.json())\n      .then(items => this.#render(items))\n      // Intentionally silent: a failed poll (e.g. network hiccup, user logged out)\n      // should not surface an error UI for a non-critical notification bell.\n      .catch(() => {})\n  }\n\n  dismiss(event) {\n    event.preventDefault()\n    event.stopPropagation()\n    const id = event.currentTarget.dataset.notificationId\n    this.#post(`/system_notifications/${id}/dismiss`).then(() => this.load())\n  }\n\n  dismissAll(event) {\n    event.preventDefault()\n    this.#post(\"/system_notifications/dismiss_all\").then(() => this.load())\n  }\n\n  markAllRead() {\n    // Guard: badge is hidden when count is 0, meaning nothing is unread. Skip the\n    // POST in that case so we don't fire a no-op server write on every dropdown open.\n    if (!this.hasBadgeTarget || this.badgeTarget.classList.contains(\"d-none\")) return\n    this.#post(\"/system_notifications/mark_all_read\").then(() => {\n      this.badgeTarget.classList.add(\"d-none\")\n    })\n  }\n\n  // \u2500\u2500 private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n  #esc(str) {\n    return str ? String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#39;\") : \"\"\n  }\n\n  #render(items) {\n    const unread = items.filter(n => !n.read).length\n    if (this.hasBadgeTarget) {\n      this.badgeTarget.textContent = unread > 9 ? \"9+\" : unread\n      this.badgeTarget.classList.toggle(\"d-none\", unread === 0)\n    }\n\n    if (!this.hasListTarget) return\n\n    this.listTarget.innerHTML = items.length === 0\n      ? `<p class=\"text-muted small text-center py-3 mb-0\">No notifications</p>`\n      : items.map(n => this.#renderItem(n)).join(\"\")\n  }\n\n  #renderItem(n) {\n    const ICONS = {\n      theme_job_queued:       `<em class=\"fa fa-clock text-secondary\"></em>`,\n      theme_job_processing:   `<em class=\"fa fa-spinner fa-spin text-primary\"></em>`,\n      theme_job_review_ready: `<em class=\"fa fa-exclamation-circle text-warning\"></em>`,\n      theme_job_completed:    `<em class=\"fa fa-check-circle text-success\"></em>`,\n      theme_job_error:        `<em class=\"fa fa-exclamation-triangle text-danger\"></em>`,\n    }\n    const icon   = ICONS[n.kind] ?? `<em class=\"fa fa-bell text-muted\"></em>`\n    const bg     = n.read ? \"\" : \"bg-light\"\n    const viewBtn = n.action_url\n      ? `<a href=\"${n.action_url}\" class=\"btn btn-sm btn-outline-primary py-0 lh-1\" style=\"font-size:.75rem\">View</a>`\n      : \"\"\n\n    const scopeLine = n.scope\n      ? `<div class=\"mb-1\" style=\"font-size:.7rem;color:#6c757d;font-weight:500\">${this.#esc(n.scope)}</div>`\n      : \"\"\n\n    return `\n      <div class=\"notification-item border-bottom px-3 py-2 ${bg}\">\n        <div class=\"d-flex gap-2\">\n          <div class=\"flex-shrink-0 pt-1\">${icon}</div>\n          <div class=\"flex-grow-1 overflow-hidden\">\n            <div class=\"d-flex justify-content-between align-items-start gap-1\">\n              <strong class=\"small\">${this.#esc(n.title)}</strong>\n              <button class=\"btn-close flex-shrink-0\" style=\"font-size:.55rem\"\n                      data-action=\"click->notification-bell#dismiss\"\n                      data-notification-id=\"${n.id}\"></button>\n            </div>\n            ${scopeLine}\n            <p class=\"small text-muted mb-1 text-wrap\">${this.#esc(n.body)}</p>\n            <div class=\"d-flex justify-content-between align-items-center\">\n              <small class=\"text-muted\">${this.#timeAgo(n.created_at)}</small>\n              ${viewBtn}\n            </div>\n          </div>\n        </div>\n      </div>`\n  }\n\n  #showHint() {\n    const btn = this.element.querySelector(\"button[data-bs-toggle='dropdown']\")\n    if (!btn || typeof bootstrap === \"undefined\") return\n\n    const popover = new bootstrap.Popover(btn, {\n      content:     this.hintTarget.textContent.trim(),\n      placement:   \"bottom\",\n      trigger:     \"manual\",  // \"manual\" because we control show/hide ourselves\n      customClass: \"notification-hint-popover\"\n    })\n    popover.show()\n    const dispose = () => popover.dispose()\n    // Dismiss after 8 s automatically, or immediately on first click \u2014 whichever\n    // comes first. { once: true } ensures the click listener cleans itself up.\n    setTimeout(dispose, 8000)\n    btn.addEventListener(\"click\", dispose, { once: true })\n  }\n\n  #timeAgo(iso) {\n    const diff = Math.floor((Date.now() - new Date(iso)) / 60000)\n    if (diff < 1)  return \"just now\"\n    if (diff < 60) return `${diff}m ago`\n    const h = Math.floor(diff / 60)\n    if (h < 24)    return `${h}h ago`\n    return `${Math.floor(h / 24)}d ago`\n  }\n\n  #post(url) {\n    return fetch(url, {\n      method:  \"POST\",\n      headers: {\n        \"X-CSRF-Token\": document.querySelector(\"[name=csrf-token]\")?.content,\n        Accept:         \"application/json\"\n      }\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"notifications\"\nexport default class extends Controller {\n  connect() {\n    this.check_reassess_enabled_checkbox();\n    // this.initializeSelect2(\"select.select2\", {});\n\n    $(\"#allowed_reminder_periods\").select2({width:'100%'});\n    $(\"#auto_alert_custom_send_dow\").select2({width:'100%'});\n  }\n\n  check_reassess_enabled_checkbox()\n  {\n    if(!$(\"#reassess_enabled_checkbox\").prop(\"checked\"))\n    {\n      $(\"#reassess_enabled_div\").hide();\n    }\n    else\n    {\n      $(\"#reassess_enabled_div\").show();\n    }\n  }\n\n  togglePreferences(e) {\n    var cur_val = e.target.value\n    $(\"input[name='auto_alert_reassess_preference']\").each(function(){\n      if(!this.checked)\n      {\n        var radio_val = $(this).val();\n        $(\"#auto_alert_reassess_preference_extra_options_\"+radio_val).hide();\n      }\n    });\n    $(\"#auto_alert_reassess_preference_extra_options_\"+cur_val).show(); \n  }\n\n  toggleReassessEmails(e) {\n    this.check_reassess_enabled_checkbox();\n  }\n\n\n  // $(\".show-upgrade-messages\").on(\"click\",function(e){\n  //   // e.preventDefault();\n  //   $(\"#upgrade-message\").fadeIn();\n  // });\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\"\n\nlet customerTimeout\nlet customerSubAccountTimeout\nlet userTimeout\n\n// Connects to data-controller=\"offerings\"\nexport default class extends Controller {\n\n  assignCustomer(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    document.getElementById('offering_selected_customers').innerHTML += '<li id=\"customer_' + item.dataset.id + '\" class=\"d-flex p-0 border bg-light-green\"><div class=\"flex-fill pe-2 p-1\"><input type=\"hidden\" name=\"assignment[customer_list][]\" value=\"' + item.dataset.id + '\">' + item.dataset.name + '</div><button class=\"btn btn-xs btn-danger\" data-action=\"click->offerings#removeSelected\" data-id=\"customer_' + item.dataset.id + '\"><em class=\"fa fa-times\"></em></button></li>'\n    item.parentNode.remove()\n  }\n\n  assignCustomerSubAccount(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    document.getElementById('offering_selected_customer_sub_accounts').innerHTML += '<li id=\"customer_sub_account_' + item.dataset.id + '\" class=\"d-flex p-0 border bg-light-green\"><div class=\"flex-fill pe-2 p-1\"><input type=\"hidden\" name=\"assignment[customer_sub_account_list][]\" value=\"' + item.dataset.id + '\">' + item.dataset.name + '</div><button class=\"btn btn-xs btn-danger\" data-action=\"click->offerings#removeSelected\" data-id=\"customer_sub_account_' + item.dataset.id + '\"><em class=\"fa fa-times\"></em></button></li>'\n    item.parentNode.remove()\n  }\n\n  assignUser(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    document.getElementById('offering_selected_users').innerHTML += '<li id=\"user_' + item.dataset.id + '\" class=\"d-flex p-0 border bg-light-green\"><div class=\"flex-fill pe-2 p-1\"><input type=\"hidden\" name=\"assignment[user_list][]\" value=\"' + item.dataset.id + '\">' + item.dataset.name + '</div><button class=\"btn btn-xs btn-danger\" data-action=\"click->offerings#removeSelected\" data-id=\"user_' + item.dataset.id + '\"><em class=\"fa fa-times\"></em></button></li>'\n    item.parentNode.remove()\n  }\n\n  buildCustomerList(list) {\n    var html = ''\n    html += '<h5>Matching Customer List</h5>'\n    if(list.length > 0){\n      html += '<ul class=\"list list-unstyled\">'\n      list.forEach(element => {\n        html += '<li><a href=\"#\" data-action=\"click->offerings#assignCustomer\" data-name=\"' + element.name + '\" data-id=\"' + element.id + '\">' + element.name + '</a></li>'\n      });\n      \n      html += '</ul>'\n    } else {\n      html += '<p>No Matching Customers</p>'\n    }\n  \n    return html\n  }\n\n  buildCustomerSubAccountList(list) {\n    var html = ''\n    html += '<h5>Matching Customer Sub-Account List</h5>'\n    if(list.length > 0){\n      html += '<ul class=\"list list-unstyled\">'\n      list.forEach(element => {\n        html += '<li>' + element.name + '</li>'\n        element.csa_list.forEach(item => {\n          html += '<li class=\"ps-2\"><a href=\"#\" data-action=\"click->offerings#assignCustomerSubAccount\" data-name=\"' + element.name + ' | ' + item.csa_name + ' (' + item.wbi_version_name + ')\" data-id=\"' + item.csa_id + '\">' + item.csa_name + ' (' + item.wbi_version_name + ')</a></li>'\n        })\n      });\n      \n      html += '</ul>'\n    } else {\n      html += '<p>No Matching Customer Sub-Accounts</p>'\n    }\n  \n    return html\n  }\n\n  buildUserList(list) {\n    var html = ''\n    html += '<h5>Matching User List</h5>'\n    if(list.length > 0){\n      html += '<ul class=\"list list-unstyled\">'\n      list.forEach(element => {\n        html += '<li><a href=\"#\" data-action=\"click->offerings#assignUser\" data-name=\"' + element.full_name + ' | ' + element.email + ' (' + element.customer + ')\" data-id=\"' + element.id + '\">' + element.full_name + ' | ' + element.email + ' (' + element.customer + ')</a></li>'\n      });\n      \n      html += '</ul>'\n    } else {\n      html += '<p>No Matching Users</p>'\n    }\n  \n    return html\n  }\n\n  connect() { \n\n    this.initializeCkEditor();\n\n    // Close dropdown option items.\n    const offeringCustomer = document.querySelector('#offering_customer')\n    const offeringCustomerSubAccount = document.querySelector('#offering_customer_sub_account')\n    const offeringUser = document.querySelector('#offering_user')\n\n    document.addEventListener('click', (event) => {\n      const withinCustomerBoundaries = event.composedPath().includes(offeringCustomer)\n      if (!withinCustomerBoundaries && document.getElementById('customer_search')) {\n        document.getElementById('customer_search').value = \"\"\n        document.getElementById('offering_customer_list').innerHTML = ''\n        document.getElementById('offering_customer_list').classList.add('hidden')\n      }\n\n      const withinCustomerSubAccountBoundaries = event.composedPath().includes(offeringCustomerSubAccount)\n      if (!withinCustomerSubAccountBoundaries && document.getElementById('customer_sub_account_search')) {\n        document.getElementById('customer_sub_account_search').value = \"\"\n        document.getElementById('offering_customer_sub_account_list').innerHTML = ''\n        document.getElementById('offering_customer_sub_account_list').classList.add('hidden')\n      }\n\n      const withinUserBoundaries = event.composedPath().includes(offeringUser)\n      if (!withinUserBoundaries && document.getElementById('user_search')) {\n        document.getElementById('user_search').value = \"\"\n        document.getElementById('offering_user_list').innerHTML = ''\n        document.getElementById('offering_user_list').classList.add('hidden')\n      }\n    })\n    \n  }\n\n  clearSearch(e){\n    e.preventDefault()\n    document.getElementById(\"customer_search\").value = \"\"\n    document.getElementById('customer_sub_account_search').value = \"\"\n    document.getElementById('user_search').value = \"\"\n\n    Array.from(document.getElementsByClassName('offering-list')).forEach(element => {\n      element.classList.add('hidden')\n      element.innerHTML = ''\n    })\n    \n  }\n\n  clearTooltips() {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n  }\n\n  delete(e){\n    e.preventDefault()\n    const controllerRef = this\n\n    var item = e.currentTarget\n    var ans = confirm(\"Are you sure you want to delete this offering\")\n    if(ans) {\n      $.ajax({\n        type: \"DELETE\",\n        url: item.href,\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        success: function (data) {\n          if(data.status == 200)\n          { \n            controllerRef.clearTooltips();\n            document.getElementById('offering_' + item.dataset.id).remove()\n          }\n          else\n          {\n            alert(\"Error deleting. Please try again.\");\n          }\n        }\n      });    \n    }\n  }\n\n\n  initializeCkEditor() {\n\n    $('.ckeditor').each(function(){\n      CKEDITOR.replace($(this).prop('id'), {\n        allowedContent:true, // Need this to allow attributes on elements\n        toolbar: [\n          {\n            name: 'basicstyles',\n            groups: ['basicstyles', 'cleanup'],\n            items: ['Bold', 'Italic', 'RemoveFormat']\n          },\n          {\n            name: 'link',\n            groups: ['basicstyles', 'cleanup'],\n            items: ['Link', 'Unlink']\n          },\n          {\n            name: 'paragraph',\n            groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n            items: ['NumberedList', 'BulletedList', 'Cut', 'Copy', 'Paste']\n          },\n        ]\n      });\n    })\n  }\n\n\n  removeSelected(e) {\n    var item = e.currentTarget\n    this.clearTooltips()\n    document.getElementById(item.dataset.id).remove()\n\n    // Check if we have any field sets in the parent div\n    if(document.getElementById(item.dataset.parent) && document.getElementById(item.dataset.parent).children.length == 0) {\n      document.getElementById(item.dataset.parent).parentNode.classList.add('hidden')\n      \n      if(item.dataset.parent == 'hide-cta-pages-items') {\n        document.getElementById('add_exclusion_where').classList.remove('hidden')\n      }\n\n      if(item.dataset.parent == 'hide-cta-users-items') {\n        document.getElementById('add_exclusion_who').classList.remove('hidden')\n      }\n    }\n    \n  }\n\n\n  searchCustomer(e) {\n    const controllerRef = this\n    var item = e.currentTarget\n\n    clearTimeout(customerTimeout)\n    customerTimeout = setTimeout(function() {\n      if(item.value.length > 3){\n        document.getElementById(\"offering_customer_spinner\").classList.remove('hidden')\n        $.ajax({\n          url: \"/offerings/search_customer\",\n          method: \"POST\",\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          data: { name: item.value },\n          success: function (data) {\n            if(data.status == 200)\n            { \n              console.log(data.customers)\n              document.getElementById(\"offering_customer_spinner\").classList.add('hidden')\n              document.getElementById(\"offering_customer_list\").classList.remove('hidden')\n              document.getElementById(\"offering_customer_list\").innerHTML = controllerRef.buildCustomerList(data.customers)\n            }\n            else\n            {\n              document.getElementById(\"offering_customer_spinner\").classList.add('hidden')\n            }\n          }\n        })\n      }\n    }, 500)\n\n  }\n\n  searchCustomerSubAccount(e) {\n    const controllerRef = this\n    var item = e.currentTarget\n\n    clearTimeout(customerSubAccountTimeout)\n    customerSubAccountTimeout = setTimeout(function() {\n      if(item.value.length > 3){\n        document.getElementById(\"offering_customer_sub_account_spinner\").classList.remove('hidden')\n        $.ajax({\n          url: \"/offerings/search_customer_sub_account\",\n          method: \"POST\",\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          data: { name: item.value },\n          success: function (data) {\n            if(data.status == 200)\n            { \n              document.getElementById(\"offering_customer_sub_account_spinner\").classList.add('hidden')\n              document.getElementById(\"offering_customer_sub_account_list\").classList.remove('hidden')\n              document.getElementById(\"offering_customer_sub_account_list\").innerHTML = controllerRef.buildCustomerSubAccountList(data.customers)\n            }\n            else\n            {\n              document.getElementById(\"offering_customer_sub_account_spinner\").classList.add('hidden')\n            }\n          }\n        })\n      }\n    }, 500)\n  }\n\n  searchUser(e) {\n    const controllerRef = this\n    var item = e.currentTarget\n\n    clearTimeout(userTimeout)\n    userTimeout = setTimeout(function() {\n      if(item.value.length > 3){\n        document.getElementById(\"offering_user_spinner\").classList.remove('hidden')\n        $.ajax({\n          url: \"/offerings/search_user\",\n          method: \"POST\",\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          data: { name: item.value },\n          success: function (data) {\n            if(data.status == 200)\n            { \n              document.getElementById(\"offering_user_spinner\").classList.add('hidden')\n              document.getElementById(\"offering_user_list\").classList.remove('hidden')\n              document.getElementById(\"offering_user_list\").innerHTML = controllerRef.buildUserList(data.users)\n            }\n            else\n            {\n              document.getElementById(\"offering_user_spinner\").classList.add('hidden')\n            }\n          }\n        })\n      }\n    }, 500)\n  }\n\n  showElementTargetConnected(e){\n    // https://discuss.hotwired.dev/t/how-to-call-stimulus-function-in-turbo-stream-response/5594\n    // Gets loaded from _add_where_form.html.erb inside of add_where_excluded.turbo_stream.erb\n    if(document.getElementById(e.dataset.id).classList.contains('hidden')){\n      document.getElementById(e.dataset.id).classList.remove('hidden')\n\n      // Remove Add Exclusion Rule for \"where\" area\n      if(e.dataset.id == 'hide-cta-pages-items-holder') {\n        document.getElementById('add_exclusion_where').classList.add('hidden')\n      }\n\n      // Remove Add Exclusion Rule for \"who\" area\n       if(e.dataset.id == 'hide-cta-users-items-holder') {\n        document.getElementById('add_exclusion_who').classList.add('hidden')\n      }\n    }\n  }\n\n  toggleActive(e) {\n    const controllerRef = this \n\n    e.preventDefault()\n    var item = e.currentTarget\n    if(item.dataset.status == 'false') {\n      var label = \"active\"\n      var kind = true\n    } else {\n      var label = \"inactive\"\n      var kind = false\n    }\n\n    var location = item.dataset.location\n    var text = ''\n\n    var ans = confirm('Are you sure you want to make this offering ' + label + '?')\n    if(ans){\n      $.ajax({\n        type: \"PATCH\",\n        url: item.href,\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        data: { active: kind },\n        success: function (data) {\n          if(data.status == 200)\n          { \n            controllerRef.clearTooltips();\n            if(kind == false){\n              // Returned item is inactive\n              if(location == 'edit') {\n                text = ' Inactive'\n              }\n              \n              document.getElementById(\"active_\" + item.dataset.id).innerHTML = '<a data-status=\"false\" data-id=\"'+ item.dataset.id +'\" data-location=\"' + location + '\" data-action=\"click->offerings#toggleActive\" data-bs-toggle=\"tooltip\" data-bs-title=\"Make Offering Active\" href=\"/offerings/' + item.dataset.id + '/toggle_active\"><em class=\"fa fa-eye-slash\"></em>' + text + '</a>'\n            } else if(kind == true) {\n              // Returned item is active\n              if(location == 'edit') {\n                text = ' Active'\n              }\n\n              document.getElementById(\"active_\" + item.dataset.id).innerHTML = '<a data-status=\"true\" data-id=\"'+ item.dataset.id +'\" data-location=\"' + location + '\" data-action=\"click->offerings#toggleActive\" data-bs-toggle=\"tooltip\" data-bs-title=\"Make Offering Inactive\" href=\"/offerings/' + item.dataset.id + '/toggle_active\"><em class=\"fa fa-eye\"></em>' + text + '</a>'\n            }\n            window.initTooltips()\n          }\n          else\n          {\n            alert(\"Error saving. Please try again.\");\n          }\n        }\n      }); \n    }\n  }\n\n  toggleElapsedTime(e) {\n    var item = e.currentTarget.firstChild\n\n    if(item.classList.contains('fa-toggle-off')){\n      item.classList.remove('fa-toggle-off', 'text-black-50')\n      item.classList.add('fa-toggle-on', 'text-info')\n      document.getElementById('time-elapsed-container').classList.remove('hidden')\n      document.getElementById('settings_shown_elapsed_time').value = 7\n    } else if(item.classList.contains('fa-toggle-on')) {\n      item.classList.remove('fa-toggle-on', 'text-info')\n      item.classList.add('fa-toggle-off', 'text-black-50')\n      document.getElementById('time-elapsed-container').classList.add('hidden')\n      document.getElementById('settings_shown_elapsed_time').value = \"\"\n    }\n  }\n\n  toggleShowFrequency(e) {\n    var item = e.currentTarget\n\n    if(item.value == 'set_time') {\n      document.getElementById('show_period').classList.remove('d-none')\n    } else if(item.value == 'none') {\n      document.getElementById('show_period').classList.add('d-none')\n    }\n  }\n\n  toggleWhereIs(e) {\n    var item = e.currentTarget\n\n    if(item.value == \"is\") {\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_select\").classList.remove('hidden')\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_select\").disabled = false\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_text\").classList.add('hidden')\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_text\").disabled = true\n    } else if(item.value == \"contains\") {\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_text\").classList.remove('hidden')\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_text\").disabled = false\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_select\").classList.add('hidden')\n      document.getElementById(\"offering_\" + item.dataset.name + \"_where_add_action_select\").disabled = true\n    }\n  }\n\n  turboStream({currentTarget}) {\n    // Use this to send a GET request as TURBO_STREAM. Usually reserved for form submissions.\n    // We use this to load the additional fields on where / who sees the CTA\n    get(currentTarget.dataset.url, {\n      responseKind: \"turbo-stream\",\n    })\n  }\n\n  updateImage(e) {\n    var item = e.currentTarget\n    const [file] = item.files\n    if(file){\n      const image = new Image()\n      image.src = URL.createObjectURL(file)\n      document.getElementById('ad_image_holder').innerHTML = \"\"\n      document.getElementById('ad_image_holder').classList.remove('image-sample')\n      document.getElementById('ad_image_holder').classList.remove('rounded')\n      document.getElementById('ad_image_holder').appendChild(image)\n    }\n  }\n\n  updateLink(e) {\n    var item = e.currentTarget\n    const items = item.dataset.item.split(' ')\n    items.forEach(id => {\n      if(document.getElementById(id)) { \n        document.getElementById(id).href = item.value\n      }\n    })\n  }\n\n  updateContent(e) {\n    var item = e.currentTarget\n    document.getElementById(item.dataset.item).innerHTML = item.value\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport CustomerSubAccountSearchController from './customer_sub_account_search_controller.js'\n\n// Connects to data-controller=\"organization-quick-search\"\nexport default class extends CustomerSubAccountSearchController {\n  connect() {\n    document.account_search_input_id = \"organization-quick-search-input\";\n  }\n  refreshSearch(event){\n    let curval = $(\"#organization-quick-search-input\").val();\n    if(curval != \"\")\n    {\n      $(\"#recent-customers .list-group-links\").slideUp('fast');\n      $(\"#organization-search-holder .list-group-links\").slideDown('fast');\n    }\n    else\n    {\n      $(\"#organization-search-holder .list-group-links\").slideUp('fast');\n      $(\"#recent-customers .list-group-links\").slideDown('fast');\n    }\n    super.refreshSearch(event);\n  }\n  searchInputBlur(event){\n    if($(\"#organization-quick-search-container\").data(\"hover_active\") != \"yes\")\n    {\n      $(\"#recent-customers .list-group-links\").slideUp('fast');\n    }\n  }\n  searchInputFocus(event){\n    var curval = $(\"#organization-quick-search-input\").val();\n    if(curval == \"\")\n    {\n      $(\"#recent-customers .list-group-links\").slideDown('fast');\n    }\n    else\n    {\n      $(\"#recent-customers .list-group-links\").hide();\n    }\n  }\n  hoverOver(event){\n    console.log(\"hoverOver\");\n    var curval = $(\"#organization-quick-search-input\").val();\n    if(curval == \"\")\n    {\n      $(\"#recent-customers .list-group-links\").slideDown('fast');\n    }\n    else\n    {\n      $(\"#recent-customers .list-group-links\").hide();\n    }\n    $(\"#organization-quick-search-container\").data(\"hover_active\",\"yes\");\n  }\n  hoverOut(event){\n    console.log(\"hoverOut\");\n    if(!$(\"#organization-quick-search-input\").is(\":focus\"))\n    {\n      $(\"#recent-customers .list-group-links\").slideUp('fast');\n    }\n    $(\"#organization-quick-search-container\").data(\"hover_active\",\"no\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"organizations\"\nexport default class extends Controller {\n  \n  connect() {\n    this.initializeSelect2(\"select.select2\", {})\n\n\n    $('#customer_sub_account_id').on('select2:select select2:unselect', function(e){\n      if($(\"#selected_sub_accounts\").length){\n        $(\"#selected_sub_accounts\").html('')\n\n        $('#hide_option_button').attr(\"disabled\", \"disabled\");\n\n        $('#customer_sub_account_id').find(':selected').each(function(index, item){\n          $(\"#selected_sub_accounts\").append(\"<li>\" + item.text + \"</li>\")\n          $('#hide_option_button').removeAttr(\"disabled\");\n        })\n      }\n    });\n\n    $('#customer_id').on('select2:select', function(e){\n      $('#sub_account_select2').addClass(\"hidden\")\n      $('#customer_sub_account_id').html('')\n      $(\"#selected_sub_accounts\").html('')\n\n      $.ajax({\n        url: \"/customers/\" + e.target.value + \"/get_customer_sub_accounts\",\n        type: \"GET\",\n        success: function(e) {\n          if(e.status == 200) {\n            $('#sub_account_select2').removeClass(\"hidden\")\n            var data = ''\n            $(e.accounts).each(function(index, item){\n              data += '<option value=\"\">' + item.name + ' (' + item.group_content + ')</option>';\n            })\n            \n            $('#customer_sub_account_id').html(data);\n          }\n        }\n      })\n    })\n  }\n\n  clearEmail(event) {\n    $('#email_invalid').addClass(\"hidden\");\n    $('#hide_option_button').removeAttr(\"disabled\");\n  }\n\n  editOrganization(event) {\n    event.preventDefault()\n\n    \n  }\n\n  hideOptions(event) {\n    event.preventDefault();\n\n    if($(\"#user_account_email\").val() != ''){\n      // validate email here\n      $('#hide_option_button').attr(\"disabled\", \"disabled\");\n      $.ajax({\n        url: \"/users/check_email_avail\",\n        type: \"POST\",\n        data: { email: $(\"#user_account_email\").val() },\n        success: function(e){\n          console.log(e)\n          if(e.available == \"no\") {\n            $('#email_invalid').removeClass(\"hidden\");\n        \n          }\n          else {\n            $('#email_invalid').addClass(\"hidden\");\n            $('#show_option_button').removeAttr(\"disabled\");\n\n            $(\"#confirm_conversion_button\").removeClass('hidden');\n            $(\"#upgrade_customer_message\").removeClass('hidden');\n\n            $(\"#hide_option_button\").addClass(\"hidden\");\n            $(\"#upgrade_customer_holder\").addClass(\"hidden\");\n          }\n        }\n      });\n    } else {\n      $(\"#show_option_button\").removeClass('hidden');\n      $(\"#confirm_conversion_button\").removeClass('hidden');\n      $(\"#upgrade_customer_message\").removeClass('hidden');\n\n      $(\"#hide_option_button\").addClass(\"hidden\");\n      $(\"#upgrade_customer_holder\").addClass(\"hidden\");\n    }\n  }\n\n  initializeSelect2(selector, options) {\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n  \n  selectCustomerList(event) {\n    event.preventDefault()\n    var item = event.target\n\n    $('#customer-list').html('<tr><td colspan=\"3\"><p class=\"text-center p-5\"><em class=\"fal fa-spin fa-circle-notch fa-3x\"></em></td></tr>')\n\n    $.ajax({\n      url: \"/organizations/select_organizations_by_kind\",\n      data: { kind: item.value },\n      type: \"GET\",\n      success: function(e) {\n        if(e.status == 200) {\n          $('#customer-list').html(e.data);\n        }\n      }\n    })\n  }\n\n  showDeleteButton(event) {\n    if($(\"#delete_user_button\").attr('disabled')){\n      $(\"#delete_user_button\").removeAttr('disabled');\n    } else {\n      $(\"#delete_user_button\").attr('disabled', 'disabled')\n    }\n  }\n\n  showOptions(event) {\n    event.preventDefault();\n\n    $(\"#show_option_button\").addClass('hidden');\n    $(\"#confirm_conversion_button\").addClass('hidden');\n    $(\"#upgrade_customer_message\").addClass('hidden');\n\n    $(\"#hide_option_button\").removeClass(\"hidden\");\n    $(\"#upgrade_customer_holder\").removeClass(\"hidden\");\n  }\n\n  // verifyEmail(event) {\n  //   event.preventDefault\n  //   var item = event.target\n\n  //   $.ajax({\n  //     url:\n  //   });\n  // }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"participants\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  cancelParticipantsUpdate(event) {\n    event.preventDefault()\n    $(\"#number_participants_display_div\").show()\n    $(\"#number_participants_change_div\").hide()\n  }\n\n  changeParticipants(event) {\n    event.preventDefault()\n    $(\"#number_participants_display_div\").hide()\n    $(\"#number_participants_change_div\").show()\n  }\n\n  clean_invite_code(event) {\n    let input = event.currentTarget;\n    input.value = clean_invite_code_string(input.value);\n    if (input.value != '') {\n      $(\"#custom_invitation_code\").removeClass(\"is-invalid\");\n      $(\"#custom_invitation_code_error\").html(\"\").hide();\n    }\n    if (document.getElementById('custom_url') && document.getElementById('custom_url').value == '') {\n      document.getElementById('custom_url').value = slugify_string(input.value);\n      if (document.getElementById('custom_url').value != '') {\n        $(\"#custom_url\").removeClass(\"is-invalid\");\n        $(\"#custom_url_error\").html(\"\").hide();\n      }\n    }\n  }\n\n  clean_url_path(event) {\n    let input = event.currentTarget;\n    input.value = slugify_string(input.value);\n    if (input.value != '') {\n      $(\"#custom_url\").removeClass(\"is-invalid\");\n      $(\"#custom_url_error\").html(\"\").hide();\n    }\n  }\n\n  clipboardHTML(event) {\n    var item = event.currentTarget\n    var html_content = $(\"#invite_email_content_input\").val();\n\n    var copy_success = copy_to_clipboard(html_content);\n    $(item).blur();\n    if(copy_success) {\n      $(\"#copy_msg_example_email_body_all\").show().delay(5000).fadeOut('fast');\n    } else {\n      $('#copy_error_msg_example_email_body_all').show().delay(5000).fadeOut('fast');\n    }\n  }\n\n  copySignupUrl(event) {\n    var item = event.currentTarget\n    var html_content = $(\"#signup_url\").html();\n    if ($(item).data(\"linktarget\")) {\n      html_content = $(\"#\"+$(item).data(\"linktarget\")).html();\n    }\n\n    var copy_success = copy_to_clipboard(html_content);\n    $(item).blur();\n    if(copy_success) {\n      $(\"#signup_url_success\").show().delay(5000).fadeOut('fast');\n    }\n  }\n\n  saveParticipants(event) {\n    $(\"#number_participants_display_div\").show()\n    $(\"#number_participants_change_div\").hide()\n    $(\"#participation_out_of_display\").html( $(\"#customer_sub_account_participation_outof\").val())\n  }\n\n  save_customize_invite_code_and_url(event) {\n    // Reset\n    $(\"#custom_invitation_code\").removeClass(\"is-invalid\");\n    $(\"#custom_url\").removeClass(\"is-invalid\");\n    $(\"#custom_invitation_code_error\").html(\"\").hide();\n    $(\"#custom_url_error\").html(\"\").hide();\n    // Submit for processing\n    let invite_code = $(\"#custom_invitation_code\").val();\n    let custom_url = $(\"#custom_url\").val();\n    let error = false;\n    if (invite_code == \"\" ) {\n      $(\"#custom_invitation_code\").addClass(\"is-invalid\");\n      error = true;\n      $(\"#custom_invitation_code_error\").html(i18n_string(\"general.this_field_is_required\",\"This field is required\")).show();\n    }\n    if (custom_url == \"\") {\n      $(\"#custom_url\").addClass(\"is-invalid\");\n      error = true;\n      $(\"#custom_url_error\").html(i18n_string(\"general.this_field_is_required\",\"This field is required\")).show();\n    }\n    if (error == false) {\n      $.ajax({\n        headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n        url: '/participants/customize_invite_code',\n        data: {invite_code: invite_code, custom_url: custom_url},\n        type: 'POST',\n        success: function (data) {\n          if (data) {\n            if (data.invite_code_status && data.custom_url_status) {\n              // Everything is good -- refresh page\n              document.location = '/participants?tab=invitation_code';\n            } else if (data.invite_code_status) {\n              // First field is ok, but url is not\n              $(\"#custom_invitation_code\").removeClass(\"is-invalid\");\n              $(\"#custom_invitation_code_error\").html(\"\").hide();\n              $(\"#custom_url\").addClass(\"is-invalid\");\n              // Make invite_code field read-only\n              $(\"#custom_invitation_code\").prop('readonly','readonly');\n            }\n            // Get errors - display\n            if (data.invite_code_error) {\n              $(\"#custom_invitation_code\").addClass(\"is-invalid\");\n              $(\"#custom_invitation_code_error\").html(data.invite_code_error).show();\n            }\n            if (data.custom_url_error) {\n              $(\"#custom_url\").addClass(\"is-invalid\");\n              $(\"#custom_url_error\").html(data.custom_url_error).show();\n            }\n          }\n          // {invite_code_status: false, custom_url_status: false, invite_code_error: '', custom_url_error: ''}\n        }\n      });\n    } else {\n\n    }\n  }\n\n  send_test_invite_email(event) {\n    event.preventDefault();\n    let email = $(\"#send-test-invite-email-input\").val();\n    if (email && email.indexOf(\"@\") != -1) {\n      $.ajax({\n        headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n        url: '/participants/send_test_invite_email',\n        data: {email: email},\n        type: 'POST',\n        success: function (data) {\n          if (data && data.message) {\n            alert(data.message);\n          }\n        }\n      });\n    }\n  }\n\n  show_invite_upload_form(event) {\n    event.preventDefault();\n    let form_element = document.getElementById(\"invite_multiple_users_form\");\n    if (form_element) {\n      form_element.style.display = '';\n    }\n  }\n\n  submit_invite_multiple_users(event) {\n    let submit_button = document.getElementById(\"send-invite-emails\");\n    if (!submit_button.disabled) {\n      submit_button.disabled = true;\n      let file_input = document.getElementById(\"file\");\n      if (file_input && file_input.value != \"\") {\n        document.getElementById(\"submit-spinner\").style.display = '';\n        return true;\n      } else {\n        submit_button.disabled = false;\n        event.preventDefault();\n        return false;\n      }\n    }\n    event.preventDefault();\n    return false;\n  }\n\n  toggleMultiSmsInvite(event) {\n    if(event.target.checked == true) {\n      $(\"#send_sms_invite_btn_multi\").prop(\"disabled\", false);\n    } else {\n      $(\"#send_sms_invite_btn_multi\").prop(\"disabled\", true);\n    }\n  }\n\n  toggleSmsCountry(event) {\n    if(event.target.checked == true) {\n      $(\"#sms_upload_set_country_div\").show();\n    } else {\n      $(\"#sms_upload_set_country_div\").hide();\n    }\n  }\n\n  toggleSmsInvite(event) {\n    if(event.target.checked == true) {\n      $(\"#send_sms_invite_btn\").prop(\"disabled\", false);\n    } else {\n      $(\"#send_sms_invite_btn\").prop(\"disabled\", true);\n    }\n  }\n\n  validateRemoval(event) {\n    var ans = confirm(i18n_string(\"participants.are_you_sure_you_want_to_remove_this_test_account\",\"Are you sure you want to remove this test account?\"));\n    if(ans) {}\n    else {\n      event.preventDefault()\n    }\n  }\n  \n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"password\"\nexport default class extends Controller {\n  initialize() {\n    document.validatePasswordTimeout = undefined;\n    document.validatePasswordLastValue = '';\n    document.password_ok = false;\n    document.password_confirm_ok = false;\n    super.initialize();\n  }\n\n  connect() {\n    if ($(\"#user_reset_password_token\").length ){\n      setInterval((function(){\n        if (document.password_ok && document.password_confirm_ok) {\n          // Enable submit button\n          $(\".login-submit-button\").prop('disabled', false);\n        } else {\n          // Disable submit button\n          $(\".login-submit-button\").prop('disabled', true);\n        }\n      }), 200);\n    }\n  }\n\n  validate_password_change(e) {\n\n    // Reset Password Confirmation Fields\n    $('#user_password_confirmation').val('')\n    $(\"#password_confirm_valid\").addClass('hidden');\n    $(\"#password_confirm_fail\").addClass('hidden');\n\n    // console.log(e.currentTarget.value);\n    if (document.validatePasswordTimeout && document.validatePasswordLastValue != e.currentTarget.value) {\n      clearTimeout(document.validatePasswordTimeout);\n    }\n    if (document.validatePasswordLastValue == e.currentTarget.value) {\n      return;\n    }\n    document.password_ok = false;\n    document.validatePasswordLastValue = e.currentTarget.value;\n    if (document.validatePasswordLastValue == \"\") {\n      //console.log(\"validatePasswordLastValue\")\n      $(\"#password_valid\").addClass('hidden');\n      $(\"#password_fail\").addClass('hidden');\n      $(\"#password_requirement_length em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n      if ($(\"#password_requirement_complex\").length) {\n        $(\"#password_requirement_complex em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n      }\n      // Clear requirements for new requirements\n      if ($(\"#password_requirement_number\").length) {\n        $(\"#password_requirement_number em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n      }\n      if ($(\"#password_requirement_case\").length) {\n        $(\"#password_requirement_case em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n      }\n      if ($(\"#password_requirement_special\").length) {\n        $(\"#password_requirement_special em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n      }\n      return;\n    }\n    if (document.validatePasswordLastValue.length < 8) {\n      //console.log(\"validatePasswordLastValue Length\")\n      $(\"#password_valid\").addClass('hidden');\n      $(\"#password_fail\").removeClass('hidden');\n      $(\"#password_requirement_length em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n      // Do not continue until password is >= 8 characters\n      return;\n    }\n    document.validatePasswordTimeout = setTimeout(async function(){\n      const request = new FetchRequest(\"post\", \"/sessions/validate_password\",\n          { responseKind: \"json\",\n                    body: {\n                      password: document.validatePasswordLastValue\n                  }});\n      const response = await request.perform();\n      // console.dir(response);\n      if (response.ok) {\n        // console.log(\"OK=\"+response.json);\n        // console.dir(response.json);\n        response.json.then(function(statusData){\n          // console.dir(statusData);\n          if (statusData.valid_password) {\n            document.password_ok = true;\n            $(\"#password_fail\").addClass('hidden');\n            $(\"#password_valid\").removeClass('hidden');\n            // Fire event to check validation for confirmation box --> do this to validate for passwords created/filled in by browsers or password managers\n            var user_password_field_event = new Event('change', {\n              bubbles: true,\n              cancelable: true,\n            });\n            var user_password_confirm_field = document.getElementById(\"user_password_confirmation\");\n            if (user_password_confirm_field) {\n              user_password_confirm_field.dispatchEvent(user_password_field_event);\n            }\n          } else {\n            $(\"#password_valid\").addClass('hidden');\n            $(\"#password_fail\").removeClass('hidden');\n          }\n          if (statusData.valid_length) {\n            $(\"#password_requirement_length em\").removeClass(\"fa-times text-danger\").addClass(\"fa-check text-success\");\n          } else {\n            $(\"#password_requirement_length em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n          }\n          if ($(\"#password_requirement_complex\").length) {\n            if (statusData.not_common) {\n              $(\"#password_requirement_complex em\").removeClass(\"fa-times text-danger\").addClass(\"fa-check text-success\");\n            } else {\n              $(\"#password_requirement_complex em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n            }\n          }\n          // Handle other requirements::: valid_number: false, valid_case: false, valid_special: false\n          if ($(\"#password_requirement_number\").length) {\n            if (statusData.valid_number) {\n              $(\"#password_requirement_number em\").removeClass(\"fa-times text-danger\").addClass(\"fa-check text-success\");\n            } else {\n              $(\"#password_requirement_number em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n            }\n          }\n          if ($(\"#password_requirement_case\").length) {\n            if (statusData.valid_case) {\n              $(\"#password_requirement_case em\").removeClass(\"fa-times text-danger\").addClass(\"fa-check text-success\");\n            } else {\n              $(\"#password_requirement_case em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n            }\n          }\n          if ($(\"#password_requirement_special\").length) {\n            if (statusData.valid_special) {\n              $(\"#password_requirement_special em\").removeClass(\"fa-times text-danger\").addClass(\"fa-check text-success\");\n            } else {\n              $(\"#password_requirement_special em\").removeClass(\"fa-check text-success\").addClass(\"fa-times text-danger\");\n            }\n          }\n\n        });\n\n      }\n    }, 250);\n\n  }\n  validate_confirm_password_change(e) {\n    const current_confirm_value = e.currentTarget.value;\n    document.password_confirm_ok = false;\n    if (current_confirm_value.length > 0 && $('#password_fail').hasClass('hidden') && !$('#password_valid').hasClass('hidden')) {\n      if ($(\"#user_password\").val() == current_confirm_value) {\n        document.password_confirm_ok = true;\n        $(\"#password_confirm_fail\").addClass('hidden');\n        $(\"#password_confirm_valid\").removeClass('hidden');\n      } else {\n        $(\"#password_confirm_valid\").addClass('hidden');\n        $(\"#password_confirm_fail\").removeClass('hidden');\n      }\n// password_confirm_valid/password_confirm_fail\n    } else {\n      $(\"#password_confirm_valid\").addClass('hidden');\n      $(\"#password_confirm_fail\").addClass('hidden');\n    }\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"peer-reviewed-resources\"\nexport default class extends Controller {\n  connect() {\n    $('#system_modal_popup').attr('data-bs-focus', \"false\");\n\n    this.initializeCkEditor()\n  }\n\n  initializeCkEditor() {  \n\n    if($(\"#content\").length) {\n      var editor = CKEDITOR.instances.content;\n      var ckeditorInstance = CKEDITOR.replace(\"content\", {\n        height: '300px',\n        toolbar: [\n          {\n            name: 'basicstyles',\n            groups: ['basicstyles', 'cleanup'],\n            items: ['Source', '-', 'Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat']\n          },\n          {\n            name: 'paragraph',\n            groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n            items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'Link', 'Unlink']\n          },\n          {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n          {name: 'colors', items: ['TextColor', 'BGColor']}\n        ]\n      });\n      \n      // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n      /* Here we are latching on an event ... in this case, the dialog open event */\n      CKEDITOR.on('dialogDefinition', function(ev) {\n        try {\n          /* this just gets the name of the dialog */\n    \n          var dialogName = ev.data.name;\n          /* this just gets the contents of the opened dialog */\n    \n          var dialogDefinition = ev.data.definition;\n          /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n          if(dialogName == 'link') {\n            \n            /* Getting the contents of the Target tab */\n            var informationTab = dialogDefinition.getContents('target');\n          \n            /* Getting the contents of the dropdown field \"Target\" so we can set it */\n            var targetField = informationTab.get('linkTargetType');\n          \n            /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n            targetField['default'] = '_blank';\n          \n          }\n        } catch(exception) {\n          alert('Error ' + ev.message);\n        }\n      });\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport intlTelInput from \"../../../public/js/intl_tel/intlTelInput.min\"\n\n// Connects to data-controller=\"phone-input\"\n// Do not attach controller to input itself instead the IntlTelInput script duplicate that input field.\n// Usage:\n// <div data-controller\"phone-input\">\n//   <input data-phone-input-target=\"input\" name=\"sms_phone\" data-hidden-field=\"user[sms_full_phone]\" />\n// </div>\nexport default class extends Controller {\n  static targets = [ \"input\" ]\n  initialize() {\n    // This is called once per controller\n    document.intlTelInputObject = undefined;\n    document.intlTelInputSkipAutoFocus = false;\n    if ($(\"#country\").length) {\n      $(\"#country\").on(\"change\", function (e) {\n        var countryCode = $(this).val();\n        if (countryCode && intlTelInputObject) {\n          $(\"#user_sms_phone\").intlTelInput('setCountry', countryCode.toLowerCase());\n        }\n      });\n    }\n  }\n  connect() {\n    if (this.hasInputTarget) {\n      let hiddenFieldName = this.inputTarget.dataset.hiddenField ?? this.inputTarget.dataset.hidden_field;\n      this.setupIntlTelInput(this.inputTarget, hiddenFieldName, document.default_country);\n    }\n  }\n\n  setupIntlTelInput(inputElement, hiddenFieldName)\n  {\n    var utilsLocation = \"\";\n    if (document.wbi_cdn_path) {\n      utilsLocation = document.wbi_cdn_path;\n    }\n    \n    // Check if we have a default country set in the sub account.\n    if(document.getElementById('default_country')) {\n      var initalCountryCode = document.getElementById('default_country').value;\n    } else {\n      var initalCountryCode = \"us\";\n    }\n    \n    var have_tel_country = getCookie(\"login_tel_country\");\n    if(arguments.length > 2 && arguments[2] && arguments[2].length == 2)\n    {\n      initalCountryCode = arguments[2];\n    }\n    else if(have_tel_country && have_tel_country.length == 2)\n    {\n      initalCountryCode = have_tel_country;\n    }\n    document.intlTelInputObject = $(inputElement).intlTelInput({\n      initialCountry: initalCountryCode,\n      separateDialCode: true,\n      preferredCountries: [\"us\", \"ca\", \"gb\"],\n      utilsScript: utilsLocation+\"/js/intl_tel/utils.js\",\n      hiddenInput: hiddenFieldName\n    }).done(function(){\n      var mask1 = $(inputElement).attr('placeholder');\n      //console.log(\"MASK placeholderL: \"+mask1);\n      if(mask1)\n      {\n        mask1 = mask1.replace(/[0-9]/g, 9);\n        mask1 = mask1.replace(/_/g, \"9\");\n        // phone number masking causing issues for AU/NZ - disabling for now --\n        if (initalCountryCode == \"us\")\n        {\n          $(inputElement).mask(mask1);\n        }\n        else\n        {\n          $(inputElement).unmask();\n        }\n        // Update placeholder\n        var placeHolder = mask1.replace(/[0-9]/g, \"_\");\n        $(inputElement).attr('placeholder',placeHolder);\n      }\n    });\n    $(inputElement).on(\"countrychange\", function (e, countryData) {\n      if(countryData && countryData.iso2) {\n        setCookie(\"login_tel_country\", countryData.iso2, 365);\n      }\n      var mask1 = $(inputElement).attr('placeholder');\n      //console.log(\"MASK placeholderL: \"+mask1);\n      if(mask1)\n      {\n        mask1 = mask1.replace(/[0-9]/g, 9);\n        mask1 = mask1.replace(/_/g, \"9\");\n        // phone number masking causing issues for AU/NZ - disabling for now\n        if (countryData.iso2 == \"us\")\n        {\n          $(inputElement).mask(mask1);\n        }\n        else\n        {\n          $(inputElement).unmask();\n          setTimeout(function(){\n            var currentVal = $(inputElement).val();\n            if  (currentVal.indexOf(\"_\") > -1) {\n              // Clear this -- left over from masking probably\n              $(inputElement).val(\"\");\n            }\n            var placeHolder = mask1.replace(/[0-9]/g, \"_\");\n            $(inputElement).attr('placeholder',placeHolder);\n          }, 50);\n        }\n        // Update placeholder\n        var placeHolder = mask1.replace(/[0-9]/g, \"_\");\n        //console.log(\"placeHolder=\"+placeHolder);\n        $(inputElement).attr('placeholder',placeHolder);\n        if (intlTelInputSkipAutoFocus){\n          intlTelInputSkipAutoFocus = false;\n        } else {\n          $(inputElement).blur().focus();\n        }\n      }\n    });\n    $(inputElement).on(\"keyup change\", function (e) {\n      if ($(this).val() == \"\") {\n        var currentPlaceholder = $(inputElement).attr('placeholder');\n        if (currentPlaceholder.match(/[0-9]/g)) {\n          var newPlaceHolder = currentPlaceholder.replace(/[0-9]/g, \"_\");\n          $(inputElement).attr('placeholder',newPlaceHolder);\n        }\n      }\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"plans\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  deletePlan(event) {\n    var item = event.target\n\n    if(item.checked) {\n      $('#delete_holder_' + item.dataset.id).removeClass(\"hidden\");\n\n      if(item.dataset.total > 0) {\n        $(\"#save_plan_\" + item.dataset.id).attr('disabled', 'disabled');\n      }\n    } else {\n      $('#delete_holder_' + item.dataset.id).addClass(\"hidden\");\n      $(\"#save_plan_\" + item.dataset.id).removeAttr('disabled');\n      $(\"#select_plan_\" + item.dataset.id).prop('selectedIndex', 0);\n    }\n  }\n\n  selectNewPlan(event) {\n    var item = event.target\n    if(item.value != '') {\n      $(\"#save_plan_\" + item.dataset.id).removeAttr('disabled');\n    } else {\n      $(\"#save_plan_\" + item.dataset.id).attr('disabled', 'disabled');\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Shows a one-time Bootstrap 5 popover hint on an element.\n// The server decides whether to render the data-controller attribute\n// (via show_tooltip_notice). On dismiss, fires a GET to persist it.\n//\n// Usage:\n// - app/views/campaigns/wizard/participant_account_questions.html.erb\n//\n// HTML example:\n//   <div data-controller=\"popover-hint\"\n//        data-popover-hint-dismiss-url-value=\"/dismiss-notice?tip=my_key\"\n//        data-popover-hint-title-value=\"Tip\"\n//        data-popover-hint-content-value=\"Some helpful text\"\n//        data-popover-hint-placement-value=\"bottom\">\n//\nexport default class extends Controller {\n  static values = {\n    dismissUrl: String,\n    title: { type: String, default: \"\" },\n    content: String,\n    placement: { type: String, default: \"bottom\" }\n  }\n\n  connect() {\n    // Small delay so the page finishes rendering first\n    this.timeout = setTimeout(() => {\n      this.popover = new bootstrap.Popover(this.element, {\n        title: this.titleValue,\n        content: this.contentValue,\n        placement: this.placementValue,\n        html: true,\n        trigger: \"manual\",\n        template: '<div class=\"popover\" role=\"tooltip\" style=\"max-width:300px;\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'\n        //customClass: \"popover-hint\"\n      })\n\n      this.popover.show()\n\n      // Dismiss on click anywhere\n      this.dismissHandler = () => { this.dismiss() }\n      document.addEventListener(\"click\", this.dismissHandler, { once: true })\n    }, 800)\n  }\n\n  dismiss() {\n    if (this.popover) {\n      this.popover.dispose()\n      this.popover = null\n    }\n\n    // Persist the dismissal server-side\n    if (this.hasDismissUrlValue) {\n      fetch(this.dismissUrlValue, {\n        headers: { \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]')?.content }\n      })\n    }\n  }\n\n  disconnect() {\n    if (this.timeout) clearTimeout(this.timeout)\n    if (this.dismissHandler) {\n      document.removeEventListener(\"click\", this.dismissHandler)\n    }\n    if (this.popover) {\n      this.popover.dispose()\n      this.popover = null\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"prevent-default\"\n//\n// Prevents default browser behavior on events (form submissions, link clicks, etc.).\n//\n// Usage:\n//   <a href=\"#\" data-action=\"click->prevent-default#prevent\">...</a>\n//   <form data-action=\"submit->prevent-default#prevent\">...</form>\nexport default class extends Controller {\n  prevent(event) {\n    event.preventDefault()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Priority Groups dashboard controller.\n//\n// Manages the settings panel UI for the Priority Groups (hotspot) dashboard:\n// expanding/collapsing the edit panel, switching between Campaign and Custom\n// settings sources, fetching campaign settings via AJAX to populate a preview,\n// validating and saving tier (grouping question) selections from a modal,\n// keeping the threshold slider readout in sync, and resetting the form to\n// defaults.\n//\n// Used by the following views:\n//   - app/views/dashboard/priority_groups.html.erb\n//       Full dashboard with both Campaign and Custom settings tabs and the\n//       tier selection modal.\n//   - app/views/campaigns/wizard/_priority_groups_content.html.erb\n//       Wrapper partial for the wizard's Results & Insights stage; reuses\n//       the dashboard table/modals (no edit panel here).\n//   - app/views/campaigns/wizard/_results_insights_settings.html.erb\n//       Wizard-scoped Hot Spot threshold/min-assessments/wellbeing-group\n//       form (campaign tier and feedback questions are locked).\n//\n// Connects to data-controller=\"priority-groups\"\nexport default class extends Controller {\n  static targets = [\n    \"settingsBody\",\n    \"settingsIcon\",\n    \"editPanel\",\n    \"campaignSettings\",\n    \"customSettings\",\n    \"settingsForm\",\n    \"campaignSelect\",\n    \"campaignPreview\",\n    \"previewTimeframe\",\n    \"previewTier1\",\n    \"previewTier2\",\n    \"previewFeedback\",\n    \"thresholdSlider\",\n    \"thresholdDisplay\",\n    \"settingsSourceCampaign\",\n    \"settingsSourceCustom\",\n    \"customStartDate\",\n    \"customEndDate\",\n    \"tier1EditBtn\",\n    \"tier2EditBtn\",\n    \"campaignTier1Hidden\",\n    \"campaignTier2Hidden\",\n    \"tierModal\",\n    \"modalTier1Select\",\n    \"modalTier2Select\"\n  ]\n\n  static values = {\n    settingsExpanded: { type: Boolean, default: true },\n    editPanelOpen: { type: Boolean, default: false },\n    // Reset defaults, emitted by the view from the server config\n    // (Rails.application.config.priority_groups_default_*) so the Reset button\n    // never drifts from the server-side defaults. Fallbacks match the current\n    // config values in case a view omits the attribute.\n    defaultThreshold: { type: Number, default: 40 },\n    defaultMinAssessments: { type: Number, default: 5 }\n  }\n\n  // Stimulus lifecycle: initializes panel state, tooltips, and the tab\n  // (Campaign vs Custom) based on what's already saved.\n  connect() {\n    // Settings panel starts expanded\n    this.settingsExpandedValue = true\n    this.editPanelOpenValue = false\n\n    // Initialize Bootstrap tooltips\n    this.initTooltips()\n\n    // Set initial tab based on saved settings\n    this.initializeTabState()\n  }\n\n  // Initialize Bootstrap tooltips\n  initTooltips() {\n    const tooltipTriggerList = this.element.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n    tooltipTriggerList.forEach(el => {\n      new bootstrap.Tooltip(el)\n    })\n  }\n\n  // Initialize tab state based on saved settings\n  initializeTabState() {\n    // The view already sets the checked state and display based on campaign_id\n    // This just ensures proper display state on connect\n    if (this.hasSettingsSourceCustomTarget && this.settingsSourceCustomTarget.checked) {\n      if (this.hasCampaignSettingsTarget) this.campaignSettingsTarget.style.display = 'none'\n      if (this.hasCustomSettingsTarget) this.customSettingsTarget.style.display = 'block'\n    }\n  }\n\n  // Toggle settings panel visibility (legacy - kept for compatibility)\n  toggleSettings(event) {\n    if (this.hasSettingsBodyTarget) {\n      this.settingsExpandedValue = !this.settingsExpandedValue\n\n      if (this.settingsExpandedValue) {\n        this.settingsBodyTarget.style.display = 'block'\n        if (this.hasSettingsIconTarget) {\n          this.settingsIconTarget.classList.remove('fa-chevron-up')\n          this.settingsIconTarget.classList.add('fa-chevron-down')\n        }\n      } else {\n        this.settingsBodyTarget.style.display = 'none'\n        if (this.hasSettingsIconTarget) {\n          this.settingsIconTarget.classList.remove('fa-chevron-down')\n          this.settingsIconTarget.classList.add('fa-chevron-up')\n        }\n      }\n    }\n  }\n\n  // Toggle edit panel visibility\n  toggleEditPanel(event) {\n    if (this.hasEditPanelTarget) {\n      this.editPanelOpenValue = !this.editPanelOpenValue\n      this.editPanelTarget.style.display = this.editPanelOpenValue ? 'block' : 'none'\n    }\n  }\n\n  // Toggle between Campaign and Custom settings source\n  toggleSettingsSource(event) {\n    const isCampaign = event.target.id === 'sourceCampaign'\n\n    if (this.hasCampaignSettingsTarget && this.hasCustomSettingsTarget) {\n      this.campaignSettingsTarget.style.display = isCampaign ? 'block' : 'none'\n      this.customSettingsTarget.style.display = isCampaign ? 'none' : 'block'\n    }\n  }\n\n  // Update threshold display when slider changes\n  updateThresholdDisplay(event) {\n    if (this.hasThresholdDisplayTarget) {\n      this.thresholdDisplayTarget.textContent = event.target.value\n    }\n  }\n\n  // Handle timeframe change in custom settings\n  onTimeframeChange(event) {\n    // Could be used to filter available feedback questions by date range\n    // For now, this is a placeholder for future enhancement\n  }\n\n  // Reset settings to defaults\n  resetSettings(event) {\n    event.preventDefault()\n\n    // Reset campaign select\n    if (this.hasCampaignSelectTarget) {\n      this.campaignSelectTarget.value = ''\n    }\n\n    // Reset shared Hot Spot Settings to the server-configured defaults.\n    if (this.hasThresholdSliderTarget) {\n      this.thresholdSliderTarget.value = this.defaultThresholdValue\n      if (this.hasThresholdDisplayTarget) this.thresholdDisplayTarget.textContent = String(this.defaultThresholdValue)\n    }\n\n    const minAssessmentsInput = this.element.querySelector('input[name=\"min_participants\"]')\n    if (minAssessmentsInput) {\n      minAssessmentsInput.value = this.defaultMinAssessmentsValue\n    }\n\n    // Reset wellbeing group to \"distressed_struggling\"\n    const wbGroupRadios = this.element.querySelectorAll('input[name=\"wellbeing_group\"]')\n    wbGroupRadios.forEach(radio => {\n      radio.checked = radio.value === 'distressed_struggling'\n    })\n\n    // Reset tier selects (Custom tab)\n    const tierSelects = this.element.querySelectorAll('select[name=\"tier1_question_id\"], select[name=\"tier2_question_id\"]')\n    tierSelects.forEach(select => {\n      select.selectedIndex = 0\n    })\n\n    // Reset hidden tier fields and modal selects\n    if (this.hasCampaignTier1HiddenTarget) {\n      this.campaignTier1HiddenTarget.value = ''\n    }\n    if (this.hasCampaignTier2HiddenTarget) {\n      this.campaignTier2HiddenTarget.value = ''\n    }\n    if (this.hasModalTier1SelectTarget) {\n      this.modalTier1SelectTarget.selectedIndex = 0\n    }\n    if (this.hasModalTier2SelectTarget) {\n      this.modalTier2SelectTarget.selectedIndex = 0\n    }\n\n    // Reset feedback questions checkboxes (Custom tab)\n    const feedbackCheckboxes = this.element.querySelectorAll('input[name=\"feedback_question_ids[]\"]')\n    feedbackCheckboxes.forEach(checkbox => {\n      checkbox.checked = false\n    })\n\n    // Reset dates to most recent full year (Custom tab)\n    const lastYear = new Date().getFullYear() - 1\n    if (this.hasCustomStartDateTarget) {\n      this.customStartDateTarget.value = `${lastYear}-01-01`\n    }\n    if (this.hasCustomEndDateTarget) {\n      this.customEndDateTarget.value = `${lastYear}-12-31`\n    }\n\n    // Clear campaign preview\n    this.clearCampaignPreview()\n\n    // Switch to Campaign tab\n    if (this.hasSettingsSourceCampaignTarget) {\n      this.settingsSourceCampaignTarget.checked = true\n      if (this.hasCampaignSettingsTarget) this.campaignSettingsTarget.style.display = 'block'\n      if (this.hasCustomSettingsTarget) this.customSettingsTarget.style.display = 'none'\n    }\n  }\n\n  // Fetch campaign settings when campaign is selected\n  async fetchCampaignSettings(event) {\n    const campaignId = event.target.value\n    if (!campaignId) {\n      this.clearCampaignPreview()\n      return\n    }\n\n    try {\n      const url = `/dashboard/priority-groups/campaign-settings/${campaignId}`\n      const response = await fetch(url, {\n        headers: {\n          'Accept': 'application/json',\n          'X-Requested-With': 'XMLHttpRequest'\n        }\n      })\n\n      if (!response.ok) {\n        throw new Error('Failed to fetch campaign settings')\n      }\n\n      const data = await response.json()\n      this.populateCampaignPreview(data)\n    } catch (error) {\n      console.error('Error fetching campaign settings:', error)\n      this.clearCampaignPreview()\n    }\n  }\n\n  // Populate the campaign preview with fetched data\n  populateCampaignPreview(data) {\n    if (this.hasPreviewTimeframeTarget) {\n      this.previewTimeframeTarget.textContent = `${data.start_date_display} - ${data.end_date_display}`\n    }\n    if (this.hasPreviewTier1Target) {\n      this.previewTier1Target.textContent = data.tier1_question_name || i18n_string(\"priority_groups.not_set\", \"Not set\")\n    }\n    if (this.hasPreviewTier2Target) {\n      this.previewTier2Target.textContent = data.tier2_question_name || i18n_string(\"general.none\", \"None\")\n    }\n    if (this.hasPreviewFeedbackTarget) {\n      // Build feedback questions as tags with tooltips\n      if (data.feedback_questions && data.feedback_questions.length > 0) {\n        const tagsHtml = data.feedback_questions.map(q => {\n          const truncated = q.name.length > 50 ? q.name.substring(0, 47) + '...' : q.name\n          return `<span class=\"feedback-question-tag\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"${this.escapeHtml(q.name)}\">${this.escapeHtml(truncated)}</span>`\n        }).join('')\n        this.previewFeedbackTarget.innerHTML = tagsHtml\n        // Re-initialize tooltips for the new elements\n        this.previewFeedbackTarget.querySelectorAll('[data-bs-toggle=\"tooltip\"]').forEach(el => {\n          new bootstrap.Tooltip(el)\n        })\n      } else {\n        this.previewFeedbackTarget.innerHTML = `<span class=\"text-muted\">${this.escapeHtml(i18n_string(\"priority_groups.none_configured\", \"None configured\"))}</span>`\n      }\n    }\n\n    // Show the preview section\n    if (this.hasCampaignPreviewTarget) {\n      this.campaignPreviewTarget.style.display = 'block'\n    }\n\n    // Store campaign tier data for determining edit button visibility\n    this.campaignHasTier1 = !!data.tier1_question_id\n    this.campaignHasTier2 = !!data.tier2_question_id\n\n    // Update hidden fields with campaign values (if campaign has them)\n    if (this.hasCampaignTier1HiddenTarget) {\n      this.campaignTier1HiddenTarget.value = data.tier1_question_id || ''\n    }\n    if (this.hasCampaignTier2HiddenTarget) {\n      this.campaignTier2HiddenTarget.value = data.tier2_question_id || ''\n    }\n\n    // Pre-fill modal selects with campaign values\n    if (this.hasModalTier1SelectTarget && data.tier1_question_id) {\n      this.modalTier1SelectTarget.value = data.tier1_question_id\n    }\n    if (this.hasModalTier2SelectTarget && data.tier2_question_id) {\n      this.modalTier2SelectTarget.value = data.tier2_question_id\n    }\n\n    // Show edit buttons if campaign doesn't have the tier configured\n    // This allows users to configure/update tiers without overriding campaign settings\n    // Note: We always show edit if campaign lacks the setting, even if user already set one\n    // (so they can change their selection if they made a mistake)\n    if (this.hasTier1EditBtnTarget) {\n      this.tier1EditBtnTarget.style.display = data.tier1_question_id ? 'none' : 'inline'\n    }\n    if (this.hasTier2EditBtnTarget) {\n      this.tier2EditBtnTarget.style.display = data.tier2_question_id ? 'none' : 'inline'\n    }\n  }\n\n  // Helper to escape HTML\n  escapeHtml(text) {\n    const div = document.createElement('div')\n    div.textContent = text\n    return div.innerHTML\n  }\n\n  // Clear the campaign preview\n  clearCampaignPreview() {\n    if (this.hasPreviewTimeframeTarget) {\n      this.previewTimeframeTarget.textContent = '-'\n    }\n    if (this.hasPreviewTier1Target) {\n      this.previewTier1Target.textContent = '-'\n    }\n    if (this.hasPreviewTier2Target) {\n      this.previewTier2Target.textContent = '-'\n    }\n    if (this.hasPreviewFeedbackTarget) {\n      this.previewFeedbackTarget.innerHTML = '<span class=\"text-muted\">-</span>'\n    }\n    if (this.hasCampaignPreviewTarget) {\n      this.campaignPreviewTarget.style.display = 'none'\n    }\n    // Hide edit buttons\n    if (this.hasTier1EditBtnTarget) {\n      this.tier1EditBtnTarget.style.display = 'none'\n    }\n    if (this.hasTier2EditBtnTarget) {\n      this.tier2EditBtnTarget.style.display = 'none'\n    }\n    // Clear hidden fields\n    if (this.hasCampaignTier1HiddenTarget) {\n      this.campaignTier1HiddenTarget.value = ''\n    }\n    if (this.hasCampaignTier2HiddenTarget) {\n      this.campaignTier2HiddenTarget.value = ''\n    }\n    // Reset modal selects\n    if (this.hasModalTier1SelectTarget) {\n      this.modalTier1SelectTarget.selectedIndex = 0\n    }\n    if (this.hasModalTier2SelectTarget) {\n      this.modalTier2SelectTarget.selectedIndex = 0\n    }\n    // Clear campaign tier tracking\n    this.campaignHasTier1 = false\n    this.campaignHasTier2 = false\n  }\n\n  // Submit the settings form programmatically (e.g. from a button outside\n  // the <form>). Prevents the default click behavior and triggers form\n  // submission, allowing the server-side handler to redirect with a flash.\n  submitSettings(event) {\n    event.preventDefault()\n\n    if (this.hasSettingsFormTarget) {\n      this.settingsFormTarget.submit()\n    }\n  }\n\n  // Save tier settings from the tierSettingsModal back to the parent form's\n  // hidden fields, validate that Tier 1 is set, refresh the preview text,\n  // and close the modal. Tier 1 is required; Tier 2 is optional.\n  saveTierSettings(event) {\n    // Get selected values from modal\n    const tier1Value = this.hasModalTier1SelectTarget ? this.modalTier1SelectTarget.value : ''\n    const tier2Value = this.hasModalTier2SelectTarget ? this.modalTier2SelectTarget.value : ''\n\n    // Validate: Tier 1 is required\n    if (!tier1Value) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      // Show validation error\n      if (this.hasModalTier1SelectTarget) {\n        this.modalTier1SelectTarget.classList.add('is-invalid')\n        // Add error message if not already present\n        let errorDiv = this.modalTier1SelectTarget.parentElement.querySelector('.invalid-feedback')\n        if (!errorDiv) {\n          errorDiv = document.createElement('div')\n          errorDiv.className = 'invalid-feedback'\n          errorDiv.textContent = i18n_string(\"priority_groups.js.tier1_required\", \"Grouping Tier 1 is required\")\n          this.modalTier1SelectTarget.parentElement.appendChild(errorDiv)\n        }\n      }\n      return false\n    }\n\n    // Clear any previous validation error\n    if (this.hasModalTier1SelectTarget) {\n      this.modalTier1SelectTarget.classList.remove('is-invalid')\n    }\n\n    // Update hidden form fields\n    if (this.hasCampaignTier1HiddenTarget) {\n      this.campaignTier1HiddenTarget.value = tier1Value\n    }\n    if (this.hasCampaignTier2HiddenTarget) {\n      this.campaignTier2HiddenTarget.value = tier2Value\n    }\n\n    // Update preview text\n    if (this.hasPreviewTier1Target && this.hasModalTier1SelectTarget) {\n      const tier1Option = this.modalTier1SelectTarget.selectedOptions[0]\n      const notSet = i18n_string(\"priority_groups.not_set\", \"Not set\")\n      this.previewTier1Target.textContent = tier1Value ? (tier1Option?.dataset.name || tier1Option?.text || notSet) : notSet\n    }\n    if (this.hasPreviewTier2Target && this.hasModalTier2SelectTarget) {\n      const tier2Option = this.modalTier2SelectTarget.selectedOptions[0]\n      const noneLabel = i18n_string(\"general.none\", \"None\")\n      this.previewTier2Target.textContent = tier2Value ? (tier2Option?.dataset.name || tier2Option?.text || noneLabel) : noneLabel\n    }\n\n    // Close the modal programmatically (validation passed)\n    if (this.hasTierModalTarget) {\n      const modal = bootstrap.Modal.getInstance(this.tierModalTarget)\n      if (modal) {\n        modal.hide()\n      }\n    }\n\n    // Note: We don't hide the edit buttons here - they should remain visible\n    // so the user can change their selection if they made a mistake.\n    // The buttons are only hidden if the campaign itself has tier settings configured.\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Wires the Priority Groups export modal:\n//   - \"Include feedback/drivers\" checkbox toggles the question list\n//   - Open-text question checkboxes toggle their per-question \"max sample\n//     responses\" input (and enable/disable it so unselected inputs aren't\n//     submitted with the form)\nexport default class extends Controller {\n  static targets = [\"form\", \"includeFeedback\", \"feedbackOptions\"]\n\n  toggleFeedback() {\n    const checked = this.includeFeedbackTarget.checked\n    if (this.hasFeedbackOptionsTarget) {\n      this.feedbackOptionsTarget.style.display = checked ? \"\" : \"none\"\n    }\n    if (!checked) {\n      // Uncheck all question selections and hide sample-size inputs\n      this.element.querySelectorAll(\".feedback-question-check\").forEach((cb) => {\n        cb.checked = false\n      })\n      this.element.querySelectorAll(\".sample-size-input\").forEach((wrap) => {\n        wrap.style.display = \"none\"\n        const input = wrap.querySelector(\"input[type=number]\")\n        if (input) input.disabled = true\n      })\n    }\n  }\n\n  toggleSampleSize(event) {\n    const cb = event.currentTarget\n    const qid = cb.dataset.questionId\n    const wrap = this.element.querySelector(`#sampleSize_${qid}`)\n    if (!wrap) return\n    wrap.style.display = cb.checked ? \"\" : \"none\"\n    const input = wrap.querySelector(\"input[type=number]\")\n    if (input) input.disabled = !cb.checked\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport ValidateFormController from \"./validate_form_controller\"\n\n// Custom Select2 templateResult that renders top-level AI tags in bold and\n// indents sub-themes, giving the dropdown a clear two-level visual hierarchy.\n// Defined on window (global scope) so initializeSelect2 can look it up by the\n// name stored in a data-select2_template_result attribute on the <select> element.\nwindow.piqTagTemplateResult = function(option) {\n  if (!option.id) return option.text;\n  var isTopLevel = $(option.element).data('isTopLevel');\n  if (isTopLevel) {\n    return $('<strong>' + option.text + '</strong>');\n  } else {\n    return $('<span style=\"padding-left:12px;\">\u2014 ' + option.text + '</span>');\n  }\n};\n\n// Connects to data-controller=\"process-improvement\"\nexport default class extends ValidateFormController {\n  static targets = [\"options\", \"template\"]\n  connect() {\n    this.init_option_sortable();\n\n    document.controllerRef = this\n\n    let edit_form = document.getElementById(\"process-improvement-edit-form\");\n    if (edit_form) {\n      edit_form.addEventListener('change', this.checkChangedInputs);\n    }\n\n    // Check if we can close the search toggle boxes\n    if(document.getElementById('update_view_filtering_form') && document.getElementById('update_view_filtering_form').length){\n      // -------------------------------------------------\n      \n      document.addEventListener('click', function(e) {\n        if(e.target != document.getElementById('text-search') && e.target != document.getElementById('answer_search') && e.target != document.getElementById('search-icon')) {\n          if(document.getElementById('answer_search') && document.getElementById('answer_search').value === ''){\n            document.getElementById('text-search').classList.remove('active')\n            document.getElementById('answer_search').placeholder = i18n_string(\"process_improvement.search\",\"Search\")\n            document.defaultSettings['text_filter'] = false\n          }\n        }\n\n        var auto_tag_filter = document.getElementById('auto_tags_filter')\n        if(e.target != auto_tag_filter) {\n          if(document.getElementById('auto_tag') && document.getElementById('auto_tag').value === '') {\n            auto_tag_filter.classList.remove('active')\n            document.defaultSettings[\"auto_tags_filter\"] = false\n            document.getElementById('auto_tag_label').innerHTML = document.getElementById('auto_tag_label').dataset.label\n          }\n        }\n\n        var tag_filter = document.getElementById('custom_tags_filter')\n        if(e.target != tag_filter) {\n          if(document.getElementById('tag') && document.getElementById('tag').value === '') {\n            tag_filter.classList.remove('active')\n            document.defaultSettings[\"custom_tags_filter\"] = false\n            document.getElementById('custom_tag_label').innerHTML = document.getElementById('custom_tag_label').dataset.label\n          }\n        }\n\n        var date_filter = document.getElementById('timeframe_filter')\n\n        if(date_filter != undefined && e.target != date_filter) {\n          if(date_filter.length){\n            date_filter.classList.remove('active')\n          }\n          document.defaultSettings[\"timeframe_filter\"] = false\n          document.getElementById('timeframe_label').innerHTML = document.getElementById('timeframe_label').dataset.label\n        }\n      })\n\n      document.getElementById('reset-filters').classList.add('hidden')\n    }\n\n\n    // document.addEventListener(\"turbo:frame-load\", this.setupPagination, true);\n\n    // Reload search after manage tags panel has been closed\n    if(document.getElementById('search-answers-button')) {\n      var modal = document.getElementById('system_modal_popup');\n      modal.addEventListener('hidden.bs.modal', function(event){\n        document.getElementById('search-answers-button').click()\n      });\n    }\n\n    this.initializeSelect2(\"select.select2\", {})\n\n\n    document.addEventListener('hide.bs.dropdown', event => {\n      if(!event.srcElement.classList.contains('badge')){\n        if(document.getElementById('update_view_filtering_form').length) {\n          if(event.target.id != 'tag_dropdown_bulk_answer' && event.target.id != 'headerDropdownSubAccountsMenu' && event.target.id != 'headerDropdownAccountMenu' && event.target.id != 'dev-testing-menu' ) {\n            this.submitSearch()\n\n            // Check default settings for toggle boxes\n            if(document.getElementById('answer_search')){\n              if(document.getElementById('answer_search').value !== ''){\n                document.getElementById('text-search').classList.add('active')\n                document.defaultSettings['text_filter'] = true\n              }\n            }\n\n            if(document.getElementById('auto_tag')){\n              if(document.getElementById('auto_tag').value !== ''){\n                document.getElementById('auto_tags_filter').classList.add('active')\n                document.defaultSettings['auto_tags_filter'] = true\n              }\n            }\n\n            if(document.getElementById('tag')){\n              if(document.getElementById('tag').value !== ''){\n                document.getElementById('custom_tags_filter').classList.add('active')\n                document.defaultSettings['custom_tags_filter'] = true\n              }\n            }\n\n            if(document.getElementById('filter_type_campaign') && document.getElementById('filter_type_campaign').checked){\n              if(document.getElementById('campaign_id').value !== '' || !document.getElementById('filter_type_campaign').checked){\n                document.getElementById('timeframe_filter').classList.add('active')\n                document.defaultSettings['timeframe_filter'] = true\n              }\n            } else if(document.getElementById('filter_type_date').checked) {\n              if(document.getElementById('start_date').value !== document.getElementById('start_date_default').value || document.getElementById('end_date').value !== document.getElementById('end_date_default').value){\n                document.getElementById('timeframe_filter').classList.add('active')\n                document.defaultSettings['timeframe_filter'] = true\n              }\n            } else if(document.getElementById('filter_type_phase') && document.getElementById('filter_type_phase').checked) {\n              if(document.getElementById('phase').value !== '' || !document.getElementById('filter_type_phase').checked){\n                document.getElementById('timeframe_filter').classList.add('active')\n                document.defaultSettings['timeframe_filter'] = true\n              }\n            }\n\n            for (const [key, value] of Object.entries(document.defaultSettings)) {\n              if(value == true) {\n                document.getElementById('reset-filters').classList.remove('hidden')\n              }\n            }\n          }\n        }\n      }\n    })\n  }\n\n  add_option(e) {\n    e.preventDefault()\n    let content = this.templateTarget.innerHTML.replace(/TEMPLATE_RECORD/g, new Date().getTime())\n    this.optionsTarget.insertAdjacentHTML('beforeend', content);\n    this.fix_table_widths();\n  }\n\n  \n\n\n  checkCampaignCount(e) {\n    var item = e.currentTarget\n    // if(item.checked) {\n      document.getElementById('campaign_check_overlay').classList.remove(\"hidden\")\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/process-improvement/'+ item.dataset.questionId +'/verify_campaign_count',\n        type: 'POST',\n        data: {\n          campaign_id: item.value,\n          checked: item.checked\n        },\n        success: function(data) {\n          if(data.status == 400) {\n            alert(data.message)\n            item.checked = false\n          }\n          document.getElementById('campaign_check_overlay').classList.add(\"hidden\")\n        }\n      })\n    // }\n  }\n\n\n  clearAllSelected(e) {\n    e.preventDefault()\n    document.querySelectorAll('.bulk-answer').forEach(function(item){\n      item.checked = false\n    })\n\n    document.getElementById('select-all-checkbox').checked = false\n\n    this.checkBulkTagging(e)\n  }\n\n  clearAnswerText() {\n    document.getElementById('answer_search').value = \"\"\n  }\n\n  clearTooltips() {\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n  }\n\n  confirm_delete(e) {\n    if (!confirm(i18n_string(\"process_improvement.are_you_sure_you_want_to_delete_this_question\",\"Are you sure you want to delete this question?  You will not be able to access the answers after you delete this question.\"))) {\n      e.preventDefault();\n    }\n  }\n\n\n  deleteTimeframe(e) {\n    if (!confirm(i18n_string(\"process_improvement.delete_timeframe_confirm\",\"Are you sure you want to delete this timeframe?\"))) {\n      e.preventDefault();\n    }\n    this.clearTooltips()\n  }\n\n\n  download_answers_click(e) {\n    $(\"#piq-spinner-holder\").fadeIn();\n    $(\"#piq-spinner-holder\").on('click',function(e){\n      $(\"#piq-spinner-holder\").fadeOut();\n    });\n    setTimeout(function(){\n      $(\"#piq-spinner-holder\").fadeOut();\n    }, 2000);\n    let btn = $(e.currentTarget);\n    btn.blur();\n  }\n\n  email_template_copy(e){\n    e.preventDefault();\n    let iframe = document.getElementById('process-improvement-email-template-iframe');\n    if (iframe && iframe.contentWindow && iframe.contentWindow.document) {\n      let template_html = iframe.contentWindow.document.body.innerHTML;\n      let copy_success = copy_to_clipboard(template_html);\n      $(\"#example_email_body_all_btn\").blur();\n      if(copy_success){\n        $(\"#copy_msg_example_email_body_all\").show().delay(3000).fadeOut('fast');\n      }\n    }\n  }\n\n  email_template_download(e){\n    let iframe = document.getElementById('process-improvement-email-template-iframe');\n    if (iframe && iframe.contentWindow && iframe.contentWindow.document) {\n      e.currentTarget.href='data:text/html;charset=UTF-8,'+encodeURIComponent(iframe.contentWindow.document.body.innerHTML);\n    }\n  }\n\n  fix_table_widths() {\n    $(\"#option_table_body td\").each(function () {\n      if (!$(this).data(\"fixed-width\")) {\n        $(this).css(\"width\", $(this).width());\n        $(this).data(\"fixed-width\", 1);\n      }\n    });\n  }\n\n\n  focusAutoTags(e) {\n    var item = e.currentTarget\n    item.classList.add('active')\n  }\n\n\n  focusDates(e) {\n    var item = e.currentTarget\n    item.classList.add('active')\n  }\n\n  focusPhase(e) {\n    var item = e.currentTarget\n    item.classList.add('active')\n  }\n\n\n  focusSearch(e) {\n    var item = e.currentTarget\n    item.classList.add('active')\n    document.getElementById('answer_search').placeholder = i18n_string(\"process_improvement.example_search\",\"Ex: Compensation / Pay, Workload / Administrative\");\n  }\n\n  focusTags(e) {\n    var item = e.currentTarget\n    item.classList.add('active')\n  }\n\n\n  give_feedback_step_one_process(event) {\n    event.preventDefault();\n    if (this.validate_give_feedback_form(undefined)){\n      let have_textarea = false;\n      $(\".piq-question\").each(function(){\n        if($(this).prop(\"tagName\").toLowerCase() == \"textarea\")\n        {\n          have_textarea = true;\n        }\n      });\n      if(!have_textarea)\n      {\n        this.submit_give_feedback_form_once(event.currentTarget);\n        return;\n      }\n      clearJsAlerts();\n\n      // Confirmation view\n      if($(\".piq-question\").length) {\n        $(\".piq-question\").each(function(){\n          let $el = $(this);\n          let question_id = $el.data(\"question\");\n          if($el.is(\"textarea\")) {\n            var tastr = \"\"+$el.val();\n            tastr = tastr.replace(\"\\n\",\"<br>\");\n            $(\"#confirm-process-improvement-\"+question_id).html(tastr);\n          } else if($el.is(\"select\")) {\n            var option_text = [];\n            $el.find(\"option:selected\").each(function(){\n              option_text.push($(this).text());\n            });\n            $(\"#confirm-process-improvement-\"+question_id).html(option_text.join(\", \"));\n          }\n        });\n      }\n      if($(\".piq-question-radio\").length) {\n        let radio_names = [];\n        $(\".piq-question-radio\").each(function(){\n          let myname = $(this).attr(\"name\");\n          if(radio_names.indexOf(myname) == -1) {\n            radio_names.push(myname);\n          }\n        });\n        for(let i=0;i<radio_names.length;i++) {\n          let inputname = radio_names[i];\n          inputname = inputname.replace(\"[\",\"\\\\[\");\n          inputname = inputname.replace(\"]\",\"\\\\]\");\n\n          let checked_radio = $('input[name='+ inputname +']:checked');\n          let question_id = checked_radio.data(\"question\");\n          let the_text = checked_radio.parent().text();\n          $(\"#confirm-process-improvement-\"+question_id).html(the_text);\n\n        }\n      }\n\n      $(\"#process-improvement-feedback-step1\").hide();\n      $(\"#process-improvement-feedback-step2\").show();\n      setTimeout(function(){\n        $('html, body').animate({\n          scrollTop: $(\"#confirm-submit-button-container\").offset().top - $(\"#confirm-submit-button-container\").height() + $(window).height()\n        }, 100);\n        setTimeout(function(){\n          $('html, body').stop();\n        },201);\n      },100);\n\n    }\n  }\n\n  give_feedback_step_two_back(event) {\n    event.preventDefault();\n    $(\"#process-improvement-feedback-step2\").hide();\n    $(\"#process-improvement-feedback-step1\").show();\n  }\n\n  give_feedback_step_two_process(event) {\n    event.preventDefault();\n    this.submit_give_feedback_form_once(event.currentTarget);\n  }\n\n  // The form posts as a full page load with no progress indicator, so a user who sees\n  // nothing happen clicks again and the feedback is submitted twice. Disable the button\n  // that was clicked before submitting so a second click does nothing.\n  submit_give_feedback_form_once(button) {\n    if (button.disabled) {\n      return;\n    }\n    button.disabled = true;\n    $(\"#process-improvement-feedback-form\").submit();\n  }\n\n  init_option_sortable() {\n    if ($(\"#option_table_body\").length) {\n      this.fix_table_widths();\n      $(\"#option_table_body\").sortable({\n        update: function (event, ui) {\n          $('#option_table_body tr').each(function (idx) {\n            var inputField = $(this).find(\".option-order-field\");\n            $(inputField).val(idx + 1);\n          });\n        }\n      });\n    }\n  }\n\n  initializeSelect2(selector, options) {\n    $(selector).each(function () {\n      // Copy options per-element so setting dropdownParent on one select doesn't\n      // mutate the shared options object and affect every other select in the loop.\n      var opts = Object.assign({}, options);\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        opts.dropdownParent = parentElement;\n      }\n      // Allow a <select> to declare its own templateResult function by name via\n      // data-select2_template_result, looked up from window (e.g. piqTagTemplateResult).\n      var templateFn = $(this).data('select2_template_result');\n      if (templateFn && typeof window[templateFn] === 'function') {\n        opts.templateResult = window[templateFn];\n      }\n      $(this).select2(opts);\n    });\n  }\n\n  preview_sample_question(e) {\n    e.preventDefault();\n    let $thisObj = $(e.currentTarget);\n    $thisObj.blur();\n    let question_data = $thisObj.data(\"question\");\n    if (question_data && question_data.id) {\n      $(\"#add_piq_question_modal_display_question\").html(question_data.name);\n      $(\"#add_piq_question_modal_hidden_id\").val(question_data.id);\n      $(\"#add_piq_question_modal_example_text\").addClass(\"hidden\");\n      $(\"#add_piq_question_modal_example_radio\").addClass(\"hidden\");\n      $(\"#piq-preview-add-question-button\").addClass(\"hidden\");\n      if (!$thisObj.hasClass(\"preview-only\")) {\n        $(\"#piq-preview-add-question-button\").removeClass(\"hidden\");\n      }\n      if (question_data.display_control == \"text\") {\n        $(\"#add_piq_question_modal_example_text\").removeClass(\"hidden\");\n      } else if (question_data.display_control == \"radio\") {\n        $(\"#add_piq_question_modal_example_radio\").removeClass(\"hidden\");\n        if (question_data.options && question_data.options.length) {\n          let html = \"\";\n          for (let i=0; i < question_data.options.length; i++) {\n            html += '<div class=\"checkbox\"><label><input type=\"radio\" name=\"temp_example\" value=\"1\" readonly=\"readonly\"> '+question_data.options[i]+'</label></div>';\n          }\n          $(\"#add_piq_question_modal_example_radio\").html(html);\n        }\n      }\n      $(\"#add_piq_question_modal\").modal(\"show\");\n    }\n  }\n\n  question_type_change(e) {\n    let $thisObj = $(e.currentTarget);\n    let newVal = $thisObj.val();\n    if (newVal == \"select\" || newVal == \"radio\") {\n      // Show options\n      $(\"#option_div\").removeClass(\"hidden\");\n    } else {\n      // Hide options\n      $(\"#option_div\").addClass(\"hidden\");\n    }\n    if (newVal == \"select\") {\n      // Show \"Allow selection of multiple answers\"\n      $(\"#allow-multiple-select-div\").removeClass(\"hidden\");\n    } else {\n      // Hide \"Allow\"...\n      $(\"#allow-multiple-select-div\").addClass(\"hidden\");\n      $(\"#question_multiple\").prop(\"checked\", false);\n    }\n\n    if (newVal == \"radio\") {\n      // Show \"Allow selection of multiple answers\"\n      $(\"#allow-range-div\").removeClass(\"hidden\");\n    } else {\n      $(\"#allow-range-div\").addClass(\"hidden\");\n    }\n  }\n\n\n  resetFilters() {\n    var filters = document.getElementsByClassName('filter-button')\n    Array.prototype.slice.call(filters).forEach(function(item){\n      item.classList.remove('active')\n    })\n\n    if(document.getElementById('answer_search')){\n      document.getElementById('answer_search').value = \"\"\n      document.getElementById('answer_search').placeholder = i18n_string(\"process_improvement.search\",\"Search\")\n    }\n\n\n    if(document.getElementById('phase')) {\n      document.getElementById('phase').value = \"\"\n    }\n    \n    if(document.getElementById('campaign')) {\n      document.getElementById('campaign').value = \"\"\n      // document.getElementById('campaign')\n    }\n\n    if(document.getElementById('auto_tag')) {\n      document.getElementById('auto_tag').value = \"\"\n    }\n\n    if(document.getElementById('tag')) {\n      document.getElementById('tag').value = \"\"\n    }\n\n    // if(document.getElementById('filter_type_campaign').checked){\n    //   document.getElementById('filter_type_campaign').click()\n    //   document.getElementById('campaign_id').value = ''\n    //   document.getElementById('start_date').value = document.getElementById('start_date_default').value\n    //   document.getElementById('end_date').value = document.getElementById('end_date_default').value\n    //   document.getElementById('timeframe_filter').classList.remove('active')\n\n    // } else if(document.getElementById('filter_type_phase').checked) {\n    //   document.getElementById('filter_type_phase').click()\n    //   document.getElementById('start_date').value = document.getElementById('start_date_default').value\n    //   document.getElementById('end_date').value = document.getElementById('end_date_default').value\n    //   document.getElementById('timeframe_filter').classList.remove('active')\n    //   document.getElementById('phase').value = ''\n\n    // } else if(document.getElementById('filter_type_date').checked) {\n    //   document.getElementById('filter_type_date').click()\n    //   document.getElementById('start_date').value = document.getElementById('start_date_default').value\n    //   document.getElementById('end_date').value = document.getElementById('end_date_default').value\n    //   document.getElementById('timeframe_filter').classList.remove('active')\n    // } else \n    if(document.getElementById('filter_type_all')) {\n      document.getElementById('filter_type_all').click()\n      document.getElementById('start_date').value = document.getElementById('start_date_default').value\n      document.getElementById('end_date').value = document.getElementById('end_date_default').value\n      document.getElementById('timeframe_filter').classList.remove('active')\n    }\n\n    document.defaultSettings['timeframe_filter'] = false\n    document.defaultSettings['auto_tags_filter'] = false\n    document.defaultSettings['custom_tags_filter'] = false\n    document.defaultSettings['phase_filter'] = false\n    document.defaultSettings['text_filter'] = false\n\n    document.getElementById('reset-filters').classList.add('hidden')\n    document.getElementById('search-answers-button').click()    \n  }\n\n  resetPagination() {\n    document.getElementById('pagination_page').value = 1\n  }\n\n\n  searchAnswers(e) {\n    if(e.currentTarget.value.length >= 3 || e.currentTarget.value.length == 0){\n\n      this.showLoader()\n      setTimeout(function(){\n        // document.controllerRef.submitSearch()\n        document.getElementById('search-answers-button').click()\n      }, 300);\n    }\n  }\n\n\n  \n\n\n  setDate(e) {\n    alert(\"woot\")\n    // e.preventDefault()\n    // alert(e.value)\n  }\n\n  \n\n  \n\n\n  showLoader() {\n    document.getElementById('report_responses').innerHTML = \"<p class='py-5 my-5 text-center'><em class='fal fa-spin fa-circle-notch fa-5x'></em></p>\"\n\n    // Hide all popup panels\n    var filters = document.getElementsByClassName('dropdown-btn')\n    Array.prototype.slice.call(filters).forEach(function(item){\n      var dropdown = new bootstrap.Dropdown(item)\n      dropdown.hide()\n    })\n  }\n\n\n  sortAutoTags(e) {\n\n    var sort = document.getElementById(\"sort_campaign\");\n    sort.dataset.direction = \"NONE\"\n    sort.classList.remove('sorted_asc')\n    sort.classList.remove('sorted_desc')\n    sort.classList.add(\"unsorted\")\n\n    var direction = \"NONE\"\n\n    var item = e.currentTarget\n    if(item.dataset.direction == \"ASC\") {\n      item.dataset.direction = \"DESC\"\n      item.classList.remove('sorted_asc')\n      item.classList.add('sorted_desc')\n      direction = \"DESC\"\n    } else if(item.dataset.direction == \"DESC\") {\n      item.dataset.direction = \"NONE\"\n      item.classList.remove('sorted_desc')\n      item.classList.add('unsorted')\n      direction = \"NONE\"\n    } else if(item.dataset.direction == \"NONE\") {\n      item.dataset.direction = \"ASC\"\n      item.classList.remove('unsorted')\n      item.classList.add('sorted_asc')\n      direction = \"ASC\"\n    }\n\n    document.getElementById(\"sort_section\").value = \"auto_tags\"\n    document.getElementById(\"sort_direction\").value = direction\n\n    document.getElementById('search-answers-button').click()\n  }\n\n\n  sortCampaign(e) {\n\n    var sort = document.getElementById(\"sort_autotag\");\n    sort.dataset.direction = \"NONE\"\n    sort.classList.remove('sorted_asc')\n    sort.classList.remove('sorted_desc')\n    sort.classList.add(\"unsorted\")\n\n    var direction = \"NONE\"\n\n    var item = e.currentTarget\n    if(item.dataset.direction == \"ASC\") {\n      item.dataset.direction = \"DESC\"\n      item.classList.remove('sorted_asc')\n      item.classList.add('sorted_desc')\n      direction = \"DESC\"\n    } else if(item.dataset.direction == \"DESC\") {\n      item.dataset.direction = \"NONE\"\n      item.classList.remove('sorted_desc')\n      item.classList.add('unsorted')\n      direction = \"NONE\"\n    } else if(item.dataset.direction == \"NONE\") {\n      item.dataset.direction = \"ASC\"\n      item.classList.remove('unsorted')\n      item.classList.add('sorted_asc')\n      direction = \"ASC\"\n    }\n\n    document.getElementById(\"sort_section\").value = \"campaign_phase\"\n    document.getElementById(\"sort_direction\").value = direction\n\n    document.getElementById('search-answers-button').click()\n  }\n\n\n  submitSearch() {\n    document.getElementById('search-answers-button').click()\n  }\n\n\n  toggle_active(e){\n    e.preventDefault();\n    let $thisObj = $(e.currentTarget);\n    let is_active = $thisObj.data(\"active\") ? 1 : 0;\n    let question_id = $thisObj.data(\"question_id\");\n    $thisObj.blur();\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: '/process-improvement/'+question_id+'/toggle-active',\n      type: 'PATCH',\n      data: {\n        active: is_active,\n        question_id: question_id\n      },\n      success: function(return_data) {\n        if (return_data && return_data.question_id && return_data.active !== undefined) {\n          let $status_elem = $(\".toggle-active-question[data-question_id='\"+return_data.question_id+\"']\");\n          $status_elem.data(\"active\",return_data.active);\n          let active_text = i18n_string(\"process_improvement.active\",\"Active\");\n          let inactive_text = i18n_string(\"process_improvement.inactive\",\"Inactive\");\n          if (return_data.active == 1) {\n            $status_elem.html('<span class=\"text-success\"><em class=\"fas fa-star\"></em> '+active_text+'</span>');\n          } else {\n            $status_elem.html('<span class=\"text-warning\"><em class=\"fal fa-star\"></em> '+inactive_text+'</span>');\n          }\n        }\n        if(return_data && return_data.error)\n        {\n          alert(return_data.error);\n        }\n      }\n    });\n  }\n\n  toggleFilterType(e) {\n    var item = e.currentTarget\n\n    if(item.value == 'campaign') {\n      document.getElementById('filter_dates').classList.add('hidden')\n      document.getElementById('filter_campaigns').classList.remove('hidden')\n      document.getElementById('filter_all').classList.add('hidden')\n      if(document.getElementById('filter_phases')){\n        document.getElementById('filter_phases').classList.add('hidden')\n      }\n    } else if(item.value == 'date') {\n      document.getElementById('filter_dates').classList.remove('hidden')\n      document.getElementById('filter_all').classList.add('hidden')\n      if(document.getElementById('filter_campaigns')){\n        document.getElementById('filter_campaigns').classList.add('hidden')\n      }\n      if(document.getElementById('filter_phases')){\n        document.getElementById('filter_phases').classList.add('hidden')\n      }\n    } else if(item.value == 'phase') {\n      document.getElementById('filter_dates').classList.add('hidden')\n      document.getElementById('filter_phases').classList.remove('hidden')\n      document.getElementById('filter_all').classList.add('hidden')\n      if(document.getElementById('filter_campaigns')){\n        document.getElementById('filter_campaigns').classList.add('hidden')\n      }\n    } else if(item.value == 'all') {\n      document.getElementById('filter_all').classList.remove('hidden')\n      document.getElementById('filter_dates').classList.add('hidden')\n      if(document.getElementById('filter_campaigns')){\n        document.getElementById('filter_campaigns').classList.add('hidden')\n      }\n      if(document.getElementById('filter_phases')){\n        document.getElementById('filter_phases').classList.add('hidden')\n      }\n    }\n  }\n\n  // update_filter_click(e) {\n  //   // // Reset action if we need to\n  //   // if ($(\"#update_view_filtering_form\").data(\"original-action\")) {\n  //   //   $(\"#update_view_filtering_form\").attr(\"action\", $(\"#update_view_filtering_form\").data(\"original-action\"));\n  //   //   $(\"#update_view_filtering_form\").data(\"original-action\", undefined);\n  //   // }\n  // }\n\n  updateAutoTag(e) {\n    var a = document.getElementById('auto_tag')\n    var auto_tag_name = a.options[a.selectedIndex].text\n    if(auto_tag_name.length > 22) {\n      auto_tag_name = auto_tag_name.substr(0, 22) + \"\\u2026\"\n    }\n    document.getElementById('auto_tag_label').innerHTML = auto_tag_name\n  }\n\n\n  updateCustomTag(e) {\n    var c = document.getElementById('tag')\n    var custom_tag_name = c.options[c.selectedIndex].text\n    if(custom_tag_name.length > 22) {\n      custom_tag_name = custom_tag_name.substr(0, 22) + \"\\u2026\"\n    }\n    document.getElementById('custom_tag_label').innerHTML = custom_tag_name\n  }\n\n\n  updateTag(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    var form_data = {\n      question_tag: {\n        kind: item.dataset.kind,\n        question_id: item.dataset.questionId,\n        name: document.getElementById('question_tag_name_' + item.dataset.id).value\n      }\n    }\n\n    if(item.dataset.kind == 'update') {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/process-improvement/' + item.dataset.id + '/update_question_tag',\n        type: 'POST',\n        data: form_data,\n        success: function(return_data) {\n          //Color row background in HSL space (easier to manipulate fading)\n          $('#question_tag_' + item.dataset.id).animate({backgroundColor: '#9fdc6a'}, 300).animate({ backgroundColor: '#FFFFFF'}, 300)\n        }\n      });\n    } else if(item.dataset.kind == 'delete') {\n      if(confirm( i18n_string(\"process_improvement.delete_tag\",\"Are you sure you want to delete this tag?\") )) {\n\n        form_data['question_tag']['deleted'] = 1\n\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: '/process-improvement/' + item.dataset.id + '/update_question_tag',\n          type: 'POST',\n          data: form_data,\n          success: function(return_data) {\n            if(return_data.status == 200) {\n              document.getElementById('question_tag_' + item.dataset.id).remove()\n            }\n          }\n        });\n      }\n    }\n  }\n\n\n  updateTimeframe(e) {\n    if(e.currentTarget.dataset.kind == 'campaign') {\n      var c = document.getElementById('campaign_id')\n      var campaign_name = c.options[c.selectedIndex].text\n      document.getElementById('timeframe_label').innerHTML = i18n_string(\"wellness_snapshot.campaign\" + \": \" + campaign_name, \"Assessment: \" + campaign_name)\n    } else if(e.currentTarget.dataset.kind == \"phase\") {\n      var p = document.getElementById('phase')\n      var phase_name = p.options[p.selectedIndex].dataset.name\n      document.getElementById('timeframe_label').innerHTML = i18n_string(\"process_improvement.phase\" + \": \" + phase_name,\"Phase: \" + phase_name)\n    } else if(e.currentTarget.dataset.kind == \"date-range\") {\n      document.getElementById('timeframe_label').innerHTML = i18n_string(\"wellness_journey.date_range\",\"Date Range\")\n    } else {\n      document.getElementById('timeframe_label').innerHTML = document.getElementById('timeframe_label').dataset.label\n    }\n  }\n\n  validate_give_feedback_form(event) {\n    let error_message = [];\n    if($(\".piq-question\").length)\n    {\n      $(\".piq-question\").each(function(){\n        if($(this).val() == \"\" || $(this).val() == null)\n        {\n          let fieildsetObj = $(this).closest(\".piq-question-wrapper\");\n          if(fieildsetObj.data(\"isrequired\") == \"yes\") {\n            let qtext = fieildsetObj.find(\".piq-question-name-div\").text();\n            error_message.push(i18n_string(\"process_improvement.please_select_an_answer_for\",\"Please select an answer for\") + ' &quot;' + qtext + '&quot;')\n          }\n        }\n      });\n    }\n    if($(\".piq-question-radio\").length)\n    {\n      let radio_names = [];\n      $(\".piq-question-radio\").each(function(){\n        let myname = $(this).attr(\"name\");\n        if(radio_names.indexOf(myname) == -1)\n        {\n          radio_names.push(myname);\n        }\n      });\n      for(let i=0;i<radio_names.length;i++)\n      {\n        let inputname = radio_names[i];\n        inputname = inputname.replace(\"[\",\"\\\\[\");\n        inputname = inputname.replace(\"]\",\"\\\\]\");\n        if (!$('input[name='+ inputname +']:checked').length) {\n          let fieildsetObj = $('input[name='+ inputname +']').closest(\".piq-question-wrapper\");\n          if(fieildsetObj.data(\"isrequired\") == \"yes\") {\n            let qtext = fieildsetObj.find(\".piq-question-name-div\").text();\n            error_message.push(i18n_string(\"process_improvement.please_select_an_answer_for\",\"Please select an answer for\") + ' &quot;' + qtext + '&quot;');\n          }\n        }\n\n      }\n    }\n    if(error_message.length > 0) {\n      if (event) {\n        event.preventDefault();\n      }\n      let errormsg = error_message.join('<br />');\n      doJsAlert('<div class=\"alert alert-danger\">'+errormsg+'</div>');\n      return false;\n    }\n    return true;\n  }\n\n  validate_piq_form(event) {\n    var container = 'message-container'\n    if(document.getElementsByClassName('user_feedback_survey')){\n      container = 'custom-message-container'\n    }\n\n    let passed_normal_validation = super.validateForm(event, container);\n    if (passed_normal_validation) {\n      let errormsg = \"\";\n      let question_type = $(\"#question_display_control\").val();\n      if(question_type == \"select\" || question_type == \"radio\") {\n        // option_name_new/option_name\n        let opt_count = 0;\n        $(\".option-name-input\").each(function () {\n          if ($(this).val() != \"\") {\n            opt_count++;\n          }\n        });\n        if (opt_count <= 1) {\n          errormsg += i18n_string(\"process_improvement.you_must_have_at_least_two_options\",\"You must have at least two options\") + \"<br />\";\n        }\n      }\n      if (errormsg != \"\") {\n        event.preventDefault();\n        errormsg = errormsg.substring(0, errormsg.length - 6);\n        doJsAlert('<div class=\"alert alert-danger\">'+errormsg+'</div>', container);\n        return false;\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"process-improvement-result\"\nexport default class extends Controller {\n  connect() {\n    if ($(\".piq-tags\").length) {\n      this.setup_tagging();\n    }\n\n    document.addEventListener(\"turbo:frame-load\", this.setupPagination, true);\n  }\n\n  applyBulkTags(e) {\n    if(confirm(i18n_string(\"process_improvement.are_you_sure_you_want_to_apply_tags\",\"Are you sure you want to apply these tags to all selected answers?\"))){\n      var question_id = document.getElementById('question_id').value\n      var tags = []\n      var tag_details = []\n      for(var x = 0; x < document.getElementById('tags-bulk_answer').getElementsByTagName('em').length; x++){\n        var elem = document.getElementById('tags-bulk_answer').getElementsByTagName('em')[x]\n        tags.push(elem.dataset.tag_id)\n        tag_details.push([elem.dataset.tag_id, elem.parentElement.innerText])\n      }\n      \n      var answers = []\n      for(var x = 0; x < document.getElementsByName('bulk_answer[]').length; x++){\n        if(document.getElementsByName('bulk_answer[]')[x].checked) {\n          answers.push(document.getElementsByName('bulk_answer[]')[x].value)\n        }\n      }\n\n      if(answers.length > 0 && tags.length > 0){\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: '/process-improvement/apply_bulk_tags',\n          type: 'POST',\n          data: {\n            answers: answers,\n            tags: tags\n          },\n          success: function(return_data) {\n\n            // Loop through all answers\n            answers.forEach((answer) => {\n              var existing_tags = []\n              for(var i = 0; i < document.getElementById('tags-' + answer).getElementsByTagName('em').length; i++){\n                var tag = document.getElementById('tags-' + answer).getElementsByTagName('em')[i]\n                existing_tags.push(tag.dataset.tag_id)\n              }\n\n              // Visually apply tags to all selected answers, checks if the tag does not already exist and applies it\n              tag_details.forEach((tag) => {\n                if(!existing_tags.includes(tag[0])) {\n                  let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\">' + tag[1] + ' <em class=\"fa fa-times unassign-tag\" data-answer=\"' + answer + '\" data-tag_id=\"' + tag[0] + '\" data-question=\"' + question_id + '\"></em></span>';\n                  $('#tags-' + answer).append(tag_html);\n                }\n              })\n            })\n\n            // Clear existing selected bulk tags\n            var tags = document.getElementById('tags-bulk_answer').getElementsByTagName('em')\n            var selected_tags = Array.from(tags)\n            selected_tags.forEach((t) => {\n              t.click()\n            })\n\n            // Uncheck selected answers\n            answers.forEach((answer) => {\n              document.querySelectorAll('input[value=\"' + answer + '\"]').forEach((i) => {\n                i.click()\n              })\n            })\n          }\n        });\n      }\n    } else {\n      e.preventDefault()\n    }\n  }\n\n  checkBulkTagging(e, validated = false) {\n    var checked = 0\n    for(var x = 0; x < document.getElementsByName('bulk_answer[]').length; x++){\n      if(document.getElementsByName('bulk_answer[]')[x].checked) {\n        checked += 1\n      }\n    }\n\n    if(checked > 1) {\n      document.getElementById('apply_bulk_tagging').classList.remove('hidden')\n      document.querySelectorAll('.piq-tags').forEach(function(item){\n        item.classList.add('hidden')\n      })\n    } else {\n      document.getElementById('apply_bulk_tagging').classList.add('hidden')\n      document.querySelectorAll('.piq-tags').forEach(function(item){\n        item.classList.remove('hidden')\n      })\n\n      if(checked == 0) {\n        document.getElementById('select-all-checkbox').checked = false\n      }\n    }\n\n    if(validated == false) {\n      document.getElementById('all_answers_selected').value = false\n      document.getElementById('select_all_answers').classList.add('hidden')\n      if(checked >= 1) {\n        document.getElementById('select-all-checkbox').indeterminate = true\n      } else {\n        document.getElementById('select-all-checkbox').indeterminate = false\n      }\n    }\n  }\n\n  deselectAllOptions(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $(\"#\"+ item.dataset.field + \" > option\").prop(\"selected\", false);\n    $(\"#\"+ item.dataset.field ).trigger(\"change\");\n  }\n\n  selectAll(e) {\n    var checkbox = e.currentTarget\n    var selected_page_answers = 0\n    document.getElementById('select_all_answers').classList.add('hidden')\n    document.querySelectorAll('.bulk-answer').forEach(function(item){\n      if(item.checked == true) {\n        selected_page_answers += 1;\n      }\n    })\n\n    if(selected_page_answers > 0) {\n      // clear all selected answers\n      document.querySelectorAll('.bulk-answer').forEach(function(item){\n        item.checked = false\n      })\n\n      checkbox.checked = false\n    } else {\n      document.querySelectorAll('.bulk-answer').forEach(function(item){\n        item.checked = true\n        selected_page_answers += 1;\n      })\n      var total_rows = document.getElementById('total_answer_rows').value\n      if(total_rows > selected_page_answers){\n        document.getElementById('select_all_answers').innerHTML = 'All ' + selected_page_answers + ' responses on this page are selected. <a href=\"#\" data-action=\"click->process-improvement#selectAllTotal\">Select all ' + total_rows + ' responses for this question</a>'\n        document.getElementById('select_all_answers').classList.remove('hidden')\n      }\n    }\n\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n\n    this.checkBulkTagging(e, true)\n  }\n\n  selectAllOptions(event) {\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $(\"#\"+ item.dataset.field + \" > option\").prop(\"selected\",\"selected\");\n    $(\"#\"+ item.dataset.field ).trigger(\"change\");\n  }\n\n\n  selectAllTotal(e) {\n    e.preventDefault()\n    var total_rows = document.getElementById('total_answer_rows').value\n    document.getElementById('select_all_answers').innerHTML = 'All ' + total_rows + ' responses are selected. <a href=\"#\" data-action=\"click->process-improvement#clearAllSelected\">Clear Selection</a>'\n    document.getElementById('all_answers_selected').value = true\n  }\n\n  setupPagination(e) {\n    if(e.target.id == 'report_responses'){\n      if(document.getElementById('pagination-holder')) {\n        var pagination_items = document.getElementById('pagination-holder').getElementsByTagName('a')\n        Array.prototype.slice.call(pagination_items).forEach(function(item){\n          item.addEventListener('click', function(e){\n            e.preventDefault()\n            document.getElementById('pagination_page').value = e.currentTarget.href.split('page=')[1]\n            document.getElementById('search-answers-button').click()\n          })\n        })\n      }\n    }\n  }\n\n  setup_tagging(){\n    $('.dropdown.tags-holder').off('show.bs.dropdown').on('show.bs.dropdown', function(){\n      // Reset Stuff\n      $(this).find('.save-tag-button').hide();\n      $(this).find('.new-tag-input-field').val(\"\");\n\n      // Hide tags already added to this answer\n      var dropdownItem = $(this);\n      var answer_id = $(this).find(\".dropdown-toggle\").data(\"answer\");\n      if(answer_id) {\n        dropdownItem.find('.new-tag-list-items > a').each(function(){\n          $(this).removeClass(\"hide-for-search\").show();\n        });\n        $(\"#tags-\"+answer_id).find(\".unassign-tag\").each(function () {\n          var tag_id = $(this).data(\"tag_id\");\n          dropdownItem.find('.answer-tag[data-id=\"'+tag_id+'\"]').addClass(\"hide-for-search\").hide();\n        });\n      }\n\n      $(this).find('.show-all-tags').hide();\n      if($(this).find('.new-tag-list-items > a').not(\".hide-for-search\").length < 8){\n        // $(this).find('.show-all-tags').hide();\n        // $(this).find(\".new-tag-list-items\").removeClass(\"all\");\n        $(this).find(\".new-tag-list-items\").addClass(\"all\");\n      } else {\n        // $(this).find('.show-all-tags').show();\n        // $(this).find(\".new-tag-list-items\").removeClass(\"all\");\n        $(this).find(\".new-tag-list-items\").addClass(\"all\");\n      }\n    });\n\n    $('.dropdown.tags-holder').off('click').on('click', function(e) {\n      let targetElement = $(e.target);\n      if (targetElement.hasClass(\"show-all-tags\")) {\n        targetElement.closest(\".dropdown\").find(\".new-tag-list-items\").addClass(\"all\");\n        targetElement.hide();\n        e.stopPropagation();\n      }\n    });\n\n    $(document).off('keyup', '.new-tag-input-field').on('keyup', '.new-tag-input-field', function(){\n      var dropdownParent = $(this).closest(\".dropdown\");\n      if($(this).val().length > 0){\n        dropdownParent.find(\".show-all-tags\").hide();\n      } else {\n        dropdownParent.find(\".show-all-tags\").show();\n      }\n\n      var data = $(this).val().toLowerCase();\n      dropdownParent.find('.new-tag-list-items > a').filter(function(){\n        var item = $(this).text().toLowerCase().indexOf(data) > -1;\n        if($(this).hasClass(\"hide-for-search\"))\n        {\n          item = false;\n        }\n        $(this).toggle(item);\n      });\n\n      // Check if we have an exact match. If not show the save button\n      var exists = false;\n      dropdownParent.find('.new-tag-list-items > a:visible').each(function(i){\n        if($(this).text().toLowerCase() == data){\n          exists = true;\n        }\n      });\n\n      if(!exists){\n        dropdownParent.find('.save-tag-button').show();\n      } else {\n        dropdownParent.find('.save-tag-button').hide();\n      }\n    });\n    $(document).off('click','.save-tag-button button').on('click','.save-tag-button button', function(e){\n      e.preventDefault();\n      let item = $(this);\n      let answer_id = item.data(\"answer\");\n      let question_id = item.data(\"question\");\n      let customer_sub_account_id = item.data(\"customer_sub_account_id\");\n      let dropdownParent = item.closest(\".dropdown\");\n      \n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/process-improvement/'+question_id+'/create-tag',\n        type: 'POST',\n        data: {\n          answer_id: answer_id,\n          customer_sub_account_id: customer_sub_account_id,\n          name: $(\"#new_tag_\"+answer_id).val()\n        },\n        success: function(return_data) {\n          if (return_data.tag_id) {\n\n            if(return_data.answer_id) {\n              // return_data. tag_id/name/answer_id\n              let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\">' + return_data.name + ' <em class=\"fa fa-times unassign-tag\" data-answer=\"' + return_data.answer_id + '\" data-tag_id=\"' + return_data.tag_id + '\" data-question=\"' + question_id + '\"></em></span>';\n              $('#tags-' + return_data.answer_id).append(tag_html);\n              // Add tag to all dropdowns\n              let html = '<a class=\"dropdown-item answer-tag\" data-id=\"' + return_data.tag_id + '\" data-question=\"' + question_id + '\" data-tag=\"' + return_data.name + '\" data-answer=\"%%answer_id%%\">' + return_data.name + '</a>';\n              $(\".new-tag-list-items\").each(function () {\n                let myhtml = html.replace(\"%%answer_id%%\", $(this).data(\"answer_id\"));\n                $(this).append(myhtml);\n              });\n            } else {\n              // return_data. tag_id/name\n              // Used for bulk tagging options.\n              let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\">' + return_data.name + ' <em class=\"fa fa-times unassign-tag\" data-answer=\"bulk_answer\" data-tag_id=\"' + return_data.tag_id + '\" data-question=\"' + question_id + '\"></em></span>';\n              $('#tags-bulk_answer').append(tag_html);\n              // Add tag to all dropdowns\n              let html = '<a class=\"dropdown-item answer-tag\" data-id=\"' + return_data.tag_id + '\" data-question=\"' + question_id + '\" data-tag=\"' + return_data.name + '\" data-answer=\"%%answer_id%%\">' + return_data.name + '</a>';\n              $(\".new-tag-list-items\").each(function () {\n                let myhtml = html.replace(\"%%answer_id%%\", $(this).data(\"answer_id\"));\n                $(this).append(myhtml);\n              });\n\n              document.getElementById('bulk_answer_submit_holder').classList.remove('hidden')\n            }\n\n            $('#tag').append(\"<option value='\" + return_data.tag_id + \"' data-name='\" + return_data.name + \"' data-total='1'>\" + return_data.name + \"</option>\")\n            var options = {}\n            var parentElement = $('#tag').closest(\".select2-wrapper-div\");\n            if (parentElement.length) {\n              options.dropdownParent = parentElement;\n            }\n            $('#tag').select2(options);\n            \n          }\n        }\n      });\n    });\n\n    // Assign the tag from the dropdown to the specific answer\n    $(document).off('click', '.answer-tag').on('click', '.answer-tag', function(e){\n      e.preventDefault();\n\n      let answer_id = $(this).data('answer');\n      let tag_id = $(this).data('id');\n      let question_id = $(this).data('question');\n      let tag_name = $(this).data('tag')\n\n      if(answer_id != 'bulk_answer') {\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: '/process-improvement/'+question_id+'/assign-tag',\n          type: 'POST',\n          data: {\n            answer_id: answer_id,\n            tag_id: tag_id\n          },\n          success: function(return_data) {\n            if (return_data.tag_id) {\n              // return_data. tag_id/name/answer_id\n              let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\">' + return_data.name + ' <em class=\"fa fa-times unassign-tag\" data-answer=\"' + return_data.answer_id + '\" data-tag_id=\"' + return_data.tag_id + '\" data-question=\"' + question_id + '\"></em></span>';\n              $('#tags-' + return_data.answer_id).append(tag_html);\n            }\n          }\n        });\n      } else {\n        let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\">' + tag_name + ' <em class=\"fa fa-times unassign-tag\" data-answer=\"bulk_answer\" data-tag_id=\"' + tag_id + '\" data-question=\"' + question_id + '\"></em></span>';\n        $('#tags-bulk_answer').append(tag_html);\n        document.getElementById('bulk_answer_submit_holder').classList.remove('hidden')\n      }\n\n    });\n\n    // Filters the AI tag list inside a dropdown as the user types.\n    // After filtering items, also hides section headers whose children are all hidden\n    // so the header doesn't float alone when nothing underneath it matches.\n    $(document).off('keyup', '.ai-tag-search').on('keyup', '.ai-tag-search', function() {\n      let query = $(this).val().toLowerCase().trim();\n      let list  = $(this).closest('.dropdown-menu').find('.ai-tag-list');\n\n      list.find('.answer-ai-tag').each(function() {\n        let match = $(this).data('tag').toString().toLowerCase().includes(query);\n        $(this).toggle(query === '' || match);\n      });\n\n      // nextUntil stops at the next header, so this checks only the items belonging\n      // to this header \u2014 not items from the next section.\n      list.find('.ai-tag-header').each(function() {\n        let anyVisible = $(this).nextUntil('.ai-tag-header', '.answer-ai-tag').filter(':visible').length > 0;\n        $(this).toggle(query === '' || anyVisible);\n      });\n    });\n\n    // Returns a truncated display string and an optional title attribute for an AI tag\n    // badge. Long tag names (>25 chars) are clipped with \"...\" and the full name is\n    // put in a tooltip so the badge stays compact without losing information.\n    function escHtml(str) {\n      return str ? String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;') : '';\n    }\n\n    function aiTagBadge(fullName) {\n      let raw       = fullName.length > 25 ? fullName.substring(0, 25) + '...' : fullName;\n      let truncated = escHtml(raw);\n      let titleAttr = fullName.length > 25 ? ' title=\"' + escHtml(fullName) + '\"' : '';\n      return { display: truncated, titleAttr: titleAttr };\n    }\n\n    // Assigns an AI theme tag to an answer via AJAX, then appends the badge to the UI.\n    // Two modes: single-answer (makes server call immediately) and bulk (accumulates\n    // tags in the DOM only; the server call happens when the bulk form is submitted).\n    $(document).off('click', '.answer-ai-tag').on('click', '.answer-ai-tag', function(e){\n      e.preventDefault();\n\n      let answer_id   = $(this).data('answer');\n      let tag_id      = $(this).data('id');\n      let question_id = $(this).data('question');\n      let tag_name    = $(this).data('tag');\n\n      if(answer_id != 'bulk_answer') {\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: '/process-improvement/'+question_id+'/assign-ai-tag',\n          type: 'POST',\n          data: { answer_id: answer_id, tag_id: tag_id },\n          success: function(return_data) {\n            if (return_data.tag_id) {\n              // Embed answer_id and tag_id in the badge element so the unassign\n              // handler can remove the right record without a separate lookup.\n              let badge    = aiTagBadge(return_data.name);\n              let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\"' + badge.titleAttr + '>' + badge.display + ' <em class=\"fa fa-times unassign-ai-tag\" data-answer=\"' + return_data.answer_id + '\" data-tag_id=\"' + return_data.tag_id + '\" data-question=\"' + question_id + '\"></em></span>';\n              $('#tags-' + return_data.answer_id).append(tag_html);\n            }\n          }\n        });\n      } else {\n        // Bulk mode: build the badge locally without a server call. The submit button\n        // becomes visible so the admin can apply all selections at once.\n        let badge    = aiTagBadge(tag_name);\n        let tag_html = ' <span class=\"badge bg-info mb-1 mt-1\"' + badge.titleAttr + '>' + badge.display + ' <em class=\"fa fa-times unassign-ai-tag\" data-answer=\"bulk_answer\" data-tag_id=\"' + tag_id + '\" data-question=\"' + question_id + '\"></em></span>';\n        $('#tags-bulk_answer').append(tag_html);\n        document.getElementById('bulk_answer_submit_holder').classList.remove('hidden');\n      }\n    });\n\n    // Removes an AI tag from an answer. For single answers, calls the server to delete\n    // the AnswerTagAssignment, then removes the badge. For bulk mode, removes the badge\n    // only (no server call was made when it was added).\n    $(document).off('click', '.unassign-ai-tag').on('click', '.unassign-ai-tag', function(){\n      let item        = $(this);\n      let answer_id   = item.data('answer');\n      let tag_id      = item.data('tag_id');\n      let question_id = item.data('question');\n\n      if(answer_id != 'bulk_answer') {\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: '/process-improvement/'+question_id+'/unassign-ai-tag',\n          type: 'POST',\n          data: { answer_id: answer_id, tag_id: tag_id },\n          success: function(return_data) {\n            if (return_data && return_data.status == 'success') {\n              item.parent().remove();\n            }\n          }\n        });\n      } else {\n        item.parent().remove();\n        // Hide the bulk submit button when no tags remain selected.\n        if(document.getElementById('tags-bulk_answer').children.length == 0) {\n          document.getElementById('bulk_answer_submit_holder').classList.add('hidden');\n        }\n      }\n    });\n\n    // Remove tag from the specific answer\n    $(document).off('click', '.unassign-tag').on('click', '.unassign-tag', function(){\n      let item = $(this);\n      // <em class=\"fa fa-times unassign-tag\" data-answer=\"<%= answer.id %>\" data-tag_id=\"<%= tag.id %>\" data-question=\"<%= @improvement_question.id %>\"></em></span>\n\n      let answer_id = item.data('answer');\n      let tag_id = item.data('tag_id');\n      let question_id = item.data('question');\n\n      if(answer_id != 'bulk_answer') {\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: '/process-improvement/'+question_id+'/unassign-tag',\n          type: 'POST',\n          data: {\n            answer_id: answer_id,\n            tag_id: tag_id\n          },\n          success: function(return_data) {\n            if (return_data && return_data.status == 'success') {\n              item.parent().remove();\n            }\n          }\n        });\n      } else {\n        item.parent().remove();\n        if(document.getElementById('tags-bulk_answer').children.length == 0) {\n          document.getElementById('bulk_answer_submit_holder').classList.add('hidden')\n        }\n      }\n\n    });\n\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"refresh\"\nexport default class extends Controller {\n  static values = {\n    src: String,\n    interval: Number,\n    maxtime: Number\n  }\n  connect() {\n    this.max_check_timeMS = (new Date()).getTime() + this.maxtimeValue * 1000;\n    this.intervalResource = setInterval(() => {\n      // console.log(\"Refresh Time\");\n      this.element.setAttribute('src', this.srcValue);\n      if ((new Date()).getTime() > this.max_check_timeMS) {\n        if (this.intervalResource) {\n          clearTimeout(this.intervalResource);\n          this.intervalResource = undefined;\n        }\n      }\n    }, this.intervalValue * 1000);\n  }\n\n  disconnect() {\n    if (this.intervalResource) {\n      clearTimeout(this.intervalResource);\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Canvg } from 'canvg';\n\n// Connects to data-controller=\"report-display\"\nexport default class extends Controller {\n\n  // Always have the connect function first. \n  connect() {\n    //console.log(\"Report Display Controller\")\n    $('#chart-data-holder').html('<div class=\"chart-loader\"></div>')\n    $('#table-data-holder').hide()\n\n    document.report_table_download_count = 0;\n    document.offcanvas = document.getElementById('configureReportOptions');\n    document.bsOffcanvas = new bootstrap.Offcanvas( document.offcanvas );\n\n    document.saved_filter_loaded = undefined;\n    document.edit_saved_filter_loaded = undefined;\n    this.initializeSelect2(\"select.select2\", {})\n\n    // Ensure we have the settings panel available to us.\n    if($(\"#report-settings-panel-form\").length) {\n      this.resetFilterOptions();\n      this.doInitialLoad();\n      this.initReportSettingsSavedFilterSorting();\n    }\n\n    window.initTooltips()\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n  additionalGroupingCheckAll(event) {\n    var item = event.target;\n    var isChecked = item.checked;\n    $(\"input[name='additional_grouping[]']\").each(function(){\n      this.checked = isChecked;\n    });\n  }\n\n  array_diff_assoc (arr1) {\n    var retArr = {};\n    var argl = arguments.length;\n    var k1 = '';\n    var i = 1;\n    var k = '';\n    var arr = {};\n  \n    arr1keys: for (k1 in arr1) {\n      for (i = 1; i < argl; i++) {\n        arr = arguments[i];\n        for (k in arr) {\n          if (arr[k] === arr1[k1] && k === k1) {\n            continue arr1keys;\n          }\n        }\n        retArr[k1] = arr1[k1];\n      }\n    }\n  \n    return retArr;\n  }\n\n  checkReportSettingsPanelOverflow()\n  {\n    var panelDiv = document.getElementById('configureReportOptions');\n    if(panelDiv)\n    {\n      var scrollPanelElements = panelDiv.getElementsByClassName(\"offcanvas-body\");\n      if(scrollPanelElements && scrollPanelElements[0])\n      {\n        var combined_element_height = $(\"#report-settings\").height();\n        combined_element_height += 40; // Padding\n        if(!$(\"#report-settings-update-btn-container-follow\").is(\":visible\"))\n        {\n          combined_element_height += 50; // Hidden button\n        }\n\n        if(combined_element_height > scrollPanelElements[0].offsetHeight)\n        {\n          if(!$(\"#report-settings-update-btn-container-sticky\").is(\":visible\"))\n          {\n            $(\"#report-settings-update-btn-container-follow\").fadeOut('fast');\n            $(\"#report-settings-update-btn-container-sticky\").fadeIn('fast');\n          }\n        }\n        else\n        {\n          if(!$(\"#report-settings-update-btn-container-follow\").is(\":visible\"))\n          {\n            $(\"#report-settings-update-btn-container-sticky\").fadeOut('fast');\n            $(\"#report-settings-update-btn-container-follow\").fadeIn('fast');\n          }\n        }\n      }\n    }\n  }\n\n  clearReportSettings(e) {\n    e.preventDefault()\n    this.clearReportForReload()\n    this.resetSettingsToDefault()\n    $('#submit').click()\n  }\n\n  clearReportForReload() {\n    $('#table-data-holder').hide()\n    $('#national_comparative_data').html('');\n    $('#table-data').html('');\n    $('#chart-data-holder').html('<div class=\"chart-loader\"></div>');\n    $('#date-range-display').html('');\n    $('#location-display').html('');\n  }\n\n  //data-action=\"change->report-display#date_range_change\" data-range-kind=\"end\" data-range-other=\"custom_start_date\"\n  date_range_change(e) {\n    const controllerRef = this;\n    let changedInput = e.currentTarget;\n    if (changedInput && changedInput.dataset && changedInput.dataset.rangeKind && changedInput.dataset.rangeOther ) {\n      let otherInput = document.getElementById(changedInput.dataset.rangeOther);\n      if (otherInput) {\n        let changedInputVal = changedInput.value;\n        if (changedInput.dataset.rangeKind == \"end\") {\n          otherInput.setAttribute(\"max\", changedInputVal);\n          if (changedInputVal < otherInput.value) {\n            otherInput.value = changedInputVal;\n          }\n        } else { //changedInput.dataset.rangeKind == \"start\"\n          otherInput.setAttribute(\"min\", changedInputVal);\n          if (changedInputVal > otherInput.value) {\n            otherInput.value = changedInputVal;\n          }\n        }\n      }\n    }\n  }\n\n  deleteSavedFilter(e) {\n    const controllerRef = this\n    e.preventDefault()\n    var item = e.target\n\n    if(confirm(i18n_string(\"reports.chart_settings.are_you_sure_you_want_to_delete_this_report_settings_filter\", \"Are you sure you want to delete this report settings filter?\"))) {\n      var authtoken = $(\"#edit_saved_report_setting_\" + item.dataset.id).children('input[name=\"authenticity_token\"]').val()\n    \n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/reports/\" + item.dataset.id + \"/delete_filter\", \n        type: 'DELETE', \n        success(data) {\n          if(data.status == 200) {\n            $(\".report-settings-saved-filter\").each(function(){\n              if($(this).data(\"save_id\") == data.id) {\n                $(this).remove();\n              }\n            });\n  \n            // Some magic if you just deleted your currently applied filter\n            var removed_saved_data = $(\"#report-settings-saved-filter-data\"+data.id).val();\n            $(\"#report-settings-saved-filter-data\"+data.id).remove();\n            document.edit_saved_filter_loaded = undefined;\n            controllerRef.incrementSavedSettingsCountForTab(-1);\n  \n            if(document.saved_report_settings_last == removed_saved_data){\n              controllerRef.resetSettingsToDefault()\n              $('#submit').click()\n            }\n  \n            $(\"#inner_modal_popup\").modal(\"hide\");\n          }\n          else {\n            alert(i18n_string(\"reports.chart_settings.error_deleting_saved_filter\", \"Error deleting saved filter\"));\n          }\n        }\n      });\n    }\n\n  }\n\n  deselectAllLocations(e) {\n    e.preventDefault()\n    $(\"#select2_locations > option\").prop(\"selected\",false);\n    $(\"#select2_locations > option:first\").prop(\"selected\",\"selected\");\n    $(\"#select2_locations\").trigger(\"change\");\n    this.checkReportSettingsPanelOverflow();\n  }\n\n  doInitialLoad() {\n    document.initial_report_load_complete = false;\n\n    if ($(\"#dev_test_tool_report_dates_enabled\").length) {\n      $(\"#date_range_select_custom\").prop(\"checked\", true);\n      $(\"#custom_start_date\").val($(\"#dev_test_tool_report_date_start\").val());\n      $(\"#custom_end_date\").val($(\"#dev_test_tool_report_date_end\").val());\n    }\n\n    // Make sure additional_groupings are selected before saving default load settings\n    // --  Needed to add to match the submitForm function\n    if($(\"#report_id\").length && $(\"#report_id\").val() == \"resources_accessed\" && $('input[name=\"additional_grouping[]\"]').length && $('input[name=\"additional_grouping[]\"]:checked').length == 0) {\n      $.each($('input[name=\"additional_grouping[]\"]'), function(){\n        $(this).prop(\"checked\", true)\n      })\n    }\n\n    // Get the settings from the form itself.\n    document.saved_report_settings_default = this.getJSONLoadSettingsString($('#report-settings-panel-form'))\n\n    // If we have saved report settings from a previous session (saved in database)\n    if( $(\"#saved_report_settings_last\").length && $(\"#saved_report_settings_last\").val() != \"\") {\n      document.saved_report_settings_last = $(\"#saved_report_settings_last\").val()\n\n      if( JSON.parse(document.saved_report_settings_default).wbi_version != JSON.parse(document.saved_report_settings_last).wbi_version ) {\n        // console.log(\"WBI version changed\")\n        document.saved_report_settings_last = document.saved_report_settings_default\n      }\n\n      if($(\"#saved_report_settings_last_save_id\").length) {\n        document.saved_filter_loaded = $(\"#saved_report_settings_last_save_id\").val()\n      }\n\n      // Load saved settings\n      this.loadSettingsFromSerializedString(document.saved_report_settings_last);\n\n    } else {\n      document.saved_report_settings_last = document.saved_report_settings_default;\n    }\n\n    // If not loading for automated report panel, then submit form :)\n    if (!$(\"#automated-reporting-config-panel\").length) {\n      $('#submit').click();\n    }\n  }\n\n\n  drawChart() {\n    const controllerRef = this\n    if(document.getElementById(\"chart-data-holder\"))\n    {\n\n      var date_format = $('input[name=\"duration\"]:checked').val()\n      var data = new google.visualization.DataTable();\n\n      if(window.chart_kind == \"bar\") {\n        var chart = new google.visualization.ColumnChart(document.getElementById(\"chart-data-holder\"));\n      } \n      else if( window.chart_kind == \"line\") {\n        var chart = new google.visualization.LineChart(document.getElementById(\"chart-data-holder\"));\n      }\n      else if( window.chart_kind == \"pie\") {\n        var chart = new google.visualization.PieChart(document.getElementById(\"chart-data-holder\"));\n      }\n\n      window.chart_columns.forEach(function(value, index){\n        if(Object.keys(value) == 'string') {\n          data.addColumn( 'string', Object.values(value) )\n        } \n        else if(Object.keys(value) == 'number') {\n          data.addColumn( 'number', Object.values(value) )\n        } \n        else if(Object.keys(value) == 'tooltip')  {\n          data.addColumn( {type: 'string', role: 'tooltip', p: {'html': true}} )\n        }\n        else if(Object.keys(value) == 'style') {\n          data.addColumn({type: 'string', role: 'style'});\n        }\n        else if(Object.keys(value) == 'date') {\n          data.addColumn( 'date', Object.values(value) )\n        }\n      })\n\n      if(window.chart_kind == \"line\" || window.chart_kind == \"bar\") {\n        window.chart_data.forEach(function(value){\n          if(window.chart_kind == \"line\") {\n\n            // this.generateDateForReport isn't working here :/ so needed to be inline\n            var date = value[0].toString()\n\n            var year = date.substring(0,4);\n            var month = date.substring(4,6);\n            var day = ''\n            \n            if(date.length > 6)\n            {\n              day = date.substring(6,8);\n            }\n\n            if(date_format == 'week'){\n              date = new Date(year, 0,  1 + (month - 1) * 7);\n            }\n            else if(date_format == 'month') {\n              date = new Date(year, (month-1));\n            }\n            else if(date_format == 'year') {\n              date = new Date(year);\n            }\n            else if(date_format == 'day') {\n              date = new Date(year, (month-1), day);\n            }\n\n            value[0] = date\n            data.addRow(value)\n          } else {\n            data.addRow(value)\n          }  \n        })\n      }\n\n      if(window.chart_kind == \"pie\") {\n        if(window.chart_date.length == 2) {\n          // Comparison Pie Charts\n          chart_data = window.chart_data\n\n          var arr = [];\n\n          $.each(chart_data[0], function(key, val){\n            arr.push($.map(val, function(el) { return el }));\n          });\n          data.addRows(arr);\n\n          var first_data_set = data;\n          var second_data_set = first_data_set.clone();\n          second_data_set.removeRows(0, 10000);\n          var arr2 = [];\n          $.each(chart_data[1], function(key, val){\n            arr2.push($.map(val, function(el) { return el }));\n          });\n          second_data_set.addRows(arr2);\n          data = chart.computeDiff(first_data_set, second_data_set);\n        } else {\n\n          data.addRows(window.chart_data)\n        }\n      }\n\n      var options = window.chart_options\n\n      // window.chart_data.forEach(function(value){\n      if(window.chart_kind == \"line\" && window.chart_data && window.chart_data.length == 1) {\n        // console.log(options['hAxis']);\n        options['hAxis']['ticks'] = [];\n      }\n\n      // If we have a high level of distress line present.\n      if(window.distress_line_val != undefined) {\n        let high_level_of_distress_text = i18n_string(\"reports.high_level_of_distress\", \"High Level of Distress\");\n        data.addColumn( 'number', high_level_of_distress_text)\n\n        var colCount = data.getNumberOfColumns();\n        var rowCount = data.getNumberOfRows();\n        for(var zz=0;zz<rowCount;zz++)\n        {\n          data.setCell(zz, colCount-1, window.distress_line_val);\n        }\n\n        var seriesNum = -1;\n        for(var yy=0;yy<colCount;yy++)\n        {\n          var coltype = data.getColumnType(yy);\n          if(coltype == \"number\")\n          {\n            seriesNum++;\n          }\n        }\n        options.seriesType = 'bars';\n        options.series = {};\n        options.series[seriesNum] = {\n            type: \"steppedArea\",\n            color: '#FF0000',\n            visibleInLegend: false,\n            areaOpacity: 0,\n            enableInteractivity: false\n        };\n      }\n\n      window.cached_chart_data = [window.chart_kind, data.toJSON(), JSON.stringify(options)];\n\n      google.visualization.events.addListener(chart, 'ready', function() {\n        // Download report\n        $(\"#image_data\").val(chart.getImageURI());\n      });\n\n      chart.draw(data, options);\n    }\n  }\n\n  getCurrentReportFilterSettingsForDisplay() {\n    return window.getCurrentReportFilterSettingsForDisplay();\n  }\n\n  getCurrentReportFilterSettingsForDisplayHTML()\n  {\n    var settings_list = this.getCurrentReportFilterSettingsForDisplay();\n    var return_html = \"\";\n    if(settings_list.length > 0)\n    {\n      return_html += '<h2>'+i18n_string(\"reports.chart_settings.title\", \"Chart Settings\")+'</h2>';\n      for(var i=0;i<settings_list.length;i++){\n        return_html += '<p class=\"setting-print\">';\n        return_html += '<strong>'+settings_list[i][0]+'</strong><br />';\n        return_html += settings_list[i][1];\n        return_html += '</p>';\n      }\n    }\n    return return_html;\n  }\n\n  getJSONLoadSettingsString($formObj) {\n    var settings_data = $formObj.serializeArray();\n    var final_data_array = {};\n    var index_array_counter = {};\n    for(var i=0;i<settings_data.length;i++){\n      var name = settings_data[i].name;\n      if(name != 'authenticity_token') {\n        if(name.indexOf(\"[]\") != -1){\n          if(!index_array_counter[name]){\n            index_array_counter[name] = 0;\n          }\n          var new_temp_name = name.replace(\"[]\",\"[\"+index_array_counter[name]+\"]\");\n          index_array_counter[name]++;\n          name = new_temp_name;\n        }\n        final_data_array[name] = settings_data[i].value;\n      }\n    }\n    return JSON.stringify(final_data_array);\n  }\n\n  incrementSavedSettingsCountForTab(amountVal){\n    var current_html = $(\"#report-saved-tab\").html();\n    // console.log(current_html);\n    var current_val = 0;\n    if(current_html.indexOf(\"(\") != -1) {\n      var regExp = /\\(([^)]+)\\)/;\n      var matches = regExp.exec(current_html);\n      // console.log(matches[1]);\n      if(Number(matches[1]) > 0){\n        current_val = Number(matches[1]);\n      }\n    }\n    current_val += amountVal;\n    $(\"#report-saved-tab\").html(i18n_string(\"reports.saved_settings\", \"Saved Settings\")+\" (\"+current_val+\")\");\n    if(current_val > 1){\n      this.initReportSettingsSavedFilterSorting();\n    }\n  }\n\n  initializeSelect2(selector, options) {\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n\n  initReportSettingsSavedFilterSorting(){\n    if ($( '#report-settings-saved-filter-list-group' ).data( 'sortable' )) {\n      $(\"#report-settings-saved-filter-list-group\").sortable(\"destroy\");\n    }\n    $( \"#report-settings-saved-filter-list-group\" ).sortable({\n      handle: \".drag-handle\",\n      update: function( event, ui ) {\n        var save_id_order = [];\n        $('#report-settings-saved-filter-list-group .report-settings-saved-filter').each(function(idx) {\n          save_id_order.push($(this).data(\"save_id\"));\n        });\n        // console.log(\"save_id_order=\"+save_id_order.join(\",\"));\n        // Save ordering to server\n        var formData = {positions: save_id_order};\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: \"/reports/save_report_setting_order\",\n          data: formData,\n          type: \"POST\",\n          success(dataObj) {\n            if(dataObj.success){\n              $(\"#report-settings-saved-list-sort-button-container\").html('<span class=\"text-success\">'+i18n_string(\"reports.chart_settings.order_saved\", \"Order Saved\")+'</span>');\n            }else if(dataObj.error){\n              $(\"#report-settings-saved-list-sort-button-container\").html('<span class=\"text-danger\">'+dataObj.error+'</span>');\n            }\n            setTimeout(function(){\n              $(\"#report-settings-saved-list-sort-button-container\").html('&nbsp;');\n            },2500);\n          }\n        });\n\n      }\n    });\n  }\n\n\n  loadSavedReportSettings(e) {\n    e.preventDefault();\n\n    var item = e.target\n\n    var $parentContainer = $(item).closest(\".report-settings-saved-filter\");\n    var save_id = $parentContainer.data(\"save_id\");\n\n    if(save_id) {\n      document.saved_filter_loaded = save_id;\n      var settings_content = $(\"#report-settings-saved-filter-data\" + save_id).val();\n      // console.log(settings_content);\n      $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\");\n      $parentContainer.addClass(\"list-group-item-success\");\n\n      this.loadSettingsFromSerializedString(settings_content);\n      $('#submit').click()\n\n      document.bsOffcanvas.hide()\n    }\n  }\n\n  loadSettingsFromSerializedString(serializedDataString){\n    var dataParsed = JSON.parse(serializedDataString);\n\n    if ($(\"#dev_test_tool_report_dates_enabled\").length) {\n      dataParsed['start_date'] = $(\"#dev_test_tool_report_date_start\").val();\n      dataParsed['end_date'] = $(\"#dev_test_tool_report_date_end\").val();\n      dataParsed['date_range_select'] = '0';\n    }\n\n    var dataKeys = Object.keys(dataParsed);\n    // UNCHECK CHECKBOXES/MULTI-SELECTs\n    for(var i=0;i<dataKeys.length;i++){\n      var name = dataKeys[i];\n      var value = dataParsed[name];\n      if(name.indexOf('[') == -1 || $(\"[name='\"+name+\"']\").length > 0)\n      {\n        var $element = $(\"[name='\"+name+\"']\");\n        var inputType = $element.prop(\"type\");\n        if(inputType == \"checkbox\") {\n          $element.prop(\"checked\",false);\n        } else if(inputType == \"select-multiple\") {\n          $element.children(\"option\").prop(\"selected\", false);\n        }\n      }\n      else if(name.indexOf('[') != -1)\n      {\n        // Multi-select selectbox or checkbox array\n        var nameParts = name.split(\"[\");\n        name = nameParts[0]+\"[]\";\n        var $element = $(\"[name='\"+name+\"']\");\n        if($element.length > 0)\n        {\n          var inputType = $element.prop(\"type\");\n          if(inputType == \"checkbox\") {\n            $element.prop(\"checked\",false);\n          } else if(inputType == \"select-multiple\") {\n            $element.children(\"option\").prop(\"selected\", false);\n          }\n  \n        }\n      }\n    }\n    // SELECT NEW VALUES\n    var nonExistingIndexes = [];\n    for(var i=0;i<dataKeys.length;i++){\n      var name = dataKeys[i];\n      var value = dataParsed[name];\n      if(name.indexOf('[') == -1 || $(\"[name='\"+name+\"']\").length > 0)\n      {\n        var $element = $(\"[name='\"+name+\"']\");\n        var inputType = $element.prop(\"type\");\n        if(inputType == \"radio\") {\n          $(\"[name='\"+name+\"'][value='\"+value+\"']\").click();\n        } else if(inputType == \"checkbox\") {\n          $element.each(function(){\n            $(this).prop(\"checked\",true);\n          });\n        } else {\n          $element.val(value);\n        }\n  \n        if($element.hasClass(\"select2-hidden-accessible\")){\n          $element.trigger('change.select2');\n        }\n      }\n      else if(name.indexOf('[') != -1)\n      {\n        // Multi-select selectbox or checkbox array\n        var nameParts = name.split(\"[\");\n        name = nameParts[0]+\"[]\";\n        var $element = $(\"[name='\"+name+\"']\");\n        if($element.length > 0)\n        {\n          var inputType = $element.prop(\"type\");\n          if(inputType == \"radio\") {\n            $(\"[name='\"+name+\"'][value='\"+value+\"']\").click();\n          } else if(inputType == \"checkbox\") {\n            $element.each(function(){\n              if($(this).val() == value) {\n                $(this).prop(\"checked\", true);\n              }\n            });\n          } else if(inputType == \"select-multiple\") {\n            $element.children(\"option[value='\" + value + \"']\").prop(\"selected\", true);\n          } else if ($element.length == 1){\n            $element.val(value);\n          }\n  \n          if($element.hasClass(\"select2-hidden-accessible\")){\n            $element.trigger('change.select2');\n          }\n  \n        }\n        else\n        {\n          nonExistingIndexes.push(i);\n        }\n      }\n    }\n    // TODO: Handle dynamic fields that may not be on the form yet :)\n    // -- Temporary variables can be put in id=\"report-settings-additional-grouping-always-hidden\"\n    $(\"#report-settings-additional-grouping-always-hidden\").html(\"\");\n    // if(nonExistingIndexes.length > 0){\n    //   for(var j=0;j<nonExistingIndexes.length;j++) {\n    //     var i = nonExistingIndexes[j];\n    //     var name = dataKeys[i];\n    //     var value = dataParsed[name];\n    //     var nameParts = name.split(\"[\");\n    //     name = nameParts[0]+\"[]\";\n    //     var $temp_hidden = $('<input type=\"hidden\" name=\"'+name+'\" class=\"temporary-additional-grouping-input\" />');\n    //     $temp_hidden.val(value);\n    //     $(\"#report-settings-additional-grouping-always-hidden\").append($temp_hidden);\n    //   }\n    // }\n  }\n\n  reportSettingsCheckForChangeFromDefault() {\n\n    var array1 = JSON.parse(document.saved_report_settings_default);\n    var array2 = JSON.parse(document.saved_report_settings_last);\n\n    // console.log(\"Saved Report Settings Default\", array1);\n    // console.log(\"Saved Report Settings Last\", array2);\n\n    if($(\"#dynamic-additional-grouping-div\").length)\n    {\n      var temp_array2 = {};\n      var arrayKeys = Object.keys(array2);\n      for(var i=0;i<arrayKeys.length;i++){\n        var currentName = arrayKeys[i];\n        if(currentName.indexOf(\"additional_grouping[\") == -1){\n          temp_array2[currentName] = array2[currentName];\n        }\n      }\n      array2 = temp_array2;\n\n    }\n    var comparison = this.array_diff_assoc(array1, array2);\n    var comparison2 = this.array_diff_assoc(array2, array1);\n\n    // console.log(\"Comparison 1\", comparison);\n    // console.log(\"Comparison 2\", comparison2);\n\n    if(Object.keys(comparison).length > 0 || Object.keys(comparison2).length > 0){\n      // Notice on \"Configure Report\" button\n      // Notice in header area to reset\n      // Notice in settings panel to reset\n      // Notice in settings panel to save as \"Saved Configuration\"\n      $(\".report-settings-filter-applied-notice\").show();\n      // console.log(\"Save Filter Loaded:\" + document.saved_filter_loaded)\n\n      if(document.saved_filter_loaded && document.saved_filter_loaded > 0)\n      {\n        // console.log(\"A\")\n        $(\".report-settings-filter-save-btn\").hide();\n        $(\".report-settings-filter-save-as-new-btn\").show();\n        // Check to see if the saved_filter_loaded differs from the current last filter\n        $(\".report-settings-filter-update-btn\").show();\n      }\n      else\n      {\n        // console.log(\"B\")\n        $(\".report-settings-filter-update-btn\").hide();\n        $(\".report-settings-filter-save-as-new-btn\").hide();\n        $(\".report-settings-filter-save-btn\").show();\n      }\n    }else{\n      // console.log(\"C\")\n      $(\".report-settings-filter-applied-notice\").hide();\n      $(\".report-settings-filter-save-btn\").hide();\n      $(\".report-settings-filter-update-btn\").hide();\n      $(\".report-settings-filter-save-as-new-btn\").hide();\n    }\n    this.checkReportSettingsPanelOverflow();\n  } \n\n  resetFilterOptions() {\n    // Used to set the initial load of filter options\n    // If possible use the label for attribute on the buttons\n    if($('[name=\"display_data\"]').length) { $('[name=\"display_data\"]:first').click() }\n    if($('#chart_settings_style').length) { $('#chart_settings_style').children('div').children().first('input').click() }\n    if($('#chart_settings_period').length) {\n      if ($(\"#dev_test_tool_report_dates_enabled\").length) {\n        $('[for=\"date_range_select_custom\"]').click();\n        $(\"#custom_start_date\").val($(\"#dev_test_tool_report_date_start\").val());\n        $(\"#custom_end_date\").val($(\"#dev_test_tool_report_date_end\").val());\n      } else {\n        $('[for=\"date_range_select_all\"]').click();\n      }\n    }\n    if($('#chart_settings_period_email').length) { $('[for=\"date_range_select_1\"]').click() }\n    if($('#chart_layout_duration').length) { $('[for=\"chart_duration_month\"]').click() }\n    if($(\"#custom_date_range_period\").length) { \n      var min = $('#custom_start_date').attr('min'); \n      $('#custom_start_date').val( min ); \n      $('#custom_end_date').val( new Date().toISOString().slice(0, 10) );\n    }\n    if($(\"#compare_to\").length) { $('[for=\"compare_date_range_select_none\"]').click() }\n    if($(\"#compare_date_range_select\").length) { \n      var min = $('#compare_start_date').attr('min');\n      $('#compare_start_date').val( min ); \n      $('#compare_end_date').val( new Date().toISOString().slice(0, 10) );\n    }\n    if($(\"#locations.select-all-by-default\").length) { $(\"#select_all\").click(); }\n    if($(\"#locations #facility_grouping\").length) { $('#facility_grouping').prop(\"selectedIndex\", 0).trigger(\"change\") }\n    if($(\"#show_subspecialty\").length){ $('#show_subspecialty').prop(\"selectedIndex\", 0).trigger(\"change\"); this.toggleSpecialty(null) }\n    if($(\"#chart_settings_specialties\").length && !$(\"#adv_report_id\").length){ $.each($('input[name=\"additional_grouping[]\"]'), function(){ $(this).prop(\"checked\", false) }) }\n    $('#national_comparative_data').html('');\n  }\n\n  resetSettingsToDefault() {\n    if(document.saved_report_settings_default){\n      document.saved_filter_loaded = undefined;\n      $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\");\n      this.loadSettingsFromSerializedString(document.saved_report_settings_default);\n    }\n  }\n\n  resourceCheckAll(event) {\n    var item = event.target;\n    var isChecked = item.checked;\n    $(\"input[name='resource[]']\").each(function(){\n      this.checked = isChecked;\n    });\n  }\n\n  saveLastReportSettings(){\n    // Do not save the \"last\" settings when running a report through automation\n    if ($(\"#skip_report_settings_save\").length) {\n      return;\n    }\n    const controllerRef = this\n    var settings_last_data = $(\"#report-settings-panel-form\").serializeArray()\n\n    var formData = { settings_data: settings_last_data, save_for: \"last\" }\n    $.post(\"/reports/save_settings\", formData, function(returnDataStr) {\n      if(returnDataStr.status == 200) {\n        document.saved_report_settings_last = controllerRef.getJSONLoadSettingsString($(\"#report-settings-panel-form\"))\n        controllerRef.reportSettingsCheckForChangeFromDefault()\n      } else {\n        alert(i18n_string(\"reports.error_loading_report\", \"Error loading report\"));\n      }\n    });\n  }\n\n  saveReportFilter(e) {\n    e.preventDefault();\n    const controllerRef = this\n\n    var save_for = \"account\";\n    if($(\"#save_report_settings_modal_allow_org\").prop(\"checked\")){\n      save_for = \"customer_sub_account\";\n    }\n\n    var save_report_id = $(\"#save_report_id\").val();\n    var save_report_name = $(\"#saved_report_setting_report_name\").val();\n    var settings_data = $(\"#report-settings-panel-form\").serializeArray();\n    var formData = {settings_data: settings_data, save_for: save_for, save_report_name: save_report_name};\n\n    if(save_report_id && save_report_id > 0){\n      // Update\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/reports/\" + save_report_id + \"/update_filter\", \n        data: { save_report_name: save_report_name, allow_org: $(\"#save_report_settings_modal_allow_org\").is(\":checked\") }, \n        type: \"PATCH\",\n        success(data) {\n          if(data.status == 200) {\n            // Update list item name and data\n            var $item = $(\".report-settings-saved-filter\").filter(function(){\n              return $(this).data(\"save_id\") == data.data.id;\n            });\n  \n            $item.data(\"save_for\", data.data.save_for);\n            $item.data(\"save_report_name\", data.data.report_name);\n            $item.find(\".report-settings-saved-filter-load-btn\").html(data.data.report_name);\n\n            document.edit_saved_filter_loaded = undefined;\n            $(\"#saveReportSettingsModal\").modal(\"hide\");\n          }\n        }\n      });\n    } else {\n      // Save as new\n      $.post( $(\"#new_saved_report_setting\").attr('action'), formData, function(returnDataObj) {\n\n        if(returnDataObj.status == 200) {\n          $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\"); // Remove currently selected item if there is one\n          document.saved_report_settings_last = returnDataObj.data.content;\n          // Insert into list\n          $(\"#report-settings-saved-filter-none-message\").hide();\n          var savedItemHTML = '<div class=\"list-group-item report-settings-saved-filter justify-content-between list-group-item-success\" data-save_id=\"' + returnDataObj.data.id + '\" data-save_for=\"' + returnDataObj.data.save_for + '\" data-save_report_name=\"' + returnDataObj.data.report_name + '\"></div>';\n          var $savedItemHTMLObj = $(savedItemHTML);\n\n          $(\"#report-saved .list-group\").append($savedItemHTMLObj);\n\n          var savedLinkHTML = '<div><span class=\"drag-handle fas fa-grip-vertical ui-sortable-handle\"></span> <a href=\"#\" class=\"report-settings-saved-filter-load-btn\" data-action=\"click->report-display#loadSavedReportSettings\">'+ $('<div />').text(returnDataObj.data.report_name).html() +'</a></div> <a href=\"/reports/' + returnDataObj.data.id + '/edit_filter\" class=\"text-success report-settings-saved-filter-edit-btn\" data-turbo-frame=\"inner_modal\" data-action=\"click->modal#loadInnerModal\" data-turbo=\"true\" data-id=\"' + returnDataObj.data.id + '\" data-modalSize=\"modal-md\"><em class=\"fas fa-edit\"></em></a>';\n          $savedItemHTMLObj.html(savedLinkHTML);\n\n          var $savedInputObj = $('<input type=\"hidden\" id=\"report-settings-saved-filter-data'+returnDataObj.data.id+'\" class=\"report-settings-saved-filter-data\" />');\n          $savedInputObj.val(returnDataObj.data.content);\n          $(\"body\").append($savedInputObj);\n\n          // Flag update\n          document.saved_filter_loaded = returnDataObj.data.id\n\n          // Do check for alerts/notices\n          controllerRef.incrementSavedSettingsCountForTab(1);\n          controllerRef.reportSettingsCheckForChangeFromDefault();\n          $(\"#system_modal_popup\").modal(\"hide\");\n        } else {\n          alert(i18n_string(\"reports.chart_settings.error_saving_report_filter\", \"Error saving report filter\"));\n        }\n      });\n    }\n\n  }\n\n  selectAllLocations(e) {\n    e.preventDefault()\n    $(\"#select2_locations > option\").prop(\"selected\",\"selected\");\n    $(\"#select2_locations\").trigger(\"change\");\n    this.checkReportSettingsPanelOverflow();\n  }\n\n  submitForm(e) {\n    if (!window.load_report_timeout) {\n      window.load_report_timeout = 1500;\n    } else {\n      window.load_report_timeout = 50;\n    }\n    window.cached_chart_data = undefined;\n    $('#chart-data-holder').show().html('<div class=\"chart-loader\"></div>')\n    $('#table-data-holder').hide()\n\n    const controllerRef = this\n    e.preventDefault()\n    this.chart_data = ''\n\n    this.clearReportForReload()\n\n    if($('input[name=\"additional_grouping[]\"]:checked').length == 0) {\n      $.each($('input[name=\"additional_grouping[]\"]'), function(){\n        $(this).prop(\"checked\", true)\n      })\n    }\n\n    var form = e.target\n    var form_data = $(form).serialize()\n\n    document.bsOffcanvas.hide()\n    document.offcanvas.addEventListener('hidden.bs.offcanvas', function () {\n      // console.log(\"CLOSED\")\n    });\n    setTimeout(() => {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: report_url, \n        data: form_data,\n        type: 'POST', \n        async: true,\n        success(data) {\n          if(data.status == 200) {\n            if(data.date.length == 1) {\n              $(\"#date-range-display\").html( data.date[0][2] );\n            } else if(data.date.length == 2) {\n              let and_text = i18n_string(\"general.and\", \"and\");\n              $(\"#date-range-display\").html( data.date[0][2] + ' '+and_text+' ' +  data.date[1][2] );\n            }\n\n            $('#national_comparative_data').html( data.chart_data.national_report_label );\n\n            if(data.chart_data.report_name) {\n              $(\"#report-name-holder\").html(data.chart_data.report_name)\n            }\n\n            $('#location-display').html( data.account_names )\n            // $(\"#data-first-collected\").html(data.first_data_collected)\n            \n            $(\"#table-data\").html( data.chart_data.report_table_data)\n\n            // $(\"#data-first-collected\").show()\n            $('#table-data-holder').show()\n\n            if(data.chart_data.chart_data == undefined) {\n              $('#chart-data-holder').hide()\n            }\n\n            // Set download report data\n            $('#export_chart_title').val( $(\"#report-name-holder\").html() )\n            $(\"#chart_title_dates\").val( $('#date-range-display').html() )\n            $(\"#chart_title_locations\").val( $(\"#location-display\").html() )\n            $(\"#export_chart_desc\").val( $(\"#chart-description-holder\").html() )\n            // $(\"#export_chart_desc_dynamic\").val( $(\"#\").html() )\n            // $('#export_chart_legend').val( $(\"#\").html() )\n            $(\"#export_chart_total_text\").val( $(\"#table-data-holder\").html() )\n            // $(\"#export_chart_filter_settings\").val( $(\"#\").html() )\n\n\n\n            // when setting variables that need to be passed to other functions from within an ajax response, use window. or document. instead of this.\n            window.chart_date = data.date\n            window.chart_data = data.chart_data.chart_data\n            window.chart_options = data.chart_data.chart_options\n            window.chart_columns = data.chart_data.chart_columns\n            window.chart_kind = data.chart_data.chart_kind\n            window.distress_line_val = data.chart_data.distress_line_val\n\n            load_google_charts();\n            add_google_chart_onload_callback( controllerRef.drawChart );\n\n            // Save as last settings -- Only after the inital load is complete\n            if(document.initial_report_load_complete) {\n              controllerRef.saveLastReportSettings();\n            } else {\n              document.initial_report_load_complete = true\n              controllerRef.reportSettingsCheckForChangeFromDefault()\n            }\n\n            window.initTooltips()\n              \n          } else {\n            alert(i18n_string(\"reports.error_loading_report\", \"Error loading report\"));\n          }\n        }\n      });\n    }, window.load_report_timeout);\n  }\n\n\n  submitFormNoOptions(e) {\n    window.cached_chart_data = undefined;\n    const controllerRef = this\n    e.preventDefault()\n    this.chart_data = ''\n\n    this.clearReportForReload()\n\n    var form = e.target\n    var form_data = $(form).serialize()\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: report_url, \n      data: form_data,\n      type: 'POST', \n      async: false,\n      success(data) {\n        if(data.status == 200) {\n          if(data.date.length == 1) {\n            $(\"#date-range-display\").html( data.date[0][2] );\n          } else if(data.date.length == 2) {\n            let and_text = i18n_string(\"general.and\", \"and\");\n            $(\"#date-range-display\").html( data.date[0][2] + ' '+and_text+' ' +  data.date[1][2] );\n          }\n\n          $('#location-display').html( data.account_names )\n          \n          $(\"#table-data\").html( data.chart_data.report_table_data)\n\n          // $(\"#data-first-collected\").show()\n          $('#table-data-holder').show()\n\n          // Set download report data\n          // $('#export_chart_title').val( $(\"#report-name-holder\").html() )\n          // $(\"#chart_title_dates\").val( $('#date-range-display').html() )\n          // $(\"#chart_title_locations\").val( $(\"#location-display\").html() )\n          // $(\"#export_chart_desc\").val( $(\"#chart-description-holder\").html() )\n          // $(\"#export_chart_desc_dynamic\").val( $(\"#\").html() )\n          // $('#export_chart_legend').val( $(\"#\").html() )\n          // $(\"#export_chart_total_text\").val( $(\"#table-data-holder\").html() )\n          // $(\"#export_chart_filter_settings\").val( $(\"#\").html() )\n\n\n\n          // when setting variables that need to be passed to other functions from within an ajax response, use window. or document. instead of this.\n          window.chart_data = data.chart_data.chart_data\n          window.chart_options = data.chart_data.chart_options\n          window.chart_columns = data.chart_data.chart_columns\n          window.chart_kind = data.chart_data.chart_kind\n          // window.distress_line_val = data.chart_data.distress_line_val\n\n          load_google_charts();\n          add_google_chart_onload_callback( controllerRef.drawChart );\n\n          // Save as last settings -- Only after the inital load is complete\n          // if(document.initial_report_load_complete) {\n          //   controllerRef.saveLastReportSettings();\n          // } else {\n          //   document.initial_report_load_complete = true\n          //   controllerRef.reportSettingsCheckForChangeFromDefault()\n          // }\n            \n        } else {\n          alert(i18n_string(\"reports.error_loading_report\", \"Error loading report\"));\n        }\n      }\n    });\n  }\n\n  \n\n  toggleCompareDates(event) {\n    var item = event.target\n    if(item.value == 'custom') {\n      $('#compare_date_range_select').removeClass('hidden');\n    } else {\n      $('#compare_date_range_select').addClass('hidden');\n    }\n    this.checkReportSettingsPanelOverflow();\n  }\n\n  toggleDisplayDataType(event) {\n    var sel_display_data;\n    if($('input[name=\"display_data\"]').attr(\"type\") == \"radio\")\n    {\n      sel_display_data = $('input[name=\"display_data\"]:checked').val();\n    }\n    else if($('input[name=\"display_data\"]').attr(\"type\") == \"hidden\")\n    {\n      sel_display_data = $('input[name=\"display_data\"]').val();\n    }\n    if (sel_display_data == 'mean') {\n      $(\"#high_level_of_distress\").show();\n      $(\"#chart_assessments\").show();\n      $('[for=\"chart_type_line\"]').show();\n      $('#chart_resources_accessed').addClass(\"hidden\").hide();\n    } else if (sel_display_data == 'high_distress') {\n      $(\"#high_level_of_distress\").hide();\n      $(\"#chart_assessments\").show();\n      $('[for=\"chart_type_line\"]').show();\n      $('#chart_resources_accessed').addClass(\"hidden\").hide();\n    } else if (sel_display_data == 'assessments') {\n      $(\"#high_level_of_distress\").hide();\n      $('#chart_resources_accessed').addClass(\"hidden\").hide();\n      $(\"#chart_assessments\").hide();\n      $('[for=\"chart_type_line\"]').hide();\n      if(!$(\"#chart_type_bar\").prop(\"checked\")){\n        // $(\"#chart_type_radio_bar\").prop(\"checked\", true);\n        $(\"#chart_type_bar\").click();\n      }\n    } else if (sel_display_data == 'resources') {\n      $('#chart_resources_accessed').removeClass(\"hidden\").show();\n      $(\"#high_level_of_distress\").hide();\n      $(\"#chart_assessments\").hide();\n      $('[for=\"chart_type_line\"]').hide();\n      if(!$(\"#chart_type_bar\").prop(\"checked\")){\n        // $(\"#chart_type_radio_bar\").prop(\"checked\", true);\n        $(\"#chart_type_bar\").click();\n      }\n    }\n    if (sel_display_data != \"resources\") {\n      $(\"#choose-resource-error-holder\").html(\"\").hide()\n      // Uncheck resource checkboxes\n      $('input[name=\"resource[]\"]').each(function(){\n        this.checked = false;\n      });\n    }\n    this.checkReportSettingsPanelOverflow();\n  }\n\n  togglePeriod(event) {\n    var item = event.target\n    var bar_chart = false\n    var pie_chart = false\n    if( $('input[name=\"chart_type\"]:checked').val() == 'bar') {\n      bar_chart = true\n    }\n    if( $('input[name=\"chart_type\"]:checked').val() == 'pie') {\n      pie_chart = true\n    }\n\n    if(item.value == -1) {\n      $('#compare_to').addClass(\"hidden\");\n      // Make sure \"Compare To\" is also updated to \"None\"\n      $('#compare_date_range_select').addClass('hidden');\n      $('[for=\"compare_date_range_select_none\"]').click()\n    } else {\n      if(bar_chart == true) {\n        $(\"#compare_to\").removeClass(\"hidden\");\n      }\n      if(pie_chart == true) {\n        $(\"#compare_to\").removeClass(\"hidden\");\n      }\n    }\n\n    if(item.value == 0) {\n      $('#custom_date_range_period').removeClass('hidden');\n    } else {\n      $('#custom_date_range_period').addClass('hidden');\n    }\n    this.checkReportSettingsPanelOverflow();\n  }\n\n  toggleSpecialty(event) {\n    if(event != null) {\n      var item = event.target\n      $('.additional-grouping-item-div').addClass(\"hidden\");\n      $('.additional-grouping-item-div').children().children('input').prop(\"checked\", false);\n      if(item.value == '') {\n        $('[data-parent=\"_top\"]').removeClass(\"hidden\")\n        $('[data-parent=\"_top\"]').children().children('input').prop(\"checked\", true);\n      } else {\n        $('[data-parent=\"' + item.value + '\"]').removeClass(\"hidden\")\n        $('[data-parent=\"' + item.value + '\"]').children().children('input').prop(\"checked\", true);\n      }\n    } else {\n      $('.additional-grouping-item-div').addClass(\"hidden\")\n      $('.additional-grouping-item-div').children().children('input').prop(\"checked\", false);\n\n      $('[data-parent=\"_top\"]').removeClass(\"hidden\")\n      $('[data-parent=\"_top\"]').children().children('input').prop(\"checked\", true);\n    }\n    this.checkReportSettingsPanelOverflow();\n  }\n\n  toggleStyle(event) {\n    var item = event.target\n    if(item.value == 'line') {\n      $('#chart_layout_duration').removeClass('hidden');\n      $('#compare_to').addClass(\"hidden\");\n      $('.report-line-only-div').removeClass(\"hidden\")\n      $('.report-bar-only-div').addClass(\"hidden\")\n      $('.report-pie-only-div').addClass(\"hidden\")\n      $('#additional_grouping_options').removeClass('hidden')\n      // Default checking for the select all checkbox\n      if ($(\"#select-all-options-checkbox\").length) {\n        let all_checked = true;\n        $(\"input[name='additional_grouping[]']\").each(function () {\n          if (!this.checked) {\n            all_checked = false;\n          }\n        });\n        $(\"#select-all-options-checkbox\").prop(\"checked\", all_checked);\n      }\n    } else {\n      $(\"#chart_layout_duration\").addClass('hidden');\n      $('#additional_grouping_options').addClass('hidden')\n      if( $('input[name=\"date_range_select\"]:checked').val() != -1) {\n        $('#compare_to').removeClass(\"hidden\");\n      }\n      if(item.value == 'bar') {\n        $('.report-line-only-div').addClass(\"hidden\")\n        $('.report-bar-only-div').removeClass('hidden')\n      }\n      if(item.value == 'pie') {\n        $('.report-line-only-div').addClass(\"hidden\")\n        $('.report-pie-only-div').removeClass('hidden')\n      }\n    }\n    this.checkReportSettingsPanelOverflow();\n  }\n  \n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"recent-changes\"\n//\n// Drives the \"Spotlight\" Recent Changes modal. Elements tagged\n// data-rc-view=\"new|all\" with class \"rc-toggle\" are shown/hidden and those with\n// class \"rc-tab\" are activated to switch between two views:\n//   - \"new\": changes added since the admin last saw the modal (auto-opens on\n//     login).\n//   - \"all\": all recent changes (opened via the \"Recent Changes\" button).\n//\n// Marks changes as seen (server-side) whenever the modal is closed so the\n// \"new\" view does not auto-open again until a newer change is posted.\nexport default class extends Controller {\n  static values = {\n    autoshow: Boolean,\n    initialView: String,\n    dismissUrl: String\n  }\n\n  connect() {\n    if (typeof bootstrap === \"undefined\") return\n\n    this.modal = bootstrap.Modal.getOrCreateInstance(this.element)\n\n    this.onHidden = this.markAsSeen.bind(this)\n    this.onShow = this.handleShow.bind(this)\n    this.element.addEventListener(\"hidden.bs.modal\", this.onHidden)\n    this.element.addEventListener(\"show.bs.modal\", this.onShow)\n\n    this.showView(this.initialViewValue || \"all\")\n\n    if (this.autoshowValue) {\n      this.modal.show()\n    }\n  }\n\n  disconnect() {\n    if (this.onHidden) {\n      this.element.removeEventListener(\"hidden.bs.modal\", this.onHidden)\n    }\n    if (this.onShow) {\n      this.element.removeEventListener(\"show.bs.modal\", this.onShow)\n    }\n  }\n\n  // Opened via the \"Recent Changes\" button (data-bs-toggle sets relatedTarget)\n  // -> show the full list. A programmatic auto-open has no relatedTarget and\n  // keeps the initial \"new\" view.\n  handleShow(event) {\n    if (event.relatedTarget) {\n      this.showView(\"all\")\n    }\n  }\n\n  // Tab click: data-recent-changes-view-param supplies \"new\" or \"all\".\n  choose(event) {\n    this.showView(event.params.view)\n  }\n\n  showView(view) {\n    this.element.querySelectorAll(\".rc-toggle\").forEach((el) => {\n      el.classList.toggle(\"d-none\", el.dataset.rcView !== view)\n    })\n    this.element.querySelectorAll(\".rc-tab\").forEach((el) => {\n      const on = el.dataset.rcView === view\n      el.classList.toggle(\"active\", on)\n      el.setAttribute(\"aria-selected\", on ? \"true\" : \"false\")\n    })\n  }\n\n  async markAsSeen() {\n    if (!this.dismissUrlValue) return\n\n    const request = new FetchRequest(\"post\", this.dismissUrlValue, { responseKind: \"json\" })\n    await request.perform()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"reports\"\nexport default class extends Controller {\n  connect() {\n    this.setTableWidth()\n  }\n\n\n  createInvoice(e) {\n    e.preventDefault()\n    let display_row = this.displayRow\n    var invoice_id = $('#invoice_co_invoice_id').val()   \n    \n    if(invoice_id == '') {\n       alert(\"Invoice cannot be blank\");\n    } else {\n\n      this.modal = new Modal(document.getElementById('system_modal_popup'), {\n        keyboard: false\n      });\n      this.modal.show();\n      $(\"#system_modal\").html('<div class=\"modal-body text-center p-5\"><em class=\"far fa-spin fa-spinner fa-3x\"></em></div>');\n\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: $('#new_invoice').attr('action'), \n        data: { chargeover_id: invoice_id },\n        type: 'POST', \n        success(data) {\n          if(data.status == \"success\") {\n            $('#system_modal').html('<div class=\"modal-body text-center p-5\"><h3 class=\"text-success\">Invoice Loaded Successfully.</h3></div>');\n            \n            var html = display_row(data)\n            \n            $('#sortable-table tbody').prepend(html);\n\n            $('[data-bs-toggle=\"tooltip\"]').tooltip('dispose');\n            $('[data-bs-toggle=\"tooltip\"]').tooltip(); \n\n          } else {\n            $('#system_modal').html('<div class=\"modal-body text-center p-5\"><h3 class=\"text-danger\">Error Loading Invoice</h3><p>' + data.message + '</p></div>');\n          }\n        }\n      });\n    }\n\n  }\n\n  displayRow(data, display_tr = true) {\n    if(display_tr) {\n      var html  = '<tr id=\"row_' + data.invoice.id + '\" role=\"row\">';\n    } else {\n      var html = '';\n    }\n    \n                html +=   '<td style=\"white-space: nowrap;\">';\n                html +=     '<a data-action=\"click->modal#loadModal\" data-turbo=\"true\" data-turbo-frame=\"system_modal\" href=\"/reports/' + data.invoice.id + '/sa_edit_chargeover_invoice\">' + data.invoice.co_invoice_id + '</a> ';\n                html +=     '<a target=\"_blank\" href=\"https://billing.cws.net/admin/r/invoice/view/' + data.invoice.co_invoice_id + '\"><em class=\"far fa-eye ms-2\" data-bs-toggle=\"tooltip\" title=\"View in ChargeOver\"></em></a> ';\n                html +=     '<em class=\"far fa-sync-alt ms-2 text-primary\" data-bs-toggle=\"tooltip\" title=\"Reload Invoice from ChargeOver\" data-action=\"click->reports#reloadFromChargeOver\" data-id=\"' + data.invoice.co_invoice_id + '\"></em>'\n                html +=   '</td>';\n                html +=   '<td>' + data.invoice.customer_name + '</td>';\n                html +=   '<td>' + data.invoice.description + '</td>';\n                html +=   '<td>' + data.invoice.amount + '</td>';\n                html +=   '<td>' + data.invoice.license_total + '</td>';\n                html +=   '<td>' + data.invoice.setup_total + '</td>';\n                html +=   '<td>' + data.invoice.license_royalty + '</td>';\n                html +=   '<td>' + data.invoice.setup_royalty + '</td>';\n                html +=   '<td>' + data.invoice.logo_royalty + '</td>';\n                html +=   '<td>' + data.invoice.royalty_total + '</td>';\n                html +=   '<td>' + data.invoice.royalty_paid + '</td>';\n                html +=   '<td>' + data.invoice.invoice_status + '</td>';\n                html +=   '<td style=\"white-space: nowrap;\">' + data.invoice.invoice_date + '</td>';\n                html +=   '<td style=\"white-space: nowrap;\">' + data.invoice.paid_date + '</td>';\n                html +=   '<td><a data-action=\"click->modal#loadModal\" data-turbo=\"true\" data-turbo-frame=\"system_modal\" href=\"/reports/' + data.invoice.id + '/sa_edit_chargeover_invoice\"><em class=\"far fa-pencil text-primary\"  data-bs-toggle=\"tooltip\" title=\"Edit\"></em></td>';\n    if(display_tr) {                \n                html += '</tr>';\n    }\n    \n    return(html)\n\n  }\n\n  exportRoyaltyReport(e) {\n    e.preventDefault();\n    var item = e.target\n    var current_form = $(item).closest('form').serializeArray();\n\n    var form = document.createElement('form')\n    document.body.appendChild(form)\n    form.target = \"_blank\"\n    form.method = \"GET\"\n    form.action = \"/reports/sa_royalty_export\"\n    \n    for( var i = 0; i < current_form.length; i++) {\n      if(current_form[i].name != 'authenticity_token' ){\n        var field = document.createElement('input')\n        field.setAttribute('type', 'hidden')\n        field.setAttribute('name', current_form[i].name)\n        field.setAttribute('value', current_form[i].value)\n        form.appendChild(field);\n      }\n    }\n\n    var field = document.createElement('input')\n    field.setAttribute('type', 'hidden')\n    field.setAttribute('name', 'download_format')\n    field.setAttribute('value', $(item).data(\"format\"))\n    form.appendChild(field);\n\n    form.submit()\n\n    form.remove()\n  }\n\n\n  \n  recalculateRoyalties(e) {\n    e.preventDefault();\n    var inv_amount = parseFloat($(\"#invoice_amount\").val());\n    var inv_license_total = parseFloat($(\"#invoice_license_total\").val());\n    var inv_setup_total = parseFloat($(\"#invoice_setup_total\").val());\n    var inv_pharmacist_license_total = parseFloat($(\"#invoice_pharmacist_license_total\").val());\n    var inv_dentist_license_total = parseFloat($(\"#invoice_dentist_license_total\").val());\n    var inv_leadership_license_total = parseFloat($(\"#invoice_leadership_license_total\").val());\n    var inv_logo_royalty = 0;\n    var inv_license_royalty = 0;\n    var inv_pharmacist_royalty = 0;\n    var inv_dentist_royalty = 0;\n    var inv_leadership_license_royalty = 0;\n    var inv_setup_royalty = 0;\n    if(inv_amount > 0)\n    {\n      // After 2024-08-02 there is noo more logo royalty\n      if($(\"#invoice_date\").val() <= '2024-08-02') {\n        if (inv_leadership_license_total > 0) {\n          // Exclude leadership impact index from logo royalty\n          if (inv_amount - inv_leadership_license_total > 0) {\n            inv_logo_royalty = Math.round(((inv_amount - inv_leadership_license_total) * 0.02) * 100) / 100;\n          }\n        } else {\n          inv_logo_royalty = Math.round((inv_amount * 0.02) * 100) / 100;\n        }\n      }\n    }\n    if(inv_license_total > 0)\n    {\n      // If invoice date < 2023-01-04 use 55%\n      if($(\"#invoice_date\").val() < '2023-01-04') {\n        inv_license_royalty = Math.round((inv_license_total*0.55)*100)/100;\n      } else {\n        inv_license_royalty = Math.round((inv_license_total*0.45)*100)/100;\n      }\n    }\n    if(inv_setup_total > 0)\n    {\n      inv_setup_royalty = Math.round((inv_setup_total*0.05)*100)/100;\n    }\n    if (inv_leadership_license_total > 0) {\n      inv_leadership_license_royalty = Math.round((inv_leadership_license_total*0.45)*100)/100;\n    }\n    var inv_date = $(\"#invoice_date\").val();\n    var t = inv_date.split(/[- :]/);\n    var d = new Date(t[0], t[1]-1, t[2]);\n    var inv_date_ts = d.getTime();\n    if(inv_pharmacist_license_total > 0)\n    {\n      if (inv_date_ts >= (new Date(2021, 10-1, 7)).getTime() && inv_date_ts < (new Date(2022, 10-1, 7)).getTime())\n      {\n        // 10%\n        inv_pharmacist_royalty = Math.round((inv_pharmacist_license_total*0.1)*100)/100;\n      }\n      else if (inv_date_ts >= (new Date(2022, 10-1, 7)).getTime() && inv_date_ts < (new Date(2023, 10-1, 7)).getTime())\n      {\n        // 15%\n        inv_pharmacist_royalty = Math.round((inv_pharmacist_license_total*0.15)*100)/100\n      }\n      else if (inv_date_ts >= (new Date(2023, 10-1, 7)).getTime())\n      {\n        // 55%\n        inv_pharmacist_royalty = Math.round((inv_pharmacist_license_total*0.55)*100)/100\n      }\n    }\n    if(inv_dentist_license_total > 0)\n    {\n      if (inv_date_ts >= (new Date(2020, 11-1, 2)).getTime() && inv_date_ts < (new Date(2022, 11-1, 2)).getTime())\n      {\n        // 30%\n        inv_dentist_royalty = Math.round((inv_dentist_license_total*0.30)*100)/100\n      }\n      else if (inv_date_ts >= (new Date(2022, 11-1, 2)).getTime())\n      {\n        // 55%\n        inv_dentist_royalty = Math.round((inv_dentist_license_total*0.55)*100)/100\n      }\n    }\n\n    var inv_royalty_total = inv_logo_royalty+inv_license_royalty+inv_setup_royalty+inv_pharmacist_royalty+inv_dentist_royalty+inv_leadership_license_royalty;\n    $(\"#invoice_license_royalty\").val(inv_license_royalty.toFixed(2));\n    $(\"#invoice_pharmacist_royalty\").val(inv_pharmacist_royalty.toFixed(2));\n    $(\"#invoice_dentist_royalty\").val(inv_dentist_royalty.toFixed(2));\n    $(\"#invoice_leadership_license_royalty\").val(inv_leadership_license_royalty.toFixed(2));\n    $(\"#invoice_setup_royalty\").val(inv_setup_royalty.toFixed(2));\n    $(\"#invoice_logo_royalty\").val(inv_logo_royalty.toFixed(2));\n    $(\"#invoice_royalty_total\").val(inv_royalty_total.toFixed(2));\n  }\n\n  reloadFromChargeOver(e) {\n    e.preventDefault();\n    var display_row = this.displayRow;\n    var item = e.target\n\n    $(item).addClass(\"fa-spin text-success\");\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: $('#new_invoice').attr('action'), \n      data: { chargeover_id: item.dataset.id },\n      type: 'POST',\n      success(data) {\n        if(data.status == \"success\") {\n          \n          $('[data-bs-toggle=\"tooltip\"]').tooltip('dispose');\n          $('[data-bs-toggle=\"tooltip\"]').tooltip(); \n\n          var html = display_row(data, false)\n          $('#row_' + item.dataset.id).html(html)\n        } else {\n          this.modal.show();\n          $('#system_modal').html('<div class=\"modal-body text-center p-5\"><h3 class=\"text-danger\">Error Refreshing Invoice</h3><p>' + data.message + '</p></div>');\n        }\n      }\n    });\n\n\n\n  }\n\n  setTableWidth() {\n    if($(\"#sortable-table-container\").length && !$(\"#sortable-table-container\").data(\"widthset\")){\n      $(\"#sortable-table-container\").data(\"widthset\", \"yes\");\n      var width = $('#sortable-table-container').width();\n      var w = 0;\n      \n      if($('body').hasClass(\"nav-toggled\")) {\n        w = width - 80;\n      } else {\n        w = width - 250;\n      }\n\n      $('.table-responsive').css(\"width\", w )\n    }\n  }\n\n  toggleCustomDates(e) {\n    e.preventDefault()\n    var item = e.target;\n\n    if(parseInt(item.value) == 0) {\n      $('#custom_date_range').removeClass(\"hidden\").show()\n    } else {\n      $(\"#custom_date_range\").addClass(\"hidden\").hide()\n    }\n  }\n\n  togglePaidInvoiceRoyalty(e) {\n    e.preventDefault()\n    var item = e.target;\n\n    if(item.value == \"paid\") {\n      $(\"#invoice_paid_date_checkbox\").removeClass(\"hidden\").show()\n    } else {\n      $(\"#invoice_paid_date_checkbox\").addClass(\"hidden\").hide()\n    }\n  }\n  \n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"csaSelect\", \"loadingIndicator\", \"assignmentCard\", \"addSection\"]\n  static values = { url: String }\n\n  addSubAccount() {\n    const csaId = this.csaSelectTarget.value\n    if (!csaId) return\n\n    this.loadingIndicatorTarget.classList.remove(\"d-none\")\n\n    fetch(`${this.urlValue}?csa_id=${csaId}`, {\n      headers: { \"Accept\": \"application/json\", \"X-Requested-With\": \"XMLHttpRequest\" }\n    })\n      .then(r => r.json())\n      .then(categories => {\n        this.loadingIndicatorTarget.classList.add(\"d-none\")\n        this._appendAssignmentCard(csaId, this.csaSelectTarget.selectedOptions[0].text, categories)\n        this._removeOptionFromSelect(csaId)\n      })\n      .catch(() => {\n        this.loadingIndicatorTarget.classList.add(\"d-none\")\n      })\n  }\n\n  removeAssignment(event) {\n    const card = event.target.closest(\"[data-resource-sub-account-categories-target='assignmentCard']\")\n    if (!card) return\n\n    const csaId = card.querySelector(\"input[type='checkbox']\")?.name?.match(/\\[(\\d+)\\]/)?.[1]\n    const csaName = card.querySelector(\".card-header strong\")?.textContent?.trim()\n\n    card.remove()\n\n    if (csaId && csaName) {\n      this._showAddSection()\n      this._addOptionToSelect(csaId, csaName)\n    }\n  }\n\n  _appendAssignmentCard(csaId, csaName, categories) {\n    const container = document.getElementById(\"resource-csa-assignments\")\n\n    const card = document.createElement(\"div\")\n    card.className = \"card mb-2\"\n    card.dataset.resourceSubAccountCategoriesTarget = \"assignmentCard\"\n\n    const checkboxes = categories.map(cat => `\n      <div class=\"col-4 pb-2\">\n        <div class=\"form-check\">\n          <input type=\"checkbox\"\n                 class=\"form-check-input\"\n                 name=\"resource_sub_account_categories[${csaId}][]\"\n                 value=\"${cat.id}\"\n                 id=\"rsac_${csaId}_${cat.id}\">\n          <label class=\"form-check-label\" for=\"rsac_${csaId}_${cat.id}\">${this._escape(cat.name)}</label>\n        </div>\n      </div>\n    `).join(\"\")\n\n    card.innerHTML = `\n      <div class=\"card-header d-flex justify-content-between align-items-center py-2\">\n        <strong>${this._escape(csaName)}</strong>\n        <button type=\"button\" class=\"btn btn-sm btn-outline-danger\"\n                data-action=\"click->resource-sub-account-categories#removeAssignment\">\n          ${this._removeLabel()}\n        </button>\n      </div>\n      <div class=\"card-body py-2\">\n        <div class=\"row\">${checkboxes}</div>\n      </div>\n    `\n\n    container.appendChild(card)\n  }\n\n  _removeOptionFromSelect(csaId) {\n    const option = this.csaSelectTarget.querySelector(`option[value=\"${csaId}\"]`)\n    if (option) option.remove()\n    this.csaSelectTarget.value = \"\"\n    if (this.csaSelectTarget.querySelectorAll(\"option[value]:not([value=''])\").length === 0) {\n      this._hideAddSection()\n    }\n  }\n\n  _addOptionToSelect(csaId, csaName) {\n    const option = document.createElement(\"option\")\n    option.value = csaId\n    option.textContent = csaName\n    this.csaSelectTarget.appendChild(option)\n  }\n\n  _showAddSection() {\n    if (this.hasAddSectionTarget) {\n      this.addSectionTarget.classList.remove(\"d-none\")\n    }\n  }\n\n  _hideAddSection() {\n    if (this.hasAddSectionTarget) {\n      this.addSectionTarget.classList.add(\"d-none\")\n    }\n  }\n\n  _removeLabel() {\n    return this.element.dataset.removeLabel ||\n      document.querySelector(\"meta[name='remove-sub-account-label']\")?.content ||\n      \"Remove\"\n  }\n\n  _escape(str) {\n    return String(str)\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\";\n\n// Connects to data-controller=\"resources\"\nexport default class extends Controller {\n  ckeditorInstance = undefined;\n\n  connect() {\n    const controllerRef = this\n    this.initializeCkEditor()\n    this.initializeSortables()\n  }\n\n  allowCopy(event) {\n    event.preventDefault();\n    var item = event.target;\n    var id = item.parentNode.dataset.id\n    $('#resource_' + id + '_do_not_copy').val(false);\n    $('#resource_content_' + item.parentNode.dataset.id).removeClass('do-not-copy');\n    $(\"#collapse_\" + item.parentNode.dataset.id).removeClass(\"hidden\");\n    $(\"#do_not_copy_btn_\" + item.parentNode.dataset.id).removeClass(\"hidden\");\n    $('#collapse_toggle_btn_' + item.parentNode.dataset.id).removeClass('hidden');\n    item.parentNode.classList.add('hidden');\n  }\n\n  changeResourceSection(event) {\n    if ( event.target.value != \"\" ) {\n\n      $.get(\"/resources/find_resource_categories_for_section\", { id: event.target.value }, function(data){\n        if(data.length > 0) {\n          $(\".resource-category\").each(function () {\n            this.checked = false;\n          });\n\n          $(data).each(function(){\n            $('#resource_resource_display_resource_category_id_' + $(this)[0]['resource_category_id']).prop(\"checked\", true);\n          });\n        }\n      });\n    }\n  }\n\n  deleteResource(event) {\n    const controllerRef = this\n    event.preventDefault();\n    var item = event.currentTarget\n\n    var ans = confirm(i18n_string(\"resources.are_you_sure_you_want_to_delete_this_resource\", \"Are you sure you want to delete this resource?\"));\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: item.href, \n        type: 'DELETE', \n        success: function(e){\n          if(e.status == 200) {\n            if(item.name == \"individual_resource\") {\n              location.href = \"/resources/manage\";\n            } else {\n              $('#' + item.name).remove();\n            }\n          }\n        }\n      });\n    }\n  }\n\n  deleteImage(event) {\n    var ans = confirm(i18n_string(\"resources.are_you_sure_you_want_to_delete_this_image\", \"Are you sure you want to delete this image?\"));\n    if(!ans) {\n      event.preventDefault()\n    }\n  }\n\n  deselectAllNational(event){\n    event.preventDefault()\n    var item = event.currentTarget\n    $(item).closest('form').find('.card').each(function() {\n      $(this).children('.card-body').removeClass('disabled')\n    })\n\n    $(item).closest('form').find('input[type=checkbox]').each(function(){\n      $(this).prop('checked', true)\n      $(this).click()\n    })\n  }\n\n  doNotCopy(event) {\n    event.preventDefault();\n    var item = event.target;\n    var id = item.parentNode.dataset.id\n    $('#resource_' + id + '_do_not_copy').val(true);\n    $('#resource_content_' + item.parentNode.dataset.id).addClass('do-not-copy');\n    $(\"#collapse_\" + item.parentNode.dataset.id).addClass(\"hidden\");\n    $(\"#allow_copy_btn_\" + item.parentNode.dataset.id).removeClass(\"hidden\");\n    $('#collapse_toggle_btn_' + item.parentNode.dataset.id).addClass('hidden');\n    item.parentNode.classList.add('hidden')\n  }\n\n  showResourceForm(event) {\n    this.modal = new Modal(document.getElementById('resourceModal'), {\n      keyboard: false,\n      focus: false\n    });\n\n    this.modal.show()\n  }\n\n  toggleTab(event) {\n    $('a.nav-link').removeClass('active');\n    $(event.currentTarget).addClass(\"active\")\n  }\n\n\n  initializeCkEditor() {\n    // Initialize CKEditor    \n    if($(\"#resource_content\").length) {\n      setTimeout(() => {\n        if(!$(\"#resource_content\").data(\"ckeditor_initialized\")) {\n          $(\"#resource_content\").data(\"ckeditor_initialized\", 1);\n          this.ckeditorInstance = CKEDITOR.replace(\"resource_content\", {\n            height: '300px',\n            toolbar: [\n              {\n                name: 'basicstyles',\n                groups: ['basicstyles', 'cleanup'],\n                items: ['Bold', 'Italic','RemoveFormat','-']\n              },\n              { name: 'links', items: ['Link','Unlink'] },\n              {\n                name: 'paragraph',\n                groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n                items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n              },\n              {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n              {name: 'colors', items: ['TextColor', 'BGColor']},\n              {name: 'other', items: ['Image', 'Table']}\n            ],\n            filebrowserBrowseUrl: '/ckeditor/browse?type=files',\n            filebrowserImageBrowseUrl: '/ckeditor/browse?type=images'\n          });\n\n          // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n          /* Here we are latching on an event ... in this case, the dialog open event */\n          CKEDITOR.on('dialogDefinition', function(ev) {\n            try {\n              /* this just gets the name of the dialog */\n        \n              var dialogName = ev.data.name;\n              /* this just gets the contents of the opened dialog */\n        \n              var dialogDefinition = ev.data.definition;\n              /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n              if(dialogName == 'link') {\n                \n                /* Getting the contents of the Target tab */\n                var informationTab = dialogDefinition.getContents('target');\n              \n                /* Getting the contents of the dropdown field \"Target\" so we can set it */\n                var targetField = informationTab.get('linkTargetType');\n              \n                /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n                targetField['default'] = '_blank';\n              \n              }\n            } catch(exception) {\n              alert('Error ' + ev.message);\n            }\n          });\n        }\n      }, 500)\n    }\n    if($(\".at-risk-ckeditor\").length) {\n      setTimeout(() => {\n        $(\".at-risk-ckeditor\").each(function(){\n          if(!$(this).data(\"ckeditor_initialized\")) {\n            $(this).data(\"ckeditor_initialized\", 1);\n            this.ckeditorInstance = CKEDITOR.replace(this.id, {\n              height: '300px',\n              toolbar: [\n                {\n                  name: 'basicstyles',\n                  groups: ['basicstyles', 'cleanup'],\n                  items: ['Bold', 'Italic','RemoveFormat','-']\n                },\n                { name: 'links', items: ['Link','Unlink'] },\n                {\n                  name: 'paragraph',\n                  groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n                  items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n                },\n                {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n                {name: 'colors', items: ['TextColor', 'BGColor']},\n                {name: 'other', items: ['Image', 'Table']}\n              ],\n              filebrowserBrowseUrl: '/ckeditor/browse?type=files',\n              filebrowserImageBrowseUrl: '/ckeditor/browse?type=images'\n            });\n          }\n        });\n      }, 500)\n    }\n  }\n\n  initializeSortables(e) {\n    $(\"#sortable-resources\").sortable({\n      placeholder: \"sortable-resources-ui-state-highlight\",\n      update: function (event, ui) {\n        if (!document.is_promoter) {\n          var sortUrl = $(this).data('sort-url');\n          var categoryId = $(this).data('category-id');\n          var url, postData;\n\n          if (sortUrl) {\n            var resourceIds = $(this).sortable('toArray', {attribute: 'data-resource_id'});\n            url = sortUrl;\n            postData = {resource_order: resourceIds, category_id: categoryId};\n          } else {\n            var data = $(this).sortable('toArray', {attribute: 'data-display_id'});\n            var id = $(this).data('id');\n            url = '/resources/' + id + '/update_sub_account_order';\n            postData = {display_order: data};\n          }\n\n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            data: postData,\n            type: 'PATCH',\n            url: url,\n            success: function (returndata) {\n              if (returndata != \"\") {\n                var alert = $('<div class=\"alert alert-sm alert-success\" style=\"display:none;\">' + returndata + '</div>');\n                $(\"#sort-save-msg-container\").append(alert);\n                alert.fadeIn(400, function () {\n                  $(this).delay(800).fadeOut();\n                });\n              }\n            }\n          });\n        }\n      }\n    });\n    $(\"#sortable-resources\").disableSelection();\n  }\n\n  // data-action=\"click->resources#logResourceClick\" data-resid=\"[resource id]\"\n  logResourceClick(e) {\n    let item = event.currentTarget;\n    let id = $(item).data(\"resid\");\n    if (id) {\n      log_event(window.location.pathname, \"clicked_resource_id=\"+id);\n    }\n  }\n\n  selectAllNational(event){\n    event.preventDefault()\n    var item = event.currentTarget\n    $(item).closest('form').find('.card').each(function() {\n      $(this).children('.card-body').addClass('disabled')\n    })\n\n    $(item).closest('form').find('input[type=checkbox]').each(function(){\n      $(this).prop('checked', false)\n      $(this).click()\n    })\n  }\n\n\n  toggleConditional(event) {\n    var item = event.currentTarget;\n    var value = item.value\n    \n    document.getElementById('signup_custom_question_div_' + value).classList.toggle(\"hidden\");\n  }\n\n\n  toggleCountryList(event) {\n    var item = event.currentTarget\n    if(item.value == 'national_resources') {\n      document.getElementById('national_resource_select').classList.remove('hidden')\n    } else {\n      document.getElementById('national_resource_select').classList.add('hidden')\n    }\n  }\n\n  toggleNationalResourceDisplay(event) {\n    let item = event.currentTarget\n    var elem = $(item).closest('.card').children('.card-body')\n    var kind = ''\n\n    if($(elem).hasClass('disabled')){\n      $(elem).removeClass(\"disabled\")\n    } else {\n      $(elem).addClass(\"disabled\")\n    }\n  }\n\n  // \"Remove from my sub-account\" stands in for the category selection: with it checked the\n  // form posts no categories and the save clears this sub-account's rows, so leaving the\n  // checkbox list on screen would only be misleading.\n  toggleRemoveFromSubAccount(event) {\n    $(\"#t-resource-checkboxes\").toggleClass(\"hidden\", event.target.checked);\n  }\n\n  validate_admin_resource_form(event) {\n    // \"Remove from my sub-account\" is a deliberate empty selection, so the\n    // at-least-one-category rule below does not apply to it.\n    if ($(\"#remove_from_sub_account\").is(\":checked\")) {\n      return;\n    }\n\n    // Count single-CSA checkboxes (.resource-category) and multi-CSA checkboxes\n    let num_categories_checked = 0;\n    $(\".resource-category:checked\").each(function () {\n      num_categories_checked++;\n    });\n    $(\"input[name^='resource_sub_account_categories']:checked\").each(function () {\n      num_categories_checked++;\n    });\n    if (num_categories_checked == 0) {\n      event.preventDefault();\n      let error_text = i18n_string(\"resources.you_must_select_at_least_one_resource_category\", \"You must select at least one resource category.\");\n      let alertHtml = '<div class=\"alert alert-danger alert-dismissible fade show\">' + error_text + '<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\"></button></div>';\n\n      // If inside a modal, show the error in the modal's message container\n      let modalDialog = event.target.closest('.modal-dialog');\n      if (modalDialog && document.getElementById('modal-message-container')) {\n        doJsAlert(alertHtml, 'modal-message-container');\n      } else {\n        doJsAlert('<div class=\"alert alert-danger\">' + error_text + '</div>');\n      }\n    }\n  }\n  \n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"sa-dashboard\"\nexport default class extends Controller {\n\n  start_date = ''\n  today = ''\n\n\n  connect() {\n    // this.getDates()\n    // this.loadAtRiskChart()\n    // this.loadNewUserChart()\n    // this.loadTotalSurveysChart()\n  }\n\n  buildOptions() {\n\n  }\n\n  getDates() {\n    this.today = new Date().toISOString().slice(0, 10);\n    var start_date = new Date()\n    start_date.setDate(start_date.getDate() - 90)\n    this.start_date = start_date.toISOString().slice(0,10)\n  }\n\n  // drawLineChart()\n\n  loadAtRiskChart() {\n\n    $.get(\"/reports/sa_surveys_taken_trend.json\", { start_date: this.start_date, end_date: this.today, period: 'week' }, function(data){\n      console.log(data)\n\n      var dates = []\n      for( let row in data) {\n\n        var display_parts = data[row].year_week.split(\"-\")\n\n        let date = new Date(display_parts[0], 0, display_parts[1] * 7)\n\n        dates.push([date, data[row].total])\n\n      }\n      console.log(dates)\n      drawAtRiskChart(dates)\n    })\n  }\n\n  loadNewUserChart() {\n\n  }\n\n  loadTotalSurveysChart() {\n\n  }\n\n\n\n\n\n\n}\n\n\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"scheduled-settings\"\nexport default class extends Controller {\n  connect() {\n    // console.log(\"connected\");\n    // Setup CKEditors\n    const editorElements = [\"scheduled_setting_notice_message\", \"scheduled_setting_email_message\"];\n    editorElements.forEach(id => {\n      const element = document.getElementById(id);\n      if (element) {\n        CKEDITOR.replace(id, {\n          height: '300px',\n          toolbar: [\n            {\n              name: 'basicstyles',\n              groups: ['basicstyles', 'cleanup'],\n              items: ['Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat', '-', 'Link', 'Unlink']\n            },\n            {\n              name: 'paragraph',\n              groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n              items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n            },\n            {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n            {name: 'colors', items: ['TextColor', 'BGColor']}\n          ]\n        });\n      }\n    });\n  }\n\n  settingTypeChanged(event) {\n    const element = event.currentTarget;\n    const settingType = element.value;\n    const customer_list_div = document.getElementById(\"customer_list_div\");\n    const customer_sub_account_list_div = document.getElementById(\"customer_sub_account_list_div\");\n    const scheduled_setting_customer_ids = document.getElementById(\"scheduled_setting_customer_ids\");\n    const scheduled_setting_customer_sub_account_ids = document.getElementById(\"scheduled_setting_customer_sub_account_ids\");\n    if (settingType == \"customer\") {\n      scheduled_setting_customer_sub_account_ids.value = \"\";\n      $(scheduled_setting_customer_sub_account_ids).multiselect('reload');\n      customer_list_div.style.display = \"block\";\n      customer_sub_account_list_div.style.display = \"none\";\n    } else if (settingType == \"customer_sub_account\") {\n      scheduled_setting_customer_ids.value = \"\";\n      $(scheduled_setting_customer_ids).multiselect('reload');\n      customer_list_div.style.display = \"none\";\n      customer_sub_account_list_div.style.display = \"block\";\n    } else {\n      customer_list_div.style.display = \"none\";\n      customer_sub_account_list_div.style.display = \"none\";\n      scheduled_setting_customer_ids.value = \"\";\n      scheduled_setting_customer_sub_account_ids.value = \"\";\n      $(scheduled_setting_customer_ids).multiselect('reload');\n      $(scheduled_setting_customer_sub_account_ids).multiselect('reload');\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Scrolls its element into view when connected. Used to bring flash messages\n// into view after a turbo-frame reload (e.g. the \"Customer has been saved\"\n// message on the customer detail form, which renders at the top of the frame).\nexport default class extends Controller {\n  connect() {\n    // Defer to the next frame so the element is laid out before scrolling.\n    requestAnimationFrame(() => {\n      this.element.scrollIntoView({ behavior: \"smooth\", block: \"center\" })\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"select2\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this;\n\n    if (this.element.dataset && this.element.dataset.delay_init) {\n      setTimeout( function(){\n        this.initSelect2(this.element);\n      }.bind(this),parseInt(this.element.dataset.delay_init));\n    } else {\n      this.initSelect2(this.element);\n    }\n  }\n  initSelect2(element, options={}) {\n    let $element = $(element);\n    $element.css('width', '100%');\n    let selectParent = $element.parent();\n    options.dropdownParent = selectParent;\n    options.theme = \"bootstrap-5\";\n    if ($element.data(\"custom_matcher\") == \"exclude_punctuation\") {\n      options.matcher = function (params, data) {\n        // If there are no search terms, return all of the data\n        if ($.trim(params.term) === '' || typeof params.term === 'undefined') {\n          return data;\n        }\n\n        // Do not display the item if there is no 'text' property\n        if (typeof data.text === 'undefined') {\n          return null;\n        }\n\n        // `params.term` should be the term that is used for searching\n        // `data.text` is the text that is displayed for the data object\n        let item_text = data.text.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n        let search_text = params.term.replace(/[^\\w\\s]/g, \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n        if (item_text.indexOf(search_text) > -1) {\n          return data;\n        }\n\n        // Return `null` if the term should not be displayed\n        return null;\n      };\n    }\n    $element.on('select2:open', e => {\n      const select2 = $(e.target).data('select2');\n      if (select2 && select2.dropdown && select2.dropdown.$search && select2.dropdown.$search.get(0)) {\n        if (!mobileCheck()) {\n          select2.dropdown.$search.get(0).focus();\n        }\n        let search_field = select2.dropdown.$search;\n        let parent_container = search_field.parent();\n        addLabelToSelect2SearchField(search_field, parent_container);\n      }\n    });\n    if ($element.data(\"show_select_all\") == \"yes\") {\n      options.dropdownAdapter = $.fn.select2.amd.require('select2/selectAllAdapter');\n    }\n    if ($element.data(\"select2_template_result\")) {\n      let functionName = $element.data(\"select2_template_result\");\n      if (typeof window[functionName] === 'function') {\n        options.templateResult = window[functionName];\n      }\n    }\n    if ($element.data(\"dropdown_parent\")) {\n      var parentElement = $($element.data(\"dropdown_parent\"));\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n    }\n    $element.select2(options);\n    let sel2Data = $element.data('select2');\n    if(sel2Data && sel2Data.$container)\n    {\n      sel2Data.$container.find('*').addClass('needsclick');\n      let found_search_field = sel2Data.$container.find('.select2-search__field');\n      if (found_search_field && found_search_field.length) {\n        let search_field = found_search_field.first();\n        let parent_container = search_field.parent();\n        addLabelToSelect2SearchField(search_field, parent_container);\n      }\n    }\n    if ($element.hasClass(\"form-select-sm\")) {\n      // console.dir($element.select2().data('select2'));\n      // console.log(\"IS SMALL SELECT !!!!!!! \")\n      // options.selectionCssClass = 'select2--small';\n      // options.dropdownCssClass = 'select2--small';\n      // $element.select2().data('select2').$selection.addClass('select2--small');\n      // $element.select2().data('select2').$dropdown.addClass('select2--small');\n      // $element.select2().data('select2').$container.addClass('select2-custom-small');\n    }\n    // Fire native change event when item is selected\n    $(element).on('select2:select select2:unselect select2:clear', function () {\n      let event = new Event('change', { bubbles: true }) // fire a native event\n      this.dispatchEvent(event);\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"session-refresh\"\nexport default class extends Controller {\n  cancel() {\n    $('#session_continue_modal_popup').modal('hide');\n  }\n  \n  connect() {\n    // let max_idle_time = document.getElementById('max_idle_time').value\n    // setTimeout(this.showRefreshModal, max_idle_time)\n  }\n\n  refreshToken() {\n    let controllerRef = this;\n    let max_idle_time = document.getElementById('max_idle_time').value\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: \"/home/session_refresh\", \n      type: 'POST', \n      success(data) {\n        if(data.status == 200) {\n          $('#session_continue_modal_popup').modal('hide');\n          setTimeout(controllerRef.showRefreshModal, max_idle_time)\n        }\n      }\n    });\n  }\n\n  showRefreshModal() {\n    // $('#session_continue_modal_popup').modal('show');\n    // $(\"#session_modal\").html('<div class=\"modal-body text-center p-5\"><h3>' +  I18n.session_timeout.timeout_notice + '</h3><div class=\"row my-3\"><div class=\"col-6\"><button class=\"btn btn-success\" data-action=\"click->session-refresh#refreshToken\">' +  I18n.session_timeout.continue + '</button></div><div class=\"col-6\"><a href=\"/logout\" class=\"btn btn-secondary\">' + I18n.session_timeout.log_out + '</a></div></div>');\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"signup\"\nexport default class extends Controller {\n\n  connect() {\n    if (mobileCheck() && document.getElementById('qr-code-scanner-button-wrapper')) {\n      // remove hidden class\n      document.getElementById('qr-code-scanner-button-wrapper').classList.remove('hidden');\n    }\n  }\n\n  initialize() {\n    this.invite_button_processing = false;\n  }\n\n  inviteInputChange() {\n    if($('#invite_code').val().length > 0) {\n      $('button[type=\"submit\"]').removeAttr(\"disabled\");\n    } else {\n      $('button[type=\"submit\"]').attr(\"disabled\", \"disabled\");\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport ValidateFormController from \"./validate_form_controller\"\n\n// Connects to data-controller=\"signup-questions\"\nexport default class extends ValidateFormController {\n\n  static targets = [\"options\", \"template\", \"optionsTableWrapper\", \"bulkInputWrapper\"]\n  connect() {\n    setTimeout(function(){\n      this.init_option_sortable();\n    }.bind(this),750);\n    this.init_question_sortable();\n\n    let edit_form = document.getElementById(\"edit_custom_question_form\");\n    if (edit_form) {\n      edit_form.addEventListener('change', this.checkChangedInputs);\n    }\n    if ($(\"#question_display_control\").length) {\n      this.display_control_change_process($(\"#question_display_control\").val());\n    }\n    if ($(\".mapping-select\").length) {\n      $(\".mapping-select\").each(function () {\n        $(this).css('width', '100%');\n        var options = {};\n        var parentElement = $(this).closest(\".select2-wrapper-div\");\n        if (parentElement.length) {\n          options.dropdownParent = parentElement;\n        }\n        options.theme = \"bootstrap-5\",\n        $(this).select2(options);\n      });\n    }\n    this.diyInit();\n  }\n\n  add_bulk_options(event) {\n    event.preventDefault();\n    var data = $('#bulk_options_textarea').val().split(/\\r?\\n/);\n    for (let i = 0; i < data.length; i++) {\n      var new_option_text = data[i].trim();\n      if (new_option_text != \"\") {\n        this.add_option_to_table(new_option_text);\n      }\n    }\n\n    $('#bulk_options_textarea').val('');\n    this.cancel_bulk_input(event);\n  }\n\n  show_bulk_input(event) {\n    event.preventDefault();\n    if (this.hasOptionsTableWrapperTarget) this.optionsTableWrapperTarget.classList.add('d-none');\n    if (this.hasBulkInputWrapperTarget) this.bulkInputWrapperTarget.classList.remove('d-none');\n  }\n\n  cancel_bulk_input(event) {\n    event.preventDefault();\n    if (this.hasBulkInputWrapperTarget) this.bulkInputWrapperTarget.classList.add('d-none');\n    if (this.hasOptionsTableWrapperTarget) this.optionsTableWrapperTarget.classList.remove('d-none');\n  }\n\n  toggle_heading_mode(event) {\n    const nonHeadingFields = document.getElementById('diy_non_heading_fields');\n    const optionsSection = document.getElementById('diy_options_section');\n    const value = event.currentTarget.value;\n    if (nonHeadingFields) {\n      if (value === 'heading') {\n        nonHeadingFields.classList.add('d-none');\n      } else {\n        nonHeadingFields.classList.remove('d-none');\n      }\n    }\n    if (optionsSection) {\n      if (value === 'text') {\n        optionsSection.classList.add('d-none');\n      } else {\n        optionsSection.classList.remove('d-none');\n      }\n    }\n  }\n\n  add_option_click(event) {\n    event.preventDefault();\n    this.add_option_to_table('');\n  }\n\n  add_option_to_table(option_name) {\n    option_name = (typeof option_name !== 'undefined') ?  option_name : \"\";\n    var next_order = $('#option_table_body tr').length + 2;\n    let content = this.templateTarget.innerHTML.replace(/TEMPLATE_RECORD/g, this.next_template_record_index());\n    content = content.replace(\"TEMPLATE_NAME\", () => this.escape_for_html_attribute(option_name));\n    content = content.replace(\"999999\", next_order);\n    this.optionsTarget.insertAdjacentHTML('beforeend', content);\n    this.fix_table_widths();\n  }\n\n  add_diy_mapped_option_to_table(option_name, option_id) {\n    option_name = (typeof option_name !== 'undefined') ?  option_name : \"\";\n    var next_order = $('#option_table_body tr').length + 2;\n    let content = this.templateTarget.innerHTML.replace(/TEMPLATE_RECORD/g, this.next_template_record_index());\n    content = content.replace(\"TEMPLATE_NAME\", () => this.escape_for_html_attribute(option_name));\n    content = content.replace(\"999999\", next_order);\n    this.optionsTarget.insertAdjacentHTML('beforeend', content);\n    this.fix_table_widths();\n  }\n\n  // Rails uses this value as the fields_for child_index, so it becomes the params key:\n  // question[options_attributes][<index>][name]. It MUST be unique per row. A bare\n  // timestamp is not: bulk-adding runs the loop many times within the same millisecond,\n  // so several rows share an index, Rack collapses them into one params entry, and every\n  // option but the last of that millisecond is silently dropped on save.\n  next_template_record_index() {\n    let index = new Date().getTime();\n    if (this.last_template_record_index && index <= this.last_template_record_index) {\n      index = this.last_template_record_index + 1;\n    }\n    this.last_template_record_index = index;\n    return index;\n  }\n\n  // The option name is spliced into the template row's value=\"TEMPLATE_NAME\" attribute\n  // before it is inserted as HTML, so it has to be escaped for attribute context. A pasted\n  // option containing a quote or angle bracket would otherwise break out of the attribute\n  // and mangle the row. Passed to replace() as a function so a literal \"$&\" in the pasted\n  // text is not treated as a replacement pattern.\n  escape_for_html_attribute(text) {\n    return String(text)\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;');\n  }\n\n  at_least_one_unchecked(e) {\n    // Make sure at least one is unchecked\n    var at_least_one = false;\n    $(\".hide-option-checkbox\").each(function () {\n      if (!this.checked) {\n        at_least_one = true;\n      }\n    });\n    if (!at_least_one) {\n      e.preventDefault();\n      alert(i18n_string(\"signup_questions.you_must_have_at_least_one_option\", \"You must leave at least one option.\"));\n      return false;\n    }\n    return true;\n  }\n\n  confirm_delete (event){\n    let confirm_text = i18n_string(\"process_improvement.are_you_sure_you_want_to_delete_this_question\", \"Are you sure you want to delete this question?\");\n    confirm_text += \" \"+i18n_string(\"signup_questions.you_will_not_be_able_to_access_the_report\", \"You will not be able to access the report data after you delete this question.\");\n    if (!confirm(confirm_text)) {\n      event.preventDefault();\n    }\n  }\n\n  default_country_change(event) {\n    let new_val = $(event.target).val();\n    let closest_form = $(event.target).closest('form');\n    if (new_val == \"\") {\n      closest_form.find(\".input-state-question-id\").val(\"\");\n      closest_form.find(\".input-state\").val(\"\");\n      closest_form.find(\".default-state-div\").hide();\n    } else {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/signup-questions/diy_get_state_options?country=\"+new_val,\n        type: \"GET\",\n        success: function(data) {\n          if(data.status == 200) {\n            // console.log(data.state_question_id);\n            if (data.state_question_id && data.state_question_id > 0 && data.option_list) {\n              closest_form.find(\".input-state-question-id\").val(data.state_question_id);\n              closest_form.find(\".input-state\").html(\"\");\n              for (let i = 0; i<data.option_list.length; i++){\n                let opt = document.createElement('option');\n                opt.value = data.option_list[i][1];\n                opt.innerHTML = data.option_list[i][0];\n                closest_form.find(\".input-state\").append(opt);\n              }\n              closest_form.find(\".default-state-div\").show();\n            } else {\n              closest_form.find(\".input-state-question-id\").val(\"\");\n              closest_form.find(\".input-state\").val(\"\");\n              closest_form.find(\".default-state-div\").hide();\n            }\n          }\n        }\n      });\n    }\n  }\n\n  display_control_change(event) {\n    this.display_control_change_process($(event.currentTarget).val());\n  }\n\n  display_control_change_process(controlValue) {\n    if(controlValue == \"heading\") {\n      $(\".hide-for-heading-type\").hide();\n      $(\"#question_report_name\").val(\"Heading\");\n      $(\"#question_archived\").val(0);\n    } else {\n      $(\".hide-for-heading-type\").show();\n    }\n  }\n\n  diyInit() {\n    if (document.getElementById('demographic_question_list')) {\n      let dql = document.getElementById('demographic_question_list');\n      if (!dql.dataset.attachedModalCloseListener) {\n        const myModalEl = document.getElementById('system_modal_popup');\n        let essentialsFrame = document.getElementById('essentials_custom_questions_frame');\n        if (essentialsFrame) {\n          // Essentials Basic: reload only the custom questions frame so accordion panels stay open\n          myModalEl.addEventListener('hidden.bs.modal', event => {\n            let frame = document.getElementById('essentials_custom_questions_frame');\n            frame.src = frame.dataset.src;\n          });\n        } else {\n          // Standard DIY flow: reload the full question list\n          myModalEl.addEventListener('hidden.bs.modal', event => {\n            let turboElement = document.getElementById('demographic_question_list');\n            turboElement.src = turboElement.dataset.src;\n          });\n        }\n        dql.dataset.attachedModalCloseListener = 'yes';\n      }\n    }\n    // Initialize options section visibility based on current display_control value\n    const displayControl = document.getElementById('diy_display_control');\n    const optionsSection = document.getElementById('diy_options_section');\n    if (displayControl && optionsSection) {\n      if (displayControl.value === 'text') {\n        optionsSection.classList.add('d-none');\n      } else {\n        optionsSection.classList.remove('d-none');\n      }\n    }\n    if (document.getElementById('close_modal_after_turbo_frame_load')) {\n      setTimeout(function(){\n        $(\"#system_modal_popup\").modal(\"hide\");\n      },75)\n\n    }\n  }\n\n  diyToggleStatus(event) {\n    let $element = $(event.currentTarget);\n    let clickedValue = event.currentTarget.value;\n    let csaId = event.currentTarget.dataset.csaId;\n    let scopedId = event.currentTarget.dataset.scopedId;\n\n    // Essentials Basic: data-csa-id and data-scoped-id are set on the input.\n    // Use scopedId for DOM lookups and send customer_sub_account_id to the server.\n    let id, statusGroupId, ajaxData;\n    if (csaId && scopedId) {\n      id = event.currentTarget.dataset.questionId;\n      statusGroupId = scopedId;\n      ajaxData = { new_status: clickedValue, customer_sub_account_id: csaId };\n    } else {\n      let name = event.currentTarget.name;\n      let matches = name.match(/\\[(.*?)\\]/);\n      id = matches[1];\n      statusGroupId = id;\n      ajaxData = { new_status: clickedValue };\n    }\n\n    if (clickedValue != $(\"#status_group_\"+statusGroupId).data(\"last_status\")) {\n      console.log(\"new value=\"+clickedValue);\n      // Do ajax call to change status\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: \"/signup-questions/\"+id+\"/diy-status\",\n        data: ajaxData,\n        success: function (data) {\n          if (data && data.new_status) {\n            var mapBtn = document.getElementById('map_btn_' + statusGroupId);\n            if (mapBtn) {\n              if (data.new_status == 'hide') {\n                mapBtn.style.display = 'none';\n              } else if (data.new_status == 'display') {\n                mapBtn.style.display = '';\n              }\n            }\n          }\n          if (data && data.load_options_for_question_id) {\n            $(\"#question_row_\"+id).find(\".edit-custom-options\").attr(\"href\", \"/signup-questions/\"+data.load_options_for_question_id+\"/diy-edit-options-modal\");\n            $(\"#question_row_\"+id).find(\".edit-custom-options\")[0].click();\n          }\n        }\n      });\n      $(\"#status_group_\"+statusGroupId).data(\"last_status\",clickedValue)\n    }\n    $element.blur();\n  }\n\n  do_question_order_auto_save(quest_order) {\n    document.auto_save_question_order_timeout = undefined;\n    $(\"#autosave_quest_order_message\").html('<strong class=\"text-info\"><i class=\"fa fa-spinner fa-pulse fa-fw\" aria-hidden=\"true\"></i> '+i18n_string(\"signup_questions.saving_sort_order\", \"Saving sort order...\")+'</strong>');\n    $(\"#autosave_quest_order_message\").fadeIn();\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/signup-questions/save-question-order\",\n      data: {question_order: quest_order},\n      success: function (data) {\n        $(\"#autosave_quest_order_message\").html('<strong class=\"text-success\"><i class=\"fa fa-check\" aria-hidden=\"true\"></i> '+i18n_string(\"signup_questions.sort_order_saved\", \"Sort order saved\")+'</strong>');\n        setTimeout(function () {\n          $(\"#autosave_quest_order_message\").fadeOut(function () {\n            $(this).html(\"\");\n          });\n        }, 3500);\n      }\n    });\n  }\n\n  fix_table_widths() {\n    $(\"#option_table_body td\").each(function () {\n      if (!$(this).data(\"fixed-width\") && !$(this).hasClass(\"no-fixed-size\")) {\n        $(this).css(\"width\", $(this).width());\n        $(this).data(\"fixed-width\", 1);\n      }\n    });\n  }\n\n  init_option_sortable(){\n    if ($(\"#option_table_body\").length) {\n      this.fix_table_widths();\n      $(\"#option_table_body\").sortable({\n        update: function (event, ui) {\n          $('#option_table_body tr').each(function (idx) {\n            var inputField = $(this).find(\".option-order-field\");\n            $(inputField).val(idx + 1);\n          });\n        }\n      });\n    }\n  }\n\n  init_question_sortable() {\n    let controllerRef = this;\n    document.auto_save_question_order_timeout = undefined;\n    $(\"#question_table_body\").sortable({\n      update: function (event, ui) {\n        var quest_order = {};\n        $('#question_table_body tr.allow-sort').each(function (idx) {\n          quest_order[idx + 1] = $(this).data(\"quest_id\");\n        });\n        if (document.auto_save_question_order_timeout) {\n          clearTimeout(document.auto_save_question_order_timeout);\n        }\n        document.auto_save_question_order_timeout = setTimeout(function () {\n          controllerRef.do_question_order_auto_save(quest_order);\n        }, 100);\n      },\n      items: 'tr.allow-sort'\n    });\n    $(\"#question_table_body td\").each(function () {\n      if (!$(this).data(\"fixed-width\")) {\n        $(this).css(\"width\", $(this).width());\n        $(this).data(\"fixed-width\", 1);\n      }\n    });\n\n    $(\"#question_table_body_assess\").sortable({\n      update: function (event, ui) {\n        var quest_order = {};\n        $('#question_table_body_assess tr.allow-sort').each(function (idx) {\n          quest_order[idx + 1] = $(this).data(\"quest_id\");\n        });\n        if (document.auto_save_question_order_timeout) {\n          clearTimeout(document.auto_save_question_order_timeout);\n        }\n        document.auto_save_question_order_timeout = setTimeout(function () {\n          controllerRef.do_question_order_auto_save(quest_order);\n        }, 100);\n      },\n      items: 'tr.allow-sort'\n    });\n    $(\"#question_table_body_assess td\").each(function () {\n      if (!$(this).data(\"fixed-width\")) {\n        $(this).css(\"width\", $(this).width());\n        $(this).data(\"fixed-width\", 1);\n      }\n    });\n  }\n\n  map_checkbox_clicked(event) {\n    if (event.currentTarget.checked) {\n      $(\"#quest_mapping_questions\").removeClass(\"hidden\");\n    } else {\n      $(\"#quest_mapping_questions\").addClass(\"hidden\");\n      $(\"#mapped_question_id\").val(\"\");\n    }\n  }\n\n  question_location_change(event) {\n    var current_value = $(event.currentTarget).val();\n    if (current_value == \"signup\") {\n      $(\"#quest_display_control_div\").hide();\n      $(\"#question_display_control\").val(\"select\");\n    } else {\n      $(\"#quest_display_control_div\").show();\n    }\n  }\n\n  row_checkbox_click(e) {\n    var target = $(e.target);\n    if (target.is(\"input\")) {\n      return;\n    }\n    if (this.at_least_one_unchecked(e)) {\n      $(e.target).closest('tr').find('input').click();\n    }\n  }\n\n  validate_question_form(event) {\n    let alertContainerId = 'message-container';\n    let formElement = event.target;\n    if (formElement.dataset && formElement.dataset.alert_container) {\n      alertContainerId = formElement.dataset.alert_container;\n    } else if (formElement.dataset && formElement.dataset.alertContainer) {\n      alertContainerId = formElement.dataset.alertContainer;\n    }\n\n    let passed_normal_validation = super.validateForm(event, alertContainerId);\n    if (passed_normal_validation) {\n      let errors = [];\n      let isHeading = false;\n      let isTextInput = false;\n      let displayControl = document.getElementById('diy_display_control');\n      if (displayControl) {\n        isHeading = displayControl.value === 'heading';\n        isTextInput = displayControl.value === 'text';\n      }\n\n      if (!isHeading && !isTextInput) {\n        // Check at least two options with non-empty text\n        let opt_count = 0;\n        $(\".option-name-input\").each(function () {\n          if ($(this).val().trim() !== \"\") {\n            opt_count++;\n          }\n        });\n        if (opt_count < 2) {\n          errors.push(i18n_string(\"process_improvement.you_must_have_at_least_two_options\", \"You must have at least two options\"));\n        }\n      }\n\n      if (errors.length > 0) {\n        event.preventDefault();\n        doJsAlert('<div class=\"alert alert-danger\">' + errors.join('<br />') + '</div>', alertContainerId);\n        return false;\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Clipboard from \"../../../public/js/clipboard.min\"\n\n// Connects to data-controller=\"starter-kit\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  clipboard(event) {\n    var item = event.target\n    var clipboard = new Clipboard('#' + item.id);\n    clipboard.on('success', function(e) {\n      $(item).blur();\n      $(\".copied-message\").show().delay(3000).fadeOut('fast');\n    });\n  }\n\n  clipboardHTML(event) {\n    var item = event.target\n    var html_content = $(\"#invite_email_content_input\").val();\n\n    var copy_success = copy_to_clipboard(html_content);\n    $(item).blur();\n    if(copy_success) {\n      $(\".copied-message\").show().delay(3000).fadeOut('fast');\n    }\n  }\n\n  downloadQRCode(event) {\n    event.preventDefault();\n    var url = document.getElementById('custom_signup_url_qr_code').value\n    var kind = event.currentTarget.getAttribute('data-kind')\n\n    document.location = '/administrator/generate_qr_code?signup_url=' + encodeURIComponent(url) + '&download=1&kind=' + kind\n  }\n\n  selectEmbedCode(event) {\n    var item = event.target\n    $(item).select();\n  }\n\n  toggleEmbedCode(event) {\n    event.preventDefault();\n    var item = event.currentTarget\n\n    $(item).closest(\".media-body\").find(\".embed-code\").slideToggle(400,function(){\n      if (!$(this).is(':hidden'))\n      {\n        $(this).find(\"input\").select();\n      }\n    });\n  }\n\n  updateQRCode(event) {\n    var url = document.getElementById('custom_signup_url_qr_code').value\n    document.getElementById('custom_signup_url_qr_code_image').src = '/administrator/generate_qr_code?signup_url=' + encodeURIComponent(url);\n  }\n\n}\n\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"sub-account-verification\"\nexport default class extends Controller {\n  static targets = [\"checkbox\", \"freeCheckbox\", \"error\"]\n\n  connect() {\n    this.validateCheckboxes()\n  }\n\n  toggle(event) {\n    if (event.target.checked && this.hasFreeCheckboxTarget) {\n      this.freeCheckboxTarget.checked = false\n    }\n\n    const checkedCount = this.checkboxTargets.filter(cb => cb.checked).length\n\n    if (checkedCount === 0) {\n      // Prevent unchecking the last one\n      event.target.checked = true\n      this.showError()\n    } else {\n      this.hideError()\n    }\n  }\n\n  toggle_free(event) {\n    if (event.target.checked) {\n      const message = this.freeCheckboxTarget.dataset.confirmMessage || \"Are you sure?\"\n      if (!confirm(message)) {\n        event.target.checked = false\n        return\n      }\n      this.checkboxTargets.forEach(cb => cb.checked = false)\n      this.hideError()\n    } else {\n      const checkedCount = this.checkboxTargets.filter(cb => cb.checked).length\n      if (checkedCount === 0) {\n        event.target.checked = true\n        this.showError()\n      } else {\n        this.hideError()\n      }\n    }\n  }\n\n  showError() {\n    if (this.hasErrorTarget) {\n      this.errorTarget.style.display = 'block'\n    }\n  }\n\n  hideError() {\n    if (this.hasErrorTarget) {\n      this.errorTarget.style.display = 'none'\n    }\n  }\n\n  validateCheckboxes() {\n    const checkedCount = this.checkboxTargets.filter(cb => cb.checked).length\n    if (checkedCount === 0) {\n      this.showError()\n    } else {\n      this.hideError()\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"super-admin\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  confirmDisable(e) {\n    var ans = confirm(\"Are you sure you want to disable this super admin? They will no longer be able to login if they are disabled.\")\n    if(!ans) {\n      e.preventDefault()\n    }\n  }\n\n  confirmEnable(e) {\n    var ans = confirm(\"Are you sure you want to re-enable this super admin? They will have full access to the WBI.\")\n    if(!ans) {\n      e.preventDefault()\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"support\"\nexport default class extends Controller {\n  static targets = [\"supportTicketModalBody\"]\n  ckeditorInstance = undefined;\n\n  connect() {\n\n    if($(\".browser_panel\").length) { $(\".browser_panel\").val( navigator.userAgent ); }\n    if($(\".link_panel\").length) { $(\".link_panel\").val(document.location.href); }\n\n    this.initializeCkEditor()\n    this.initializeSelect2($(this.element).find(\".select2\"), {})\n\n    $(this.element).find(\".select2\").on('change', function(e){\n      $.get(\"/customers/\" + $(this).val() + \"/all_admin_users\", {}, function(data){\n        $('#support_ticket_created_by_id').html('')\n\n        $('#support_ticket_created_by_id').append('<option></option>');\n        $.each(data, function(index, user){\n          if( user[\"first_name\"] != '' && user[\"first_name\"].trim() != '') {\n            var text = user['email'] + ' - ' + user[\"first_name\"] + ' ' + user['last_name'];\n          } else {\n            var text = user['email']\n          }\n          $('#support_ticket_created_by_id').append('<option value=\"' + user[\"id\"] + '\">' + text + '</option>');\n        });\n\n        $(\"#customer_users\").removeClass(\"hidden\");\n      });\n    });\n  }\n\n  confirmDelete(e) {\n    var ans = confirm(\"Are you sure you want to delete this ticket?\")\n    if(ans) {\n      \n    } else {\n      e.preventDefault()\n    }\n  }\n\n  editMessage(event) {\n    event.preventDefault();\n    this.modal = new Modal(document.getElementById('editTicketModal'), {\n      keyboard: false\n    });\n\n    var item = event.currentTarget\n    this.modal.show()\n    $.get(item.href, {} , function(data){\n      $('#editTicketForm').attr('action', \"/support/\" + item.dataset.id + \"/update_message\");\n      $('#editTicketForm').attr('data-turbo-frame', \"support_ticket_message_\"+item.dataset.id);\n      $('#editTicketForm').attr('data-id', item.dataset.id);\n\n      if (!$('#editTicketContent').data(\"ckeditor_initialized\")){\n        $('#editTicketContent').data(\"ckeditor_initialized\",1);\n        $('#editTicketContent').html(data.message.content);\n\n        CKEDITOR.replace(\"editTicketContent\", {\n          height: '300px',\n          toolbar: [\n            {\n              name: 'basicstyles',\n              groups: ['basicstyles', 'cleanup'],\n              items: ['Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat', '-', 'Link', 'Unlink']\n            },\n            {\n              name: 'paragraph',\n              groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n              items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n            },\n            {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n            {name: 'colors', items: ['TextColor', 'BGColor']}\n          ]\n        });\n      } else if (CKEDITOR && CKEDITOR.instances['editTicketContent']) {\n        CKEDITOR.instances['editTicketContent'].setData(data.message.content);\n      }\n    });\n  }\n\n  initializeCkEditor() {\n    // Initialize CKEditor    \n    if($(\"#ticket_content\").length) {\n      setTimeout(() => {\n      if(!$(\"#ticket_content\").data(\"ckeditor_initialized\")) {\n        $(\"#ticket_content\").data(\"ckeditor_initialized\", 1);\n        this.ckeditorInstance = CKEDITOR.replace(\"ticket_content\", {\n          height: '300px',\n          toolbar: [\n            {\n              name: 'basicstyles',\n              groups: ['basicstyles', 'cleanup'],\n              items: ['Bold', 'Italic', 'Underline', '-', 'CopyFormatting', 'RemoveFormat', '-', 'Link', 'Unlink']\n            },\n            {\n              name: 'paragraph',\n              groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n              items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n            },\n            {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n            {name: 'colors', items: ['TextColor', 'BGColor']}\n          ]\n        });\n\n\n        // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n        /* Here we are latching on an event ... in this case, the dialog open event */\n        CKEDITOR.on('dialogDefinition', function(ev) {\n          try {\n            /* this just gets the name of the dialog */\n      \n            var dialogName = ev.data.name;\n            /* this just gets the contents of the opened dialog */\n      \n            var dialogDefinition = ev.data.definition;\n            /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n            if(dialogName == 'link') {\n              \n              /* Getting the contents of the Target tab */\n              var informationTab = dialogDefinition.getContents('target');\n            \n              /* Getting the contents of the dropdown field \"Target\" so we can set it */\n              var targetField = informationTab.get('linkTargetType');\n            \n              /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n              targetField['default'] = '_blank';\n            \n            }\n          } catch(exception) {\n            alert('Error ' + ev.message);\n          }\n        });\n      }\n      }, 500);\n    }\n  }\n\n  initializeSelect2(selector, options) {\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n    });\n  }\n\n  markAllRead(event) {\n    var ans = confirm(i18n_string(\"support.mark_all_read_confirm\"))\n    if(!ans) {\n      event.preventDefault()\n    }\n  }\n\n  setStatus(event) {\n    var user_changed_status = event.target.getAttribute(\"data-user_changed\");\n    if(user_changed_status == \"no\")\n    {\n      var msg_kind = event.target.value;\n      var note_status = $(\"#tick_status_also\").data(\"note_status\");\n      var message_status = $(\"#tick_status_also\").data(\"message_status\");\n      if(note_status != message_status)\n      {\n        if(msg_kind == \"message\")\n        {\n          $(\"#tick_status_also\").val(message_status);\n        }\n        else if(msg_kind == \"note\")\n        {\n          $(\"#tick_status_also\").val(note_status);\n        }\n      }\n    }\n\n    var msg_kind2 = event.target.value;\n    if(msg_kind2 == \"message\")\n    {\n      if(this.ckeditorInstance)\n      {\n        this.ckeditorInstance.document.getBody().setStyle('background-color', '#ffffff');\n      }\n    }\n    else if(msg_kind2 == \"note\")\n    {\n      if(this.ckeditorInstance)\n      {\n        this.ckeditorInstance.document.getBody().setStyle('background-color', '#fff9d9');\n      }\n    }\n  }\n\n\n  setCreatedById(event) {\n    var user_id = event.target.value\n    $('#created_by_user_id').val(user_id);\n  }\n\n  \n\n  savedMessage(event) {\n    $('.modal').modal('hide');\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"terms-acceptance\"\n//\n// Shows the updated-terms prompt as soon as it loads and keeps the accept button\n// disabled until the user has scrolled to the bottom of the agreement.\n//\n// Detection uses native scrollTop/clientHeight/scrollHeight rather than the signup\n// page's window.setupTermsScrollBox. Those properties are baseline DOM and behave\n// the same in iOS WKWebView and Android WebView; setupTermsScrollBox instead drives\n// OverlayScrollbars through a global $(\".terms-box\") selector, which would fight\n// this modal. The markup here uses its own class names for that reason -- see\n// app/assets/stylesheets/wbi/terms-acceptance.scss.\nexport default class extends Controller {\n  static targets = [\"termsBox\", \"scrollWarning\", \"acceptButton\"]\n\n  // Slack for the bottom comparison. Sub-pixel rounding under browser zoom or a\n  // fractional device pixel ratio can leave scrollTop + clientHeight a hair short of\n  // scrollHeight, which would otherwise strand the user at 99%.\n  static BOTTOM_TOLERANCE_PX = 40\n\n  connect() {\n    this.boundCheckScroll = () => this.checkScrolledToBottom()\n    this.termsBoxTarget.addEventListener(\"scroll\", this.boundCheckScroll, { passive: true })\n\n    // Do not measure until the modal is actually on screen. While it is still\n    // hidden the terms box reports zero height, and zero height reads as \"already\n    // scrolled to the bottom\", which would unlock the button straight away.\n    this.element.addEventListener(\"shown.bs.modal\", this.boundCheckScroll)\n\n    // Rotating a phone changes the box height: an agreement that needed scrolling in\n    // portrait may fit entirely in landscape, and should unlock when it does.\n    window.addEventListener(\"resize\", this.boundCheckScroll, { passive: true })\n    window.addEventListener(\"orientationchange\", this.boundCheckScroll, { passive: true })\n\n    this.modal = bootstrap.Modal.getOrCreateInstance(this.element, {\n      backdrop: \"static\",\n      keyboard: false\n    })\n    this.modal.show()\n  }\n\n  disconnect() {\n    if (!this.boundCheckScroll) {\n      return\n    }\n\n    this.element.removeEventListener(\"shown.bs.modal\", this.boundCheckScroll)\n    window.removeEventListener(\"resize\", this.boundCheckScroll)\n    window.removeEventListener(\"orientationchange\", this.boundCheckScroll)\n    if (this.hasTermsBoxTarget) {\n      this.termsBoxTarget.removeEventListener(\"scroll\", this.boundCheckScroll)\n    }\n  }\n\n  checkScrolledToBottom() {\n    if (this.scrolledToBottom) {\n      return\n    }\n\n    const box = this.termsBoxTarget\n    // Not laid out yet, so there is nothing meaningful to compare.\n    if (box.clientHeight === 0) {\n      return\n    }\n\n    // An agreement short enough not to scroll satisfies this on the first check.\n    // On iOS, rubber-band overscroll can push scrollTop past its maximum, which only\n    // makes this more true -- it never falsely holds the button closed.\n    const scrolledDistance = Math.ceil(box.scrollTop + box.clientHeight)\n    if (scrolledDistance < box.scrollHeight - this.constructor.BOTTOM_TOLERANCE_PX) {\n      return\n    }\n\n    this.scrolledToBottom = true\n    this.acceptButtonTarget.disabled = false\n    this.termsBoxTarget.classList.add(\"read\")\n    if (this.hasScrollWarningTarget) {\n      this.scrollWarningTarget.classList.add(\"read\")\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"theme-classifier\"\nexport default class extends Controller {\n  static targets = [\n    // New job form targets\n    \"existingRadio\",\n    \"newRadio\",\n    \"existingSection\",\n    \"newSection\",\n    \"dictionarySelect\",\n    \"questionText\",\n    // Notification targets\n    \"notifyCheckbox\",\n    \"notifySection\",\n    \"notifyEmail\",\n    // Review form targets\n    \"themesContainer\",\n    \"themeTemplate\",\n    \"kindGlobal\",\n    \"kindCustomer\",\n    \"customerSection\"\n  ]\n\n  static values = {\n    themeIndex: Number\n  }\n\n  connect() {\n    // Initialize based on which targets are present\n    if (this.hasExistingRadioTarget) {\n      this.toggleDictionarySections()\n    }\n    if (this.hasKindGlobalTarget) {\n      this.toggleCustomerSection()\n    }\n    if (this.hasNotifyCheckboxTarget && this.notifyCheckboxTarget.checked) {\n      this.toggleNotifyEmail()\n    }\n  }\n\n  // ==========================================\n  // New Job Form Methods\n  // ==========================================\n\n  toggleDictionarySections() {\n    if (this.existingRadioTarget.checked) {\n      this.existingSectionTarget.style.display = 'block'\n      this.newSectionTarget.style.display = 'none'\n      this.questionTextTarget.classList.remove('is-invalid')\n    } else {\n      this.existingSectionTarget.style.display = 'none'\n      this.newSectionTarget.style.display = 'block'\n      this.dictionarySelectTarget.classList.remove('is-invalid')\n    }\n  }\n\n  validateNewJobForm(event) {\n    let isValid = true\n\n    if (this.existingRadioTarget.checked) {\n      if (!this.dictionarySelectTarget.value) {\n        this.dictionarySelectTarget.classList.add('is-invalid')\n        isValid = false\n      } else {\n        this.dictionarySelectTarget.classList.remove('is-invalid')\n      }\n    } else {\n      if (!this.questionTextTarget.value.trim()) {\n        this.questionTextTarget.classList.add('is-invalid')\n        this.questionTextTarget.focus()\n        isValid = false\n      } else {\n        this.questionTextTarget.classList.remove('is-invalid')\n      }\n    }\n\n    if (!isValid) {\n      event.preventDefault()\n    }\n  }\n\n  clearDictionaryValidation() {\n    this.dictionarySelectTarget.classList.remove('is-invalid')\n  }\n\n  clearQuestionValidation() {\n    this.questionTextTarget.classList.remove('is-invalid')\n  }\n\n  // ==========================================\n  // Notification Methods\n  // ==========================================\n\n  toggleNotifyEmail() {\n    if (this.notifyCheckboxTarget.checked) {\n      this.notifySectionTarget.style.display = 'block'\n      if (!this.notifyEmailTarget.value) {\n        this.notifyEmailTarget.value = this.notifyCheckboxTarget.dataset.defaultEmail || ''\n      }\n    } else {\n      this.notifySectionTarget.style.display = 'none'\n      this.notifyEmailTarget.value = ''\n    }\n  }\n\n  // ==========================================\n  // Review Form Methods\n  // ==========================================\n\n  toggleCustomerSection() {\n    this.customerSectionTarget.style.display = this.kindCustomerTarget.checked ? 'block' : 'none'\n  }\n\n  addTheme() {\n    const newTheme = this.themeTemplateTarget.content.cloneNode(true)\n    const themeDiv = newTheme.querySelector('.theme-entry')\n    themeDiv.dataset.themeIndex = this.themeIndexValue\n\n    // Update all name attributes with correct index\n    newTheme.querySelectorAll('[name*=\"THEME_INDEX\"]').forEach((el) => {\n      el.name = el.name.replace('THEME_INDEX', this.themeIndexValue)\n    })\n\n    this.themesContainerTarget.appendChild(newTheme)\n    this.themeIndexValue++\n\n    // Focus the new theme name input\n    this.themesContainerTarget.lastElementChild.querySelector('input[type=\"text\"]').focus()\n  }\n\n  removeTheme(event) {\n    event.target.closest('.theme-entry').remove()\n  }\n\n  addSubTheme(event) {\n    const themeEntry = event.target.closest('.theme-entry')\n    const themeIdx = themeEntry.dataset.themeIndex\n    const subThemesContainer = themeEntry.querySelector('.sub-themes-container')\n    const subIndex = subThemesContainer.querySelectorAll('.sub-theme-entry').length\n\n    const newSubTheme = document.createElement('div')\n    newSubTheme.className = 'input-group mb-2 sub-theme-entry'\n    newSubTheme.innerHTML = `\n      <input type=\"text\" class=\"form-control\" name=\"themes[${themeIdx}][sub_themes][${subIndex}]\" value=\"\">\n      <button type=\"button\" class=\"btn btn-outline-secondary\" data-action=\"click->theme-classifier#removeSubTheme\">&times;</button>\n    `\n\n    subThemesContainer.appendChild(newSubTheme)\n    newSubTheme.querySelector('input').focus()\n  }\n\n  removeSubTheme(event) {\n    event.target.closest('.sub-theme-entry').remove()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"theme-preview\"\nexport default class extends Controller {\n  static values = { jobId: Number }\n  static targets = [\"modalBody\", \"chevron\", \"collapsePanel\", \"answerItem\", \"answerCheckbox\", \"removeSelectedBtn\", \"selectedCount\", \"selectAllCheckbox\", \"answerCount\", \"addThemeWidget\", \"addThemeBtn\"]\n\n  connect() {\n    this.changesMade = false\n    this.modal = null\n    this.allExpanded = false\n\n    this.restoreExpandedState()\n\n    const modalEl = document.getElementById('themePreviewModal')\n    if (modalEl) {\n      modalEl.addEventListener('hidden.bs.modal', () => {\n        if (this.changesMade) {\n          window.location.reload()\n        }\n      })\n    }\n  }\n\n  toggleAll(event) {\n    event.preventDefault()\n    this.allExpanded = !this.allExpanded\n\n    this.collapsePanelTargets.forEach(panel => {\n      if (this.allExpanded) {\n        panel.classList.add('show')\n      } else {\n        panel.classList.remove('show')\n      }\n    })\n\n    this.chevronTargets.forEach(chevron => {\n      chevron.classList.toggle('fa-chevron-right', !this.allExpanded)\n      chevron.classList.toggle('fa-chevron-down', this.allExpanded)\n    })\n\n    this.saveExpandedState()\n  }\n\n  toggleCollapse(event) {\n    event.preventDefault()\n    const index = event.params.index\n\n    const panel = this.collapsePanelTargets.find(p => p.dataset.index === String(index))\n    const chevron = this.chevronTargets.find(c => c.dataset.index === String(index))\n\n    if (panel) {\n      panel.classList.toggle('show')\n    }\n    if (chevron) {\n      chevron.classList.toggle('fa-chevron-right')\n      chevron.classList.toggle('fa-chevron-down')\n    }\n\n    this.saveExpandedState()\n  }\n\n  openThemeModal(event) {\n    event.preventDefault()\n    const theme = event.params.theme\n    this.showModal(`Theme: ${theme}`)\n    this.fetchAnswers({ top_level_theme: theme })\n  }\n\n  openSubThemeModal(event) {\n    event.preventDefault()\n    const theme = event.params.theme\n    const subTheme = event.params.subTheme\n    this.showModal(`${theme} > ${subTheme}`)\n    this.fetchAnswers({ top_level_theme: theme, sub_theme: subTheme })\n  }\n\n  openUnclassifiedModal(event) {\n    event.preventDefault()\n    this.showModal('Unclassified Answers')\n    this.fetchAnswers({ unclassified: true })\n  }\n\n  showModal(title) {\n    const modalEl = document.getElementById('themePreviewModal')\n    const titleEl = document.getElementById('themePreviewModalLabel')\n\n    if (titleEl) titleEl.textContent = title\n    if (this.hasModalBodyTarget) {\n      this.modalBodyTarget.innerHTML = `\n        <div class=\"text-center py-4\">\n          <div class=\"spinner-border text-primary\" role=\"status\">\n            <span class=\"visually-hidden\">Loading...</span>\n          </div>\n        </div>\n      `\n    }\n\n    // Reset bulk selection UI\n    if (this.hasRemoveSelectedBtnTarget) {\n      this.removeSelectedBtnTarget.classList.add('d-none')\n    }\n\n    if (!this.modal) {\n      this.modal = new bootstrap.Modal(modalEl, {focus: false})\n    }\n    this.modal.show()\n  }\n\n  async fetchAnswers(params) {\n    const url = new URL(`/theme_classification/preview_answers/${this.jobIdValue}`, window.location.origin)\n    Object.entries(params).forEach(([key, value]) => url.searchParams.set(key, value))\n\n    try {\n      const response = await fetch(url, {\n        headers: {\n          'X-Requested-With': 'XMLHttpRequest',\n          'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]')?.content\n        }\n      })\n\n      if (response.ok) {\n        const html = await response.text()\n        if (this.hasModalBodyTarget) {\n          this.modalBodyTarget.innerHTML = html\n        }\n      } else {\n        if (this.hasModalBodyTarget) {\n          this.modalBodyTarget.innerHTML = '<p class=\"text-danger\">Failed to load answers.</p>'\n        }\n      }\n    } catch (error) {\n      if (this.hasModalBodyTarget) {\n        this.modalBodyTarget.innerHTML = '<p class=\"text-danger\">Failed to load answers.</p>'\n      }\n    }\n  }\n\n  async removeTheme(event) {\n    event.preventDefault()\n    const button = event.currentTarget\n    const rowNumber = event.params.row\n    const themeColumn = event.params.column\n\n    button.disabled = true\n\n    try {\n      const response = await fetch(`/theme_classification/preview_remove_theme/${this.jobIdValue}`, {\n        method: 'DELETE',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-Requested-With': 'XMLHttpRequest',\n          'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]')?.content\n        },\n        body: JSON.stringify({ row_number: rowNumber, theme_column: themeColumn })\n      })\n\n      if (response.ok) {\n        this.changesMade = true\n        this.decrementAnswerCount(1)\n        const listItem = button.closest('[data-theme-preview-target=\"answerItem\"]')\n        if (listItem) {\n          listItem.style.transition = 'opacity 0.3s ease-out'\n          listItem.style.opacity = '0'\n          setTimeout(() => listItem.remove(), 300)\n        }\n      } else {\n        button.disabled = false\n        alert('Failed to remove theme. Please try again.')\n      }\n    } catch (error) {\n      button.disabled = false\n      alert('Failed to remove theme. Please try again.')\n    }\n  }\n\n  showAddTheme(event) {\n    event.preventDefault()\n    let wrapperDiv = event.currentTarget.closest('.answer-wrapper')\n    const rowNumber = event.params.row\n\n    // Hide any other open add-theme widgets\n    this.addThemeWidgetTargets.forEach(w => {\n\n      if (w.dataset.rowNumber !== String(rowNumber) || !wrapperDiv.contains(w)) {\n        w.classList.add('d-none')\n        this.destroySelect2(w)\n      }\n    })\n\n    const widget = this.addThemeWidgetTargets.find(w => (w.dataset.rowNumber === String(rowNumber) && wrapperDiv.contains(w)))\n    if (widget) {\n      widget.classList.remove('d-none')\n      this.initSelect2(widget)\n    }\n  }\n\n  cancelAddTheme(event) {\n    event.preventDefault()\n    const rowNumber = event.params.row\n    const wrapperDiv = event.currentTarget.closest('.answer-wrapper')\n    const widget = this.addThemeWidgetTargets.find(w => w.dataset.rowNumber === String(rowNumber) && wrapperDiv.contains(w))\n    if (widget) {\n      widget.classList.add('d-none')\n      this.destroySelect2(widget)\n    }\n  }\n\n  async confirmAddTheme(event) {\n    event.preventDefault()\n    const button = event.currentTarget\n    const rowNumber = event.params.row\n    const wrapperDiv = event.currentTarget.closest('.answer-wrapper')\n    const widget = this.addThemeWidgetTargets.find(w => w.dataset.rowNumber === String(rowNumber) && wrapperDiv.contains(w))\n    if (!widget) return\n\n    const select = widget.querySelector('.add-theme-select')\n    const newTheme = select ? select.value : ''\n\n    if (!newTheme) {\n      alert('Please select a theme first.')\n      return\n    }\n\n    button.disabled = true\n\n    try {\n      const response = await fetch(`/theme_classification/preview_add_theme/${this.jobIdValue}`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-Requested-With': 'XMLHttpRequest',\n          'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]')?.content\n        },\n        body: JSON.stringify({ row_number: rowNumber, new_theme: newTheme })\n      })\n\n      const data = await response.json()\n\n      if (response.ok && data.success) {\n        this.changesMade = true\n        widget.classList.add('d-none')\n        this.destroySelect2(widget)\n        button.disabled = false\n\n        // Show success message below the answer\n        const answerItem = widget.closest('[data-theme-preview-target=\"answerItem\"]')\n        if (answerItem) {\n          const msg = document.createElement('div')\n          msg.className = 'text-success small mt-1'\n          msg.innerHTML = `<i class=\"fa fa-check me-1\"></i>Theme \"<strong>${newTheme}</strong>\" added successfully.`\n          const answerContent = answerItem.querySelector('.flex-grow-1')\n          if (answerContent) {\n            answerContent.appendChild(msg)\n            setTimeout(() => msg.remove(), 5000)\n          }\n        }\n      } else {\n        alert(data.error || 'Failed to add theme. Please try again.')\n        button.disabled = false\n      }\n    } catch (error) {\n      alert('Failed to add theme. Please try again.')\n      button.disabled = false\n    }\n  }\n\n  initSelect2(widget) {\n    const select = widget.querySelector('.add-theme-select')\n    if (!select || $(select).hasClass('select2-hidden-accessible')) return\n\n    const dropdownParent = select.dataset.dropdownParent\n    const options = {\n      theme: 'bootstrap-5',\n      width: '100%',\n      placeholder: 'Search for a theme...',\n      allowClear: true\n    }\n    if (dropdownParent) {\n      const parentEl = document.querySelector(dropdownParent)\n      if (parentEl) options.dropdownParent = $(parentEl)\n    }\n    $(select).select2(options)\n  }\n\n  destroySelect2(widget) {\n    const select = widget.querySelector('.add-theme-select')\n    if (select && $(select).hasClass('select2-hidden-accessible')) {\n      $(select).select2('destroy')\n      select.value = ''\n    }\n  }\n\n  decrementAnswerCount(removedCount = 1) {\n    if (this.hasAnswerCountTarget) {\n      const current = parseInt(this.answerCountTarget.dataset.count, 10) || 0\n      const newCount = Math.max(0, current - removedCount)\n      this.answerCountTarget.dataset.count = newCount\n      this.answerCountTarget.textContent = newCount\n    }\n  }\n\n  toggleSelectAll(event) {\n    const checked = event.currentTarget.checked\n    this.answerCheckboxTargets.forEach(cb => cb.checked = checked)\n    this.updateRemoveButton()\n  }\n\n  toggleRemoveButton() {\n    this.updateRemoveButton()\n  }\n\n  updateRemoveButton() {\n    const checkedCount = this.answerCheckboxTargets.filter(cb => cb.checked).length\n    const totalCount = this.answerCheckboxTargets.length\n\n    if (this.hasRemoveSelectedBtnTarget) {\n      if (checkedCount > 0) {\n        this.removeSelectedBtnTarget.classList.remove('d-none')\n      } else {\n        this.removeSelectedBtnTarget.classList.add('d-none')\n      }\n    }\n\n    if (this.hasSelectedCountTarget) {\n      this.selectedCountTarget.textContent = checkedCount\n    }\n\n    // Sync select-all checkbox state\n    if (this.hasSelectAllCheckboxTarget) {\n      this.selectAllCheckboxTarget.checked = checkedCount > 0 && checkedCount === totalCount\n      this.selectAllCheckboxTarget.indeterminate = checkedCount > 0 && checkedCount < totalCount\n    }\n  }\n\n  async removeSelectedThemes(event) {\n    event.preventDefault()\n    const btn = event.currentTarget\n    const checkedBoxes = this.answerCheckboxTargets.filter(cb => cb.checked)\n\n    if (checkedBoxes.length === 0) return\n\n    btn.disabled = true\n\n    const items = checkedBoxes.map(cb => ({\n      row_number: parseInt(cb.dataset.rowNumber, 10),\n      theme_column: cb.dataset.themeColumn\n    }))\n\n    try {\n      const response = await fetch(`/theme_classification/preview_remove_themes_bulk/${this.jobIdValue}`, {\n        method: 'DELETE',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-Requested-With': 'XMLHttpRequest',\n          'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]')?.content\n        },\n        body: JSON.stringify({ items })\n      })\n\n      if (response.ok) {\n        this.changesMade = true\n        this.decrementAnswerCount(checkedBoxes.length)\n\n        // Fade out removed items\n        checkedBoxes.forEach(cb => {\n          const listItem = cb.closest('[data-theme-preview-target=\"answerItem\"]')\n          if (listItem) {\n            listItem.style.transition = 'opacity 0.3s ease-out'\n            listItem.style.opacity = '0'\n            setTimeout(() => listItem.remove(), 300)\n          }\n        })\n\n        // Reset checkboxes and hide button\n        if (this.hasSelectAllCheckboxTarget) {\n          this.selectAllCheckboxTarget.checked = false\n        }\n        btn.disabled = false\n        if (this.hasRemoveSelectedBtnTarget) {\n          this.removeSelectedBtnTarget.classList.add('d-none')\n        }\n        if (this.hasSelectedCountTarget) {\n          this.selectedCountTarget.textContent = '0'\n        }\n      } else {\n        btn.disabled = false\n        alert('Failed to remove selected themes. Please try again.')\n      }\n    } catch (error) {\n      btn.disabled = false\n      alert('Failed to remove selected themes. Please try again.')\n    }\n  }\n\n  // --- Expand/collapse state persistence via cookie ---\n\n  get cookieKey() {\n    return `theme_tree_expanded_${this.jobIdValue}`\n  }\n\n  saveExpandedState() {\n    const expanded = []\n    this.collapsePanelTargets.forEach(panel => {\n      if (panel.classList.contains('show')) {\n        expanded.push(panel.dataset.index)\n      }\n    })\n    document.cookie = `${this.cookieKey}=${JSON.stringify(expanded)};path=/;max-age=86400;SameSite=Lax`\n  }\n\n  restoreExpandedState() {\n    const match = document.cookie.match(new RegExp(`(?:^|; )${this.cookieKey}=([^;]*)`))\n    if (!match) return\n\n    try {\n      const expanded = JSON.parse(decodeURIComponent(match[1]))\n      if (!Array.isArray(expanded) || expanded.length === 0) return\n\n      expanded.forEach(index => {\n        const panel = this.collapsePanelTargets.find(p => p.dataset.index === String(index))\n        const chevron = this.chevronTargets.find(c => c.dataset.index === String(index))\n\n        if (panel) panel.classList.add('show')\n        if (chevron) {\n          chevron.classList.remove('fa-chevron-right')\n          chevron.classList.add('fa-chevron-down')\n        }\n      })\n\n      // Sync allExpanded flag\n      const allShown = this.collapsePanelTargets.every(p => p.classList.contains('show'))\n      this.allExpanded = allShown && this.collapsePanelTargets.length > 0\n    } catch (e) {\n      // Invalid cookie data, ignore\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"theme-quality-review\"\nexport default class extends Controller {\n  static targets = [\"themeSelect\", \"themeContainer\", \"rowCard\", \"saveCard\"]\n\n  connect() {\n    // Initialize visual state for all theme containers\n    this.themeContainerTargets.forEach((container) => {\n      this.updateContainerVisualState(container)\n    })\n  }\n\n  onThemeChange(event) {\n    const select = event.target\n    const container = select.closest('[data-theme-quality-review-target=\"themeContainer\"]')\n    if (container) {\n      this.updateContainerVisualState(container)\n    }\n  }\n\n  updateContainerVisualState(container) {\n    const originalValue = container.dataset.originalValue || ''\n    const select = container.querySelector('select')\n    const currentValue = select ? select.value : ''\n    const hasOriginalTheme = originalValue !== ''\n    const isChanged = currentValue !== originalValue\n\n    // Remove existing state classes\n    container.classList.remove('has-theme', 'theme-changed')\n\n    if (hasOriginalTheme) {\n      if (isChanged) {\n        // Has original theme but was changed - light red\n        container.classList.add('theme-changed')\n      } else {\n        // Has original theme and not changed - light green\n        container.classList.add('has-theme')\n      }\n    }\n    // If no original theme, leave transparent (no class added)\n  }\n\n  scrollToNext(event) {\n    const button = event.target\n    const currentCard = button.closest('[data-theme-quality-review-target=\"rowCard\"]')\n    const cardIndex = this.rowCardTargets.indexOf(currentCard)\n\n    if (cardIndex >= 0 && cardIndex < this.rowCardTargets.length - 1) {\n      const nextCard = this.rowCardTargets[cardIndex + 1]\n      nextCard.scrollIntoView({ behavior: 'smooth', block: 'start' })\n    }\n  }\n\n  approveAll() {\n    // Revert all dropdowns to their original values\n    this.themeContainerTargets.forEach((container) => {\n      const originalValue = container.dataset.originalValue || ''\n      const select = container.querySelector('select')\n\n      if (select) {\n        // Set the value back to original\n        select.value = originalValue\n\n        // If using select2, trigger change to update the UI\n        if (typeof $ !== 'undefined' && $(select).data('select2')) {\n          $(select).trigger('change')\n        }\n\n        // Update visual state\n        this.updateContainerVisualState(container)\n      }\n    })\n\n    // Scroll to the save card at the bottom\n    if (this.hasSaveCardTarget) {\n      this.saveCardTarget.scrollIntoView({ behavior: 'smooth', block: 'start' })\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"tools\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  changePrimaryAssocClicked(e) {\n    var item = e.currentTarget;\n    if (item.checked) {\n\n    } else {\n      if (document.getElementById(\"deactivate_old_account_checkbox\").checked){\n        item.checked = true;\n      }\n    }\n\n  }\n\n  confirmDataMigration(e) {\n    $(\"#confirmDataMigrationStartButton\").prop('disabled', false);\n    $(\"#confirmDataMigrationModal\").modal(\"show\");\n  }\n\n  confirmUserDataMigration(e) {\n    $(\"#confirmDataMigrationStartButton\").prop('disabled', false);\n    $(\"#confirmDataMigrationModal\").modal(\"show\");\n  }\n\n  customerSelectChanged(e) {\n    var item = e.currentTarget;\n    var form_id = item.form.id;\n    if (item && item.dataset && item.dataset.altformid) {\n      form_id = item.dataset.altformid;\n    }\n    console.log(\"Bless this form id: '\"+form_id+\"'\");\n\n    if (form_id == 'map_demographic_answers_form') {\n      $('#sub-account-div').hide();\n      $(\"#from-question-div\").hide();\n      $(\"#to-question-div\").hide();\n      $('#from_question_id').val('');\n      $('#to_question_id').val('');\n      $(\"#map_demographics_continue_step1\").prop(\"disabled\", true);\n    } else if (form_id == 'migrate_user_accounts_form') {\n      $('#sub-account-div').hide();\n      $(\"#migrate_user_accounts_step1\").prop(\"disabled\", true);\n      $('#customer-id-new-div').hide();\n      $('#customer_id_new').val('');\n    } else if (form_id == 'customer_sub_account_id_new') {\n      $('#sub-account-div-new').hide();\n      $(\"#migrate_user_accounts_step1\").prop(\"disabled\", true);\n    }\n\n    $.ajax({\n      url: \"/customers/\" + item.value + \"/get_customer_sub_accounts\",\n      type: \"GET\",\n      success: function(returnData) {\n        if(returnData.status == 200) {\n          var data = '<option value>Select...</option>'\n          $(returnData.accounts).each(function(index, item){\n            data += '<option value=\"' + item.id + '\">' + item.name + ' (' + item.group_content + ')</option>';\n          })\n\n          if (form_id == 'map_demographic_answers_form') {\n            $('#customer_sub_account_id').html(data);\n            $('#sub-account-div').show();\n          } else if (form_id == 'migrate_user_accounts_form') {\n            $('#customer_sub_account_id').html(data);\n            $('#sub-account-div').show();\n          } else if (form_id == 'customer_sub_account_id_new') {\n            $('#customer_sub_account_id_new').html(data);\n            $('#sub-account-div-new').show();\n          }\n        }\n      }\n    })\n  }\n\n  deactivateOldAssocClicked(e) {\n    var item = e.currentTarget;\n    if (item.checked) {\n      document.getElementById(\"change_primary_checkbox\").checked = true;\n    } else {\n    }\n  }\n\n  destinationSubAccountSelectChanged(e) {\n    var item = e.currentTarget;\n    if (item.value) {\n      $(\"#migrate_user_accounts_step1\").prop(\"disabled\", false);\n      $(\"#migrate-user-additional-options\").show();\n    } else {\n      $(\"#migrate_user_accounts_step1\").prop(\"disabled\", true);\n      $(\"#migrate-user-additional-options\").hide();\n    }\n\n  }\n\n  questionSelectChanged(e) {\n    var item = e.currentTarget;\n\n    var from_question_id = $('#from_question_id').val();\n    var to_question_id = $('#to_question_id').val();\n    if (from_question_id != '' && to_question_id != '' && from_question_id != to_question_id) {\n      clearJsAlerts();\n      $(\"#map_demographics_continue_step1\").prop(\"disabled\", false);\n    } else if (from_question_id != '' && to_question_id != '' && from_question_id == to_question_id) {\n      doJsAlert('<div class=\"alert alert-danger\">Source and destination questions must be different</div>');\n      $(\"#map_demographics_continue_step1\").prop(\"disabled\", true);\n    } else {\n      $(\"#map_demographics_continue_step1\").prop(\"disabled\", true);\n    }\n  }\n\n  startDataMigration(e) {\n    $(\"#confirmDataMigrationStartButton\").prop('disabled', true);\n    $(\"#map_demographics_continue_step_final\").prop('disabled', true);\n    $(\"#map_demographics_step_final_form\").submit();\n  }\n\n  startUserDataMigration (e) {\n    $(\"#confirmDataMigrationStartButton\").prop('disabled', true);\n    $(\"#migrate_users_continue_step_final\").prop('disabled', true);\n    $(\"#migrate_users_step_final_form\").submit();\n  }\n\n  subAccountSelectChanged(e) {\n    var item = e.currentTarget;\n    var form_id = item.form.id;\n\n    if (form_id == 'map_demographic_answers_form') {\n      $(\"#from-question-div\").hide();\n      $(\"#to-question-div\").hide();\n      $('#from_question_id').val('');\n      $('#to_question_id').val('');\n      $(\"#map_demographics_continue_step1\").prop(\"disabled\", true);\n\n      $.ajax({\n        url: \"/tools/get_question_list?customer_sub_account_id=\"+item.value,\n        type: \"GET\",\n        success: function(returnData) {\n          if(returnData.status == 200  && returnData.question_list) {\n            var data = '<option value>Select...</option>'\n            $(returnData.question_list).each(function(index, item){\n              var additional_info = '';\n              if (item.kind == 'standard') {\n                additional_info += ' - Standard Question';\n              } else if (item.kind == 'custom') {\n                additional_info += ' - Custom Question';\n              }\n              if (item.archived) {\n                additional_info += ' - Archived';\n              }\n\n              data += '<option value=\"' + item.id + '\">' + item.name + additional_info + '</option>';\n            });\n\n            $('#from_question_id').html(data);\n            $('#to_question_id').html(data);\n            $(\"#from-question-div\").show();\n            $(\"#to-question-div\").show();\n          }\n        }\n      });\n    } else if (form_id == 'migrate_user_accounts_form') {\n      $(\"#migrate_user_accounts_step1\").prop(\"disabled\", true);\n      $('#customer-id-new-div').show();\n    }\n\n\n  }\n\n  validateSendTestEmailForm(e) {\n    if ($(\"#email\").val() == \"\" || $(\"#subject\").val() == \"\" || $(\"#content\").val() == \"\") {\n      e.preventDefault();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"two-factor-authentication\"\nexport default class extends Controller {\n  connect() {\n  }\n\n  setup_backup_code_download(e) {\n    e.preventDefault();\n    let html_content = $(\"#backup-code-div\").html();\n    $(\"#download-backup-code-content\").val(html_content);\n    $(\"#download-backup-code-form\").submit();\n  }\n\n  setup_backup_code_print(e) {\n    e.preventDefault();\n    $(\"body\").addClass(\"print-backup-codes\");\n    window.print();\n  }\n\n  setup_backup_code_verify(e) {\n    let button = $(e.currentTarget)\n    let message = button.data(\"verify-message\");\n    if (!confirm(message)) {\n      e.preventDefault();\n    }\n  }\n\n  setup_sms_resend_code(e) {\n    e.preventDefault();\n    this.setup_sms_step1_continue(e, true);\n  }\n\n  setup_sms_step1_continue(e,resend_code) {\n    e.preventDefault();\n    if ($(\"#error-message-2fa\").length) {\n      $(\"#error-message-2fa\").remove();\n    }\n    if ($(\"#success-message-2fa\").length) {\n      $(\"#success-message-2fa\").remove();\n    }\n    let button_ref = $(e.currentTarget);\n    button_ref.prop('disabled', true);\n\n    // Verify form filled out\n    let phoneCountryCode = $('.selected-dial-code').html();\n    let phoneNumber = $('#user_sms_phone').val();\n    if (phoneCountryCode) {\n      phoneCountryCode = phoneCountryCode.replace(/[^0-9]/g, '');\n    }\n    if (phoneNumber) {\n      phoneNumber = phoneNumber.replace(/[^0-9]/g, '');\n    }\n    let phoneToVerify = phoneCountryCode+phoneNumber;\n    if (phoneCountryCode && phoneNumber) {\n      // Send via ajax to send sms\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/account/2fa/send_2fa_code_to_phone',\n        data: {phone: phoneToVerify},\n        type: 'post',\n        success: function(e) {\n          // console.log(e);\n          if(e.status != 200) {\n            if (resend_code) {\n              $('#2fa_sms_step2_div').prepend(\"<p class='text-danger' id='error-message-2fa'>\" + e.message + \"</p>\");\n            } else {\n              $('#2fa_sms_step1_div').prepend(\"<p class='text-danger' id='error-message-2fa'>\" + e.message + \"</p>\");\n            }\n          } else {\n            if (resend_code) {\n              $(\"#2fa_sms_step2_div\").prepend(\"<p class='text-success' id='success-message-2fa'>\" + e.message + \"</p>\");\n            } else {\n              // Switch div to step 2\n              $(\"#2fa_sms_step1_div\").hide();\n              $(\"#2fa_sms_step2_div\").show();\n            }\n          }\n          button_ref.prop('disabled', false);\n        }\n      });\n\n    }\n  }\n\n  setup_sms_step2_back(e) {\n    e.preventDefault();\n    $(\"#sms_code\").val(\"\");\n    $(\"#2fa_sms_step2_div\").hide();\n    $(\"#2fa_sms_step1_div\").show();\n  }\n\n  setup_sms_step2_verify(e) {\n    e.preventDefault();\n    let code = $(\"#sms_code\").val();\n    // console.log(\"CODE=\"+code);\n    if ($(\"#error-message-2fa\").length) {\n      $(\"#error-message-2fa\").remove();\n    }\n    let button_ref = $(e.currentTarget);\n    button_ref.prop('disabled', true);\n    if (code) {\n      // Send via ajax to verify code\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/account/2fa/verify_sms_2fa_code',\n        data: {code: code},\n        type: 'post',\n        success: function(e) {\n          console.log(e)\n          if(e.status != 200) {\n            $('#2fa_sms_step2_div').prepend(\"<p class='text-danger' id='error-message-2fa'>\" + e.message + \"</p>\");\n            button_ref.prop('disabled', false);\n          } else {\n            // Submit Form\n            $(\"#new_two_factor_authentication\").submit();\n          }\n        }\n      });\n    }\n  }\n\n  setup_totp_show_key(e) {\n    e.preventDefault();\n    $(\"#totp_qr_key_wrapper\").show();\n  }\n\n  setup_totp_verify(e) {\n    e.preventDefault();\n    let code = $(\"#totp_code\").val();\n    if ($(\"#error-message-2fa\").length) {\n      $(\"#error-message-2fa\").remove();\n    }\n    let button_ref = $(e.currentTarget);\n    button_ref.prop('disabled', true);\n    if (code) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/account/2fa/verify_totp_2fa_code',\n        data: {code: code},\n        type: 'post',\n        success: function(e) {\n          console.log(e)\n          if(e.status != 200) {\n            $('#setup_totp_message_div').prepend(\"<p class='text-danger' id='error-message-2fa'>\" + e.message + \"</p>\");\n            button_ref.prop('disabled', false);\n          } else {\n            // Submit Form\n            $(\"#new_two_factor_authentication\").submit();\n          }\n        }\n      });\n    }\n  }\n\n  verify_delete(e) {\n    let button = $(e.currentTarget)\n    let message = button.data(\"verify-message\");\n    if (!confirm(message)) {\n      e.preventDefault();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"user-feedback\"\nexport default class extends Controller {\n  ckeditorInstance = undefined;\n\n  connect() {\n    console.log(\"Connect\")\n    \n    if(document.getElementById('feedback_survey_welcome_text')){\n      this.initializeCkEditor()\n    }\n\n    if(document.getElementById('create-page')){\n      var elem = document.getElementById('create-page')\n      this.addNewPage(elem.dataset.id)\n    }\n\n    if(document.getElementById('new-question')){ \n      var elem = document.getElementById('new-question')\n      this.addNewQuestion(elem.dataset.id, elem.dataset.question) \n    }\n\n    if(document.getElementById('edit-question')){ \n      var elem = document.getElementById('edit-question')\n      this.reloadQuestionFrame(elem.dataset.id) \n    }\n\n    if(document.getElementById('feedback-survey')){\n      this.setupSortablePages()\n    }\n\n    if(document.querySelectorAll('div.feedback_question')){\n      this.setupSortableQuestions()\n    }\n\n    if(document.getElementById('update-page')){\n      var elem = document.getElementById('update-page')\n      this.reloadPageFrame(elem.dataset.id)\n    }\n  }\n\n\n  addNewPage(id) {\n    $('#feedback-survey').append('<turbo-frame id=\"user_feedback_survey_page_' + id + '\" src=\"/user_feedback_survey/' + id + '/survey_page\"></turbo-frame>')\n    $('#system_modal_popup').modal('hide')\n  }\n\n\n  addNewQuestion(id, question_id) {\n    $('#feedback_question_list_' + id).append('<turbo-frame data-save-id=\"' + question_id + '\" id=\"survey_question_' + question_id + '\" src=\"/user_feedback_survey/' + question_id + '/survey_question\"></turbo-frame>')\n    $('#system_modal_popup').modal('hide')\n  }\n\n\n  deletePage(e) {\n    var item = e.currentTarget\n    if(confirm(\"Are you sure you want to delete this page? All question will be deleted as well.\")) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/user_feedback_survey/\" + item.dataset.id + \"/delete_page\",\n        type: \"POST\",\n        success(obj) {\n          if(obj.status == 200) {\n            document.getElementById('feedback-page-' + item.dataset.id).remove()\n          } else {\n            alert('Cannot delete page. Please try again.');\n          }\n        }\n      });\n    }\n  }\n\n\n  deleteQuestion(e) {\n    var item = e.currentTarget\n    if(confirm(\"Are you sure you want to delete this question?\")) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/user_feedback_survey/\" + item.dataset.id + \"/delete_question\",\n        type: \"POST\",\n        success(obj) {\n          if(obj.status == 200) {\n            document.getElementById('survey_question_' + item.dataset.id).remove()\n            $('[data-bs-toggle=\"tooltip\"]').each(function(){\n              $(this).tooltip('hide')\n            })\n          } else {\n            alert('Cannot delete question. Please try again.');\n          }\n        }\n      });\n    }\n  }\n\n\n  deleteSurvey(e) {\n    var item = e.currentTarget\n    if(confirm(\"Are you sure you want to delete this survey?\")) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: '/user_feedback_survey/' + item.dataset.id + '/delete_survey',\n        type: \"POST\",\n        success(obj){\n          if(obj.status == 200) {\n            document.getElementById(\"survey_\" + item.dataset.id).remove()\n            $('[data-bs-toggle=\"tooltip\"]').each(function(){\n              $(this).tooltip('hide')\n            })\n          } else {\n            alert('Cannot delete survey. Please try again.');\n          }\n        }\n      })\n    } else {\n      e.preventDefault()\n    }\n  }\n\n\n  initializeCkEditor() {\n    // Initialize CKEditor    \n    if($(\"#feedback_survey_welcome_text\").length) {\n      setTimeout(() => {\n        if(!$(\"#feedback_survey_welcome_text\").data(\"ckeditor_initialized\")) {\n          $(\"#feedback_survey_welcome_text\").data(\"ckeditor_initialized\", 1);\n          this.ckeditorInstance = CKEDITOR.replace(\"feedback_survey_welcome_text\", {\n            height: '300px',\n            toolbar: [\n              {\n                name: 'basicstyles',\n                groups: ['basicstyles', 'cleanup'],\n                items: ['Bold', 'Italic','RemoveFormat','-']\n              },\n              { name: 'links', items: ['Link','Unlink'] },\n              {\n                name: 'paragraph',\n                groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n                items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n              },\n              {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n              {name: 'colors', items: ['TextColor', 'BGColor']},\n              {name: 'other', items: ['Image', 'Table']}\n            ],\n            filebrowserBrowseUrl: '/ckeditor/browse?type=files',\n            filebrowserImageBrowseUrl: '/ckeditor/browse?type=images'\n          });\n\n          // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n          /* Here we are latching on an event ... in this case, the dialog open event */\n          CKEDITOR.on('dialogDefinition', function(ev) {\n            try {\n              /* this just gets the name of the dialog */\n        \n              var dialogName = ev.data.name;\n              /* this just gets the contents of the opened dialog */\n        \n              var dialogDefinition = ev.data.definition;\n              /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n              if(dialogName == 'link') {\n                \n                /* Getting the contents of the Target tab */\n                var informationTab = dialogDefinition.getContents('target');\n              \n                /* Getting the contents of the dropdown field \"Target\" so we can set it */\n                var targetField = informationTab.get('linkTargetType');\n              \n                /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n                targetField['default'] = '_blank';\n              \n              }\n            } catch(exception) {\n              alert('Error ' + ev.message);\n            }\n          });\n        }\n      }, 500)\n    }\n\n    if($(\"#feedback_survey_complete_text\").length) {\n      setTimeout(() => {\n        if(!$(\"#feedback_survey_complete_text\").data(\"ckeditor_initialized\")) {\n          $(\"#feedback_survey_complete_text\").data(\"ckeditor_initialized\", 1);\n          this.ckeditorInstance = CKEDITOR.replace(\"feedback_survey_complete_text\", {\n            height: '300px',\n            toolbar: [\n              {\n                name: 'basicstyles',\n                groups: ['basicstyles', 'cleanup'],\n                items: ['Bold', 'Italic','RemoveFormat','-']\n              },\n              { name: 'links', items: ['Link','Unlink'] },\n              {\n                name: 'paragraph',\n                groups: ['list', 'indent', 'blocks', 'align', 'bidi'],\n                items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']\n              },\n              {name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize']},\n              {name: 'colors', items: ['TextColor', 'BGColor']},\n              {name: 'other', items: ['Image', 'Table']}\n            ],\n            filebrowserBrowseUrl: '/ckeditor/browse?type=files',\n            filebrowserImageBrowseUrl: '/ckeditor/browse?type=images'\n          });\n\n          // http://handsomedogstudio.com/ckeditor-set-default-target-blank\n          /* Here we are latching on an event ... in this case, the dialog open event */\n          CKEDITOR.on('dialogDefinition', function(ev) {\n            try {\n              /* this just gets the name of the dialog */\n        \n              var dialogName = ev.data.name;\n              /* this just gets the contents of the opened dialog */\n        \n              var dialogDefinition = ev.data.definition;\n              /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */\n\n              if(dialogName == 'link') {\n                \n                /* Getting the contents of the Target tab */\n                var informationTab = dialogDefinition.getContents('target');\n              \n                /* Getting the contents of the dropdown field \"Target\" so we can set it */\n                var targetField = informationTab.get('linkTargetType');\n              \n                /* Now that we have the field, we just set the default to _blank. A good modification would be to check the value of the URL field and if the field does not start with \"mailto:\" or a relative path, then set the value to \"_blank\" */\n                targetField['default'] = '_blank';\n              \n              }\n            } catch(exception) {\n              alert('Error ' + ev.message);\n            }\n          });\n        }\n      }, 500)\n    }\n  }\n\n\n  rebuildUsers(e) {\n    var ans = confirm(\"Are you sure you want to rebuild the invite list?\")\n    if(!ans){\n      e.preventDefault()\n    }\n  }\n  \n\n  // Reload a single page with sections and questions\n  reloadPageFrame(page_id){\n    let frame = document.getElementById('user_feedback_survey_page_' + page_id)\n    frame.reload()\n    $('#system_modal_popup').modal('hide')\n  }\n\n  // Reloads all pages\n  reloadPagesFrame() {\n    let frame = document.querySelector('turbo-frame#user_feedback_survey_pages')\n    frame.reload() \n    $('#system_modal_popup').modal('hide')\n  }\n\n  // Reloads question\n  reloadQuestionFrame(question_id) {\n    let frame = document.getElementById('survey_question_' + question_id)\n    frame.reload() \n    $('#system_modal_popup').modal('hide')\n  }\n\n\n  setupSortablePages() {\n    console.log(\"SORTABLE PAGES\")\n    $( \"#feedback-survey\").sortable({\n      handle: \".drag-handle\",\n      update: function( event, ui ) {\n        var save_id_order = [];\n        $('#feedback-survey .feedback-page').each(function(idx, elem) {\n          save_id_order.push(elem.dataset.saveId);\n        });\n        // Save ordering to server\n        var formData = {positions: save_id_order};\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          url: \"/user_feedback_survey/save_page_order\",\n          data: formData,\n          type: \"POST\",\n          success(dataObj) {\n            if(dataObj.error){\n              $(\"#message-container\").html('<div class=\"alert alert-danger\">'+dataObj.error+'</div>');\n              setTimeout(function(){\n                $(\"#message-container\").html('&nbsp;');\n              },5000);\n            }\n            \n          }\n        });\n      }\n    });\n  }\n\n\n  setupSortableQuestions() {\n    console.log(\"SORTABLE QUESTIONS\")\n    setTimeout(() => {\n      $('.feedback-survey-questions').each(function(idx, elem) {\n        console.log(\"ELEM\", elem)\n        $(elem).sortable({\n          handle: \".drag-handle\",\n          update: function( event, ui ) {\n            var elem_id = $(elem).attr(\"id\")\n            var save_id_order = [];\n            $('#' + elem_id + ' turbo-frame').each(function(idx, e) {\n              save_id_order.push(e.dataset.saveId);\n            });\n            // Save ordering to server\n            var formData = {positions: save_id_order};\n            $.ajax({\n              headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n              url: \"/user_feedback_survey/save_question_order\",\n              data: formData,\n              type: \"POST\",\n              success(dataObj) {\n                if(dataObj.error){\n                  $(\"#message-container\").html('<div class=\"alert alert-danger\">'+dataObj.error+'</div>');\n                  setTimeout(function(){\n                    $(\"#message-container\").html('&nbsp;');\n                  },5000);\n                }\n              }\n            });\n          }\n        })\n      });\n    }, 3000)\n  }\n\n\n  toggleOther(e) {\n    var item = e.currentTarget\n    if(item.dataset.other == 'true') {\n      document.getElementById('answer_' + item.dataset.question + '_other').classList.remove('hidden')\n      document.getElementById('answer_' + item.dataset.question).disabled = false\n    } else {\n      document.getElementById('answer_' + item.dataset.question + '_other').classList.add('hidden')\n      document.getElementById('answer_' + item.dataset.question).value = ''\n      document.getElementById('answer_' + item.dataset.question).disabled = true\n    }\n  }\n\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"user-survey\"\nexport default class extends Controller {\n  static targets = [ 'answer8_output', 'answer9_output' ]\n  connect() {\n  }\n\n  process_auto_send_checkbox(event) {\n    var item = event.currentTarget\n    if ($(item).is(\"select\")) {\n      if($(item).val() == 1) {\n        $(\"#auto_send_cert_name_div\").removeClass('hidden');\n      } else {\n        $(\"#auto_send_cert_name_div\").addClass('hidden');\n      }\n    } else {\n      if(item.checked) {\n        $(\"#auto_send_cert_name_div\").removeClass('hidden');\n      } else {\n        $(\"#auto_send_cert_name_div\").addClass('hidden');\n      }\n    }\n  }\n\n  update_range_slider_output(event) {\n    var input_changed = $(event.currentTarget);\n    var newVal = input_changed.val();\n    var id = input_changed.attr('id');\n    if (id == \"answer_8\") {\n      this.answer8_outputTarget.innerText = newVal;\n    } else if (id == \"answer_9\") {\n      this.answer9_outputTarget.innerText = newVal;\n    }\n  }\n\n  validate_form(event) {\n    // Hide any alerts\n    clearJsAlerts();\n    if ($(\"#auto_send_cert_errors\").length) {\n      $(\"#auto_send_cert_errors\").html('');\n    }\n\n    // Go through all the questions and make sure they are answered\n    var notanswered = 0;\n    var totalQuestions = 7;\n    var qlist = [];\n    for(var i=1;i<=totalQuestions;i++){\n      // $('input[name=\"survey[survey_detail_attributes][answer_3]\"][value=1]').length\n      if(!$('input[name=\"survey[survey_detail_attributes][answer_'+i+']\"][value=1]').is(':checked') && !$('input[name=\"survey[survey_detail_attributes][answer_'+i+']\"][value=0]').is(':checked')){\n        notanswered++;\n        qlist.push(i);\n      }\n    }\n    if($('input[name=\"survey[survey_detail_attributes][answer_'+8+']\"]').length && !$('input[name=\"survey[survey_detail_attributes][answer_'+8+']\"]').val()){\n      notanswered++;\n      qlist.push(8);\n    }\n    if($('input[name=\"survey[survey_detail_attributes][answer_'+9+']\"]').length && !$('input[name=\"survey[survey_detail_attributes][answer_'+9+']\"]').val()){\n      notanswered++;\n      qlist.push(9);\n    }\n    if(notanswered > 0){\n      var msghtml = '<strong>'+i18n_string(\"survey.new.please_answer_all_of_the_questions\",\"Please answer all of the questions\")+'</strong><br />';\n      msghtml += i18n_string(\"survey.new.questions\",\"Questions\")+' #'+qlist.join(', #')+' '+i18n_string(\"survey.new.not_answered\",\"not answered\");\n\n      doJsAlert('<div class=\"alert alert-danger\">'+msghtml+'</div>');\n      event.preventDefault();\n      return false;\n    }\n\n    var auto_send_errors = [];\n    if ($(\"#auto_send_cert\").is(\"select\") && $(\"#auto_send_cert\").val() === '') {\n      auto_send_errors.push(i18n_string(\"survey.new.please_select_an_answer\",\"Please select an answer\"));\n    }\n    else if ($(\"#auto_send_cert\").length && ($(\"#auto_send_cert\").is(\":checked\") || ($(\"#auto_send_cert\").is(\"select\") && $(\"#auto_send_cert\").val() === '1')))\n    {\n      \n      if ($(\"#auto_send_cert_name\").val() == \"\"){\n        auto_send_errors.push(i18n_string(\"survey.new.please_fill_in_name\",\"Please fill in Name\"));\n      }\n      if ($(\"#auto_send_cert_employee_id\").length && $(\"#auto_send_cert_employee_id\").val() == \"\"){\n        auto_send_errors.push(i18n_string(\"survey.new.please_fill_in_employee_id\",\"Please fill in Employee ID\"));\n      }\n    }\n\n    if (auto_send_errors.length > 0) {\n      $(\"#auto_send_cert_errors\").html('<div class=\"alert alert-danger\">'+auto_send_errors.join('<br />')+'</div>');\n      event.preventDefault();\n      return false;\n    }\n\n\n\n    if($(\"#assessment-step1-button\").length == 0) {\n      $(\"#submit-index-button\").val(i18n_string(\"survey.new.submitting\",\"Submitting\")+\"...\");\n      $(\"#submit-index-button\").prop(\"disabled\", true);\n    }\n    return true;\n\n    // event.preventDefault();\n  }\n\n  validate_form_with_validation_questions_step1(event) {\n    if (this.validate_form(event)) {\n      $(\"#assessment-step2-button\").hide();\n      $(\"#assessment-step1\").slideUp(\"fast\");\n      $(\"#assessment-step2\").slideDown(\"fast\",function (){\n        $(\"#assessment_title_step\").html(\"2\");\n        var offset = $(\"#assessment_title_step\").offset();\n        var gotoPos = offset.top - 40;\n        $(\"html,body\").animate({ scrollTop: gotoPos }, \"fast\", function(){\n          $(\"#assessment-step2-button\").show();\n        });\n      });\n    }\n  }\n\n  validate_form_with_validation_questions_step2(event) {\n    let missing_validation_question = false;\n    $(\".validation-question-select\").each(function(){\n      if($(this).val() == \"\")\n      {\n        missing_validation_question = true;\n      }\n    });\n    $(\"#assessment-step2 input\").each(function(){\n      var name = $(this).attr(\"name\");\n      if($(this).attr(\"type\") == \"radio\")\n      {\n        if($(\"input[name='\"+name+\"']\").length)\n        {\n          if($(\"input[name='\"+name+\"']:checked\").length == 0)\n          {\n            missing_validation_question = true;\n          }\n        }\n      }\n      if($(this).attr(\"type\") == \"checkbox\")\n      {\n        if($(\"input[name='\"+name+\"']\").length)\n        {\n          if($(\"input[name='\"+name+\"']:checked\").length == 0)\n          {\n            missing_validation_question = true;\n          }\n        }\n      }\n    });\n    if(missing_validation_question)\n    {\n      var msghtml = '<strong>'+i18n_string(\"survey.new.please_answer_all_of_the_questions\",\"Please answer all of the questions\")+'</strong>';\n\n      doJsAlert('<div class=\"alert alert-danger\">'+msghtml+'</div>');\n      event.preventDefault();\n      return false;\n    }\n    // Everything is ok\n    $(\"#wbi-form button[type='submit']\").text(\"Submitting...\");\n    $(\"#wbi-form button[type='submit']\").prop(\"disabled\", true);\n  }\n\n  validation_questions_back_to_step1(e){\n    $(\"#assessment-step2\").slideUp(\"fast\");\n    $(\"#assessment-step1\").slideDown(\"fast\",function (){\n      $(\"#assessment_title_step\").html(\"1\");\n      var offset = $(\"#assessment_title_step\").offset();\n      var gotoPos = offset.top - 40;\n      $(\"html,body\").animate({ scrollTop: gotoPos }, \"fast\", function(){\n\n      });\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from \"@rails/request.js\"\n\n// Connects to data-controller=\"verify-account\"\nexport default class extends Controller {\n  initialize() {\n    document.requireEmailVerification = false;\n    document.requirePhoneVerification = false;\n    document.emailVerificationPassed = false;\n    document.phoneVerificationPassed = false;\n    document.emailToVerify = '';\n    document.phoneToVerify = '';\n    // This is called once per controller\n    // function(modalId, title, body, footer, placementSelector, modalClasses, modalDialogClasses)\n    let close_text = i18n_string(\"general.close\", \"Close\");\n    let loading_text = i18n_string(\"general.loading\", \"Loading\");\n    setupBootstrapModal(\"verify-modal\", loading_text, \"\", '<button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">'+close_text+'</button>', 'body', '');\n  }\n  connect() {\n    this.verify_code_callback = undefined; // Classes that extend this can set this callback\n    const controllerRef = this;\n    let datakind = '';\n    if (this.element.dataset && this.element.dataset.kind) {\n      datakind = this.element.dataset.kind\n    }\n    // Handle single instance like:  data-kind=\"email\" data-controller=\"verify-account\"\n    if (datakind == \"email\" || datakind == \"phone\") {\n      this.element.addEventListener('click', async function (event) {\n        event.preventDefault();\n\n        let requestBody = {kind: datakind};\n        controllerRef.doLoadVerification(requestBody);\n\n      });\n    }\n\n    // Handle verification during email/sms change: data-kind=\"formchange\" data-controller=\"verify-account\" -- Would attach to form.submit and check for email/sms changes\n    //console.log(\"datakind=\"+datakind);\n    if (datakind == \"formchange\") {\n      //console.log(\"Adding submit listener=\"+this.element.tagName);\n      //this.element.addEventListener('turbo:submit-start', this.checkEmailPhoneChanges);\n      this.element.addEventListener('submit', this.checkEmailPhoneChanges.bind(this));\n    }\n\n    // Handler for verification\n    document.addEventListener( \"click\", async function(event){\n      if (event.target.id == \"verify-button\") {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        let verifyCodeInput = document.getElementById(\"verify-code\");\n        let verifyKindInput = document.getElementById(\"verify-kind\");\n        if (verifyCodeInput && verifyKindInput && verifyCodeInput.value != \"\") {\n          let requestBody = {kind: verifyKindInput.value, code: verifyCodeInput.value};\n          const request = new FetchRequest(\"post\", '/account/process-verification', { responseKind: \"json\", body: requestBody});\n          const response = await request.perform();\n          if (response.ok) {\n            response.json.then(function(data){\n              if (typeof controllerRef.verify_code_callback === 'function') {\n                controllerRef.verify_code_callback(data.status == 'success');\n              }\n              if (data.status == 'success') {\n                if(data.kind == 'phone'){\n                  $('#verify-phone-holder').html('<p class=\"alert alert-sm alert-success\">'+data.message+'</p>');\n                  $(\"#verify-account-alert a[data-kind='phone']\").hide();\n                  if (document.requirePhoneVerification) {\n                    document.phoneVerificationPassed = true;\n                  }\n                } else if(data.kind == 'email'){\n                  $('#verify-email-holder').html('<p class=\"alert alert-sm alert-success\">'+data.message+'</p>');\n                  $(\"#verify-account-alert a[data-kind='email']\").hide();\n                  if (document.requireEmailVerification) {\n                    document.emailVerificationPassed = true;\n                  }\n                }\n                if(!$(\"#verify-account-alert a[data-kind='email']\").is(\":visible\") && !$(\"#verify-account-alert a[data-kind='phone']\").is(\":visible\")) {\n                  $(\"#verify-account-alert\").hide();\n                  $(\"#verify-account-alert-why\").removeClass(\"d-block\").hide();\n                }\n                $('#verify-modal').modal('hide');\n                if (document.requirePhoneVerification && !document.phoneVerificationPassed) {\n                  //console.log(\"--------------------Do phone verification :)))))\");\n                  // Delay to allow closing of old modal\n                  setTimeout(function(){\n                    controllerRef.doChangeVerification(\"phone\");\n                  }, 300);\n                } else if ((!document.requirePhoneVerification || document.phoneVerificationPassed) && (!document.requireEmailVerification || document.emailVerificationPassed)) {\n                  // Submit account update form\n                  $(\"#account-security-form\").submit();\n                }\n              } else {\n                let errorDiv = document.getElementById(\"verify-modal-error-message\");\n                if (errorDiv){\n                  errorDiv.innerHTML = '<div class=\"alert alert-danger\">'+i18n_string(\"sessions.verify_login.incorrect_verification_code\",\"Incorrect verification code\")+'</div>'\n                }\n              }\n            });\n          }\n\n        }\n      }\n\n    } );\n  }\n\n  checkEmailPhoneChanges(event) {\n    //console.log(\"Processing1\")\n    //event.preventDefault();\n    if ((document.requirePhoneVerification && !document.phoneVerificationPassed) || (document.requireEmailVerification && !document.emailVerificationPassed) || (!document.requirePhoneVerification && !document.requireEmailVerification)) {\n      //console.log(\"Processing2\");\n      // Do verification if email or phone number changed\n      document.requireEmailVerification = false;\n      document.requirePhoneVerification = false;\n      document.emailVerificationPassed = false;\n      document.phoneVerificationPassed = false;\n      document.emailToVerify = '';\n      document.phoneToVerify = '';\n      var emailToCheck = $(\"#account_email_address\").val();\n      var phoneCountryCode = $('.selected-dial-code').html();\n      var phoneNumber = $('#user_sms_phone').val();\n      if (phoneCountryCode) {\n        phoneCountryCode = phoneCountryCode.replace(/[^0-9]/g, '');\n      }\n      if (phoneNumber) {\n        phoneNumber = phoneNumber.replace(/[^0-9]/g, '');\n      }\n      var phoneToCheck = phoneCountryCode+phoneNumber;\n      //console.log(\"Processing3a:emailToCheck=\"+emailToCheck+\"--original_email_address=\"+$(\"#original_email_address\").val());\n      if (emailToCheck != $(\"#original_email_address\").val()) {\n        //console.log(\"Processing3:emailchange\");\n        document.requireEmailVerification = true;\n        document.emailToVerify = emailToCheck;\n      }\n      if (phoneToCheck != $(\"#original_phone_number\").val() && \"+\"+phoneToCheck != $(\"#original_phone_number\").val() && phoneNumber.length > 0) {\n        //console.log(\"Processing3:phonechange\");\n        document.requirePhoneVerification = true;\n        document.phoneToVerify = phoneToCheck;\n      }\n\n      if (document.requireEmailVerification) {\n        this.doChangeVerification('email');\n        event.preventDefault();\n        return false;\n      } else if (document.requirePhoneVerification) {\n        this.doChangeVerification('phone');\n        event.preventDefault();\n        return false;\n      }\n    }\n  }\n\n  doChangeVerification(kind) {\n    // Verify on email/phone number change\n    var post_data = {\n      kind: kind\n    };\n    if (kind == \"email\") {\n      post_data.email = document.emailToVerify;\n    } else if (kind == \"phone\") {\n      post_data.phone = document.phoneToVerify;\n    }\n\n    this.doLoadVerification(post_data);\n  }\n\n  async doLoadVerification(requestBody) {\n    //console.dir(\"doLoadVerification:\"+JSON.stringify(requestBody));\n    let modalDiv = document.getElementById(\"verify-modal\");\n    if (!modalDiv){ return; }\n    //console.dir(\"doLoadVerification:1\");\n    modalDiv.querySelector(\".modal-title\").innerHTML = i18n_string(\"general.loading\", \"Loading\");\n    modalDiv.querySelector(\".modal-body\").innerHTML = '<div class=\"text-center mt-5 mb-5\"><em class=\"fal fa-circle-notch fa-spin fa-3x\"></em></div>';\n    $(\"#verify-modal\").modal(\"show\");\n    //console.dir(\"doLoadVerification:2\");\n\n    const request = new FetchRequest(\"post\", '/account/load-verification', {responseKind: \"json\", body: requestBody});\n    const response = await request.perform();\n    if (response.ok) {\n      response.json.then(function (data) {\n        modalDiv.querySelector(\".modal-title\").innerHTML = data.title;\n        if (data.form) {\n          modalDiv.querySelector(\".modal-body\").innerHTML = data.form;\n        } else if (data.error) {\n          modalDiv.querySelector(\".modal-body\").innerHTML = data.error;\n        } else {\n          modalDiv.querySelector(\".modal-body\").innerHTML = i18n_string(\"users.account.response_did_not_include_form\",\"Response did not include form. Please try again.\");\n        }\n      });\n    }\n  }\n\n  updatePasswordCheckbox(event){\n    if(event.currentTarget.checked) {\n      $(\"#update-password-div\").removeClass(\"hidden\");\n    } else {\n      $(\"#update-password-div\").addClass(\"hidden\");\n      $(\"#current_password\").val(\"\");\n      $(\"#user_password\").val(\"\");\n      $(\"#user_password_confirmation\").val(\"\");\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport VerifyAccountController from './verify_account_controller.js'\nimport {FetchRequest} from \"@rails/request.js\";\n\n// Connects to data-controller=\"validate-email-change\"\nexport default class extends VerifyAccountController {\n  static targets = [ \"checkbox_open_modal\", \"email\", \"send_button\", \"message\", \"code_holder\" ]\n  connect() {\n    super.connect();\n    this.verify_code_callback = this.process_verify_code_for_convert;\n  }\n\n  checkbox_click(event) {\n    let checkBoxElement = event.currentTarget\n    var is_checked = checkBoxElement.checked;\n    console.log(\"Is Checked=\"+is_checked);\n    event.preventDefault();\n    $(checkBoxElement).blur();\n    if (is_checked) {\n      // Open modal\n      $(\"#verify-new-email-modal-email-input\").prop(\"readonly\", false);\n      $(\"#verify-new-email-modal-email-input\").val(\"\");\n      $('#verify-new-email-modal-message1').html(\"\");\n      $('#verify-new-email-modal-code-holder').html(\"\");\n      $(\"#new-email-input\").val(\"\");\n      $(\"#new-email-after-verification-div\").hide();\n      $(\"#verify-new-email-modal\").modal('show');\n    } else {\n      // Hide email display\n      $(\"#change_email_checkbox\").prop(\"checked\", false);\n      $(\"#new-email-input\").val(\"\");\n      $(\"#new-email-after-verification-div\").hide();\n    }\n  }\n  async send_verification(event){\n    event.preventDefault();\n    var email = $(\"#verify-new-email-modal-email-input\").val();\n    $(\"#verify-new-email-modal-email-input\").prop(\"readonly\", true);\n    if (email) {\n      let requestBody = {\n        kind: \"email\",\n        email: email\n      };\n      // let modalDiv = document.getElementById(\"verify-modal\");\n      // if (!modalDiv){ return; }\n      // console.dir(\"doLoadVerification:1\");\n      // modalDiv.querySelector(\".modal-title\").innerHTML = \"Loading\";\n      // modalDiv.querySelector(\".modal-body\").innerHTML = '<div class=\"text-center mt-5 mb-5\"><em class=\"fa fa-spinner fa-spin fa-3x\"></em></div>';\n      // $(\"#verify-modal\").modal(\"show\");\n      // console.dir(\"doLoadVerification:2\");\n      $('#verify-new-email-modal-message1').html('<div class=\"text-center mt-5 mb-5\"><em class=\"fal fa-circle-notch fa-spin fa-2x\"></em></div>');\n\n      const request = new FetchRequest(\"post\", '/account/load-verification', {responseKind: \"json\", body: requestBody});\n      const response = await request.perform();\n      if (response.ok) {\n        response.json.then(function (data) {\n          if (data.form) {\n            $('#verify-new-email-modal-message1').html(\"\");\n            $('#verify-new-email-modal-code-holder').html(data.form);\n            $(\"#new-email-input\").val(email);\n          } else if (data.error) {\n            $(\"#verify-new-email-modal-email-input\").prop(\"readonly\", false);\n            $('#verify-new-email-modal-message1').html(json.error);\n          } else {\n            $(\"#verify-new-email-modal-email-input\").prop(\"readonly\", false);\n            $('#verify-new-email-modal-message1').html('<div class=\"text-danger\">'+i18n_string(\"general.unknown_error_please_try_again\",\"Unknown error occurred. Please try again\")+'</div>');\n          }\n        });\n      }\n    }\n  }\n\n  // This is called from the super class VerifyAccountController -> and assigned in the connect function\n  process_verify_code_for_convert(valid_code) {\n    if (valid_code) {\n      $(\"#change_email_checkbox\").prop(\"checked\", true);\n      $(\"#new-email-after-verification-div\").show();\n      $(\"#verify-new-email-modal\").modal('hide');\n    } else {\n      let errorDiv = document.getElementById(\"verify-modal-error-message\");\n      if (errorDiv){\n        errorDiv.innerHTML = '<div class=\"alert alert-danger\">'+i18n_string(\"sessions.verify_login.incorrect_verification_code\",\"Incorrect verification code\")+'</div>';\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wbi-version-selector\"\nexport default class extends Controller {\n  static targets = [ \"input\", \"button\" ]\n  connect() {\n    if (this.hasInputTarget && this.hasButtonTarget) {\n\n    }\n  }\n  select_item(event){\n    event.preventDefault();\n    if (event.params && event.params.version) {\n      this.inputTarget.value = event.params.version;\n      for (let i=0; i<this.buttonTargets.length;i++) {\n        this.buttonTargets[i].classList.remove(\"active\");\n      }\n      event.currentTarget.classList.add(\"active\");\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wellness-common\"\nexport default class extends Controller {\n\n  connect() {\n    console.log(\"WC: connect\")\n\n    this.configureSelect2Fields('select.select2', {})\n\n    document.over_time_chart_data = {}\n    document.wcControllerRef = this\n\n\n    // Custom callback created - https://www.betterstimulus.com/interaction/callbacks.html\n    $(document).on('wellness_common_controller.state', function(event, callback) {\n        callback(this)\n      }.bind(this)\n    )\n\n    document.addEventListener('determineReload', this.determineReload.bind(this));\n    document.addEventListener('determineReloadFolders', this.determineReloadFolders.bind(this));\n    document.addEventListener('refreshCombinedQuestionData', this.refreshCombinedQuestionData.bind(this));\n\n    // Show / Hide Score Description\n    $(this.element).on('show.bs.collapse', (event) => {\n      $('#continuum-button').html(I18n.wellness_snapshot.show_less + \" <em class='fa fa-chevron-up'></em>\");\n    });\n    $(this.element).on('hide.bs.collapse', (event) => {\n      $('#continuum-button').html(I18n.wellness_snapshot.learn_more + \" <em class='fa fa-chevron-down'></em>\");\n    });\n\n    document.addEventListener('click', this.saveExpandedFolders.bind(this));\n  }\n\n\n\n  /* **************************************************************************\n  function: agreeToTerms\n  * User triggered\n  * Loads modal for user to agree to terms and sets the page to blurred\n  ************************************************************************** */\n  agreeToTerms(e) {\n    console.log(\"WS: agreeToTerms\")\n    var formData = \"setting_name=accepted_reporting_terms&setting_value=yes\";\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/users/agree_to_snapshot_terms\",\n      data: { setting_name: 'accepted_reporting_terms', setting_value: 'yes' },\n      success: function (data) {\n        if(data.status == 200) {\n          $(\"#well-being-snapshot-outer-div\").removeClass(\"blur-element\");\n          $(\"#well-being-snapshot-terms-modal\").modal('hide');\n        }\n      }\n    });\n  }\n\n\n\n  /* **************************************************************************\n  function: changeCombineAccountAction\n  * User and Internal triggered\n  * Changes if the customize question list grouping section is shown for sub-accounts\n  ************************************************************************** */\n  changeCombineAccountAction(event, quest_level = undefined) {\n    // I commmented out this function for now --> I think we want to allow them to continue to use\n    // the custom list even when combining.  If they want to limit using a custom list they created then\n    // they would still need to see this option. - neil 3/3/2024\n\n    // let $combined_action_dropdown = undefined;\n    // if (event && event.currentTarget) {\n    //   $combined_action_dropdown = $(event.currentTarget);\n    // } else {\n    //   $combined_action_dropdown = $(\"#\"+quest_level+\"_combine_account_action\");\n    // }\n    // console.log(\"WC: changeCombineAccountAction\")\n    //\n    // if ($combined_action_dropdown.length) {\n    //   let prefix = $combined_action_dropdown.data('prefix');\n    //   quest_level = $combined_action_dropdown.data('question-level');\n    //\n    //   if ($combined_action_dropdown.val() == 'separate') {\n    //     $(\"#\"+prefix+quest_level+\"_question_list_grouping\").removeClass(\"hidden\");\n    //   } else {\n    //     $(\"#\"+prefix+quest_level+\"_question_list_grouping\").addClass(\"hidden\");\n    //     $(\"#\"+prefix+quest_level+\"_question_option_groups\").addClass(\"hidden\");\n    //\n    //     $(\"#\"+prefix+\"customize_\"+quest_level+\"_option_group\").prop('checked', false);\n    //     let $option_kind_select = $(\"#\"+prefix+quest_level+\"_option_kinds\");\n    //     if ($option_kind_select.length && parseInt($option_kind_select.val()) > 0) {\n    //       $option_kind_select.val(0);\n    //       let select_change_event = new Event('change', {\n    //         bubbles: true,\n    //         cancelable: true,\n    //       });\n    //       $option_kind_select[0].dispatchEvent(select_change_event);\n    //     }\n    //   }\n    // }\n  }\n\n\n  /* **************************************************************************\n  function: changeQuestion   // also called changePrimaryQuestionProcess\n  * User and Internal triggered\n  * Gets the newly selected question, clears secondary and tertiary questions, loads secondary question builder\n  ************************************************************************** */\n  changeQuestion(event, chosen_option_list_id = undefined) {\n    console.log(\"WC: changeQuestion\")\n\n    // TODO: Load in prefix on wellness journey stuff.\n\n    var prefix = ''\n    var question_id = ''\n    var level = ''\n\n    if(Array.isArray(event)) {\n      // event format: [prefix, question_id, level]\n      prefix = event[0]\n      question_id = event[1]\n      level = event[2]\n    } else {\n      var item = event.currentTarget\n      question_id = item.value\n      level = item.dataset.level\n      prefix = item.dataset.prefix \n    }\n\n    console.log(\"    Question ID:\", question_id)\n    console.log(\"    Level:\", level)\n    console.log(\"    Prefix:\", prefix)\n\n    var question_type = '';\n    var question_id_val = '';\n    if (question_id.indexOf('-') > 0) {\n      var question_id_parts = question_id.split('-');\n      question_id_val = question_id_parts[0];\n      question_type = question_id_parts[1];\n    }\n\n\n    if(level == 'primary'){\n      this.resetQuestionPrimary(prefix);\n      this.resetQuestionSecondary(prefix);\n      this.resetQuestionTertiary(prefix);\n\n      console.log(\"  PREFIX: \", prefix)\n\n      if(prefix != 'wj_') {\n        // Set default display response to Percentage : Distressed > Thriving\n        document.wsControllerRef.displayResponseAsProcess('percent')\n      }\n\n\n      if(question_id != '') {\n        // Load option list first -- needed for combined snapshot - single sub-account\n        this.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'primary', 'primary_option_kinds', prefix)\n        $(\"#primary_options\").trigger('change.select2');\n        \n\n        // Load Secondary Question\n        this.loadQuestion(prefix + 'secondary_question', question_id)\n\n        // Set Primary Question ID in Secondary Question (allows for clearing of tertiary question)\n        $('#' + prefix + 'secondary_question').attr('data-primary', question_id)\n\n        // Display Question Filter Options\n        $('#' + prefix + 'dashboard-filter-options').removeClass('hidden')\n        $('#' + prefix + 'secondary_question_holder').removeClass('hidden')\n\n        // Load Signup Question Options\n        //this.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'primary', 'primary_option_kinds', prefix)\n\n        // Show display responses as sort by\n        if(prefix == '') {\n          $('#chart-sort-by').removeClass('hidden');\n        }\n\n        if (question_id == 'combined_snapshot_sub_accounts') {\n          $('#' + prefix + 'primary_question_customize_options').attr('href', '/combined_question/manage_modal?kind=combined_wellness_snapshot&load_sub_page=' + encodeURIComponent('/combined_question/' + question_id_val + '/list_sub_account_groups'))\n        } else if (question_type == 'combined') {\n          $('#' + prefix + 'primary_question_customize_options').attr('href', '/combined_question/manage_modal?kind=combined_wellness_snapshot&load_sub_page=' + encodeURIComponent('/combined_question/' + question_id_val + '/list_single_question'))\n        } else {\n          $('#' + prefix + 'primary_question_customize_options').attr('href', '/wellness_common/' + question_id_val + '/configure_options?prefix=' + prefix)\n        }\n      }\n\n    } else if(level == 'secondary') {\n      this.resetQuestionSecondary(prefix);\n      this.resetQuestionTertiary(prefix);\n\n      if(question_id != ''){ \n        let primary = $('#' + prefix + 'primary_question').val()\n\n        // Display Question Filter Options\n        $('#' + prefix + 'secondary_questions').removeClass('hidden')\n\n        // Load Signup Question Options\n        this.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'secondary', 'secondary_option_kinds', prefix)\n\n        // Display Tertiary Question (if available)\n        $('#' + prefix + 'tertiary_question_holder').removeClass('hidden')\n        this.loadQuestion(prefix + 'tertiary_question', [question_id, primary])\n\n        if (question_id == 'combined_snapshot_sub_accounts') {\n          $('#' + prefix + 'secondary_question_customize_options').attr('href', '/combined_question/manage_modal?kind=combined_wellness_snapshot&load_sub_page=' + encodeURIComponent('/combined_question/' + question_id_val + '/list_sub_account_groups'))\n        } else if (question_type == 'combined') {\n          $('#' + prefix + 'secondary_question_customize_options').attr('href', '/combined_question/manage_modal?kind=combined_wellness_snapshot&load_sub_page=' + encodeURIComponent('/combined_question/' + question_id_val + '/list_single_question'))\n        } else {\n          $('#' + prefix + 'secondary_question_customize_options').attr('href', '/wellness_common/' + question_id.split(\"-\")[0] + '/configure_options?prefix=' + prefix)\n        }\n      }\n    \n    } else if(level == 'tertiary') {\n      this.resetQuestionTertiary(prefix);\n      \n      if(question_id != ''){ \n        // Display Question Filter Options\n        $('#' + prefix + 'tertiary_questions').removeClass('hidden')\n\n        // Load Signup Question Options\n        this.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'tertiary', 'tertiary_option_kinds', prefix)\n\n        if (question_id == 'combined_snapshot_sub_accounts') {\n          $('#' + prefix + 'tertiary_question_customize_options').attr('href', '/combined_question/manage_modal?kind=combined_wellness_snapshot&load_sub_page=' + encodeURIComponent('/combined_question/' + question_id_val + '/list_sub_account_groups'))\n        } else if (question_type == 'combined') {\n          $('#' + prefix + 'tertiary_question_customize_options').attr('href', '/combined_question/manage_modal?kind=combined_wellness_snapshot&load_sub_page=' + encodeURIComponent('/combined_question/' + question_id_val + '/list_single_question'))\n        } else {\n          $('#' + prefix + 'tertiary_question_customize_options').attr('href', '/wellness_common/' + question_id.split(\"-\")[0] + '/configure_options?prefix=' + prefix)\n        }\n\n      }\n    }\n\n    if(document.wsControllerRef !== undefined) {\n      document.wsControllerRef.showNationalComparisons()\n    }\n\n    let combined_filters = $('#' + prefix + '' + level + '_combined_question_filter');\n    let standard_filters = $('#' + prefix + '' + level + '_question_filter');\n    let list_grouping_div = $('#' + prefix + '' + level + '_question_list_grouping');\n    if (combined_filters.length) {\n      if (question_id == 'combined_snapshot_sub_accounts') {\n        standard_filters.removeClass('hidden');\n        combined_filters.removeClass('hidden');\n      } else {\n        combined_filters.addClass('hidden');\n        standard_filters.removeClass('hidden');\n      }\n    }\n    if (list_grouping_div.length) {\n      list_grouping_div.removeClass('hidden');\n    }\n  }\n\n\n  /* **************************************************************************\n  function: changeQuestionOptionKinds\n  * User and Internal triggered\n  * Loads the question option kids (standard list and custom lists)\n  ************************************************************************** */\n  changeQuestionOptionKinds(event, question_id = undefined, option_id = undefined, question_level = undefined, prefix = '') {\n    console.log(\"WC: changeQuestionOptionKinds\")\n    const controllerRef = this\n    var question_type = undefined\n\n    if(event !== undefined) {\n      console.log(\"    - We have an event\")\n      var item = event.currentTarget\n      question_id = item.dataset.questionId\n      option_id = item.value\n      question_level = item.dataset.questionLevel\n      prefix = item.dataset.prefix\n      question_type = item.dataset.questionType\n    } else if (question_id !== undefined) {\n      // Restoring saved settings calls this without an event, so question_type has to come\n      // from the question_id string itself (e.g. \"7-combined\") instead of a dataset attribute.\n      question_type = question_id.toString().split('-')[1]\n    }\n\n    if (question_type == 'combined') {\n      // The chosen list grouping (option_id) is itself a CombinedQuestion variation id\n      // (see CombinedQuestion#parent_id) - get_signup_question_options ignores\n      // option_group_id for combined questions, so the variation's options only come back\n      // if we request that variation as the selected_question. Without this, restoring a\n      // saved \"list grouping\" for a combined question silently falls back to the original\n      // (ungrouped) option list.\n      if (parseInt(option_id) > 0) {\n        question_id = option_id + \"-combined\";\n      } else if (event !== undefined) {\n        question_id = question_id + \"-combined\";\n      }\n    }\n\n    console.log(\"    Event\", event)\n    console.log(\"    Question ID\", question_id)\n    console.log(\"    Option ID\", option_id)\n    console.log(\"    Question Level\", question_level)\n    console.log(\"    Prefix\", prefix)\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_common/get_signup_question_options\",\n      data: { selected_question: question_id, option_group_id: option_id },\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          $('#' + prefix + question_level + '_options').val(null).trigger('change'); // Clear chosen settings (if any)\n          $('#' + prefix + question_level + '_options').html( controllerRef.processOptionList(data.options) )\n        }\n      }\n    });\n  }\n\n\n\n\n  /* **************************************************************************\n  function: clearAll\n  * User triggered\n  * Removes all of the selected options from the question option list.\n  ************************************************************************** */\n  clearAll(event) {\n    console.log(\"WS: clearAll\")\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $(\"#\"+ item.dataset.field + \" > option\").prop(\"selected\", \"\");\n    $(\"#\"+ item.dataset.field ).trigger(\"change\");\n  }\n\n\n\n  /* **************************************************************************\n  function: configureSelect2Fields\n  * Internal triggered\n  * Sets up the select2 options\n  ************************************************************************** */\n  configureSelect2Fields(selector, options){\n    console.log(\"WC: configureSelect2Fields\")\n    $(selector).each(function () {\n      // Make sure this is not a SPAN select2 container that is already initialized.\n      if (this.classList && this.classList.contains(\"select2-container\")) {\n        return;\n      }\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      if (parentElement.length) {\n        options.dropdownParent = parentElement;\n      }\n      $(this).select2(options);\n      if ($(this).attr(\"data-native-event-on-select\")) {\n        $(this).on('select2:select select2:unselect select2:clear', function () {\n          let event = new Event('change', {bubbles: true}) // fire a native event\n          this.dispatchEvent(event);\n        });\n      }\n    });\n  }\n\n\n\n\n  /* **************************************************************************\n  function: dateRangeSelect\n  * User triggered\n  * Determines which date select options to show and resets other options if changed.\n  ************************************************************************** */\n  dateRangeSelect(event) {\n    console.log(\"WS: dateRangeSelect\")\n    this.toggleActiveClass(event) \n\n    $('#assess_filter_holder').removeClass('hidden')\n\n    if(event.currentTarget.children[0].value == 0) {\n      $('#report-date-range-custom-div').attr(\"style\", \"display:block\");\n      $('#report-campaign-select-div').attr(\"style\", \"display:none\");\n    } else if(event.currentTarget.children[0].value == 'campaign') {\n      $('#report-campaign-select-div').attr(\"style\", \"display:block\");\n      $('#report-date-range-custom-div').attr(\"style\", \"display:none\");\n      $('#assess_filter_holder').addClass('hidden')\n      $('#assess_filter').val('last_in_period')\n    } else {\n      $('#report-date-range-custom-div').attr(\"style\", \"display:none\");\n      $('#report-campaign-select-div').attr(\"style\", \"display:none\");\n      $('#start_date').val( $('#default_start_date').val() );\n      $('#end_date').val( $('#default_end_date').val() );\n    }\n  }\n\n\n\n\n  /* **************************************************************************\n  function: determineReload\n  * Internal triggered\n  * Determines if we need to reload the snapshot report after the user closes the custom list modal\n  ************************************************************************** */\n  determineReload(event) {\n    console.log(\"WC: determineReload\")\n    const controllerRef = this\n    if(window.reloadSettings == true){\n      window.reloadSettings = false\n      controllerRef.resetSettings(event)\n    }\n  }\n\n  /* **************************************************************************\n  function: determineReloadFolders\n  * Internal triggered\n  * Determines if we need to reload the snapshot folders after the user closes the custom list modal\n  ************************************************************************** */\n  determineReloadFolders(event) {\n    console.log(\"WC: determineReloadFolders\")\n    if(window.reloadFolders == true){\n      window.reloadFolders = false\n      // Get folder ids or just reload by class name\n      Array.from(document.getElementsByClassName('load-saved-snapshots')).forEach(function(item){\n        item.reload()\n      });\n    }\n  }\n\n\n\n  /* **************************************************************************\n  function: displayComparisonDates\n  * User triggered\n  * Determines if we need to reload the snapshot folders after the user closes the custom list modal\n  ************************************************************************** */\n  displayComparisonDates(event) {\n    console.log(\"WS: displayComparisonDates\")\n    this.toggleActiveClass(event)\n    if(event.currentTarget.children[0].value == 'custom') {\n      $('#comparison-dates').removeClass('hidden');\n    } else {\n      $('#comparison-dates').addClass('hidden');\n    }\n\n    if(document.wsControllerRef !== undefined) {\n      document.wsControllerRef.showNationalComparisons()\n    }\n  }\n\n\n\n\n\n  /* **************************************************************************\n  function: filterByOptions\n  * User triggered\n  * Shows / Hides the Filter Question # Options in Create Your Groups\n  ************************************************************************** */\n  filterByOptions(event) {\n    console.log(\"WC: filterByOptions\")\n    document.wcControllerRef.toggleActiveClass(event)\n\n    if( document.initial_report_load_complete == true) {\n      // TODO: Need to prevent multiple clicks but check the selected value\n      var item = event.currentTarget.dataset.item;\n      var field = event.currentTarget.dataset.field;\n\n      if(event.currentTarget.querySelector('input').value == 1) {\n        $('#' + item).removeClass(\"hidden\");\n      } else {\n        $('#' + item).addClass('hidden');\n        // Clear all existing selected options when item is hidden\n        $(\"#\" + field + \" > option\").prop(\"selected\",false);\n        $(\"#\" + field).trigger(\"change\");\n        // TODO: Check if this does anything\n        // this.setReportPanelSize();\n      }\n      \n    }\n  }\n\n\n\n\n\n  /* **************************************************************************\n  function: getJSONLoadSettingsString\n  * Internal triggered\n  * Converts an array of data into a JSON string\n  ************************************************************************** */\n  getJSONLoadSettingsString($formObj) {\n    console.log(\"WC: getJSONLoadSettingsString\")\n    var settings_data = $formObj.serializeArray();\n    var final_data_array = {};\n    var index_array_counter = {};\n    for(var i=0;i<settings_data.length;i++){\n      var name = settings_data[i].name;\n      if(name != 'authenticity_token') {\n        if(name.indexOf(\"[]\") != -1){\n          if(!index_array_counter[name]){\n            index_array_counter[name] = 0;\n          }\n          var new_temp_name = name.replace(\"[]\",\"[\"+index_array_counter[name]+\"]\");\n          index_array_counter[name]++;\n          name = new_temp_name;\n        }\n        final_data_array[name] = settings_data[i].value;\n      }\n    }\n\n    return JSON.stringify(final_data_array);\n  }\n\n\n\n\n\n  /* **************************************************************************\n  function: getSignUpQuestionOptionList\n  * Internal triggered\n  * Get the list of options for a specific question and displays them\n  ************************************************************************** */\n  getSignUpQuestionOptionList(question_id, chosen_option_list_id, question_level, field_id, prefix = '') {\n    \n    console.log(\"WC: getSignUpQuestionOptionList\")\n    console.log(\"     Question ID:\", question_id)\n    console.log(\"     Chosen Option List ID:\", chosen_option_list_id)\n    console.log(\"     Question Level: \", question_level)\n    console.log(\"     Field ID: \", field_id)\n    console.log(\"     Prefix: \", prefix)\n    const controllerRef = this\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_common/get_signup_question_option_list\",\n      data: { selected_question: question_id },\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n\n          $('#' + prefix + field_id).html( controllerRef.processOptionKind(data.options) );\n          if (question_id == 'combined_snapshot_sub_accounts') {\n            $('#' + prefix + field_id).attr('data-question-id', 'combined_snapshot_sub_accounts');\n            $('#' + prefix + field_id).attr('data-question-type', '');\n          } else {\n            $('#' + prefix + field_id).attr('data-question-id', question_id.split('-')[0]);\n            $('#' + prefix + field_id).attr('data-question-type', question_id.split('-')[1]);\n          }\n\n          if(chosen_option_list_id === undefined) {\n            // If question is changed from user interaction (always pull the default option list)\n            $('#' + prefix + field_id).val(data.default_option)\n            if(data.default_option > 0) {\n              $('label[data-field=\"' + field_id + '\"]').first().click()\n              $('select[name=\"' + field_id + '\"]').parent().parent().removeClass('hidden')\n            }\n\n            controllerRef.changeQuestionOptionKinds(undefined, question_id, data.default_option, question_level, prefix)\n          } else {\n            // If question is changed from loading saved settings\n            // We need to know what the chosen option list was and change to that, then get the option kinds based on that id.\n            $('#' + prefix + field_id).val(chosen_option_list_id)\n\n            $('label[data-field=\"' + field_id + '\"]').first().click()\n            $('#' + prefix + field_id).parent().parent().removeClass('hidden')\n            controllerRef.changeQuestionOptionKinds(undefined, question_id, chosen_option_list_id, question_level, prefix)\n          }\n        }\n\n        controllerRef.configureSelect2Fields('select.select2', {})\n      }\n    });  \n  }\n\n\n\n  /* **************************************************************************\n  function: hideLoader\n  * System triggered\n  * Hides the loader from view\n  ************************************************************************** */\n  hideLoader(prefix = '') {\n    console.log(\"WC: hideLoader\", prefix)\n    document.getElementById(prefix + 'loader-holder').classList.add('hidden')\n    document.getElementById(prefix + 'chart-holder').classList.remove('hidden') \n  }\n\n\n\n\n  /* **************************************************************************\n  function: loadQuestion\n  * System triggered\n  * Checks if we have saved data and submits the settings form\n  ************************************************************************** */\n  loadQuestion(element_id, options = ''){\n    console.log(\"WC: loadQuestion\")\n    console.log(\"    Element ID:\", element_id)\n    console.log(\"    Options:\", options)\n\n    if ($(\"#combined_snapshot_report_input\").length) {\n      let post_data = { selected_question: options}\n      let formObj = $(\"#report-settings-panel-form\");\n      if (element_id == 'secondary_question' || element_id == 'tertiary_question') {\n        post_data['report_settings'] = JSON.parse(this.getJSONLoadSettingsString(formObj));\n      }\n\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        data: post_data,\n        url: \"/wellness_common/get_combined_signup_questions\",\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n            let sub_account_option = \"\";\n            if (data.include_sub_account) {\n              sub_account_option = '<option value=\"'+data.include_sub_account.option_value+'\">'+data.include_sub_account.option_name+'</option>'\n            }\n            $('#' + element_id).html( document.wcControllerRef.processQuestionList(data.questions, sub_account_option) +\n                document.wcControllerRef.processCombinedQuestionList(data.combined_questions)\n            )\n          }\n        }\n      });\n    } else {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        data: { selected_question: options },\n        url: \"/wellness_common/get_signup_questions\",\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n            $('#' + element_id).html( document.wcControllerRef.processQuestionList(data.questions) )\n          }\n        }\n      });\n    }\n  }\n\n\n  /* **************************************************************************\n  function: loadSnapshotQuestion\n  * System triggered\n  * Checks if we have saved data and submits the settings form\n  ************************************************************************** */\n  loadSnapshotQuestion(element_id, options = ''){\n    console.log(\"WC: loadSnapshotQuestion\")\n    console.log(\"    Element ID:\", element_id)\n    console.log(\"    Options:\", options)\n\n    if (document.getElementById('snapshot_builder_combined_input')) {\n      this.loadCombinedSnapshotBuilderQuestion(element_id, options)\n      return\n    }\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      data: { selected_question: options },\n      url: \"/wellness_common/get_snapshot_builder_questions\",\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          $('#' + element_id).html( document.wcControllerRef.processQuestionList(data.questions) )\n        }\n      }\n    });\n\n  }\n\n  /* **************************************************************************\n  function: loadCombinedSnapshotBuilderQuestion\n  * Internal triggered (loadSnapshotQuestion)\n  * Fills a snapshot builder question select with the combined report's questions:\n  * the \"Sub Accounts\" pseudo-question plus the customer's combined questions, minus\n  * whatever an earlier level of the same group already chose (passed as options).\n  * Same endpoint and rendering as loadQuestion uses for the combined report itself.\n  ************************************************************************** */\n  loadCombinedSnapshotBuilderQuestion(element_id, options = ''){\n    console.log(\"WC: loadCombinedSnapshotBuilderQuestion\")\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      data: { selected_question: options },\n      url: \"/wellness_common/get_combined_signup_questions\",\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          let sub_account_option = \"\"\n          if (data.include_sub_account) {\n            sub_account_option = '<option value=\"' + data.include_sub_account.option_value + '\">' + escapeHtml(data.include_sub_account.option_name) + '</option>'\n          }\n          $('#' + element_id).html( document.wcControllerRef.processQuestionList(data.questions, sub_account_option) +\n              document.wcControllerRef.processCombinedQuestionList(data.combined_questions)\n          )\n        }\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: processCombinedQuestionList\n  * Internal triggered\n  * Creates options the passed in data. Contains list of combined questions to be selected\n  * - Appended to standard question option list so no need for blank selection option\n  ************************************************************************** */\n  processCombinedQuestionList(json) {\n    console.log(\"WC: processCombinedQuestionList\")\n    var options = '';\n    $(json).each(function(index, element) {\n      options += '<option value=\"' + element.id + '-combined\">' + element.name + '</option>';\n    });\n\n    return options;\n  }\n\n\n  /* **************************************************************************\n  function: processOptionKind\n  * Internal triggered\n  * Creates options for \"Select Question # List Grouping\", assigns Original list options and passed in ones\n  ************************************************************************** */\n  processOptionKind(json) {\n    console.log(\"WC: processOptionKind\")\n    console.log(\"    JSON\", json)\n    var options = '';\n    options += '<option value=\"0\">' + I18n.wellness_snapshot.original_list_options + '</option>';\n    $(json).each(function(index, element) {\n      options += '<option value=\"' + element.id + '\">' + element.name + '</option>';\n    });\n\n    return options;\n  }\n\n\n\n  /* **************************************************************************\n  function: processOptionList\n  * Internal triggered\n  * Creates options for \"Choose Question # Option(s)\"\n  ************************************************************************** */\n  processOptionList(json) {\n    console.log(\"WC: processOptionList\")\n    console.log(\"    JSON: \", json)\n    var options = '';\n    $(json).each(function(index, element){\n      if(element.id !== undefined) {\n        options += '<option value=\"' + element.id + '\">' + element.name + '</option>';\n      } else {\n        element.name = element.name.replaceAll(\"'\", \"&#39;\")\n        element.name = element.name.replaceAll('\"', '&quot;')\n        options += '<option value=\"' + element.option_ids.join(',') + ':' + element.name + '\">' + element.name + '</option>';\n      }\n    });\n\n    return options;\n  }\n\n  /* **************************************************************************\n  function: processQuestionList\n  * Internal triggered\n  * Creates options the passed in data. Contains list of questions to be selected\n  ************************************************************************** */\n  processQuestionList(json, additional_option_html) {\n    console.log(\"WC: processQuestionList\")\n    var options = '<option value=\"\">' + I18n.general.please_select + '</option>';\n    if (additional_option_html) {\n      options += additional_option_html;\n    }\n    $(json).each(function(index, element) {\n      let archived_label = '';\n      if (element.kind === \"custom\" && element.archived) {\n        archived_label = \" \" + i18n_string(\"signup_questions.archived_tag\", \"(archived)\");\n      }\n      options += '<option value=\"' + element.id + '-' + element.kind + '\">' + element.name + archived_label + '</option>';\n    });\n  \n    return options;\n  }\n\n\n  refreshCombinedQuestionData(event) {\n    // console.log(\"WCC: refreshCombinedQuestionData\");\n    let element = document.getElementById(\"settings-refresh-combined-question-data\");\n    if (element) {\n      let kind = element.dataset.kind;\n      let option_id = undefined;\n      let option_text = undefined;\n      if (element.dataset.combinedQuestionId && element.dataset.combinedQuestionText) {\n        option_id = parseInt(element.dataset.combinedQuestionId);\n        option_text = element.dataset.combinedQuestionText;\n      } else if (element.dataset.combinedSubAccountId && element.dataset.combinedSubAccountText) {\n        option_id = parseInt(element.dataset.combinedSubAccountId);\n        option_text = element.dataset.combinedSubAccountText;\n      }\n      let is_new = (element.dataset.isNew && element.dataset.isNew == \"yes\");\n      let is_deleted = (element.dataset.isDeleted && element.dataset.isDeleted == \"yes\");\n      let parent_id = 0;\n      if (element.dataset.combinedQuestionParentId) {\n        parent_id = parseInt(element.dataset.combinedQuestionParentId); // data-combined-question-parent-id\n      }\n      let question_levels = [\"primary\", \"secondary\", \"tertiary\"];\n\n      question_levels.forEach((level) => {\n        // console.log(\"WCC: question_levels:level=\"+level);\n        let $question_select = $('#' + level + '_question');\n        if ($question_select.length) {\n          if (kind == 'sub_account' && $question_select.val() == 'combined_snapshot_sub_accounts') {\n            let $option_kinds_select = $('#' + level + '_option_kinds');\n            if ($option_kinds_select.length) {\n              if (is_new) {\n                var new_option = document.createElement(\"option\");\n                new_option.value = option_id;\n                new_option.text = option_text;\n                $option_kinds_select.append(new_option);\n              } else {\n                let $option = $option_kinds_select.find(\"option[value='\" + option_id + \"']\");\n                if ($option.length) {\n                  let was_option_selected = $option[0].selected\n                  if (is_deleted) {\n                    $option.remove();\n                    if (was_option_selected) {\n                      $option_kinds_select.val(0);\n                    }\n                  } else {\n                    $option.text(option_text);\n                  }\n                  // If this option is selected --> reload the filter options list -- TRIGGER: change->wellness-snapshot#changeQuestionOptionKinds\n                  if (was_option_selected) {\n                    let select_change_event = new Event('change', {\n                      bubbles: true,\n                      cancelable: true,\n                    });\n                    $option_kinds_select[0].dispatchEvent(select_change_event);\n\n                  }\n                }\n              }\n            }\n          } else {\n            // console.log(\"WCC: question_levels:parent_id=\"+parent_id);\n            if (parent_id > 0) {\n              let parent_combined_value = parent_id + \"-combined\";\n              if ($question_select.val() == parent_combined_value) {\n                // Parent question is selected -- update or add to xxx_option_kinds select\n                let $option_kinds_select = $('#' + level + '_option_kinds');\n                if ($option_kinds_select.length) {\n                  if (is_new) {\n                    var new_option = document.createElement(\"option\");\n                    new_option.value = option_id;\n                    new_option.text = option_text;\n                    $option_kinds_select.append(new_option);\n                  } else {\n                    let $option = $option_kinds_select.find(\"option[value='\" + option_id + \"']\");\n                    if ($option.length) {\n                      let was_option_selected = $option[0].selected\n                      if (is_deleted) {\n                        $option.remove();\n                        if (was_option_selected) {\n                          $option_kinds_select.val(0);\n                        }\n                      } else {\n                        $option.text(option_text);\n                      }\n                      // If this option is selected --> reload the filter options list -- TRIGGER: change->wellness-snapshot#changeQuestionOptionKinds\n                      if (was_option_selected) {\n                        let select_change_event = new Event('change', {\n                          bubbles: true,\n                          cancelable: true,\n                        });\n                        $option_kinds_select[0].dispatchEvent(select_change_event);\n\n                      }\n                    }\n                  }\n                }\n              }\n            } else {\n              if (is_new) {\n                if ($question_select.find(\"option\").length > 0) {\n                  var new_option = document.createElement(\"option\");\n                  new_option.value = option_id + \"-combined\";\n                  new_option.text = option_text;\n                  $question_select.append(new_option);\n                }\n              } else {\n                let combined_value = option_id + \"-combined\";\n                let $option = $question_select.find(\"option[value='\" + combined_value + \"']\");\n                if ($option.length) {\n                  let was_option_selected = $option[0].selected\n                  if (is_deleted) {\n                    $option.remove();\n                  } else {\n                    $option.text(option_text);\n                  }\n                  // If option is selected for question then reset it and fire change event\n                  if (was_option_selected) {\n                    $question_select.val(\"\");\n                    let select_change_event = new Event('change', {\n                      bubbles: true,\n                      cancelable: true,\n                    });\n                    $question_select[0].dispatchEvent(select_change_event);\n\n                  }\n                }\n              }\n            }\n          }\n        }\n      });\n      // Determine if we need to refresh the question groups tab\n      if ($(\"#combined_questions_list_settings_panel_content\").length) {\n        if (is_deleted) {\n          // See if this item is still in the panel and if it is then reload it\n          if ($(\"#combined_questions_list_settings_panel_content\").find(\"#combined_question_row_\"+combined_question_id).length) {\n            let turbo_frame = document.getElementById(\"combined_questions_list_settings_panel\");\n            if (turbo_frame) {\n              turbo_frame.reload();\n            }\n          }\n        } else {\n          let turbo_frame = document.getElementById(\"combined_questions_list_settings_panel\");\n          if (turbo_frame) {\n            turbo_frame.reload();\n          }\n        }\n      }\n    }\n  }\n\n\n  /* **************************************************************************\n  function: resetQuestionPrimary\n  * Internal triggered\n  * Resets the primary question options\n  ************************************************************************** */\n  resetQuestionPrimary(prefix = '') {\n    console.log(\"WC: resetQuestionPrimary\")\n\n    // Hide Secondary & Tertiary Question Boxes\n    $('#' + prefix + 'secondary_question_holder').addClass(\"hidden\")\n    if($('#' + prefix + 'tertiary_question_holder').length) { $('#' + prefix + 'tertiary_question_holder').addClass(\"hidden\") }\n\n\n    $('#' + prefix + 'primary_question_customize_options').attr('href', '#');\n\n    if($('#' + prefix + 'dashboard-filter-options').length) { $('#' + prefix + 'dashboard-filter-options').addClass('hidden'); }\n    if($('#' + prefix + 'customize_primary_option_group').length) { \n      $('#' + prefix + 'customize_primary_option_group').closest('.btn').trigger('click'); \n      $('#' + prefix + 'customize_primary_option_group').parent().parent().children().removeClass('active')\n      $('#' + prefix + 'customize_primary_option_group').parent().addClass('active')\n    }\n    if($('#' + prefix + 'filter_by_primary_option').length) { $('#' + prefix + 'filter_by_primary_option').closest('.btn').click(); }\n    if($('#' + prefix + 'primary_options').length) { $('#' + prefix + 'primary_options').html(''); }\n    if($('#' + prefix + 'primary_option_kinds').length) { $('#' + prefix + 'primary_option_kinds').html(''); }\n  }\n\n  /* **************************************************************************\n  function: resetQuestionSecondary\n  * Internal triggered\n  * Resets the secondary question\n  ************************************************************************** */\n  resetQuestionSecondary(prefix = '') {\n    console.log(\"WC: resetQuestionSecondary\", prefix)\n\n    // Hide Tertiary Question Boxes\n    if($('#' + prefix + 'tertiary_question_holder').length) { $('#' + prefix + 'tertiary_question_holder').addClass(\"hidden\") }\n\n    $('#' + prefix + 'secondary_question_customize_options').attr('href', '#');\n\n    if($('#' + prefix + 'secondary_questions').length) { $('#' + prefix + 'secondary_questions').addClass('hidden'); $('#' + prefix + 'secondary_questions').attr('data-primary', ''); }\n    if($('#' + prefix + 'secondary_question_options_filter').length) { $('#' + prefix + 'secondary_question_options_filter').addClass(\"hidden\"); }\n    if($('#' + prefix + 'filter_by_secondary_option').length) { $('#' + prefix + 'filter_by_secondary_option').closest('.btn').click(); }\n    if($('#' + prefix + 'secondary_options').length) { $('#' + prefix + 'secondary_options').html('') }\n    if($('#' + prefix + 'secondary_option_kinds').length) { $('#' + prefix + 'secondary_option_kinds').html(''); }\n  }\n\n  /* **************************************************************************\n  function: resetQuestionTertiary\n  * Internal triggered\n  * Resets the tertiary question\n  ************************************************************************** */\n  resetQuestionTertiary(prefix = '') {\n    console.log(\"WC: resetQuestionTertiary\", prefix)\n    $('#' + prefix + 'tertiary_question_customize_options').attr('href', '#');\n\n    // if($('#' + prefix + 'tertiary_question_holder').length) { $('#' + prefix + 'tertiary_question_holder').addClass('hidden'); }\n    if($('#' + prefix + 'tertiary_questions').length) { $('#' + prefix + 'tertiary_questions').addClass('hidden'); }\n    if($('#' + prefix + 'tertiary_question_options_filter').length) { $('#' + prefix + 'tertiary_question_options_filter').addClass(\"hidden\"); }\n    if($('#' + prefix + 'filter_by_tertiary_option').length) { $('#' + prefix + 'filter_by_tertiary_option').closest('.btn').click(); }\n    if($('#' + prefix + 'tertiary_options').length) { $('#' + prefix + 'tertiary_options').html('') }\n    if($('#' + prefix + 'tertiary_option_kinds').length) { $('#' + prefix + 'tertiary_option_kinds').html(''); }\n  }\n\n  saveExpandedFolders(event) {\n    var item = event.target;\n    // console.log(\"WC: saveExpandedFolders 1\", item.dataset);\n    if (item && item.dataset && item.dataset.bsToggle && item.dataset.bsToggle === \"collapse\" && item.closest(\"#saved-snapshots\") && item.href && item.href.includes(\"#folder_\")) {\n      let target_element_selector = item.href;\n      let folder_id = parseInt(target_element_selector.split(\"#folder_\")[1]);\n      if (folder_id > 0) {\n        let targetElement = document.querySelector(\"#folder_\"+folder_id);\n        if (targetElement) {\n          console.log(\"WC: saveExpandedFolders - targetElement\", targetElement);\n          // console.dir(targetElement);\n          console.dir(item);\n          const expandedElements = new Set(this.saveExpandedFolders_load());\n          if (\"\"+item.ariaExpanded === \"true\") { // targetElement.classList.contains(\"show\")\n            // If it's expanded, add it from the list\n            expandedElements.add(folder_id);\n            console.log(\"WC: saveExpandedFolders - add to list\");\n          } else {\n            // If it's closed, remove it to the list\n            expandedElements.delete(folder_id);\n            console.log(\"WC: saveExpandedFolders - remove from list\");\n          }\n          this.saveExpandedFolders_save([...expandedElements])\n        }\n      }\n    }\n  }\n\n  saveExpandedFolders_load() {\n    let cookieName = \"wbi_expanded_folders\";\n    if (document.getElementById(\"combined_snapshot_report_input\")) {\n      cookieName = \"wbi_combined_expanded_folders\";\n    }\n    const cookieValue = getCookie(cookieName);\n    return cookieValue ? cookieValue.split(\",\").map(value => parseInt(value, 10)) : [];\n  }\n\n  saveExpandedFolders_save(id_list) {\n    let cookieName = \"wbi_expanded_folders\";\n    if (document.getElementById(\"combined_snapshot_report_input\")) {\n      cookieName = \"wbi_combined_expanded_folders\";\n    }\n    setCookie(cookieName, id_list.join(\",\"), 1);\n  }\n\n\n  /* **************************************************************************\n  function: selectAll\n  * User triggered\n  * Selects all options for the question\n  ************************************************************************** */\n  selectAll(event) {\n    console.log(\"WC: selectAll\")\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $(\"#\"+ item.dataset.field + \" > option\").prop(\"selected\",\"selected\");\n    $(\"#\"+ item.dataset.field ).trigger(\"change\");\n  }\n\n\n\n\n\n  /* **************************************************************************\n  function: selectCampaign\n  * User and Internal triggered\n  * Selects all campaigns except for the one the user selected for comparison data\n  * Displays the data in the campaign comparison section.\n  ************************************************************************** */\n  selectCampaign(prefix = '') {\n    if(typeof(prefix) == 'object') {\n      prefix = prefix.currentTarget.dataset.prefix\n    }\n\n    console.log(\"WC: selectCampaign\", prefix)\n    var item = document.getElementById(prefix + \"campaign_select\")\n    \n    if(item && item.value == '') {\n      $('#' + prefix + 'report-campaign-select-comparison-div').addClass(\"hidden\")\n      $(\"#\" + prefix + \"campaign_select_comparison\").val(\"none\")\n\n      if('#timeperiod_quick_select') {\n        $('#timeperiod_quick_select').val(-1)\n      }\n    } else {\n      if('#timeperiod_quick_select') {\n        if(item && item.options) {\n          $('#timeperiod_quick_select').val(item.options[item.selectedIndex].value)\n        }\n      }\n\n      var campaign_ids = []\n      if(item && item.options) {\n        campaign_ids: [item.options[item.selectedIndex].value]\n      }\n\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: '/assessments/find_other_campaigns',\n        data: { campaign_ids: [item.options[item.selectedIndex].value] },\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n\n            var option_list = '<option value=\"none\">' + I18n.general.none + '</option>';\n            data.campaigns.forEach(function(item, index){\n              var start_date = item.start_date.split('-')[1] + '/' + item.start_date.split('-')[2] + '/' + item.start_date.split('-')[0]\n              var end_date = item.end_date.split('-')[1] + '/' + item.end_date.split('-')[2] + '/' + item.end_date.split('-')[0]\n              option_list += '<option data-date=\"' + item.start_date + ':' + item.end_date + '\" value=\"' + item.id + '\" data-name=\"' + item.name + '\">' + item.name + ' (' + start_date + ' ' + I18n.advanced_reports.to + ' ' + end_date + ')</option>';\n            })\n            \n            $('#' + prefix + 'campaign_select_comparison').html(option_list)\n            $('#' + prefix + 'report-campaign-select-comparison-div').removeClass(\"hidden\")\n          }\n        }\n      });\n      \n    }\n  }\n\n\n\n\n  /* **************************************************************************\n  function: setReportPanelSize\n  * Internal triggered\n  * Configures the height of the settings panel when data changes\n  ************************************************************************** */\n  setReportPanelSize(prefix = '') {\n    console.log(\"WC: setReportPanelSize\")\n    var panelDiv = document.getElementById(prefix + 'report-settings');\n    if(panelDiv)\n    {\n      var combined_element_height = panelDiv.offsetHeight;\n      combined_element_height += 40; // Padding\n\n      if(!$(\"#\" + prefix + \"report-settings-update-btn-container-follow\").is(\":visible\"))\n      {\n        combined_element_height += 50; // Hidden button\n      }\n\n      if(combined_element_height > panelDiv.offsetHeight)\n      {\n        if(!$(\"#\" + prefix + \"report-settings-update-btn-container-sticky\").is(\":visible\"))\n        {\n          $(\"#\" + prefix + \"report-settings-update-btn-container-follow\").fadeOut('fast');\n          $(\"#\" + prefix + \"report-settings-update-btn-container-sticky\").fadeIn('fast');\n        }\n      }\n      else\n      {\n        if(!$(\"#\" + prefix + \"report-settings-update-btn-container-follow\").is(\":visible\"))\n        {\n          $(\"#\" + prefix + \"report-settings-update-btn-container-sticky\").fadeOut('fast');\n          $(\"#\" + prefix + \"report-settings-update-btn-container-follow\").fadeIn('fast');\n        }\n      }\n\n      $(panelDiv).scrollTop(0);\n    }\n  }\n\n\n\n\n\n\n\n  /* **************************************************************************\n  function: showLoader\n  * System triggered\n  * Shows the loader \n  ************************************************************************** */\n  showLoader(prefix = '') {\n    console.log(\"WC: showLoader -- \", prefix)\n    document.getElementById(prefix + 'loader-holder').classList.remove('hidden')\n    document.getElementById(prefix + 'chart-holder').classList.add('hidden') \n    document.getElementById(prefix + 'table-data-holder').innerHTML = '';\n  }\n\n\n\n  \n  /* **************************************************************************\n  function: toggleActiveClass\n  * User and Internal triggered\n  * Highlights the clicked item. Used to display radio buttons in a \"button\" format\n  ************************************************************************** */\n  toggleActiveClass(event){\n    // console.log(\"WC: toggleActiveClass\")\n    for(let item of event.currentTarget.parentNode.children){\n      item.classList.remove('active')\n    }\n    event.currentTarget.classList.add('active')\n  }\n\n\n  /* **************************************************************************\n  function: toggleOptionsDisplay\n  * User triggered\n  * Toggles the showing and hiding of specific elements. Elements in the data-show-element / data-hide-element attribute\n  ************************************************************************** */\n  toggleOptionsDisplay(e) {\n    // console.log(\"WC: toggleOptionsDisplay\")\n    this.toggleActiveClass(e)\n    \n    // Run prevent default AFTER call to active class so it doesn't trigger twice.\n    // e.preventDefault()\n\n    var item = e.currentTarget\n\n    if(item.dataset.showElement !== undefined) { \n      item.dataset.showElement.split(',').forEach((x) =>\n        document.getElementById(x).classList.remove('hidden')\n      )\n    }\n\n    if(item.dataset.hideElement !== undefined) {\n      item.dataset.hideElement.split(',').forEach((x) =>\n        document.getElementById(x).classList.add('hidden')\n      )\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wellness-common-custom-list\"\nexport default class extends Controller {\n  connect() {\n    const controllerRef = this\n    this.element[this.identifier] = this\n  }\n\n\n  /* **************************************************************************\n  function: buildOptionGroupList\n  * Internal triggered\n  * Gathers list of option ids that were dragged into the middle column (Selected Options), returns array object\n  ************************************************************************** */\n  buildOptionGroupList(option_kind) {\n    console.log(\"WSCL: buildOptionGroupList\")\n\n    var id = ''\n    if(option_kind == 'new') {\n      id = \"snapshot-list-2\"\n    } else if(option_kind == 'edit') {\n      id = \"snapshot-list-4\"\n    }\n\n    var options = []\n    $(\"#\" + id).children().each(function(index, obj) {\n      options.push(obj.dataset.id)\n    });\n    return options;\n  }\n\n\n  /* **************************************************************************\n  function: buildOptionGroupRow\n  * Internal triggered\n  * Returns the final html to be displayed in the Option Groups column.\n  ************************************************************************** */\n  buildOptionGroupRow(object_id, options, label, kind) {\n    console.log(\"WSCL: buildOptionGroupRow\")\n    return \"<td><input id='options_\" + object_id +\"' type='hidden' name='wellness_snapshot_group[option_groups][]' value='\" + options.join() + \":\" + label.replaceAll(\"'\", \"&#39;\") + \"' />\" + label + \"</td><td style='width:75px'><div class='input-group'><button class='btn btn-info btn-xs me-1' data-kind='\" + kind + \"' data-id='\" + object_id + \"' data-action='click->wellness-common-custom-list#editOptionGroup'><em class='fa fa-edit'></em><span class='sr-only'>Edit Option Group</span></button><button class='btn btn-danger btn-xs' data-kind='\" + kind + \"' data-id='\" + object_id + \"' data-action='click->wellness-common-custom-list#removeOptionGroup'><em class='fa fa-trash float-end'></em><span class='sr-only'>Remove Option Group</span></button></td>\"\n  }\n\n\n  /* **************************************************************************\n  function: cancelUpdateGroupOption\n  * User triggered\n  * Cancels and resets the \"Selected Options\" column when editing a saved list\n  ************************************************************************** */\n  cancelUpdateGroupOption(event) {\n    console.log(\"WSCL: cancelUpdateGroupOption\")\n    var item = event.currentTarget\n    const controllerRef = this\n\n    var kind = ''\n    if(item.dataset.kind == 'edit') { kind = '_edit' }\n\n    $('#group_label_combinations' + kind).find('button').attr('disabled', false);\n    $('#question_update_group_btn' + kind).removeClass(\"disabled\")\n    controllerRef.clearOptionGroup(item.dataset.kind)\n    controllerRef.rebuildOptions(item.dataset.kind)\n  }\n\n  /* **************************************************************************\n  function: checkUsedOptions\n  * Internal triggered\n  * Cancels and resets the \"Selected Options\" column when editing a saved list\n  ************************************************************************** */\n  checkUsedOptions(kind) {\n    console.log(\"WSCL: checkUsedOptions\")\n    if(kind == 'new') {\n      $('#save_list').attr('disabled', 'disabled')\n      if($(\"#snapshot-list-1\").children('li').length == 0) {\n        $('#save_list').removeAttr('disabled')\n        \n      }\n    } else if(kind == 'edit') {\n      $('#save_list_edit').attr('disabled', 'disabled')\n      if($(\"#snapshot-list-3\").children('li').length == 0) {\n        $('#save_list_edit').removeAttr('disabled')\n      }\n    }\n  }\n\n  /* **************************************************************************\n  function: clearSearch\n  * User triggered\n  * Clears the search field and resets all unselected options to show\n  ************************************************************************** */\n  clearSearch(e) {\n    console.log(\"WSCL: clearSearch\")\n    e.preventDefault()\n\n    var value = ''\n    $(\"#snapshot-list-1 li\").show().filter(function() {\n      return $(this).text().toLowerCase().trim().indexOf(value) == -1;\n    }).hide();\n    $('#search_option_field').val('')\n  }\n\n  /* **************************************************************************\n  function: clearOptionGroup\n  * Internal triggered\n  * Clears the options that were selected and saved, resets button status to accept new options\n  ************************************************************************** */\n  clearOptionGroup(option_kind) {\n    console.log(\"WSCL: clearOptionGroup\")\n    var kind = ''\n    if(option_kind == 'new') {\n      $('#snapshot-list-2').html('')\n    }\n    if(option_kind == 'edit') { \n      kind = '_edit' \n      $('#snapshot-list-4').html('')\n    }\n    \n    $('#group_label_field' + kind).val('')\n    $('#update_group_label_field' + kind).val('')\n    $('#group_label' + kind).collapse('hide')\n    $('#update_group_label' + kind).hide()\n    $('#question_add_group_btn' + kind).removeClass('hidden').addClass('disabled')\n    $('#group_label_holder' + kind).removeClass('hidden')\n  }\n\n  /* **************************************************************************\n  function: createGroupLabel\n  * User triggered\n  * Gets called when the user clicks \"Save\" under the Selected Options section.\n  ************************************************************************** */\n  createGroupLabel(e) {\n    console.log(\"WSCL: createGroupLabel\")\n    e.preventDefault()\n\n    if((document.getElementById('group_label_field') && document.getElementById('group_label_field').value == '') && (document.getElementById('group_label_field_edit') && document.getElementById('group_label_field_edit').value == '')){\n      alert(\"Please enter a group name\")\n      return false;\n    } else {\n      const controllerRef = this \n      var item = e.currentTarget\n\n      var kind = ''\n      if(item.dataset.kind == 'edit') {\n        kind = '_edit'\n      }\n\n      var options = controllerRef.buildOptionGroupList(item.dataset.kind)\n      var label = $('#group_label_field' + kind).val()\n      var now = Math.floor(Date.now() / 1000)\n\n      $('#group_label_combinations' + kind).append(\"<tr id='item_\" + now + \"' class='ui-sortable-handle'>\" + controllerRef.buildOptionGroupRow(now, options, label, item.dataset.kind) + \"</tr>\")\n      \n      controllerRef.clearOptionGroup(item.dataset.kind)\n\n      controllerRef.checkUsedOptions(item.dataset.kind)\n    }\n  }\n\n  /* **************************************************************************\n  function: deleteOptionList\n  * User triggered\n  * Deletes the custom list from the database.\n  ************************************************************************** */\n  deleteOptionList(event) {\n    console.log(\"WSCL: deleteOptionList\")\n    event.preventDefault()\n    const controllerRef = this\n    var item = event.currentTarget\n\n    if(confirm(I18n.wellness_snapshot.delete_option_group)){\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        url: \"/wellness_common/\" + item.dataset.id + \"/delete_option_group\",\n        method: \"post\",\n        success: function (data) {\n          if(data.status == 200) {\n            \n            $('[data-bs-toggle=\"tooltip\"]').each(function(){\n              $(this).tooltip('hide')\n            })\n\n            document.getElementById('saved_option_list').reload() // Reloads the turbo-frame\n            if(document.getElementById('load_custom_lists') !== null) {\n              document.getElementById('load_custom_lists').reload() // Reloads the turbo-frame\n            }\n\n            // Need to reload the existing option group IF its show on the main page, while maintaining the currently selected item.\n            var fields = ['primary_option_kinds', 'secondary_option_kinds', 'tertiary_option_kinds']\n            fields.forEach(function(item){ \n              controllerRef.reloadListGrouping(item)\n            });\n          } else {\n            alert(I18n.wellness_snapshot.cannot_delete_option_group)\n          }\n        }\n      })\n    }\n  }\n\n  /* **************************************************************************\n  function: editOptionGroup\n  * User triggered\n  * Loads the chosen option into the \"Selected Options\" panel. Sets button statuses\n  ************************************************************************** */\n  editOptionGroup(event) {\n    console.log(\"WSCL: editOptionGroup\")\n    event.preventDefault()\n    var item = event.currentTarget\n    var item_id = event.currentTarget.dataset.id\n    var group_option = $('#options_' + item_id).val().split(':')\n    var options = group_option[0]\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      url: \"/wellness_common/find_specific_options\",\n      method: \"post\",\n      data: { 'options': options },\n      success: function (data) {\n        if(data.status == 200) {\n\n          if(item.dataset.kind == 'new') {\n            $('#snapshot-list-2').html(data.option_list);\n            $('#group_label_combinations').find('button').attr('disabled', true)\n            $('#update_group_label').show()\n            $('#question_add_group_btn').addClass('hidden')\n            $('#update_group_label_field').val(group_option[1])\n            $('#update_group_label_field').data('id', item_id)\n          } \n          else if(item.dataset.kind == 'edit') {\n            $('#snapshot-list-4').html(data.option_list);\n            $('#group_label_combinations_edit').find('button').attr('disabled', true)\n            $('#update_group_label_edit').show()\n            $('#question_add_group_btn_edit').addClass('hidden')\n            $('#update_group_label_field_edit').val(group_option[1])\n            $('#update_group_label_field_edit').data('id', item_id)\n            $('#save_list_edit').attr('disabled', true)\n          }\n          else if(item.dataset.kind == 'view') {\n            $('#snapshot-list-6').html(data.option_list);\n            // $('#group_label_combinations_edit').find('button').attr('disabled', true)\n            $('#update_group_label_view').show()\n            // $('#question_add_group_btn_edit').addClass('hidden')\n            $('#update_group_label_field_view').val(group_option[1])\n            // $('#update_group_label_field_edit').data('id', item_id)\n            // $('#save_list_edit').attr('disabled', true)\n          }\n        }\n      }\n    })\n  }\n\n  /* **************************************************************************\n  function: editOptionList\n  * User triggered\n  * Loads the edit panel for the specific saved grouping\n  ************************************************************************** */\n  editOptionList(event) {\n    console.log(\"WSCL: editOptionList\")\n    event.preventDefault()\n    const controllerRef = this\n    var item = event.currentTarget\n\n    if(item.dataset.delete) {\n      if(confirm(I18n.wellness_snapshot.confirm_edit_list)){\n        controllerRef.editOptionListShow(item.dataset.id)\n      }\n    } else {\n      controllerRef.editOptionListShow(item.dataset.id)\n    }\n  }\n\n  /* **************************************************************************\n  function: editOptionListShow\n  * Internal triggered\n  * Loads the selected option list into the \"Edit List Item\" panel\n  ************************************************************************** */\n  editOptionListShow(item) {\n    console.log(\"WSCL: editOptionListShow\")\n    $('#edit_option_group').attr('src', '/wellness_common/' + item + '/edit_option_group' )\n    $('#nav-edit-tab').removeClass('hidden')\n    var tab = new bootstrap.Tab($('#nav-edit-tab'))\n    tab.show()\n  }\n\n  /* **************************************************************************\n  function: rebuildOptions\n  * Internal triggered\n  * Reloads the list of options the user can select in \"Available Options\"\n  ************************************************************************** */\n  rebuildOptions(option_kind){\n    console.log(\"WSCL: rebuildOptions\")\n    const controllerRef = this\n    var kind = ''\n    if(option_kind == 'edit') {\n      kind = \"_edit\"\n    }\n\n    // Gather the current list of options selected by the user\n    var options = []\n    $(\"#group_label_combinations\" + kind + \" input[name='wellness_snapshot_group[option_groups][]']\").each(function(index, obj){\n      obj = $(obj).val().split(':')\n      obj = obj[0].split(',')\n      $(obj).each(function(i, o){\n        options.push(parseInt(o))\n      });\n    })\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_common/get_signup_question_options\",\n      data: { selected_question: $(\"#question_id\").val() },\n      success: function (data) {\n        if(data.status == 200) {\n\n          // Check if the list of options (data.options) is included in the original list of options (options[]) and if not display it.\n          // Displayed options are items that are available for the user to choose\n          var display_options = '';\n          $(data.options).each(function(index, element){\n            if(!options.includes(element.id)) {\n              display_options += '<li class=\"ui-state-default ui-sortable-handle\" data-id=\"' + element.id + '\">' + element.name + '</li>';\n            }\n          });\n\n          if(option_kind == 'new') {\n            $('#snapshot-list-1').html(display_options);\n          } else if(option_kind == 'edit') {\n            $('#snapshot-list-3').html(display_options);\n          }\n\n          controllerRef.checkUsedOptions(option_kind)\n        }\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: reloadListGrouping\n  * Internal triggered\n  * Reloads the list of saved lists on the settings panel.\n  ************************************************************************** */\n  reloadListGrouping(item, reset_chosen_list = false, prefix = '') {\n    console.log(\"WSCL: reloadListGrouping\")\n    const controllerRef = this\n    console.log(\"      Item:\", item)\n    console.log(\"      Reset Chosen List:\", reset_chosen_list)\n    console.log(\"      Prefix:\", prefix)\n\n    if($(\"select[name='\" + item + \"']\").length > 0){\n      var id = $(\"#\" + prefix + item).attr('data-question-id')\n      var type = $(\"#\" + prefix + item).attr('data-question-type')\n      if(prefix == '' && id === undefined) {\n        prefix = \"wj_\"\n        id = $(\"#wj_\" + item).attr('data-question-id')\n        type = $(\"#wj_\" + item).attr('data-question-type')\n      }\n\n      console.log(\"    ID: \", id)\n      \n      if(parseInt(id) > 0) {\n        var question_level = item.split('_')[0]\n\n        console.log(\"   QUESTION LEVEL: \", question_level)\n        if(reset_chosen_list == true) {\n          var chosen_option_list_id = undefined\n        } else {\n          var chosen_option_list_id = $(\"#\" + prefix + item).val()\n        }\n\n        console.log(\"    Chosen Option List ID:\", chosen_option_list_id)\n\n        // Custom callback created - https://www.betterstimulus.com/interaction/callbacks.html\n        $(document).trigger('wellness_common_controller.state', function(wellnessCommon) {\n          console.log(\"----- CUSTOM CALLBACK: - WSCL: reloadListGrouping (common) --------------\")\n          wellnessCommon.getSignUpQuestionOptionList(id+\"-\"+type, chosen_option_list_id, question_level, item, prefix)\n        })\n      }\n    }\n  }\n\n  /* **************************************************************************\n  function: removeOptionGroup\n  * User triggered\n  * Removes the selected option group and reloads those options into the Available Options column.\n  ************************************************************************** */\n  removeOptionGroup(e) {\n    console.log(\"WSCL: removeOptionGroup\")\n    const controllerRef = this\n    var item = e.currentTarget\n    e.preventDefault()\n\n    var ans = confirm(I18n.wellness_snapshot.remove_option_group);\n    if(ans) {\n      $('#item_' + item.dataset.id).remove()\n\n      // Need to reload the option list with the missing items in place.\n      controllerRef.rebuildOptions(item.dataset.kind)\n      var kind = ''\n      if(item.dataset.kind == 'edit') {\n        kind = '_edit'\n      }\n\n      if($('#group_label_combinations' + kind).children().length == 0){\n        $('#group_label_holder' + kind).addClass('hidden')\n      }\n    }\n  }\n\n  /* **************************************************************************\n  function: saveOptionGroup\n  * User triggered\n  * Saves the option group to the database. Reloads the list of option groups on main screens.\n  ************************************************************************** */\n  saveOptionGroup(event) {\n    console.log(\"WSCL: saveOptionGroup\")\n    event.preventDefault()\n\n    // var item = event.currentTarget\n    // var prefix = item.dataset.prefix\n    // console.log(\"      Item Prefix:\", prefix)\n\n    // // Collects all options and saves it into an array that can be sent through ajax request\n    // var values = $(\"input[name^='wellness_snapshot_group']\").serializeArray();\n    if(document.getElementById('wellness_snapshot_group_name').value == '') {\n      alert(\"Please enter a group name\")\n      return false;\n    } else {\n      const controllerRef = this\n\n      // Collects all options and saves it into an array that can be sent through ajax request\n      var values = $(\"input[name^='wellness_snapshot_group']\").serializeArray();\n\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: $('#new_wellness_snapshot_group').attr('action'),\n        data: values,\n        success: function (data) {\n          if(data.status == 200) {          \n            // Reload the turbo frame of saved option list.\n            document.getElementById('saved_option_list').reload()\n            if(document.getElementById('load_custom_lists') !== null){\n              document.getElementById('load_custom_lists').reload()\n            }\n\n            $('#group_label_combinations').html('');\n            $('#wellness_snapshot_group_name').val('')\n            $('#group_label_holder').addClass('hidden')\n            $('#nav-existing-tab').click()\n\n            // Need to reload the list of available options.\n            document.getElementById('available_options').reload()\n\n            // Need to reload the existing option group IF its show on the main page, while maintaining the currently selected item.\n            var fields = ['primary_option_kinds', 'secondary_option_kinds', 'tertiary_option_kinds']\n            fields.forEach(function(item){ \n              controllerRef.reloadListGrouping(item)\n            });\n\n          } else {\n            alert(I18n.wellness_snapshot.cannot_save_option_group)\n          }\n\n        //   $('#group_label_combinations').html('');\n        //   $('#wellness_snapshot_group_name').val('')\n        //   $('#group_label_holder').addClass('hidden')\n        //   $('#nav-existing-tab').click()\n\n        //   // Need to reload the list of available options.\n        //   document.getElementById('available_options').reload()\n\n        //   // Need to reload the existing option group IF its show on the main page, while maintaining the currently selected item.\n        //   var fields = ['primary_option_kinds', 'secondary_option_kinds', 'tertiary_option_kinds']\n        //   fields.forEach(function(item){ \n        //     controllerRef.reloadListGrouping(item, false, prefix)\n        //   });\n\n        // } else {\n        //   alert(I18n.wellness_snapshot.cannot_save_option_group)\n        }\n      });\n    }\n  }\n\n\n  /* **************************************************************************\n  function: searchList\n  * User triggered\n  * Hides the list of available options that do not match the query\n  ************************************************************************** */\n  searchList(e) {\n    console.log(\"WSCL: searchList\")\n    e.preventDefault()\n    var item = e.currentTarget\n    \n    var value = item.value.toLowerCase().trim();\n    $(\"#snapshot-list-1 li\").show().filter(function() {\n      return $(this).text().toLowerCase().trim().indexOf(value) == -1;\n    }).hide();\n  }\n\n  /* **************************************************************************\n  function: setDefaultOptionGroup\n  * User triggered\n  * Updates the default option group list on the Saved Options List and sets this option on the settings panel\n  ************************************************************************** */\n  setDefaultOptionGroup(e) {\n    console.log(\"WSCL: setDefaultOptionGroup\")\n    const controllerRef = this\n    var item = e.currentTarget\n    e.preventDefault()\n    \n    var ans = confirm(I18n.wellness_snapshot.change_default_option)\n    if(ans) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: '/wellness_common/' + item.dataset.questionId + '/update_default_option_group',\n        data: { option_group_id: item.dataset.optionGroupId },\n        success: function (data) {\n          if(data.status == 200) {\n\n            // Need to reload the existing option group IF its show on the main page, while maintaining the currently selected item.\n            var fields = ['primary_option_kinds', 'secondary_option_kinds', 'tertiary_option_kinds']\n            fields.forEach(function(item){ \n              controllerRef.reloadListGrouping(item, true)\n            });\n\n            $('#system_modal_popup').modal('hide')\n          }\n        }\n      })\n    }\n  }\n\n  /* **************************************************************************\n  function: updateGroupLabel\n  * User triggered\n  * Updates the label of the selected options group in either new panel or edit panel\n  ************************************************************************** */\n  updateGroupLabel(e) {\n    console.log(\"WSCL: updateGroupLabel\")\n    e.preventDefault()\n\n    if((document.getElementById('update_group_label_field_edit') && document.getElementById('update_group_label_field_edit').value == '') && (document.getElementById('update_group_label_field') && document.getElementById('update_group_label_field').value == '')){\n      alert(\"Please enter a group name\")\n      return false;\n    } else {\n      const controllerRef = this\n\n      var item = e.currentTarget\n\n      var kind = ''\n      if(item.dataset.kind == 'edit') {\n        kind = '_edit'\n      }\n\n      var options = controllerRef.buildOptionGroupList(item.dataset.kind)\n\n      console.log(\"Options:\", options)\n      var label = $('#update_group_label_field' + kind).val()\n      var id = $('#update_group_label_field' + kind).data('id')\n\n      $('#item_' + id).html(controllerRef.buildOptionGroupRow(id, options, label, item.dataset.kind))\n\n      $('#group_label_combinations' + kind).find('button').attr('disabled', false);\n      \n      controllerRef.clearOptionGroup(item.dataset.kind)\n      controllerRef.checkUsedOptions(item.dataset.kind)\n    }\n  }\n\n  /* **************************************************************************\n  function: updateOptionGroup\n  * User triggered\n  * Updates the saved options and name for the specific option list item under the \"Edit List Item\" panel\n  ************************************************************************** */\n  updateOptionGroup(event) {\n    console.log(\"WSCL: updateOptionGroup\")\n    event.preventDefault()\n\n    let wrapper = event.currentTarget.closest('form');\n    if(wrapper.querySelector(\"input[id$='wellness_snapshot_group_name']\").value == ''){\n      alert(\"Please enter a grouping name\")\n      return false;\n    } else {\n\n      const controllerRef = this\n      var item = event.currentTarget\n\n      // Collects all options and saves it into an array that can be sent through ajax request\n      var values = $(\"#group_label_holder_edit input[name^='wellness_snapshot_group']\").serializeArray();\n\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: $(item).attr('action'),\n        data: values,\n        success: function (data) {\n          if(data.status == 200) {\n            controllerRef.rebuildOptions('edit')\n\n            // Reload the turbo frame of saved option list.\n            document.getElementById('saved_option_list').reload()\n\n            $('#group_label_combinations_edit').html('');\n            $('#wellness_snapshot_group_name_edit').val('')\n            $('#group_label_holder_edit').addClass('hidden')\n            $('#snapshot-list-3').html('')\n\n            $('#nav-edit-tab').addClass('hidden')\n            var tab = new bootstrap.Tab($('#nav-existing-tab'))\n            tab.show()\n\n            window.reloadSettings = true\n\n          } else {\n            alert(I18n.wellness_snapshot.cannot_save_option_group)\n          }\n        }\n      });\n\n      controllerRef.checkUsedOptions()\n    }\n  }\n\n\n  /* **************************************************************************\n  function: viewOptionList\n  * User triggered\n  * Loads the edit panel for the specific saved grouping (full admin only)\n  ************************************************************************** */\n  viewOptionList(event) {\n    console.log(\"WCLS:viewOptionList\")\n    event.preventDefault()\n    const controllerRef = this\n    var item = event.currentTarget\n    controllerRef.viewOptionListShow(item.dataset.id)\n  }\n\n\n  /* **************************************************************************\n  function: viewOptionListShow\n  * Internal triggered\n  * Loads the selected option list into the \"View List Item\" panel\n  ************************************************************************** */\n  viewOptionListShow(item) {\n    console.log(\"WSCL: viewOptionListShow\")\n    $('#view_option_group').attr('src', '/wellness_common/' + item + '/view_option_group' )\n    $('#nav-view-tab').removeClass('hidden')\n    var tab = new bootstrap.Tab($('#nav-view-tab'))\n    tab.show()\n  }\n\n\n  /* **************************************************************************\n  function: verifyTab\n  * User triggered\n  * Determines if the edit tab should be shown or not.\n  ************************************************************************** */\n  verifyTab(e) {\n    console.log(\"WSCL: verifyTab\")\n    var item = e.currentTarget\n\n    if(item.id == 'nav-create-tab' || item.id == 'nav-existing-tab') {\n      $('#nav-edit-tab').addClass('hidden');\n      $('#nav-view-tab').addClass('hidden');\n    }\n    else if(item.id = 'nav-edit-tab') {\n      $('#nav-view-tab').addClass('hidden');\n    }\n    else if(item.id = 'nav-view-tab') {\n      $('#nav-edit-tab').addClass('hidden');\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wellness-common-folders\"\nexport default class extends Controller {\n\n  connect() {\n    console.log(\"WCF: connect\")\n  }\n\n  reloadTurboFrame(frameId) {\n    var frame = document.getElementById(frameId);\n    if (!frame) return;\n\n    if (typeof frame.reload === 'function') {\n      frame.reload();\n    } else {\n      var src = frame.getAttribute('src');\n      if (src) {\n        frame.removeAttribute('src');\n        frame.setAttribute('src', src);\n      }\n    }\n  }\n\n  confirm_delete_folder (e) {\n    console.log(\"WSF: confirm_delete_folder\")\n    e.preventDefault();\n    var self = this;\n    if (confirm(I18n.wellness_snapshot.delete_folder)) {\n      var item = e.currentTarget\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: $(item).attr('href'),\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n            $('[data-bs-toggle=\"tooltip\"]').each(function(){\n              $(this).tooltip('hide')\n            })\n\n            if(data.kind == 'wellness_snapshot' || data.kind == 'combined_wellness_snapshot') {\n              self.reloadTurboFrame('load_saved_snapshots')\n              self.reloadTurboFrame('load_saved_snapshots_quick_select')\n            } else if(data.kind == 'wellness_journey') {\n              self.reloadTurboFrame('wj_load_saved_snapshots')\n            }\n          } else {\n            alert(I18n.wellness_snapshot.cannot_delete_folder)\n          }\n        }\n      });\n    }\n  }\n\n  confirm_delete_folder_with_contents (e) {\n    console.log(\"WSF: confirm_delete_folder_with_contents\")\n    e.preventDefault();\n    var self = this;\n    if (confirm(I18n.wellness_snapshot.delete_folder_with_contents_warning)) {\n      var item = e.currentTarget\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: $(item).attr('href'),\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n            $('[data-bs-toggle=\"tooltip\"]').each(function(){\n              $(this).tooltip('hide')\n            })\n\n            if(data.kind == 'wellness_snapshot' || data.kind == 'combined_wellness_snapshot') {\n              self.reloadTurboFrame('load_saved_snapshots')\n              self.reloadTurboFrame('load_saved_snapshots_quick_select')\n            } else if(data.kind == 'wellness_journey') {\n              self.reloadTurboFrame('wj_load_saved_snapshots')\n            }\n          } else {\n            alert(I18n.wellness_snapshot.cannot_delete_folder)\n          }\n        }\n      });\n    }\n  }\n\n  confirm_delete_saved_snapshot (e) {\n    console.log(\"WSF: confirm_delete_saved_snapshot\")\n    e.preventDefault();\n    var self = this;\n    if (confirm(I18n.wellness_snapshot.confirm_delete_snapshot)) {\n      var item = e.currentTarget\n      $.ajax({\n        url: item.closest('form').action,\n        type: 'post',\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        success: function (data) {\n          if(data.status == 200) {\n\n            $('[data-bs-toggle=\"tooltip\"]').each(function(){\n              $(this).tooltip('hide')\n            })\n\n            if(data.kind == 'wellness_snapshot' || data.kind == 'combined_wellness_snapshot'){\n              self.reloadTurboFrame('load_saved_snapshots')\n              self.reloadTurboFrame('load_saved_snapshots_quick_select')\n            } else if(data.kind == 'wellness_journey') {\n              self.reloadTurboFrame('wj_load_saved_snapshots')\n            }\n          } else {\n            alert(I18n.wellness_snapshot.cannot_delete_filter);\n          }\n        }\n      });\n\n    }\n  }\n\n\n  createSnapshotFilter(event) {\n    console.log(\"WSF: createSnapshotFilter\")\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: $(item).attr('action'),\n      data: $(item).serializeArray(),\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          $('#system_modal_popup').modal('hide')\n\n          if($('#' + data.prefix + 'load_saved_snapshots').length) {\n            document.getElementById(data.prefix + 'load_saved_snapshots').reload()\n          }\n        } else {\n          alert(\"Error saving snapshot folder\")\n        }\n      }\n    })\n\n  }\n  \n  edit_folders(event) {\n    console.log(\"WSF: edit_folders\")\n    event.preventDefault();\n\n    let $elem = $(event.currentTarget);\n    $elem.toggleClass(\"opened\");\n    this.toggle_folder_status($elem);\n\n    $('#folder-list ol').nestedSortable({\n      handle: '.dd-content',\n      items: 'li',\n      toleranceElement: '.dd-content',\n      maxLevels: 3,\n      relocate: this.update_nested_order,\n\n      forcePlaceholderSize: true,\n\n      // opacity: .6,\n      // placeholder: 'placeholder',\n      revert: 250,\n      tabSize: 25,\n      tolerance: 'pointer',\n      isTree: true,\n      expandOnHover: 700,\n      // startCollapsed: false\n    });\n\n    $('#create_report_folder').attr('disabled') == 'false' ? 'true' : 'false'\n  }\n\n\n  editFolderModal(e) {\n    console.log(\"WSF: editFolderModal\")\n    e.preventDefault()\n    var item = e.currentTarget\n\n    $.ajax({\n      url: item.closest('form').action,\n      type: 'post',\n      data: $(item).serializeArray(),\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      success: function (data) {\n        if(data.status == 200) {\n          $('#system_modal_popup').modal('hide')\n\n          if(data.kind == 'wellness_snapshot' || data.kind == 'combined_wellness_snapshot') {\n            if($('#load_saved_snapshots').length) {\n              document.getElementById('load_saved_snapshots').reload()\n            }\n          } else if(data.kind == 'wellness_journey') {\n            if($('#wj_load_saved_snapshots').length) {\n              document.getElementById('wj_load_saved_snapshots').reload()\n            }\n          }\n        } else {\n          alert(I18n.wellness_snapshot.cannot_update_filter);\n        }\n      }\n    });\n  }\n\n\n  folder_click(event) {\n    console.log(\"WSF: folder_click\")\n    let elem = event.currentTarget;\n    $(elem).children('em').toggleClass('fa-folder fa-folder-open');\n    // console.log($('#parent_' + $(elem).data('id')));\n    // $('#parent_' + $(elem).data('id')).toggleClass('hidden');\n    $(\".parent-folder-\" + $(elem).data('id')).toggleClass('hidden');\n  }\n\n  mouseleave_dd_content(event) {\n    let elem = event.currentTarget;\n    $(elem).children('.folder-options').hide();\n  }\n  mouseover_dd_content(event) {\n    let elem = event.currentTarget;\n    $(elem).children('.folder-options').show();\n  }\n\n\n\n\n  /* **************************************************************************\n  function: saveSnapshotFilter\n  * User triggered\n  * Saves the current options in the settings panel to a custom snapshot name in the db\n  ************************************************************************** */\n  saveSnapshotFilter(event) {\n    console.log(\"WCF: saveSnapshotFilter\")\n    event.preventDefault()\n    var item = event.currentTarget\n\n    var prefix = item.dataset.prefix\n\n    console.log( $(item).serializeArray() )\n\n    var valid = true\n    // if($('#i_can_create_snapshot_folders').val() == 'false' && $('#created_from').val() == 'new_snapshot'){\n    //   if( $('[name=\"saved_report_setting[folder_ids][]\"]').filter(':checked').length < 1 ) {\n    //     alert(\"Please choose at least one folder.\");\n    //     valid = false\n    //   }\n    // } \n\n    if(valid == true) {\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: $(item).attr('action'),\n        data: $(item).serializeArray(),\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n            $('#system_modal_popup').modal('hide')\n\n            Array.from(document.getElementsByClassName('load-saved-snapshots')).forEach(function(item){\n              item.reload()\n            });\n\n            var name = '<a href=\"mailto:' + data.createdby + '\">' + data.createdby + '</a>'\n            if(data.createdby == 'default-wbi-admin@cws.net') {\n              name = 'Well-Being Index Team'\n            }\n            if($('#report-name-holder').length && !$('#report-name-holder').hasClass('hidden')){\n              $('#report-name').html('<h4 class=\"m-0 p-0\">' + data.name + '</h4>')\n              $('#report-description').html('<p>' + data.description + '</p>')\n              $('#report-created-by').html('<p><small>' + I18n.wellness_snapshot.created_by + ': ' + name + '</h4>')\n            } else if($('#wj_report-name-holder').length && !$('#wj_report-name-holder').hasClass('hidden')) {\n              $('#wj_report-name').html('<h4 class=\"m-0 p-0\">' + data.name + '</h4>')\n              $('#wj_report-description').html('<p>' + data.description + '</p>')\n              $('#wj_report-created-by').html('<p><small>' + I18n.wellness_snapshot.created_by + ': ' + name + '</h4>')\n            }\n          } else {\n            alert(I18n.wellness_snapshot.error_saving)\n          }\n        }\n      })\n    }\n  }\n\n\n\n\n  toggle_folder_status(btn) {\n    console.log(\"WSF: toggle_folder_status\")\n    if($(btn).hasClass('opened')){\n      $(btn).html('<em class=\"fa fa-check\"></em> ' + I18n.wellness_snapshot.finish_editing_folders).removeClass('btn-outline-primary').addClass('btn-success');\n      $('.sub-level').removeClass(\"hidden\");\n      $('.handle-holder').removeClass(\"hidden\");\n      $('#create_report_folder').attr('disabled', 'disabled');\n      $('.assign-folders').attr('disabled', 'disabled');\n      //$('.dd-item').addClass(\"ps-5\");\n      // reloadSorting();\n\n    } else {\n      $(btn).html('<em class=\"fa fa-pencil\"></em> ' + I18n.wellness_snapshot.edit_report_folders).addClass('btn-outline-primary').removeClass('btn-success');\n      $('.sub-level').addClass('hidden');\n      $('.handle-holder').addClass(\"hidden\");\n      $('#create_report_folder').removeAttr('disabled');\n      $('.assign-folders').removeAttr('disabled');\n      //$('.dd-item').removeClass(\"ps-5\");\n    }\n\n    $.each($('button[data-bs-toggle=\"collapse\"]'), function(){\n\n      $(this).children('em').removeClass('fa-folder-open').addClass('fa-folder');\n\n      if($(this).attr('disabled')) {\n        $(this).removeAttr('disabled');\n      } else {\n        $(this).attr(\"disabled\", \"disabled\");\n      }\n\n      $(this).attr('aria-expanded', false);\n      var id = $(this).attr('aria-controls');\n      $('#' + id).removeClass('show');\n      $('#' + id).attr('aria-expanded', false);\n    });\n  }\n\n\n  update_nested_order(){\n    console.log(\"WSF: update_nested_order\")\n    let data = $('#folder-list ol').nestedSortable('toArray', {startDepthCount: 0});\n    let postData = {}; // folder[folder_id] = parent_id / position[folder_id] = i\n    for(let i=0; i<data.length; i++) {\n      if (data[i]['id']) {\n        postData['folder['+data[i]['id']+']'] = data[i]['parent_id']\n        postData['position['+data[i]['id']+']'] = i\n      }\n    }\n    console.dir(postData);\n    let update_folder_order_url = $('#folder-list').data('folder-order-url');\n\n    $.ajax({\n      url: update_folder_order_url,\n      type: 'post',\n      data: postData,\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      dataType: 'json',\n      success: function (data) {\n        if(data.status != \"success\") {\n          alert(I18n.wellness_snapshot.cannot_update_order);\n        }\n      }\n    });\n  }\n\n\n  updateSnapshotFilter(event) {\n    console.log(\"WSF: updateSnapshotFilter\")\n    event.preventDefault()\n    var item = event.currentTarget\n \n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"PATCH\",\n      url: $(item).attr('action'),\n      data: $(item).serializeArray(),\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          \n          $('#system_modal_popup').modal('hide')\n          if(data.kind == 'wellness_snapshot' || data.kind == 'combined_wellness_snapshot') {\n\n            if($('#load_saved_snapshots').length) {\n              document.getElementById('load_saved_snapshots').reload()\n            }\n          } else if(data.kind == 'wellness_journey') {\n            if($('#wj_load_saved_snapshots').length) {\n              document.getElementById('wj_load_saved_snapshots').reload()\n            }\n          }\n        } else {\n          alert(I18n.wellness_snapshot.cannot_save_filter)\n        }\n      }\n    })\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport WellnessCommonController from \"./wellness_common_controller.js\"\n\n// Connects to data-controller=\"wellness-journey\"\nexport default class extends WellnessCommonController {\n  \n  /* **************************************************************************\n  function: addTimePeriod\n  * User triggered\n  * Adds additional start and end dates for time-frame\n  ************************************************************************** */\n  addTimePeriod(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    var date_start = new Date();\n    date_start.setDate(date_start.getDate() - 30);\n    var date_start_string = date_start.toISOString().split('T')[0];\n\n    var date_end = new Date();\n    var date_end_string = date_end.toISOString().split('T')[0];\n\n    var content = '<div id=\"time_period_' + item.dataset.index + '\"><em class=\"fa fa-times text-danger float-end pointer me-1\" data-action=\"click->wellness-journey#removeTimePeriod\"></em><h5>Time Period #' + (parseInt(item.dataset.index) + 1) + '</h5><div class=\"report-setting-section-group\"><div class=\"input-group\"><input type=\"text\" name=\"wj_date_start[]\" id=\"wj_date_start_' + item.dataset.index + '\" class=\"form-control form-control-sm datepicker\" value=\"' + date_start_string + '\" autocomplete=\"off\"><span class=\"input-group-addon px-2\">to</span><input type=\"text\" name=\"wj_date_end[]\" id=\"wj_date_end_' + item.dataset.index + '\" class=\"form-control form-control-sm datepicker\"  value=\"' + date_end_string + '\" autocomplete=\"off\"></div></div></div>'\n\n    document.getElementById('time-periods').insertAdjacentHTML('beforeend', content);\n    item.dataset.index = parseInt(item.dataset.index) + 1\n\n    $(\".datepicker\").datepicker({\n      changeMonth: true,\n      changeYear: true,\n      minDate: ($('#default_start_date').length > 0) ? new Date($('#default_start_date').val()) : new Date('2010-01-01'),\n      dateFormat: 'yy-mm-dd'\n    });\n  }\n\n\n  /* **************************************************************************\n  function: buildChartRow\n  * System triggered\n  * Builds each row for the chart itself\n  * For the snapshot display each row contains the value, annotation and tooltip in an array\n  ************************************************************************** */\n  buildChartRow(elements, type, chart_kind, focus = undefined) {\n    console.log(\"WJ: buildChartRow\")\n\n    var row = []  // ex: ['Campaign Name',  1.18, '1.18']\n    var element_list = Array.from(elements) // Duplicates the elements array and allows modification without changing the original\n    var general_data = element_list.shift()\n\n    if(general_data['total'] > 0){ \n      row.push(general_data['campaign_name'])\n\n      element_list.forEach((e, index) => {\n        if(type == 'mean_distress') {\n          row.push(e)\n        } \n        else if(type == 'snapshot') {\n          if(focus && chart_kind == 'line') {\n\n            if(!focus.includes(index.toString())){\n              row.push(e[0])\n              row.push('')\n              row.push(e[2])\n            } else {\n              row.push(e[0])\n              row.push(e[1])\n              row.push(e[2])\n            }\n\n          } else {\n            row.push(e[0])\n            row.push(e[1])\n            row.push(e[2])\n          }\n        } \n      })\n\n\n      // Removes the annotation from the mean distress national average (red line)\n      if(focus && type == 'mean_distress' && chart_kind == 'line') { \n        row[5] = ''\n      }\n\n      return row\n    }\n  }\n  \n\n\n  /* **************************************************************************\n  function: buildTimePeriodList\n  * Internal triggered\n  * Build the list of dropdown options for selected options\n  ************************************************************************** */\n  buildTimePeriodList(data) {\n    var item = document.getElementById(\"wj-time-period-select\")\n    item.querySelector('.dropdown-menu').innerHTML = ''\n    var current_list = undefined\n    var element = undefined\n    let time_period = document.querySelector('input[name=\"wj_time_period\"]:checked').value\n    if(time_period == 'campaigns' || time_period == 'interval') {\n      document.getElementById('wj-time-period-select').classList.remove('hidden')\n      if(time_period == 'campaigns'){\n        current_list = JSON.parse(document.getElementById('wj_time_period_campaign').value)\n      }\n      if(time_period == 'interval'){\n        var checked_interval = document.querySelector('input[name=\"wj_time_interval\"]:checked').value\n        if(checked_interval == 'annually') {\n          current_list = JSON.parse(document.getElementById('wj_time_period_annually').value)\n        } else if(checked_interval == 'bi-annually') {\n          current_list = document.getElementById('wj_time_period_biannually').value != '' ? JSON.parse(document.getElementById('wj_time_period_biannually').value) : ''\n          element = document.getElementById('wj_time_period_biannually')\n        } else if(checked_interval == 'quarterly') {\n          current_list = document.getElementById('wj_time_period_quarterly').value != '' ? JSON.parse(document.getElementById('wj_time_period_quarterly').value) : ''\n          element = document.getElementById('wj_time_period_quarterly')\n        } else if(checked_interval == 'monthly') {\n          current_list = document.getElementById('wj_time_period_monthly').value != '' ? JSON.parse(document.getElementById('wj_time_period_monthly').value) : ''\n          element = document.getElementById('wj_time_period_monthly')\n        }\n      }\n\n      var list_data = []\n      data.mean_distress.rows.forEach(function(row, index) {\n        var node = item.querySelector('.dropdown-menu').appendChild(document.createElement('li').appendChild(document.createElement('button')))\n        if(current_list !== '') {\n          current_list.forEach((cl_item) =>{\n            if(cl_item[0] == row[0].campaign_name) {\n              if(cl_item[1] == true) {\n                node.innerHTML = '<i class=\"fas fa-check me-1\"></i> ' + row[0].campaign_name\n              } else {\n                node.innerHTML = '<i class=\"fas fa-check me-1 text-white\"></i> ' + row[0].campaign_name \n              }\n            }\n          })\n        } else {\n          node.innerHTML = '<i class=\"fas fa-check me-1\"></i> ' + row[0].campaign_name \n          list_data.push([row[0].campaign_name, true])\n        }\n\n        node.classList.add('dropdown-item')\n        node.dataset.action = \"click->wellness-journey#toggleTimePeriods\";\n        node.dataset.value =  row[0].campaign_name \n        if(row[0].campaign_id) {\n          node.dataset.id = row[0].campaign_id\n        }\n        node.setAttribute(\"type\", \"button\");\n      })\n\n      if(list_data.length > 0) {\n        element.value = JSON.stringify(list_data)\n      }\n\n    } else {\n      document.getElementById('wj-time-period-select').classList.add('hidden')\n    }\n  }\n\n\n  /* **************************************************************************\n  function: currentSettingsSignature\n  * Internal triggered\n  * Serializes the settings form exactly the way saveLastReportSettings does, so\n  * two signatures taken at different moments can be compared to tell whether the\n  * settings actually changed in between.\n  *\n  * Both sides of that comparison come from this one function, rather than one\n  * side being a separately maintained hash of what the defaults are believed to\n  * be - two such descriptions drift, and when they do the notice sticks on.\n  ************************************************************************** */\n  currentSettingsSignature() {\n    return this.getJSONLoadSettingsString($(\"#wj-report-settings-panel-form\"));\n  }\n\n  /* **************************************************************************\n  function: applyFilterNoticeState\n  * Internal triggered\n  * Shows or hides the \"this report is filtered\" notice and the save/update\n  * buttons that go with it.\n  *\n  * Whether the report is filtered is told to us - by the server on page load,\n  * and by whoever saved the settings after that. It used to be inferred here by\n  * diffing the serialized form against setInitialSettings' hand-written hash of\n  * expected defaults. Two independently authored descriptions of \"the defaults\"\n  * drift apart, and when they do the notice sticks on with no way to clear it.\n  ************************************************************************** */\n  applyFilterNoticeState(customized) {\n    console.log(\"WJ: applyFilterNoticeState\", customized)\n\n    document.wj_report_settings_customized = customized\n    $(\"#wj_report_settings_customized\").val(customized ? '1' : '0')\n\n    if(customized){\n      // Notice on \"Configure Report\" button\n      // Notice in header area to reset\n      // Notice in settings panel to reset\n      // Notice in settings panel to save as \"Saved Configuration\"\n      $(\".wj-report-settings-filter-applied-notice\").removeClass('hidden');\n      if(document.wj_saved_filter_loaded && document.wj_saved_filter_loaded > 0)\n      {\n        $(\".wj-report-settings-filter-save-btn\").addClass('hidden');\n        $(\".wj-report-settings-filter-save-as-new-btn\").removeClass('hidden');\n        // Check to see if the saved_filter_loaded differs from the current last filter\n        $(\".wj-report-settings-filter-update-btn\").removeClass('hidden');\n      }\n      else\n      {\n        $(\".wj-report-settings-filter-update-btn\").addClass('hidden');\n        $(\".wj-report-settings-filter-save-as-new-btn\").addClass('hidden');\n        $(\".wj-report-settings-filter-save-btn\").removeClass('hidden');\n      }\n    } else {\n      $(\".wj-report-settings-filter-applied-notice\").addClass('hidden');\n      $(\".wj-report-settings-filter-save-btn\").addClass('hidden');\n      $(\".wj-report-settings-filter-update-btn\").addClass('hidden');\n      $(\".wj-report-settings-filter-save-as-new-btn\").addClass('hidden');\n    }\n\n    super.setReportPanelSize()\n  }\n\n\n\n  /* **************************************************************************\n  function: clearSnapshotLabel\n  * Internal triggered\n  * Resets and hides the snapshot label description gray box.\n  ************************************************************************** */\n  clearSnapshotLabel() {\n    console.log(\"WJ: clearSnapshotLabel\")\n    $('#wj_report-name-holder').addClass('hidden')\n    $('#wj_report-name').html('')\n    $('#wj_report-description').html('')\n    $('#wj_report-created-by').html('')\n  }\n\n  \n\n  /* **************************************************************************\n  function: closeSettings\n  * User triggered\n  * Closes the off-canvas settings panel\n  ************************************************************************** */\n  closeSettings(event) {\n    console.log(\"WJ: closeSettings\")\n    if( $(\"#wj_report-settings-offcanvas\").hasClass(\"show\")){\n      $(\"#wj_report-settings-offcanvas\").removeClass(\"show\")\n    }\n  }\n\n\n  \n  /* **************************************************************************\n  function: connect\n  * System triggered\n  * \n  ************************************************************************** */\n  connect() {\n    console.log(\"WJ: connect\")\n    document.isLoading = false\n\n    // Enable PopOvers\n    var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"popover\"]'))\n    var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {\n      return new bootstrap.Popover(popoverTriggerEl)\n    })\n\n    if($('#wj_configuration_panel')){\n      document.over_time_chart_data = {}\n      document.wjControllerRef = this\n\n      var offcanvas = document.getElementById('wj_report-settings-offcanvas');\n      document.bsOffcanvas_journey = new bootstrap.Offcanvas( offcanvas );\n\n      super.showLoader('wj_')\n\n      if($('#wj_i_can_create_snapshot_folders').val() == 'true' || ($('#wj_saved_report_settings_last').length && $('#wj_default_loaded_report').length)) {\n        document.wjControllerRef.initializeData()\n      } else {\n        $('#wj_configuration_panel').addClass(\"hidden\");\n        $('#ranges-explanation-all').addClass('hidden')\n        $(\"<p>\" + I18n.wellness_journey.admin_no_reports_assigned + \"</p>\").insertBefore('#ranges-explanation-all')\n      }\n    }\n\n  }\n\n\n\n  displaySelectedOptions() {\n\n    var filter = \"<ul>\"\n    var option_list = [[\"wj_primary_question\", [\"wj_primary_option_kinds\", \"select\"], [\"wj_primary_options\", \"multiple\"]], [\"wj_secondary_question\", [\"wj_secondary_option_kinds\", \"select\"], [\"wj_secondary_options\", \"multiple\"]], [\"wj_tertiary_question\", [\"wj_tertiary_option_kinds\", \"select\"], [\"wj_tertiary_options\", \"multiple\"]]]\n\n    option_list.forEach((item) => {\n      var question = document.getElementById(item[0])\n      if(question && question.selectedIndex > 0) {\n\n        filter += \"<li>\" + question.options[question.selectedIndex].text\n        var option_kinds = document.getElementById(item[1][0])\n        if(option_kinds.selectedIndex.value > 0){\n          filter += \"<ul><li>\" + option_kinds.options[option_kinds.selectedIndex].text + \"</li></ul>\"\n        }\n\n        var options = document.getElementById(item[2][0])\n        if(options.selectedOptions.length > 0) {\n          filter += \"<ul>\"\n          for(let i = 0; i < options.selectedOptions.length; i++){\n            filter += \"<li>\" + options.selectedOptions[i].text + \"</li>\"\n          }\n          filter += \"</ul>\"\n        }\n        filter += \"</li>\"\n      }\n      \n    })\n\n    if(filter == \"<ul>\") {\n      filter = \"<p>\" + I18n.wellness_journey.not_filtered + \"</p>\"\n    }\n\n    document.getElementById(\"wj-current-filter-list\").innerHTML = filter\n  }\n\n\n  hideTimePeriodDropDown(e) {\n    var list = []\n    var time_period = undefined\n    var element = undefined\n    var item = e.currentTarget\n\n    item.parentNode.querySelectorAll('.dropdown-item').forEach(function(obj, index){\n      list[obj.dataset.value] = !obj.querySelector('.fa-check').classList.contains('text-white')\n    })\n\n    let wj_time_period = document.querySelector('input[name=\"wj_time_period\"]:checked').value\n    \n    if(wj_time_period == 'campaigns' || wj_time_period == 'interval'){\n      document.getElementById('wj-time-period-select').classList.remove('hidden')\n      if(wj_time_period == 'campaigns'){\n        time_period = JSON.parse(document.getElementById('wj_time_period_campaign').value)\n        element = document.getElementById('wj_time_period_campaign')\n      }\n      if(wj_time_period == 'interval'){\n        var checked_interval = document.querySelector('input[name=\"wj_time_interval\"]:checked').value\n        if(checked_interval == 'annually') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_annually').value)\n          element = document.getElementById('wj_time_period_annually')\n        } else if(checked_interval == 'bi-annually') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_biannually').value)\n          element = document.getElementById('wj_time_period_biannually')\n        } else if(checked_interval == 'quarterly') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_quarterly').value)\n          element = document.getElementById('wj_time_period_quarterly')\n        } else if(checked_interval == 'monthly') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_monthly').value)\n          element = document.getElementById('wj_time_period_monthly')\n        }\n      }\n    } else {\n      document.getElementById('wj-time-period-select').classList.add('hidden')\n    }\n   \n    time_period.forEach(function(obj){\n      if(list[obj[0]] == undefined) {\n        obj[1] = false\n      } else {\n        obj[1] = list[obj[0]]\n      }\n    });\n\n    element.value = JSON.stringify(time_period)\n    document.getElementById('submit-over-time').click()\n  }\n\n  /* **************************************************************************\n  function: initializeData\n  * System triggered\n  * Checks if we have saved data and submits the settings form\n  ************************************************************************** */\n  initializeData() {\n    console.log(\"WJ: initializeData\")\n    document.wjControllerRef.setInitialSettings()\n\n    if(document.wj_initial_report_settings !== undefined) {\n    \n      // console.log(\"WE ARE LOADING DEFAULT WELLNESS JOURNEY STUFF\")\n      // console.log(\"Initial Settings:\", document.wj_initial_report_settings)\n      document.isLoading = true\n\n      document.wj_saved_filter_loaded = undefined;\n      document.wj_edit_saved_filter_loaded = undefined;\n      document.wj_initial_report_load_complete = false\n\n      super.loadQuestion('wj_primary_question')\n      document.wjControllerRef.resetFilterOptions()\n      document.wjControllerRef.loadSavedReportSettings()\n      super.setReportPanelSize('wj_')\n\n\n      // Check if we have previously saved chart data and load that, then submit the form\n      // if( document.getElementById(\"previous_data\") !== null ) {\n      //   alert(\"Woot\")\n      // }\n\n\n      // Submits the settings panel form\n      document.getElementById('submit-over-time').click() \n\n\n    } else {\n      $('#configureWellnessJourney').addClass(\"hidden\");\n      $('#ranges-explanation-all').addClass('hidden')\n      $(\"<p>\" + I18n.wellness_snapshot.admin_no_reports_assigned + \"</p>\").insertBefore('#ranges-explanation-all')\n      document.isLoading = false\n    }\n\n   \n  }\n\n\n\n  /* **************************************************************************\n  function: loadSavedReportSettings\n  * User and Internal triggered\n  * Loads settings from a saved snapshot report, resets all settings and processes new list.\n  * Main function to handle all resetting and loading of new data\n  ************************************************************************** */\n  loadSavedReportSettings(controllerRef, settings){\n    console.log(\"WJ: loadSavedReportSettings\")\n\n    document.isLoading = true\n\n    // Clear additional time frames to start\n    document.getElementById('time-periods').innerHTML = '';\n\n    // This loads the default (last saved report)\n    if($('#wj_tertiary_question_holder').length){ $('#wj_tertiary_question_holder').addClass('hidden'); }\n\n    var primary_question_id = ''\n    var secondary_question_id = ''\n    var tertiary_question_id = ''\n\n    var loaded_settings = false\n\n    // Fully resetting options\n    if(document.wj_resetFilter == true){\n      document.wj_loadSettingsFromSerializedString = true;\n      var dataParsed = document.wj_initial_report_settings;\n      var dataKeys = Object.keys(dataParsed);\n    } else {\n      // Load the current panel for settings\n      document.wj_saved_report_settings_default = JSON.stringify(document.wj_initial_report_settings)\n      if( ($(\"#wj_saved_report_settings_last\").length && $(\"#wj_saved_report_settings_last\").val() != \"\") || settings !== undefined) {\n        // Check if we changed any settings and if so set the current settings to that.\n        if(settings !== undefined) {\n          loaded_settings = true\n          document.wj_saved_report_settings_last = settings;\n        } else {\n          document.wj_saved_report_settings_last = $(\"#wj_saved_report_settings_last\").val();\n        }\n        \n        // Check if we have the same wbi version. If not set current settings to default.\n        if( JSON.parse(document.wj_saved_report_settings_default).wbi_version != JSON.parse(document.wj_saved_report_settings_last).wbi_version) {\n          document.wj_saved_report_settings_last = document.wj_saved_report_settings_default;\n        }\n\n        if($(\"#wj_saved_report_settings_last_save_id\").length) {\n          document.wj_saved_filter_loaded = $(\"#wj_saved_report_settings_last_save_id\").val();\n        }\n      } else {\n        document.wj_saved_report_settings_last = document.wj_saved_report_settings_default;\n      }\n\n      document.wj_loadSettingsFromSerializedString = true;\n      var dataParsed = JSON.parse(document.wj_saved_report_settings_last);\n      var dataKeys = Object.keys(dataParsed);\n    }\n  \n    // UNCHECK CHECKBOXES/MULTI-SELECTs\n    for(var i=0; i < dataKeys.length; i++){\n      var name = dataKeys[i];\n      var value = dataParsed[name];\n\n      if(name.indexOf('[') == -1 || $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"']\").length > 0)\n      {\n        if(name == 'report_id') { \n          // do nothing\n        }\n\n        if(name == 'primary_question' && value != '') {\n          // Originally used for generating the custom option lists. may not be needed ER 8/10/23\n          primary_question_id = value\n\n          // $('#primary_option_list_btn').attr('href', '/wellness_common/' + primary_question_id.split('-')[0] + '/configure_options')\n\n          $('#wj_dashboard-filter-options').removeClass('hidden');\n          $('#wj_primary_question').val(primary_question_id).trigger('change');\n          // this.changePrimaryQuestionProcess(primary_question_id)\n        }\n\n        if(name == 'filter_by_primary_option' && value == 1){\n          $('#wj_primary_question_options').removeClass(\"hidden\");\n        }\n        \n        if(name == 'secondary_question' && value != '') {\n\n          console.log(\"-=-=-=-=-=----- SECONDARY QUESTION ----=-=-=-=-=-=\")\n\n          secondary_question_id = value\n\n          if($('#wj_tertiary_question').length){\n            // Load Tertiary Question\n            $.ajax({\n              headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n              url: \"/wellness_common/get_signup_questions\",\n              method: \"post\",\n              data: { 'selected_question': secondary_question_id, 'primary_question': primary_question_id },\n              async: false\n            }).done(function( data){\n              if(data.status == 200){\n                $('#wj_tertiary_question_holder').removeClass('hidden');\n                $('#wj_tertiary_question').html( document.wcControllerRef.processQuestionList(data.questions) );\n              }\n            });\n          }\n\n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            type: \"POST\",\n            url: \"/wellness_common/get_signup_question_option_list\",\n            data: { selected_question: secondary_question_id },\n            async: false,\n            success: function (data) {\n              if(data.status == 200) {\n                $('#wj_secondary_option_kinds').html( document.wcControllerRef.processOptionKind(data.options) )\n              }\n            }\n          });\n  \n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            url: \"/wellness_common/get_signup_question_options\",\n            method: \"post\",\n            data: { \"selected_question\": secondary_question_id },\n            async: false\n          }).done(function(data){\n            if(data.status == 200) {\n              $('#wj_secondary_questions').removeClass('hidden')\n              $('#wj_secondary_options').html( document.wcControllerRef.processOptionList(data.options) );\n            }\n          });\n        }\n  \n        if(name == 'filter_by_secondary_option' && value == 1){\n          $('#wj_secondary_question_options').removeClass(\"hidden\");\n        }\n  \n        if(name == 'tertiary_question' && value != '') {\n          $('#wj_tertiary_question_holder').removeClass('hidden');\n          $('#wj_tertiary_questions').removeClass('hidden');\n  \n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            url: \"/wellness_common/get_signup_question_options\",\n            method: \"post\",\n            data: { \"selected_question\": value },\n            async: false\n          }).done(function(data){\n            if(data.status == 200){\n              $('#wj_tertiary_options').html( document.wcControllerRef.processOptionList(data.options) );\n            }\n          });\n        }\n  \n        if(name == 'filter_by_tertiary_option' && value == 1){\n          $('#wj_tertiary_question_options').removeClass(\"hidden\");\n        }\n  \n        // Choose Time Period\n        if(name == 'wj_time_period') {\n          if(value == 'campaigns' && $(\"#wj_campaign_options\").length) {\n            $('#wj_campaign_options').removeClass('hidden');\n            $(\"#wj_time_period\").closest('.btn').click()\n          }\n          if(value == 'date-range') {\n            $('#wj_date_list').removeClass('hidden');\n          }\n          if(value == 'interval' || (value == 'campaigns' && !$(\"#wj_campaign_options\").length)) {\n            $('#wj_interval').removeClass('hidden');\n            $(\"#wj_time_interval\").closest('.btn').click()\n          }\n        }\n\n        if(name == 'assess_filter') {\n          $('#wj_assess_filter').val('last_in_period')\n        }\n      }\n      else if(name.indexOf('[') != -1)\n      {\n        // console.log(\"XB\")\n        // Multi-select selectbox or checkbox array\n        var nameParts = name.split(\"[\");\n        name = nameParts[0]+\"[]\";\n        var $element = $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"']\");\n        if($element.length > 0)\n        {\n          var inputType = $element.prop(\"type\");\n          if(inputType == \"checkbox\") {\n            $element.prop(\"checked\",false);\n          } else if(inputType == \"select-multiple\") {\n            $element.children(\"option\").prop(\"selected\", false);\n          }\n  \n        }\n      }\n    }\n\n    // SELECT NEW VALUES\n    console.log(\"=============== ADDING NEW VALUES ================\")\n    var nonExistingIndexes = [];\n    for(var i = 0; i < dataKeys.length; i++){\n      var name = dataKeys[i];\n      var value = dataParsed[name];\n\n      // Updating display toggle buttons\n      if(name == 'chart_type') {\n        $('#wj_chart').html($('#wj_chart_default').parent().parent().find('button[data-kind=' + value +']').data('label'))\n\n        if($('#mean-full-chart').hasClass('hidden')){\n          $('#wj_chart_default').parent().parent().find('button[data-kind=' + value +']').click()\n        }\n      }\n      if(name == 'wj_form_data') {\n        $('#wj_data').html($('#wj_data_default').parent().parent().find('button[data-kind=' + value +']').data('label'))\n        $('#wj_data_default').parent().parent().find('button[data-kind=' + value +']').click()\n      }\n      if(name == 'wj_mean_full_chart') {\n        $('#mean-full-chart').find('button[data-value=' + value + ']').click()\n      }\n      if(name == 'wj_form_focus') {\n        $('#focus-kinds').find('button').each(function(){\n          $(this).addClass('btn-disabled')\n        })\n        \n        var items = value.split('|')\n        items.forEach(element => {\n          $('#focus-kinds').find('button[data-kind=' + element + ']').click()\n        })\n      }\n\n      if(name.indexOf('[') == -1 || $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"']\").length > 0)\n      {\n        if(name == 'report_id') { \n          // do nothing - we set this above when selecting the saved report\n        } \n\n        if(name == 'primary_question' && value != '') {\n          // Originally used for generating the custom option lists. may not be needed ER 8/10/23\n          primary_question_id = value\n          $('#primary_question_customize_options').attr('href', '/wellness_common/' + primary_question_id + '/configure_options')\n\n          $('#dashboard-filter-options').removeClass('hidden');\n          $('#chart-sort-by').removeClass('hidden');\n  \n          var obj = [\"wj_\", primary_question_id, 'primary']\n          super.changeQuestion(obj, dataParsed['primary_option_kinds'])\n        }\n\n        if(name == 'customize_primary_option_group' && value == 1){\n          $('#wj_primary_question_option_groups').removeClass('hidden');\n        }\n\n        if(name == 'filter_by_primary_option' && value == 1){\n          $('#wj_primary_question_options').removeClass(\"hidden\");\n        }\n\n        \n        \n        if(name == 'secondary_question' && value != '') {\n\n          secondary_question_id = value\n\n          // TODO: Look at reloading this farther down instead of here.\n          if($('#wj_tertiary_question').length){\n            // Load Tertiary Question\n            $.ajax({\n              headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n              url: \"/wellness_common/get_signup_questions\",\n              method: \"post\",\n              data: { 'selected_question': secondary_question_id, 'primary_question': primary_question_id },\n              async: false\n            }).done(function( data){\n              if(data.status == 200){\n                $('#wj_tertiary_question_holder').removeClass('hidden');\n                $('#wj_tertiary_question').html( document.wcControllerRef.processQuestionList(data.questions) );\n              }\n            });\n          }\n\n          $('#wj_secondary_questions').removeClass('hidden')\n          var obj = [\"wj_\", secondary_question_id, 'secondary']\n          super.changeQuestion(obj, dataParsed['secondary_option_kinds'])\n          // this.changeSecondaryQuestionProcess(secondary_question_id, dataParsed['secondary_option_kinds'])\n        }\n  \n        if(name == 'customize_secondary_option_group' && value == 1){\n          $('#wj_secondary_question_option_groups').removeClass('hidden');\n        }\n\n        if(name == 'filter_by_secondary_option' && value == 1){\n          $('#wj_secondary_question_options').removeClass(\"hidden\");\n        }\n\n  \n        if(name == 'tertiary_question' && value != '') {\n          $('#wj_tertiary_question_holder').removeClass('hidden');\n          $('#wj_tertiary_questions').removeClass('hidden');\n\n          tertiary_question_id = value\n          var obj = [\"wj_\", tertiary_question_id, 'tertiary']\n          super.changeQuestion(obj, dataParsed['tertiary_option_kinds'])\n          // this.changeTertiaryQuestionProcess(tertiary_question_id)\n        }\n  \n        if(name == 'tertiary_option_kinds' && value == \"default\"){\n          $('#wj_tertiary_question_options_filter').removeClass(\"hidden\");\n        }\n\n        if(name == 'filter_by_tertiary_option' && value == 1){\n          $('#wj_tertiary_question_options').removeClass(\"hidden\");\n        }\n  \n        // Choose Time Period\n        if(name == 'wj_time_period') {\n          if(value == 'campaigns' && $(\"#wj_campaign_options\").length) {\n            $('#wj_campaign_options').removeClass('hidden');\n          }\n          if(value == 'date-range') {\n            $('#wj_date_list').removeClass('hidden');\n          }\n          if(value == 'interval' || (value == 'campaigns' && !$(\"#wj_campaign_options\").length)) {\n            $('#wj_interval').removeClass('hidden');\n            $(\"#wj_time_interval\").closest('.btn').click()\n          }\n        }\n\n        if(name == 'wj_form_view') {\n          if(value == 'individual-campaigns') {\n            $('#wj_campaign_list_items').removeClass(\"hidden\")\n          }\n          if(value == 'all-campaigns') {\n            $('#wj_campaign_list_items').addClass(\"hidden\")\n          }\n        }\n  \n        var $element = $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"']\");\n        var inputType = $element.prop(\"type\");\n\n        if(inputType == \"radio\") {\n          $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"'][value='\"+value+\"']\").parent().click();\n          // console.log(\" Radio - \" + name, value)\n        } else if(inputType == \"checkbox\") {\n          $element.each(function(){ \n            $(this).prop(\"checked\",true);\n          });\n        } else {\n          if(name != 'report_id') { \n\n            if(name == 'wj_time_period_campaign'){\n\n              console.log(\"wellness journey element: \", $element)\n\n              var my_options = []\n              var list = document.getElementById('wj_campaign_list')\n       \n              for (var i = 0; i < list.options.length; i++) {\n                var status = false\n                JSON.parse(value).forEach(function(e){\n                  if(e[2] == list.options[i].value){\n                    status = e[1]\n                  }\n                })\n                my_options.push([list.options[i].text, status, list.options[i].value])\n              }\n              $element.val(JSON.stringify(my_options));\n              break\n            } else if(name == 'wj_time_period_annually') {\n              // Need to split out the values here and show or hide each item instead of loading everything from the saved options.\n              // If the saved options does not contain a value, mark it as shown (should fix the issue where the new year is not displaying in the list)\n              var initial_list = JSON.parse(document.getElementById('initial_data_year_list').value)\n              var saved_list = JSON.parse(value)\n              var new_list = []\n              initial_list.forEach((item) => {\n                saved_list.forEach((saved_item) => {\n                  if(saved_item[0] == item[0]){\n                    item[1] = saved_item[1]\n                    item[2] = saved_item[2]\n                  }\n                })\n                new_list.push(item)\n              })\n\n              $element.val(JSON.stringify(new_list));\n            } else {\n              $element.val(value);\n            }\n          }\n        }\n  \n\n      }\n      else if(name == 'wj_date_start[0]' || name == 'wj_date_end[0]') {\n        var item_name = name.split(\"[\");\n        var item_number = name.substring(name.indexOf('[') + 1, name.lastIndexOf(']'));\n        // console.log(\"=====\", item_name[0], item_number, value)\n        $('#' + item_name[0] + '_' + item_number).val(value)\n      }\n      else if(name.indexOf('wj_date_start') != -1 || name.indexOf('wj_end_date') != -1){\n        if(name.indexOf('wj_date_start')) {\n          var item_number = name.substring(name.indexOf('[') + 1, name.lastIndexOf(']'));\n          \n          var start_date = dataParsed['wj_date_start[' + item_number + ']']\n          var end_date = dataParsed['wj_date_end[' + item_number + ']']\n\n          var content = '<div id=\"time_period_' + item_number + '\"><em class=\"fa fa-times text-danger float-end pointer me-1\" data-action=\"click->wellness-journey#removeTimePeriod\"></em><h5>Time Period #' + (parseInt(item_number) + 1) + '</h5><div class=\"report-setting-section-group\"><div class=\"input-group\"><input type=\"text\" name=\"wj_date_start[]\" id=\"wj_date_start_' + item_number + '\" class=\"form-control form-control-sm datepicker\" autocomplete=\"off\" value=\"' + start_date + '\"><span class=\"input-group-addon px-2\">to</span><input type=\"text\" name=\"wj_date_end[]\" id=\"wj_date_end_' + item_number + '\" class=\"form-control form-control-sm datepicker\" autocomplete=\"off\" value=\"' + end_date + '\"></div></div></div>'\n          document.getElementById('time-periods').insertAdjacentHTML('beforeend', content);    \n          \n          \n          document.getElementById('add_time_period').dataset.index = parseInt(item_number) + 1\n        }\n      }\n      else if(name.indexOf('[') != -1)\n      {\n        // Multi-select selectbox or checkbox array\n        var nameParts = name.split(\"[\");\n        name = nameParts[0]+\"[]\";\n        var $element = $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"']\");\n\n        // console.log(\"NAME: \", name)\n        // console.log(\"VALU: \", value)\n        // console.log(\"ELEM: \", $element)\n        \n        if($element.length > 0)\n        {\n          var inputType = $element.prop(\"type\");\n          if(inputType == \"radio\") {\n            $(\"#wj-report-settings-panel-form\").find(\"[name='\"+name+\"'][value='\"+value+\"']\").click();\n          } else if(inputType == \"checkbox\") {\n            $element.each(function(){\n              if($(this).val() == value) {\n                $(this).prop(\"checked\", true);\n              }\n            });\n          } else if(inputType == \"select-multiple\") {\n            value = value.replaceAll(\"'\", \"\\\\'\")\n            $element.children(\"option[value='\" + value + \"']\").prop(\"selected\", true);\n          } else if ($element.length == 1){\n            $element.val(value);\n          }\n  \n          if($element.hasClass(\"select2-hidden-accessible\")){\n            $element.trigger('change.select2');\n          }\n        }\n        else\n        {\n          nonExistingIndexes.push(i);\n        }\n      }\n    }\n\n    console.log(\"==-=-=-=-=-== LOAADED SETTINGS: \" + loaded_settings + \" -=-=-=-=-=-=-====\")\n    document.isLoading = false\n    document.wj_initial_report_load_complete = true\n\n    // Record the settings as they now stand, so a later save can tell whether the\n    // user changed anything. This has to happen here, at the end of the restore,\n    // and not once the report finishes loading: the report takes seconds on a large\n    // customer, and a filter the user chose while it was still loading would be\n    // baked into the baseline and then read as \"nothing changed\". Every request the\n    // restore makes is async: false, so the form is fully populated by this point.\n    //\n    // Only on the initial load. Choosing a saved report also lands here, and that is\n    // a change - it must be compared against the baseline, not become one.\n    if(settings === undefined) {\n      document.wj_saved_report_settings_last = this.currentSettingsSignature();\n    }\n\n    if(loaded_settings == true) {\n      // This happens when you choose a report\n      $('#submit-over-time').click()\n    }\n  }\n\n\n\n\n  /* **************************************************************************\n  function: loadSavedSettings\n  * User triggered\n  * Gathers the data from a saved report setting to load\n  ************************************************************************** */\n  loadSavedSettings(e) {\n    console.log(\"WJ: loadSavedSettings\")\n    const controllerRef = this\n\n    e.preventDefault()\n    controllerRef.resetFilterOptions()\n\n    var item = e.currentTarget\n\n    var parentContainer = $(item).closest(\".report-settings-saved-filter\");\n    var save_id = parentContainer.data(\"save_id\");\n\n    if(save_id) {\n      document.saved_filter_loaded = save_id;\n\n      $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\");\n      parentContainer.addClass(\"list-group-item-success\");\n\n      $('#wj_report_id').val(item.dataset.id)\n\n      if($('#i_can_create_snapshot_folders').val() == 'false') {\n        // Reset the default report settings to clicked report if limited admin\n        var loaded_filter = JSON.parse(item.dataset.filter)\n        loaded_filter.report_id = item.dataset.id\n        document.initial_report_settings = loaded_filter\n      }\n\n      window.wj_leavePanelOpen = true\n      window.wj_reportName = item.dataset.name\n      window.wj_reportDescription = item.dataset.description\n      window.wj_reportCreatedBy = item.dataset.createdby\n\n      controllerRef.loadSavedReportSettings(controllerRef, item.dataset.filter)\n      controllerRef.saveLastReportSettings(controllerRef)\n    }\n  }\n\n\n  /* **************************************************************************\n  function: removeTimePeriod\n  * User triggered\n  * Removes selected start and end dates for time-frame\n  ************************************************************************** */\n  removeTimePeriod(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n\n    var ans = confirm(\"Are you sure you want to remove this time period?\")\n    if(ans) {\n      item.parentNode.remove()\n    }\n  }\n\n\n  /* **************************************************************************\n  function: resetFilterOptions\n  * Internal triggered\n  * Handles resetting of the form to \"factory defaults\"\n  ************************************************************************** */\n  resetFilterOptions() {\n    console.log(\"WJ: resetFilterOptions\")\n    var date = new Date();\n\n    $('#wj_primary_question').prop('selectedIndex', 0).trigger(\"change\");\n    $('#wj_secondary_question').html('');\n    if($(\"#wj_tertiary_question\").length) { $('#wj_tertiary_question').html(''); }\n\n    super.resetQuestionPrimary('wj_');\n    super.resetQuestionSecondary('wj_');\n    super.resetQuestionTertiary('wj_');\n\n    // Reset Other Buttons\n    if($('#wj_time_period option').length > 0){\n      $('#wj_time_period').closest('.btn').click();\n    } else {\n      $(\"#wj_time_interval\").closest('.btn').click();\n    }\n\n    $('#wj_campaign_list').val('');\n    $('#wj_form_view').closest('.btn').click();\n\n    $('#wj_date_start_0').val( $('#wj_default_start_date').val() );\n    $('#wj_date_end_0').val( date.toISOString().split('T')[0] );\n    $('#wj_date_start_1').val( $('#wj_default_start_date').val() );\n    $('#wj_date_end_1').val( date.toISOString().split('T')[0] );\n\n    $('#wj_customize_primary_option_group').closest('.btn').click();\n    $('#wj_customize_secondary_option_group').closest('.btn').click();\n    if($('#wj_customize_tertiary_option_group').length){ $('#wj_customize_tertiary_option_group').closest('.btn').click(); }\n\n    $('#wj_filter_by_primary_option').closest('.btn').click();\n    $('#wj_filter_by_secondary_option').closest('.btn').click();\n    if($('#wj_filter_by_tertiary_option').length){ $('#wj_filter_by_tertiary_option').closest('.btn').click() }\n\n    $('#wj_assess_filter').val('last_in_period');\n\n    $('#wj_form_data').val(\"snapshot\")\n    $('#wj_form_focus').val(\"0|3\")\n    $(\"#wj_mean_full_chart\").val('limited')\n\n    // Reset hidden values from limited by report users\n    $('#wj_report_id').val('')\n    if(document.wj_saved_report_settings_default !== undefined) {\n      var saved_data = JSON.parse(document.wj_saved_report_settings_default)\n      $('#wj_report_id').val(saved_data.report_id)\n\n      document.wj_saved_report_settings_last = document.wj_saved_report_settings_default\n    }\n  }\n\n\n\n  /* **************************************************************************\n  function: resetSettings\n  * User triggered\n  * User action to call the reset scripts, reloads default data, saves resetted settings as current settings\n  ************************************************************************** */\n  resetSettings(e) {\n    console.log(\"WJ: resetSettings\")\n\n    document.isLoading = true\n    document.wj_resetFilter = true\n\n    this.clearSnapshotLabel()\n\n    super.showLoader('wj_')\n\n    const controllerRef = this\n    e.preventDefault()\n    $('#wj_dashboard-filter-options').addClass('hidden');\n    $('#wj_saved_report_settings_last').remove();\n    $('#wj_report-settings-tab-offcanvas').click()\n\n    document.getElementById('snapshot_well-being-continuum').classList.remove(\"hidden\")\n    document.getElementById('snapshot_mean-distress-score').classList.add(\"hidden\")\n    \n    // console.log(\"document.wj_initial_report_settings: \", document.wj_initial_report_settings)\n  \n    controllerRef.resetFilterOptions()\n    if(document.wj_initial_report_settings){\n      document.wj_saved_filter_loaded = undefined;\n      $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\"); // TODO: fix this for journey\n      controllerRef.loadSavedReportSettings(controllerRef, JSON.stringify(document.wj_initial_report_settings));\n    }\n\n    // Reset Option Buttons\n    $('#wj_form_data').val(\"snapshot\")\n    $('#wj_form_focus').val(\"0|3\")\n    $(\"#wj_mean_full_chart\").val('limited')\n    $('#wj_form_chart').val('column')\n\n\n    $('#wj_data').html($('#wj_data_default').attr('data-label'))\n    $('#wj_chart').html($('#wj_chart_default').attr('data-label'))\n\n\n    $('#wj-chart-type-button').prop('disabled', false)\n    $('#wj-chart-type-button').removeClass(\"hidden\")\n\n    $('#mean-full-chart').addClass('hidden')\n    $('#mean-full-chart > button').each(function(){\n      $(this).removeClass(\"btn-disabled\")\n      if($(this).attr('data-value') == 'full'){\n        $(this).addClass('btn-disabled')\n      }\n    })\n\n    $('#focus-kinds').addClass('hidden')\n    $('#focus-kinds > button').each(function(){\n      $(this).removeClass(\"btn-disabled\")\n      if($(this).attr('data-kind') == 1 || $(this).attr('data-kind') == 2) {\n        $(this).addClass('btn-disabled')\n      }\n    })\n\n    controllerRef.saveLastReportSettings(\"reset_settings\");\n    document.isLoading = false\n\n    $('#submit-over-time').click()\n  }\n\n\n\n  /* **************************************************************************\n  function: saveLastReportSettings\n  * Internal triggered\n  * Saves the current settings on the settings form to the \"_last_\" settings for the user\n  ************************************************************************** */\n  saveLastReportSettings(location = '') {\n    console.log(\"WJ: saveLastReportSettings\")\n    var settings_last_data = $(\"#wj-report-settings-panel-form\").serializeArray();\n\n    // \"Clear Filter\" is the one save that returns the report to its defaults, and so\n    // is the chart re-run it triggers straight afterwards. Every other save happens\n    // because the user changed something.\n    var isResetSave = (location == 'reset_settings');\n    var isResetRerunSave = (!isResetSave && document.wj_resetFilter == true);\n    var serializedSettings = document.wjControllerRef.getJSONLoadSettingsString($(\"#wj-report-settings-panel-form\"));\n    var changedSinceLastLoad = (serializedSettings != document.wj_saved_report_settings_last);\n\n    // Once a report is filtered it stays filtered until Clear Filter, so re-running\n    // an already-filtered report without touching anything does not unfilter it.\n    var customized = (!isResetSave && !isResetRerunSave &&\n                      (changedSinceLastLoad || document.wj_report_settings_customized === true));\n\n    if(isResetRerunSave) {\n      // The reset is finished once its re-run has been saved. Clear the flag now\n      // rather than in the callback, so a failed request cannot leave every later\n      // change looking like part of the reset.\n      document.wj_resetFilter = null;\n    }\n\n    if($('#i_can_create_snapshot_folders').val() == 'false'){\n      var report_id = $('#wj_report_id').val()\n    } else {\n      report_id = null\n    }\n    var formData = {settings_data: settings_last_data, save_for: \"last\", report_id: report_id, report_type: 'wellness_journey', customized: customized };\n\n    $.post(\"/reports/save_settings\", formData, function(returnDataStr) {\n      document.wj_saved_report_settings_last = serializedSettings;\n      document.wjControllerRef.applyFilterNoticeState(customized);\n\n      if(isResetSave) {\n        document.wjControllerRef.updateOverTimeChart();\n      }\n    });\n  }\n\n\n  /* **************************************************************************\n  function: setInitialSettings\n  * Internal triggered\n  * Loads initial settings for the wellness journey report. Settings get updated and reset based on user interaction\n  ************************************************************************** */\n  setInitialSettings() {\n\n    console.log(\"WJ: setInitialSettings\")\n\n    if($('#wj_i_can_create_snapshot_folders').val() == 'true') {\n      var initial_settings = {\n        ajax_call: \"report\",\n        wbi_version: $('#wj_wbi_version').val(),\n        country: $('#wj_country').val(),\n        report_id: \"\",\n        report_type: \"wellness_journey\",\n        display_data: \"spectrum\",\n        chart_type: \"column\",\n        compare: \"none\",\n        primary_question: $('#wj_default_primary_question').val(),\n        filter_by_primary_option: \"0\",\n        customize_primary_option_group: \"0\",\n        filter_by_secondary_option: \"0\",\n        customize_secondary_option_group: \"0\",\n        wj_time_interval: \"annually\",\n        mean_national_average: 'show',\n        wj_time_period_annually: document.getElementById('wj_time_period_annually').value,\n        wj_time_period_biannually: '',\n        wj_time_period_quarterly: '',\n        wj_time_period_monthly: '',\n        wj_form_data: 'snapshot',\n        wj_form_focus: \"0|3\",\n        wj_mean_full_chart: \"limited\",\n\n\n        date_range_select: \"campaign\",\n        sort_distress_by: \"distressed\",\n\n        'wj_date_start[0]': $('#wj_date_start_0').val(),\n        'wj_date_end[0]': $('#wj_date_end_0').val(),\n        \n        assess_filter: \"last_in_period\",\n        wj_time_period: $('#wj_campaign_options option').length > 1 ? 'campaigns' : 'interval',\n        display_response_as: \"percent\"\n      }\n\n\n      $('#wj_campaign_options').length ? initial_settings[\"wj_form_view\"] = 'all-campaigns' : ''\n      $('#wj_campaign_options').length ? initial_settings[\"wj_time_period_campaign\"] = document.getElementById('wj_time_period_campaign').value : ''\n\n      if($('#wj_default_primary_question').val() != '') {\n        initial_settings[\"primary_option_kinds\"] = \"0\"\n        initial_settings[\"secondary_question\"] = \"\"\n      }\n     \n\n      if($(\"#wj_tertiary_question_holder\").length) {\n        initial_settings = Object.assign({filter_by_tertiary_option: \"0\"}, initial_settings)\n        initial_settings = Object.assign({customize_tertiary_option_group: \"0\"}, initial_settings)\n      }\n    } else {\n\n      // LIMITED ACCESS USERS\n      if( $('#wj_saved_report_settings_last').length && $('#wj_default_loaded_report').length) {\n        var saved_report_settings_last = JSON.parse($('#wj_saved_report_settings_last').val())\n        var initial_settings = JSON.parse($('#wj_default_loaded_report').val())\n        initial_settings.report_id = saved_report_settings_last['report_id']\n      }\n    }\n    \n    document.wj_initial_report_settings = initial_settings\n  }\n\n\n  /* **************************************************************************\n  function: showLimitedUserText\n  * System triggered\n  * Shows the questions and options selected if user is limited by report.\n  ************************************************************************** */\n  showLimitedUserText(){\n    // \n    if($('#wj_i_can_create_snapshot_folders').val() == 'false'){\n      $('#wj_primary_question_option_text_list').html('')\n      $('#wj_secondary_question_option_text_list').html('')\n      $('#wj_tertiary_question_option_text_list').html('')\n\n      if($('#wj_primary_question').val() != '') {\n        $('#wj_primary_question_option_text_list').removeClass('hidden')\n        $('#wj_primary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.question + ':</strong> ' + $(\"#wj_primary_question option:selected\").text() + '</li>')\n\n        if( $(\"#wj_primary_option_kinds\").val() != 0){\n          $('#wj_primary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.custom_list + ':</strong> ' + $(\"#wj_primary_option_kinds option:selected\").text() + '</li>')\n        }\n\n        if( $(\"#wj_primary_options\").val() != '') {\n          var data = $(\"#wj_primary_options :selected\").map(function(i, el) {\n            return $(el).text()\n          }).get();\n          $('#wj_primary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.filter + ':</strong> ' + data.join(', ') + '</li>')\n        }\n      }\n\n      if($('#wj_secondary_question').val() != '') {\n        $('#wj_secondary_question_holder').removeClass('hidden')\n        $('#wj_secondary_question_option_text_list').removeClass('hidden')\n        $('#wj_secondary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.question + ':</strong> ' + $(\"#wj_secondary_question option:selected\").text() + '</li>')\n\n        if( $(\"#wj_secondary_option_kinds\").val() != 0){\n          $('#wj_secondary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.custom_list + ':</strong> ' + $(\"#wj_secondary_option_kinds option:selected\").text() + '</li>')\n        }\n\n        if( $(\"#wj_secondary_options\").val() != '') {\n          var data = $(\"#wj_secondary_options :selected\").map(function(i, el) {\n            return $(el).text()\n          }).get();\n          $('#wj_secondary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.filter + ':</strong> ' + data.join(', ') + '</li>')\n        }\n      } else {\n        $('#wj_secondary_question_holder').addClass('hidden')\n      }\n\n      if($('#wj_tertiary_question').val() != '' && $('#wj_tertiary_question').val() != null) {\n\n        $('#wj_tertiary_question_holder').removeClass('hidden')\n        $('#wj_tertiary_question_option_text_list').removeClass('hidden')\n        $('#wj_tertiary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.question + ':</strong> ' + $(\"#wj_tertiary_question option:selected\").text() + '</li>')\n\n        if( $(\"#wj_tertiary_option_kinds\").val() != 0){\n          $('#wj_wtertiary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.custom_list + ':</strong> ' + $(\"#wj_tertiary_option_kinds option:selected\").text() + '</li>')\n        }\n\n        if( $(\"#wj_tertiary_options\").val() != '') {\n          var data = $(\"#wj_tertiary_options :selected\").map(function(i, el) {\n            return $(el).text()\n          }).get();\n          $('#wj_tertiary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.filter + ':</strong> ' + data.join(', ') + '</li>')\n        }\n      } else {\n        $('#wj_tertiary_question_holder').addClass('hidden')\n      }\n    }\n  }\n\n\n\n  showModal(event) {\n    event.preventDefault()\n    var myModal = new bootstrap.Modal(document.getElementById('wbj_demo_video'), {})\n\n    myModal.show()\n    $('#campaign_overview_video_iframe').attr('src', 'https://player.vimeo.com/video/894966568?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479')\n  }\n\n\n  /* **************************************************************************\n  function: submitForm\n  * System triggered\n  * Submits the form to be processed\n  ************************************************************************** */\n  submitForm(e) {\n    console.log(\"WJ: submitForm\")\n    e.preventDefault()\n\n    if(window.wj_leavePanelOpen === true) {\n      window.wj_leavePanelOpen = false\n      $('#wj_report-settings-tab').click()\n    } else {\n      document.bsOffcanvas_journey.hide()\n    }\n\n    if(window.wj_reportName !== undefined ) {\n      $('#wj_report-name-holder').removeClass('hidden');\n      $('#wj_report-name').html(\"<h4 class='m-0 p-0'>\" + window.wj_reportName + \"</h4>\")\n      window.wj_reportName = undefined\n    }\n    if(window.wj_reportDescription !== undefined) {\n      $('#wj_report-description').html('<p>' + window.wj_reportDescription + '</p>')\n      window.wj_reportDescription = undefined\n    }\n    if(window.wj_reportCreatedBy !== undefined) {\n      var name = '<a href=\"mailto:' + window.wj_reportCreatedBy + '\">' + window.wj_reportCreatedBy + '</a>'\n      if(window.wj_reportCreatedBy == 'default-wbi-admin@cws.net') {\n        name = 'Well-Being Index Team'\n      }\n      $('#wj_report-created-by').html('<p><small>' + I18n.wellness_snapshot.created_by + ': ' + name + '</small></p>')\n      window.wj_reportCreatedBy = undefined\n    }\n\n    super.showLoader('wj_')\n\n    document.over_time_chart_data = {}\n\n    document.wjControllerRef.showLimitedUserText()\n\n    // Update View label\n    // let wj_form_view = document.getElementById('wj_form_view')\n    // document.getElementById('wj_view').innerHTML = wj_form_view.options[wj_form_view.selectedIndex].text\n\n\n    document.wjControllerRef.displaySelectedOptions()\n\n\n    let formData = $(\"#wj-report-settings-panel-form\").serializeArray()\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_journey/process_report\",\n      data: formData,\n      success: function (data) {\n        if(data.status == 200) {\n          if(data.data.mean_distress.rows.length == 0 || data.data.snapshot.rows.length == 0) {\n            $('#wj_loader-holder').html(\"<p class='text-center py-5 my-5'>\" + I18n.wellness_snapshot.no_data_found + \"</p>\");\n          } else {\n\n            // Build time period dropdown from selected data.\n            document.wjControllerRef.buildTimePeriodList(data.data)\n\n            // Do chart update\n            document.over_time_chart_data = data.data\n\n            // Ensure that google charts script is loaded before running.\n            add_google_chart_onload_callback(function(){\n              document.wjControllerRef.updateOverTimeChart();\n            });\n\n            // Save as last settings -- Only after the inital load is complete\n            // console.log(\"document.wj_initial_report_load_complete: \", document.wj_initial_report_load_complete)\n            if(document.wj_initial_report_load_complete === true) {\n              document.wjControllerRef.saveLastReportSettings();\n            } else {\n              document.wj_initial_report_load_complete = true;\n              document.wjControllerRef.applyFilterNoticeState($(\"#wj_report_settings_customized\").val() == '1');\n            }\n          }\n        } else {\n          $('#wj_loader-holder').html(\"<p class='text-center py-5 my-5'>\" + I18n.wellness_journey.cannot_load_chart + \"</p>\");\n        }\n      }\n    });\n  }\n\n\n  /* **************************************************************************\n  function: toggleChart\n  * System triggered\n  * Reloads the chart data\n  ************************************************************************** */\n  toggleChart(e) {\n    console.log(\"WJ: toggleChart\")\n\n    if(Array.isArray(e)) {\n      document.getElementById('wj_form_chart').value = e[0]\n      document.getElementById('wj_chart').innerHTML = e[1]\n    } else {\n      var item = e.currentTarget\n      document.getElementById('wj_form_chart').value = item.dataset.kind\n      document.getElementById('wj_chart').innerHTML = item.dataset.label\n\n      if(document.getElementById('wj_form_data').value == 'snapshot' && item.dataset.kind == 'column'){\n        document.getElementById('focus-kinds').classList.add('hidden')\n      } else {\n        document.getElementById('focus-kinds').classList.remove('hidden')\n      }\n\n      // Update \"last\" data\n      if(document.isLoading === false) {\n        document.wjControllerRef.saveLastReportSettings();\n      }\n\n      document.wjControllerRef.updateOverTimeChart()\n    }\n\n    \n  }\n\n\n  /* **************************************************************************\n  function: toggleCollapse\n  * Usear triggered\n  * Toggles the showing/hiding of the Journey / Snapshot Reports\n  ************************************************************************** */\n  toggleCollapse(e) {\n    console.log(\"WJ: toggleCollapse\")\n\n    var item = e.currentTarget\n    var myCollapse = document.getElementById(item.dataset.toggle)\n    new bootstrap.Collapse(myCollapse, {})\n\n    if(item.querySelector('.collapse-notification').classList.contains('fa-chevron-up')) {\n      item.querySelector('.collapse-notification').classList.remove('fa-chevron-up')\n      item.querySelector('.collapse-notification').classList.add('fa-chevron-down')\n    }\n    else if(item.querySelector('.collapse-notification').classList.contains('fa-chevron-down')) {\n      item.querySelector('.collapse-notification').classList.add('fa-chevron-up')\n      item.querySelector('.collapse-notification').classList.remove('fa-chevron-down')\n    }\n  }\n\n  /* **************************************************************************\n  function: toggleData\n  * System triggered\n  * Reloads the chart data\n  ************************************************************************** */\n  toggleData(e) {\n    console.log(\"WJ: toggleData\")\n    var item = e.currentTarget\n\n    document.getElementById('wj_form_data').value = item.dataset.kind\n    document.getElementById('wj_data').innerHTML = item.dataset.label\n\n    // Show / Hide Focus Options\n    if(item.dataset.kind == 'snapshot') \n    {\n      document.wjControllerRef.toggleChart(['column', I18n.wellness_journey.column])\n      document.getElementById('mean-full-chart').classList.add('hidden')\n      document.getElementById('wj-chart-type-button').removeAttribute('disabled')\n      document.getElementById('snapshot_well-being-continuum').classList.remove(\"hidden\")\n      document.getElementById('snapshot_mean-distress-score').classList.add(\"hidden\")\n      document.getElementById('focus-kinds').classList.add('hidden')\n      document.getElementById('wj-chart-type-button').classList.remove('hidden')\n    } \n    else if(item.dataset.kind == 'mean_distress') \n    {\n      // We need to set the chart type to line and then disable the button. \n      // We need to display the full chart options\n      document.wjControllerRef.toggleChart(['line', I18n.wellness_journey.line])\n      document.getElementById('focus-kinds').classList.add('hidden')\n      document.getElementById('mean-full-chart').classList.remove('hidden')\n      document.getElementById('wj-chart-type-button').setAttribute('disabled', 'disabled')\n      document.getElementById('snapshot_well-being-continuum').classList.add(\"hidden\")\n      document.getElementById('snapshot_mean-distress-score').classList.remove(\"hidden\")\n      document.getElementById('wj-chart-type-button').classList.add('hidden')\n    }\n\n    // Update \"last\" data\n    if(document.isLoading === false) {\n      document.wjControllerRef.saveLastReportSettings();\n    }\n\n    document.wjControllerRef.updateOverTimeChart()\n  }\n\n  /* **************************************************************************\n  function: toggleFocus\n  * User triggered\n  * Changes what line(s) are focused and reloads the chart data from memory (no ajax calls)\n  ************************************************************************** */\n  toggleFocus(e) {\n    console.log(\"WJ: toggleFocus\")\n    var item = e.currentTarget\n\n    // Show / Hide Specific Option\n    if(item.classList.contains('btn-disabled')){\n      item.classList.remove('btn-disabled')\n    } else {\n      item.classList.add('btn-disabled')\n    }\n\n    // Get newly selected focus options.\n    var selected = []\n    for (const child of document.getElementById('focus-kinds').children) {\n      if(!child.classList.contains('btn-disabled') && child.dataset.kind !== undefined){\n        // selected.push( child.dataset.kind )\n        // Prepends the child.dataset.kind element to the selected array. ES6 spread\n        selected = [child.dataset.kind, ...selected]\n      }\n    }\n\n    let selected_options = selected.join('|')\n    document.getElementById('wj_form_focus').value = selected_options\n\n    // Update \"last\" data\n    if(document.isLoading === false) {\n      document.wjControllerRef.saveLastReportSettings();\n    }\n\n    document.wjControllerRef.updateOverTimeChart()\n  }\n\n\n  /* **************************************************************************\n  function: toggleMeanFullChart\n  * User triggered\n  * Changes if the user sees the full vertical mean chart or a limited zoomed in view\n  *    and reloads the chart data from memory (no ajax calls)\n  ************************************************************************** */\n\n  toggleMeanFullChart(e) {\n    console.log(\"WJ: toggleMeanFullChart\")\n    var item = e.currentTarget\n\n    var btn = $(item).parent().children('button')\n    for(var i = 0; i < btn.length; i++){\n      btn[i].removeAttribute('disabled')\n    }\n\n    item.setAttribute('disabled', 'disabled')\n\n    document.getElementById('wj_mean_full_chart').value = item.dataset.value\n\n    // Update \"last\" data\n    if(document.isLoading === false) {\n      document.wjControllerRef.saveLastReportSettings();\n    }\n\n    document.wjControllerRef.updateOverTimeChart()\n  }\n\n\n  /* **************************************************************************\n  function: toggleMeanNationalAverage\n  * User triggered\n  * Changes if the user sees the red national average not\n  *    and reloads the chart data from memory (no ajax calls)\n  ************************************************************************** */\n\n  toggleMeanNationalAverage(e) {\n    console.log(\"WJ: toggleMeanNationalAverage\")\n    var item = e.currentTarget\n\n    var value = ''\n    if(item.classList.contains('btn-disabled')){\n      item.classList.remove('btn-disabled')\n      value = 'show'\n    } else {\n      item.classList.add('btn-disabled')\n      value = 'hide'\n    }\n\n    document.getElementById('wj_mean_national_average').value = value\n\n    // Update \"last\" data\n    if(document.isLoading === false) {\n      document.wjControllerRef.saveLastReportSettings();\n    }\n\n    document.wjControllerRef.updateOverTimeChart()\n  }\n\n\n  /* **************************************************************************\n  function: toggleTimePeriods\n  * User triggered\n  * Shows or hides specific time-frame(s)\n  ************************************************************************** */\n  toggleTimePeriods(e){\n    e.preventDefault()\n    var item = e.currentTarget\n\n    if(item.querySelector('.fa-check').classList.contains('text-white')){\n      item.querySelector('.fa-check').classList.remove('text-white')\n    } else {\n      item.querySelector('.fa-check').classList.add('text-white')\n    }\n  }\n\n\n  /* **************************************************************************\n  function: updateOverTimeChart\n  * System triggered\n  * Reloads the chart data\n  ************************************************************************** */\n  updateOverTimeChart() {\n    console.log(\"WJ: updateOverTimeChart\")    \n    var data = new google.visualization.DataTable();\n\n    var v_ticks = ''\n    var v_ticks_baseline = ''\n    var view_window_min = 0\n    var view_window_max = 100\n\n    // Determine the kind of chart to show based on the wj_form_data value\n    let chart_data = document.getElementById('wj_form_data').value\n    let chart_kind = document.getElementById('wj_form_chart').value\n\n    var time_period = undefined\n    let wj_time_period = document.querySelector('input[name=\"wj_time_period\"]:checked').value\n    if(wj_time_period == 'campaigns' || wj_time_period == 'interval') {\n      document.getElementById('wj-time-period-select').classList.remove('hidden')\n      if(wj_time_period == 'campaigns'){\n        time_period = JSON.parse(document.getElementById('wj_time_period_campaign').value)\n      }\n      if(wj_time_period == 'interval'){\n        var checked_interval = document.querySelector('input[name=\"wj_time_interval\"]:checked').value\n        if(checked_interval == 'annually') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_annually').value)\n        } else if(checked_interval == 'bi-annually') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_biannually').value)\n        } else if(checked_interval == 'quarterly') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_quarterly').value)\n        } else if(checked_interval == 'monthly') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_monthly').value)\n        }\n      }\n    } else {\n      document.getElementById('wj-time-period-select').classList.add('hidden')\n    }\n\n\n\n    // let time_period = document.getElementById('wj_time_period_list').value.split(',')\n    var wj = document.over_time_chart_data[chart_data]\n\n    if(wj !== undefined){\n      let standard_colors = wj['colors']['standard'] // Distress Focus Colors\n      let muted_colors = wj['colors']['muted']\n      var enabed_column = 1\n\n      if(wj_time_period == 'date-range') {\n        console.log(\"ZZZZZ: \", wj)\n        var time_period = []\n        wj['rows'].forEach((item) => {\n          time_period.push([item[0]['campaign_name'], true])\n        })\n      }\n\n\n      wj['columns'].forEach((element) => {\n        if(element[0] == 'annotation') {\n          data.addColumn({ type: 'string', role: 'annotation' })\n        } else if(element[0] == 'tooltip') {\n          data.addColumn({ type: 'string', role: 'tooltip', p: { html: true } })\n        } else {\n          data.addColumn(element[0], element[1]);\n        }\n      })\n\n      if(chart_data == 'mean_distress') {\n        if(document.getElementById('wj_mean_national_average').value == 'show') {\n          var series = { 0: { lineWidth: 6, pointSize: 9 },\n                        1: { lineWidth: 3, pointSize: 6, type: 'area' }\n                      }\n        } else {\n          var series = { 0: { lineWidth: 6, pointSize: 9 }}\n        }\n        var colors = standard_colors\n        var stacked = false\n\n        var low = 13  // wj['baseline']\n        var high = wj['baseline'] // v_ticks.slice(-1)    \n\n        wj['rows'].forEach((element, index) => {\n          time_period.forEach((tp) => {\n            if(tp[1] == true && ((tp[2] != null && tp[2] == element[0].campaign_id) || (tp[0] == element[0].campaign_name)) ){\n              if(document.getElementById('wj_mean_national_average').value == 'show') {\n                var row = document.wjControllerRef.buildChartRow(element, 'mean_distress', chart_kind, ['0'])\n              } else {\n                var copy = Array.from(element)\n                delete copy[4];\n                delete copy[5];\n                delete copy[6];\n                var row = document.wjControllerRef.buildChartRow(copy, 'mean_distress', chart_kind, ['0'])\n              }\n              if(row !== undefined){\n                data.addRow(row);\n                row.forEach((e) => {\n                  if(typeof e == 'number'){\n                    if(e < low) { low = e }\n                    if(e > high) { high = e }\n                  }\n                })\n              }\n            }\n          })\n        })\n\n\n        // wj['rows'].forEach((element, index) => {\n        //   if(time_period[index][1] == true){\n        //     if(document.getElementById('wj_mean_national_average').value == 'show') {\n        //       var row = document.wjControllerRef.buildChartRow(element, 'mean_distress', chart_kind, ['0'])\n        //     } else {\n        //       var copy = Array.from(element)\n        //       delete copy[4];\n        //       delete copy[5];\n        //       delete copy[6];\n        //       var row = document.wjControllerRef.buildChartRow(copy, 'mean_distress', chart_kind, ['0'])\n        //     }\n\n        //     console.log(\"ROW: \" + row + \"     ELEMENT: \" + element)\n\n        //     if(row !== undefined){\n        //       data.addRow(row);\n\n        //       row.forEach((e) => {\n        //         if(typeof e == 'number'){\n        //           if(e < low) { low = e }\n        //           if(e > high) { high = e }\n        //         }\n        //       })\n        //     }\n        //   }\n        // })\n\n        // Determine if we show the full -2 to 9 chart or a zoomed in view\n        var y_axis_display = document.getElementById('wj_mean_full_chart').value\n\n        if(y_axis_display == 'limited') {\n          view_window_max = high + 1\n          view_window_min = low - 1\n\n        } else if(y_axis_display == 'full') {\n          v_ticks_baseline = wj['baseline']\n          v_ticks = wj['v_ticks']\n\n          view_window_min = v_ticks_baseline\n          view_window_max = v_ticks.slice(-1)\n        }\n\n        \n      } else if(chart_data == 'snapshot') {\n        var colors = []\n        var series = {}\n        var stacked = \"percent\"\n        let focus = document.getElementById('wj_form_focus').value.split('|')\n\n        if(document.getElementById('wj_form_chart').value == 'line'){\n          for(let i = 0; i < 4; i++) {\n            if( focus.includes(i.toString()) ) {\n              colors.push( standard_colors[i] )\n              series[i] = { lineWidth: 8, pointSize: 11 }\n            } else {\n              colors.push( muted_colors[i] )\n              series[i] = { lineWidth: 3, pointSize: 6 }\n            }\n          } \n        } else {\n          for(let i = 0; i < 4; i++) {\n            colors.push( standard_colors[i] )\n            series[i] = { lineWidth: 8, pointSize: 11 }\n          }\n        }\n\n        var low = 100\n        var high = 0\n\n        wj['rows'].forEach((element, index) => {\n          if(time_period !== undefined) {\n            time_period.forEach((tp) => {\n              if(tp[1] == true && ((tp[2] != null && tp[2] == element[0].campaign_id) || (tp[0] == element[0].campaign_name)) ){\n              // if(tp[1] == true && tp[2] == element[0].campaign_id){\n                var row = document.wjControllerRef.buildChartRow(element, 'snapshot', chart_kind, focus)\n                if(row !== undefined){\n                  data.addRow(row);\n                  row.forEach((e) => {\n                    if(typeof e == 'number'){\n                      if(e < low) { low = e }\n                      if(e > high) { high = e }\n                    }\n                  })\n                }\n              }\n            })\n          }\n        })\n\n        if(chart_kind == 'line') {\n          view_window_min = Math.round(low) - 3\n          view_window_max = Math.round(high) + 3\n        } else if(chart_kind == 'column') {\n          view_window_min = 0\n          view_window_max = 1\n        }\n      }\n\n      var options = {\n        colors: colors,\n        hAxis: {\n          textStyle: {\n            fontSize: 12\n          },\n          gridlines: {\n            color: '#EEE',\n          },\n          // format: 'MMM y',\n          // viewWindow: {\n          //   min: new Date(document.over_time_chart_data['general']['start_date']),\n          //   max: new Date(document.over_time_chart_data['general']['end_date'])\n          // }\n\n        },\n        chartArea: {\n          height: 400,\n          left: 40,\n          top: 40,\n          right: 40,\n          width: \"100%\",\n        },\n        legend: 'none',\n        height: 480,\n        vAxis: {\n          textStyle: {\n            fontSize: 12\n          },\n          gridlines: {\n            color: '#EEE',\n            multiple: .5\n          },\n          viewWindow: {\n            min: view_window_min,\n            max: view_window_max\n          },\n          ticks: v_ticks,\n          viewWindowMode: \"pretty\",\n          baseline: v_ticks_baseline\n        },\n        tooltip: {\n          isHtml: true\n        },\n        series: series,\n        isStacked: stacked,\n        bar: { \n          groupWidth: '100%'\n        }\n      };\n\n      if(chart_kind == 'line') {\n        var chart = new google.visualization.LineChart(document.getElementById('chart-data-holder-over-time'));\n      } else if(chart_kind == 'column') {\n        var chart = new google.visualization.ColumnChart(document.getElementById('chart-data-holder-over-time'));\n      }\n\n      google.visualization.events.addListener(chart, 'select', disableClick);\n      google.visualization.events.addListener(chart, 'onmouseover', disableClick);\n\n      function disableClick(item) {\n        var disabled_element = 0\n\n        if(item === null) {\n          if(chart.getSelection().length > 0) {\n            disabled_element = chart.getSelection()[0]['column'] \n          } else {\n            disabled_element = 0\n          }\n        } else {\n          disabled_element = item['column']\n        }\n\n        if(disabled_element != enabed_column){\n          chart.setSelection([{}])\n        }\n      }\n\n      // Need to hide the loader and show the chart before trying to draw it.\n      super.hideLoader('wj_')\n\n\n      chart.draw(data, options);\n\n      $(\"#image_data\").val(chart.getImageURI());\n\n      // Update chart table data\n      var wj_table = JSON.parse(JSON.stringify(wj)) // This is duplicating the object (wj)\n      document.wjControllerRef.updateOverTimeTable(wj_table, chart_data)\n    }\n  }\n\n  /* **************************************************************************\n  function: updateOverTimeTable\n  * System triggered\n  * Reloads the table data\n  ************************************************************************** */\n  updateOverTimeTable(data, chart_type) {\n    console.log(\"WJ: updateOverTimeTable\")\n\n    // let time_period = document.getElementById('wj_time_period_list').value.split(',')\n    var time_period = undefined\n    let wj_time_period = document.querySelector('input[name=\"wj_time_period\"]:checked').value\n    if(wj_time_period == 'campaigns' || wj_time_period == 'interval') {\n      document.getElementById('wj-time-period-select').classList.remove('hidden')\n      if(wj_time_period == 'campaigns'){\n        time_period = JSON.parse(document.getElementById('wj_time_period_campaign').value)\n      }\n      if(wj_time_period == 'interval'){\n        var checked_interval = document.querySelector('input[name=\"wj_time_interval\"]:checked').value\n        if(checked_interval == 'annually') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_annually').value)\n        } else if(checked_interval == 'bi-annually') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_biannually').value)\n        } else if(checked_interval == 'quarterly') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_quarterly').value)\n        } else if(checked_interval == 'monthly') {\n          time_period = JSON.parse(document.getElementById('wj_time_period_monthly').value)\n        }\n      }\n      \n    } else {\n      document.getElementById('wj-time-period-select').classList.add('hidden')\n      if(wj_time_period == 'date-range') {\n        var time_period = []\n        data['rows'].forEach((item) => {\n          time_period.push([item[0]['campaign_name'], true])\n        })\n      }\n    }\n\n    var general_data = document.over_time_chart_data.general\n    var content = '<p><strong>' + general_data['wbi_version_plural'] + ' ' + I18n.wellness_journey.over_time  + '</strong>'\n    \n    if(general_data['limited_data']) {\n      content += general_data['limited_data']\n    }\n\n    content += '</p>'\n\n    content += '<div id=\"table-data\"><table class=\"table text-small table-striped\">'\n    if(chart_type == 'mean_distress') {\n\n      if(document.getElementById('wj_mean_national_average').value == 'show') { \n        content += '<thead><th>' + I18n.wellness_snapshot.campaign + '</th><th>' + I18n.wellness_journey.mean_distress_score + ' <label class=\"text-info\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" title=\"' + I18n.wellness_journey.sd_description + '\">(' + I18n.wellness_journey.sd_title + ')</label></th><th>' + I18n.wellness_journey.national_average + '<label class=\"text-info\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" title=\"' + I18n.wellness_journey.sd_description + '\">(' + I18n.wellness_journey.sd_title + ')</label></th><th>' + I18n.wellness_journey.total + '</th></thead><tbody>'\n\n        data['rows'].forEach((item) => {\n          time_period.forEach((time) => {\n            if(time[0] == item[0].campaign_name && time[1] == true){\n              let general = item.shift()\n              if(general['total'] > 0) {\n                content += '<tr><td>' + general['campaign_name'] + '<br /><small>' + general['start_date'] + ' ' + I18n.wellness_journey.to + ' ' + general['end_date'] + '</small></td><td>' + general['value'] + '</td><td>' + general['national_average'] + '</td><td>' + general['total'] + '</td></tr>'\n              }\n            }\n          })\n        })\n      } else {\n        content += '<thead><th>' + I18n.wellness_snapshot.campaign + '</th><th>' + I18n.wellness_journey.mean_distress_score + ' <label class=\"text-info\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" title=\"' + I18n.wellness_journey.sd_description + '\">(' + I18n.wellness_journey.sd_title + ')</label></th><th>' + I18n.wellness_journey.total + '</th></thead><tbody>'\n\n        data['rows'].forEach((item) => {\n          time_period.forEach((time) => {\n            if(time[0] == item[0].campaign_name && time[1] == true){\n              let general = item.shift()\n              if(general['total'] > 0) {\n                content += '<tr><td>' + general['campaign_name'] + '<br /><small>' + general['start_date'] + ' ' + I18n.wellness_journey.to + ' ' + general['end_date'] + '</small></td><td>' + general['value'] + '</td><td>' + general['total'] + '</td></tr>'\n              }\n            }\n          })\n        })\n      }\n\n    } else if(chart_type == 'snapshot') {\n      content += '<thead><th>' + I18n.wellness_snapshot.campaign + '</th><th>' + I18n.wellness_journey.distressed + '</th><th>' + I18n.wellness_journey.struggling + '</th><th>' + I18n.wellness_snapshot.okay + '</th><th>' + I18n.wellness_journey.thriving + '</th><th>' + I18n.wellness_journey.total + '</th></thead><tbody>'\n      data['rows'].forEach((item) => {\n        \n        if(time_period !== undefined){\n          time_period.forEach((time) => {\n            if(time[0] == item[0].campaign_name && time[1] == true){\n              let general = item.shift()\n              if(general['total'] > 0) {\n                content += '<tr><td>' + general['campaign_name'] + '<br /><small>' + general['start_date'] + ' ' + I18n.wellness_journey.to + ' ' + general['end_date'] + '</small></td><td>' + (general['distressed'] == 'NaN%' ? '0' : general['distressed']) + '</td><td>' + general['struggling'] + '</td><td>' + general['neutral'] + '</td><td>' + general['thriving'] + '</td><td>' + general['total'] + '</td></tr>'\n              }\n            }\n          })\n        }\n      })\n    } else if(chart_type == 'question') {\n      content += '<thead><th>' + I18n.wellness_snapshot.campaign + '</th><th>' + I18n.wellness_journey.distressed + '</th><th>' + I18n.wellness_journey.struggling + '</th><th>' + I18n.wellness_snapshot.okay + '</th><th>' + I18n.wellness_journey.thriving + '</th><th>' + I18n.wellness_journey.total + '</th></thead><tbody>'\n      data['rows'].forEach((item) => {\n        let general = item.shift()\n        if(general['total'] > 0){\n          content += '<tr><td>' + general['campaign_name'] + '<br /><small>' + general['start_date'] + ' ' + I18n.wellness_journey.to + ' ' + general['end_date'] + '</small></td><td>' + general['distressed'] + '</td><td>' + general['struggling'] + '</td><td>' + general['neutral'] + '</td><td>' + general['thriving'] + '</td><td>' + general['total'] + '</td></tr>'\n        }\n      })\n    }\n\n    content += '</tbody></table></div>'\n\n    $('#export_chart_total_text').val(content);\n    document.getElementById('wj_table-data-holder').innerHTML = content\n    $('[data-bs-toggle=\"tooltip\"]').each(function(){\n      $(this).tooltip('hide')\n    })\n\n  }\n\n}\n", "import WellnessCommonController from \"./wellness_common_controller.js\"\n\n// Connects to data-controller=\"wellness-snapshot-builder\"\nexport default class extends WellnessCommonController {\n  static targets = [\"groupsContainer\", \"group\", \"groupLabel\", \"folder\", \"snapshot\"]\n\n  connect() {\n    // Required so jQuery AJAX success callbacks in the parent class can reference this controller\n    document.wcControllerRef = this\n\n    // Load the inital question list\n    super.loadSnapshotQuestion('group_1_question_1')\n    this.onSnapshotQuestionLoaded()\n    this.pollingInterval = null\n    this.pollingStartedAt = null\n\n    const q1 = document.getElementById('group_1_question_1')\n    if(q1 && q1.options && q1.options.length <= 3){\n      const q3Holder = document.getElementById('group_1_question_3_holder_container')\n      if (q3Holder) q3Holder.classList.add('d-none')\n    }\n  }\n\n  disconnect() {\n    this.stopPolling()\n  }\n\n\n  addGroup(e) {\n    e.preventDefault()\n\n    // We use the first rendered group as a live DOM template (no <template> element exists).\n    // Every id, name, for, and data-target attribute containing \"group_N\" must be renumbered\n    // so Rails receives correctly namespaced params (group[2][question][1], etc.) and so\n    // getElementById lookups in other methods don't collide with the original group.\n    const template = this.groupTargets[0]\n    const clone = template.cloneNode(true)\n\n    // Increment counter\n    this.groupCounter = this.groupTargets.length\n    this.groupCounter++\n    const newGroupNumber = this.groupCounter\n\n    // Update data attribute\n    clone.dataset.groupNumber = newGroupNumber\n\n    // Update the group label\n    const groupLabel = clone.querySelector('[data-wellness-snapshot-builder-target=\"groupLabel\"]')\n    if (groupLabel) {\n      groupLabel.textContent = `Group ${newGroupNumber}`\n    }\n\n    // Update all labels and selects\n    const labels = clone.querySelectorAll('label')\n    const selects = clone.querySelectorAll('select')\n    const buttons = clone.querySelectorAll('button')\n    const divs = clone.querySelectorAll('div')\n    const links = clone.querySelectorAll('a[data-action*=\"showListGrouping\"]')\n\n    labels.forEach((label) => {\n      if (label.hasAttribute('for')) {\n        const oldFor = label.getAttribute('for')\n        const newFor = oldFor.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        label.setAttribute('for', newFor)\n      }\n    })\n\n    selects.forEach((select) => {\n      // Update id\n      if (select.hasAttribute('id')) {\n        const oldId = select.getAttribute('id')\n        const newId = oldId.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        select.setAttribute('id', newId)\n      }\n\n      // Update name\n      if (select.hasAttribute('name')) {\n        const oldName = select.getAttribute('name')\n        const newName = oldName.replace(/group\\[\\d+\\]/, `group[${newGroupNumber}]`)\n        select.setAttribute('name', newName)\n      }\n\n      // Secondary and tertiary options are dependent on the primary selection, so clear them.\n      // The new group starts with no primary chosen, so they'd be meaningless from the template.\n      const questionType = select.dataset.question\n      if (questionType === 'secondary' || questionType === 'tertiary') {\n        // Remove all options except the first one (Please Select)\n        while (select.options.length > 1) {\n          select.remove(1)\n        }\n      }\n\n      // Reset selection\n      select.selectedIndex = 0\n    })\n\n    buttons.forEach((button) => {\n      if (button.hasAttribute('data-id')) {\n        const oldId = button.getAttribute('data-id')\n        const newId = oldId.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        button.setAttribute('data-id', newId)\n      }\n\n      if (button.hasAttribute('id')) {\n        const oldId = button.getAttribute('id')\n        const newId = oldId.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        button.setAttribute('id', newId)\n        button.classList.remove('d-none')\n      }\n    })\n\n    divs.forEach((div) => {\n      if (div.hasAttribute('id')) {\n        const oldId = div.getAttribute('id')\n        const newId = oldId.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        div.setAttribute('id', newId)\n\n        // Reset visibility for holder divs (custom name, listing group, question 3)\n        if (oldId.includes('_holder')) {\n          div.classList.add('d-none')\n        }\n      }\n    })\n\n    // Update list grouping links\n    links.forEach((link) => {\n      if (link.hasAttribute('id')) {\n        const oldId = link.getAttribute('id')\n        const newId = oldId.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        link.setAttribute('id', newId)\n      }\n      if (link.hasAttribute('data-target')) {\n        const oldTarget = link.getAttribute('data-target')\n        const newTarget = oldTarget.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        link.setAttribute('data-target', newTarget)\n      }\n      // Reset link visibility (hide it for new groups)\n      link.classList.add('d-none')\n    })\n\n    // Update all text inputs (custom name fields)\n    const inputs = clone.querySelectorAll('input[type=\"text\"]')\n    inputs.forEach((input) => {\n      // Update id\n      if (input.hasAttribute('id')) {\n        const oldId = input.getAttribute('id')\n        const newId = oldId.replace(/group_\\d+/, `group_${newGroupNumber}`)\n        input.setAttribute('id', newId)\n      }\n\n      // Update name\n      if (input.hasAttribute('name')) {\n        const oldName = input.getAttribute('name')\n        const newName = oldName.replace(/group\\[\\d+\\]/, `group[${newGroupNumber}]`)\n        input.setAttribute('name', newName)\n      }\n\n      // Clear value\n      input.value = ''\n    })\n\n    // Append to container\n    this.groupsContainerTarget.appendChild(clone)\n  }\n\n  cancelFolderNameEdit(e) {\n    e.preventDefault()\n\n    // Reset input to current value\n    const currentName = document.getElementById('folder_name_text').textContent\n    document.getElementById('folder_name_input').value = currentName\n\n    // Switch back to display mode\n    document.getElementById('folder_name_edit').classList.add('d-none')\n    document.getElementById('folder_name_display').classList.remove('d-none')\n  }\n\n  changeQuestion(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n    const questionType = item.dataset.question\n    const selectedValue = item.value\n    const selectedIndex = item.selectedIndex\n\n    // Find the parent group\n    const groupDiv = item.closest('[data-wellness-snapshot-builder-target=\"group\"]')\n    if (!groupDiv) return\n\n    // Cascade reset: changing primary clears secondary + tertiary (they depend on primary).\n    // Changing secondary only clears tertiary. Tertiary only shows/hides its own subsettings.\n    if (questionType == 'primary') {\n      this.resetSnapshotBuilderFrame()\n      this.toggleCombineAccountAction(groupDiv.dataset.groupNumber, 1, selectedValue)\n      this.toggleCombineAccountAction(groupDiv.dataset.groupNumber, 2, '')\n      this.toggleCombineAccountAction(groupDiv.dataset.groupNumber, 3, '')\n\n      // Reset primary and secondary question additional settings\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_1_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_1\").value = \"\"\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_1_listing_group_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_1_listing_group_link\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_1\").length = 0\n\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_2_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_2\").value = \"\"\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_2_listing_group_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_2_listing_group_link\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_2\").length = 0\n\n\n      // Clear secondary and tertiary options\n      const secondarySelect = groupDiv.querySelector('[data-question=\"secondary\"]')\n      const tertiarySelect = groupDiv.querySelector('[data-question=\"tertiary\"]')\n\n      if (secondarySelect) {\n        // Clear all options except first one\n        while (secondarySelect.options.length > 1) {\n          secondarySelect.remove(1)\n        }\n        secondarySelect.selectedIndex = 0\n\n        // Clear secondary custom name field\n        const secondaryCustomName = groupDiv.querySelector(`#${secondarySelect.id.replace('_question_', '_question_name_')}`)\n        if (secondaryCustomName) {\n          secondaryCustomName.value = ''\n        }\n\n        // Only load new options if a valid selection was made (not \"Please Select\")\n        if (selectedIndex && selectedIndex !== 0) {\n          // loadSnapshotQuestion populates the secondary dropdown with all questions except\n          // the one already chosen as primary (filtered server-side via get_snapshot_builder_questions).\n          super.loadSnapshotQuestion(secondarySelect.id, selectedValue)\n\n          // getSignUpQuestionOptionList fills the \"custom list grouping\" dropdown \u2014 only\n          // relevant if the question has admin-defined option groups (e.g. \"Age Bands\").\n          super.getSignUpQuestionOptionList(selectedValue, '', 'primary', \"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_1\")\n          if(document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_1\").options.length > 1){\n            document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_1\").value = 0\n            // Show link instead of dropdown directly\n            document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_1_listing_group_link\").classList.remove('d-none')\n          } else {\n            document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_1\").length = 0\n          }\n\n          // Show primary question custom name\n          document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_1_holder\").classList.remove('d-none')\n        }\n      }\n\n      if (tertiarySelect) {\n        // Clear all options except first one\n        while (tertiarySelect.options.length > 1) {\n          tertiarySelect.remove(1)\n        }\n        tertiarySelect.selectedIndex = 0\n\n        // Clear teriary level question custom name\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3_holder\").classList.add('d-none')\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3\").value = \"\"\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_holder\").classList.add('d-none')\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_link\").classList.add('d-none')\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\").length = 0\n\n\n        // Clear tertiary custom name field\n        const tertiaryCustomName = groupDiv.querySelector(`#${tertiarySelect.id.replace('_question_', '_question_name_')}`)\n        if (tertiaryCustomName) {\n          tertiaryCustomName.value = ''\n        }\n      }\n    }\n    else if (questionType == 'secondary') {\n      // Only clear tertiary options\n      const primarySelect = groupDiv.querySelector('[data-question=\"primary\"]')\n      const tertiarySelect = groupDiv.querySelector('[data-question=\"tertiary\"]')\n      this.toggleCombineAccountAction(groupDiv.dataset.groupNumber, 2, selectedValue)\n      this.toggleCombineAccountAction(groupDiv.dataset.groupNumber, 3, '')\n\n\n      // Hide and clear primary question custom name\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_2_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_2\").value = \"\"\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_2_listing_group_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_2\").length = 0\n\n      // Select Question Option List for Selected Option\n      super.getSignUpQuestionOptionList(selectedValue, '', 'secondary', \"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_2\")\n      if( document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_2\" ).options.length > 1) {\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_2\").value = 0\n        // Show link instead of dropdown directly\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_2_listing_group_link\").classList.remove('d-none')\n      } else {\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_2\").length = 0\n      }\n\n\n      if (tertiarySelect) {\n        // Clear all options except first one\n        while (tertiarySelect.options.length > 1) {\n          tertiarySelect.remove(1)\n        }\n        tertiarySelect.selectedIndex = 0\n\n        // Clear tertiary custom name field\n        const tertiaryCustomName = groupDiv.querySelector(`#${tertiarySelect.id.replace('_question_', '_question_name_')}`)\n        if (tertiaryCustomName) {\n          tertiaryCustomName.value = ''\n        }\n\n        // Clear teriary level question custom name\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3_holder\").classList.add('d-none')\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3\").value = \"\"\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_holder\").classList.add('d-none')\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_link\").classList.add('d-none')\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\").length = 0\n\n        // Only load new options if a valid selection was made (not \"Please Select\")\n        if (selectedIndex && selectedIndex !== 0 && primarySelect) {\n          super.loadSnapshotQuestion(tertiarySelect.id, [primarySelect.value, selectedValue])\n\n          // Show primary question custom name\n          document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_2_holder\").classList.remove('d-none')\n        }\n      }\n    }\n    else if (questionType == 'tertiary') {\n      this.toggleCombineAccountAction(groupDiv.dataset.groupNumber, 3, selectedValue)\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3_holder\").classList.remove('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3\").value = \"\"\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_holder\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_link\").classList.add('d-none')\n      document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\").length = 0\n\n      if(selectedIndex == 0){\n        document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_name_3_holder\").classList.add('d-none')\n      } else {\n        // Select Question Option List for Selected Option\n        super.getSignUpQuestionOptionList(selectedValue, '', 'tertiary', \"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\")\n        if( document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\" ).options.length > 1) {\n          document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\").value = 0\n          // Show link instead of dropdown directly\n          document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_3_listing_group_link\").classList.remove('d-none')\n        } else {\n          document.getElementById(\"group_\" + groupDiv.dataset.groupNumber + \"_question_listing_group_3\").length = 0\n        }\n      }\n    }\n\n    // Auto-generate list if Q1 and Q2 are both selected\n    this.checkAutoGenerate()\n  }\n\n  // The combined builder's \"Sub-Accounts\" level carries the report's keep-separate / combine\n  // choice. Show that select only while Sub-Accounts is the chosen question for the level,\n  // and reset it to the default whenever the level changes to anything else.\n  toggleCombineAccountAction(groupNumber, level, selectedValue) {\n    const holder = document.getElementById(\"group_\" + groupNumber + \"_question_\" + level + \"_combine_holder\")\n    if (!holder) return\n\n    if (selectedValue === 'combined_snapshot_sub_accounts') {\n      holder.classList.remove('d-none')\n    } else {\n      holder.classList.add('d-none')\n      const select = holder.querySelector('select')\n      if (select) select.selectedIndex = 0\n    }\n  }\n\n  onSnapshotQuestionLoaded() {\n    const loader = document.getElementById('snapshot_builder_loader')\n    if (loader) loader.classList.add('d-none')\n\n    const element = document.getElementById('group_1_question_1')\n\n    console.log(\"Number of Questions:\", element.options.length)\n\n    if(element && (element.options.length - 1) > 1) {\n      const builder = document.getElementById('snapshot_builder')\n      if (builder) builder.classList.remove('d-none')\n    } else {\n      const error = document.getElementById('snapshot_builder_error')\n      if (error) error.classList.remove('d-none')\n    }\n  }\n\n  removeGroup(e) {\n    e.preventDefault()\n\n    // Don't remove if it's the only group\n    if (this.groupTargets.length <= 1) {\n      alert('You must have at least one group')\n      return\n    }\n\n    // Find the group div that contains this button\n    const groupDiv = e.target.closest('[data-wellness-snapshot-builder-target=\"group\"]')\n\n    if (groupDiv) {\n      groupDiv.remove()\n      // Update preview after removing group\n      this.checkAutoGenerate()\n    }\n  }\n\n  removeSnapshot(e) {\n    e.preventDefault()\n\n    const snapshotItem = e.target.closest('[data-wellness-snapshot-builder-target=\"snapshot\"]')\n    if (!snapshotItem) return\n\n    const folder = snapshotItem.closest('[data-wellness-snapshot-builder-target=\"folder\"]')\n\n    // Remove the snapshot\n    snapshotItem.remove()\n\n    // Check if folder is now empty\n    if (folder) {\n      const remainingSnapshots = folder.querySelectorAll('[data-wellness-snapshot-builder-target=\"snapshot\"]')\n      if (remainingSnapshots.length === 0) {\n        folder.remove()\n      }\n    }\n  }\n\n  resetSnapshotBuilderFrame() {\n    const frame = document.getElementById('snapshot_builder_frame')\n    if (frame) {\n      frame.innerHTML = `\n        <div class=\"snapshot-builder-content\">\n          <h3>Folders & Saved Snapshots Preview</h3>\n          <div class=\"snapshot-loading d-none\">\n            <p class=\"text-center py-5 my-5\"><em class=\"fal fa-spin fa-circle-notch fa-5x\"></em></p>\n          </div>\n          <div class=\"snapshot-content\">\n            <p><em>Configure settings and click \"Generate List\" to preview the folder structure that will be created.</em></p>\n          </div>\n        </div>\n      `\n    }\n  }\n\n\n  checkAutoGenerate() {\n    // Check if any group has both Q1 and Q2 selected\n    let shouldAutoGenerate = false\n\n    this.groupTargets.forEach((group) => {\n      const q1Select = group.querySelector('[data-question=\"primary\"]')\n      const q2Select = group.querySelector('[data-question=\"secondary\"]')\n\n      if (q1Select && q1Select.selectedIndex > 0 && q2Select && q2Select.selectedIndex > 0) {\n        shouldAutoGenerate = true\n      }\n    })\n\n    if (shouldAutoGenerate) {\n      // Auto-submit the form to generate the actual list\n      this.submitForm()\n    } else {\n      // Reset the frame if no complete selections\n      this.resetSnapshotBuilderFrame()\n    }\n  }\n\n\n  saveFolderName(e) {\n    e.preventDefault()\n    const input = document.getElementById('folder_name_input')\n    const newName = input.value.trim()\n\n    if (newName === '') {\n      alert('Folder name cannot be empty')\n      return\n    }\n\n    // Update the display text\n    document.getElementById('folder_name_text').textContent = newName\n\n    // Update the hidden input\n    document.getElementById('folder_name_hidden').value = newName\n\n    // Switch back to display mode\n    document.getElementById('folder_name_edit').classList.add('d-none')\n    document.getElementById('folder_name_display').classList.remove('d-none')\n  }\n\n\n  selectTimeframe(e) {\n    var item = e.currentTarget\n    if(item.value == 'campaign') {\n      if(document.getElementById('sb_campaign_holder')) {\n        document.getElementById('sb_campaign_holder').classList.remove('d-none')\n      }\n      document.getElementById('sb_date_range_holder').classList.add('d-none')\n    }\n    else if(item.value == 'date-range') {\n      if(document.getElementById('sb_campaign_holder')) {\n        document.getElementById('sb_campaign_holder').classList.add('d-none')\n      }\n      document.getElementById('sb_date_range_holder').classList.remove('d-none')\n    }\n    else if(item.value == 'all-time') {\n      if(document.getElementById('sb_campaign_holder')) {\n        document.getElementById('sb_campaign_holder').classList.add('d-none')\n      }\n      document.getElementById('sb_date_range_holder').classList.add('d-none')\n    }\n    // Auto-regenerate preview if questions are already selected\n    this.checkAutoGenerate()\n  }\n\n  updateTimeframeSettings(e) {\n    // Called when campaign or date range changes - regenerate preview if criteria met\n    this.checkAutoGenerate()\n  }\n\n\n  showListGrouping(e) {\n    e.preventDefault()\n    var link = e.currentTarget\n    var holderId = link.dataset.target\n\n    // Hide the link\n    link.classList.add('d-none')\n\n    // Show the dropdown holder\n    document.getElementById(holderId).classList.remove('d-none')\n  }\n\n\n  toggleFolderNameEdit(e) {\n    e.preventDefault()\n    document.getElementById('folder_name_display').classList.add('d-none')\n    document.getElementById('folder_name_edit').classList.remove('d-none')\n    document.getElementById('folder_name_input').focus()\n  }\n\n\n  toggleQuestion3(e) {\n    e.preventDefault()\n    var item = e.currentTarget\n    var elem = document.getElementById(item.dataset.id)\n    if(elem.classList.contains('d-none')) {\n      elem.classList.remove('d-none')\n      item.innerHTML = 'Question 3 <i class=\"fal fa-minus-circle\"></i>'\n    } else {\n      item.innerHTML = 'Question 3 <i class=\"fal fa-plus-circle\"></i>'\n      elem.classList.add('d-none')\n\n      // Find all text inputs and select elements and reset them\n      const textInputs = elem.querySelectorAll('input[type=\"text\"]')\n      const selects = elem.querySelectorAll('select')\n\n      textInputs.forEach((input) => {\n        input.value = ''\n      })\n\n      selects.forEach((select) => {\n        select.selectedIndex = 0\n      })\n    }\n  }\n\n  // submitForm is called programmatically by checkAutoGenerate (no event object).\n  // validateForm handles the same logic when triggered by the form's submit event.\n  // They share identical fetch/polling logic \u2014 consolidating into one method would\n  // require threading the optional event through checkAutoGenerate.\n  submitForm() {\n    // Validate date range if needed\n    const timeFrame = document.getElementById('time_frame')\n    if (timeFrame && timeFrame.value === 'date-range') {\n      const startDate = document.getElementById('date_start_date')\n      const endDate = document.getElementById('date_end_date')\n\n      if (!startDate.value || !endDate.value) {\n        alert('Please select both a start date and end date for the date range.')\n        return\n      }\n    }\n\n    const form = document.getElementById('wellness_snapshot_builder_form')\n    if (!form) return\n\n    this.showProgressBar()\n\n    const formData = new FormData(form)\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content')\n\n    // Start polling for progress before sending the request\n    this.startPolling()\n\n    // Submit the form via fetch with JSON accept header\n    fetch(form.action, {\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'X-CSRF-Token': csrfToken\n      },\n      body: formData\n    })\n    .then(response => response.json())\n    .then(data => {\n      this.stopPolling()\n      if (data.status === 'complete') {\n        this.updateProgressBar(data.current, data.total)\n        // Brief delay so user sees 100% before results load\n        setTimeout(() => this.fetchResults(), 300)\n      } else {\n        // The server turned the request away (a question this report cannot use, a bad\n        // time frame, the combined snapshot not enabled); its message is already translated.\n        this.showError(data.error || i18n_string(\"wellness_snapshot.snapshot_builder.generation_failed\", \"An error occurred while generating snapshots. Please try again.\"))\n      }\n    })\n    .catch(error => {\n      this.stopPolling()\n      console.error('Snapshot generation error:', error)\n      this.showError(i18n_string(\"wellness_snapshot.snapshot_builder.generation_failed\", \"An error occurred while generating snapshots. Please try again.\"))\n    })\n  }\n\n\n  validateForm(e) {\n    const timeFrame = document.getElementById('time_frame')\n    if (timeFrame && timeFrame.value === 'date-range') {\n      const startDate = document.getElementById('date_start_date')\n      const endDate = document.getElementById('date_end_date')\n\n      if (!startDate.value || !endDate.value) {\n        e.preventDefault()\n        alert('Please select both a start date and end date for the date range.')\n        return false\n      }\n    }\n\n    // Intercept the form submission to show progress bar\n    e.preventDefault()\n\n    const form = document.getElementById('wellness_snapshot_builder_form')\n    if (!form) return\n\n    this.showProgressBar()\n\n    const formData = new FormData(form)\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content')\n\n    // Start polling for progress before sending the request\n    this.startPolling()\n\n    // Submit the form via fetch with JSON accept header\n    fetch(form.action, {\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'X-CSRF-Token': csrfToken\n      },\n      body: formData\n    })\n    .then(response => response.json())\n    .then(data => {\n      this.stopPolling()\n      if (data.status === 'complete') {\n        this.updateProgressBar(data.current, data.total)\n        // Brief delay so user sees 100% before results load\n        setTimeout(() => this.fetchResults(), 300)\n      } else {\n        // The server turned the request away (a question this report cannot use, a bad\n        // time frame, the combined snapshot not enabled); its message is already translated.\n        this.showError(data.error || i18n_string(\"wellness_snapshot.snapshot_builder.generation_failed\", \"An error occurred while generating snapshots. Please try again.\"))\n      }\n    })\n    .catch(error => {\n      this.stopPolling()\n      console.error('Snapshot generation error:', error)\n      this.showError(i18n_string(\"wellness_snapshot.snapshot_builder.generation_failed\", \"An error occurred while generating snapshots. Please try again.\"))\n    })\n  }\n\n\n  // ---- Progress Bar Methods ----\n\n  showProgressBar() {\n    const frame = document.getElementById('snapshot_builder_frame')\n    if (!frame) return\n\n    frame.innerHTML = `\n      <div class=\"snapshot-builder-content p-3\">\n        <h3>Generating Snapshots...</h3>\n        <div class=\"progress mb-3\" style=\"height: 25px;\">\n          <div class=\"progress-bar progress-bar-striped progress-bar-animated bg-primary\"\n               role=\"progressbar\" style=\"width: 0%\"\n               id=\"snapshot_progress_bar\">0%</div>\n        </div>\n        <p class=\"text-muted text-small\" id=\"snapshot_progress_text\">\n          Preparing...\n        </p>\n      </div>\n    `\n  }\n\n  startPolling() {\n    this.stopPolling()\n    this.pollingStartedAt = Date.now()\n\n    // Poll every 750ms \u2014 fast enough for visible progress without hammering the server.\n    // The controller writes updated counts to Rails.cache after each snapshot check, so\n    // each poll gets a fresh number without the two requests coordinating directly.\n    this.pollingInterval = setInterval(() => {\n      fetch('/wellness_snapshot/snapshot_progress', {\n        headers: { 'Accept': 'application/json' }\n      })\n      .then(response => response.json())\n      .then(data => {\n        if (data.status === 'processing') {\n          this.updateProgressBar(data.current, data.total, data.current_group, data.total_groups)\n        } else if (data.status === 'not_started') {\n          // Rails.cache is NullStore in development unless `rails dev:cache` is enabled.\n          // After 10 seconds of no progress we fall back to an indeterminate bar rather\n          // than staying stuck at 0%.\n          if (Date.now() - this.pollingStartedAt > 10000) {\n            this.showIndeterminateProgress()\n          }\n        }\n      })\n      .catch(() => {\n        // Silently ignore polling errors - the main fetch will handle failures\n      })\n    }, 750)\n  }\n\n  stopPolling() {\n    if (this.pollingInterval) {\n      clearInterval(this.pollingInterval)\n      this.pollingInterval = null\n    }\n  }\n\n  updateProgressBar(current, total, currentGroup, totalGroups) {\n    const bar = document.getElementById('snapshot_progress_bar')\n    const text = document.getElementById('snapshot_progress_text')\n    if (!bar || !total) return\n\n    const percent = Math.round((current / total) * 100)\n    bar.style.width = `${percent}%`\n    bar.textContent = `${percent}%`\n\n    if (text) {\n      let message = `Processing snapshot ${current} of ${total}...`\n      if (totalGroups > 1 && currentGroup > 0) {\n        message = `Processing Group ${currentGroup} of ${totalGroups} \u2014 snapshot ${current} of ${total}...`\n      }\n      text.textContent = message\n    }\n  }\n\n  showIndeterminateProgress() {\n    const bar = document.getElementById('snapshot_progress_bar')\n    const text = document.getElementById('snapshot_progress_text')\n    if (!bar) return\n\n    // Show a full-width animated bar without percentage\n    bar.style.width = '100%'\n    bar.textContent = ''\n    if (text) {\n      text.textContent = 'Processing snapshots...'\n    }\n  }\n\n  fetchResults() {\n    fetch('/wellness_snapshot/snapshot_result', {\n      headers: { 'Accept': 'text/html' }\n    })\n    .then(response => response.text())\n    .then(html => {\n      const frame = document.getElementById('snapshot_builder_frame')\n      if (frame) {\n        // outerHTML replaces the element itself (including the <turbo-frame> wrapper tag).\n        // innerHTML would only replace the contents and leave a bare div where the frame was,\n        // breaking Turbo's ability to target it for the subsequent save_generated_snapshots response.\n        frame.outerHTML = html\n      }\n    })\n    .catch(error => {\n      console.error('Error fetching results:', error)\n      this.showError('Failed to load results. Please try again.')\n    })\n  }\n\n  showError(message) {\n    const frame = document.getElementById('snapshot_builder_frame')\n    if (!frame) return\n\n    frame.innerHTML = `\n      <div class=\"snapshot-builder-content p-3\">\n        <div class=\"alert alert-danger\">${escapeHtml(message)}</div>\n      </div>\n    `\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport WellnessCommonController from \"./wellness_common_controller.js\"\n\n// Connects to data-controller=\"wellness-snapshot\"\nexport default class extends WellnessCommonController {\n  connect() {\n\n    // Default settings for hotspot / brightspot toggle. Will reset on page refresh\n    document.hotspot = 0\n    document.brightspot = 0\n    document.show_spot = 0\n\n    console.log(\"Wellness Snapshot Controller\")\n\n    document.wsControllerRef = this\n    const controllerRef = this\n\n    // // Custom callback created - https://www.betterstimulus.com/interaction/callbacks.html\n    // $(document).on('wellness_snapshot_controller.state', function(event, callback) {\n    //     callback(this)\n    //   }.bind(this)\n    // )\n\n    // Determine if we have the snapshot updates modal to show\n    if($('#well-being-snapshot-revisions-modal').length){\n      $(\"#well-being-snapshot-revisions-modal\").modal()\n      $('#well-being-snapshot-revisions-modal').modal('show')\n    }\n\n    // Wire the top \"Walkthrough\" button\n    const controllerRefForWalkthrough = this\n    $(document).on('click', '.start-snapshot-walkthrough', function() {\n      setTimeout(() => controllerRefForWalkthrough.startWalkthrough(), 400)\n    })\n\n    // Wire the modal \"Start Walkthrough\" button (specific to the new features popup)\n    $(document).on('click', '.start-features-walkthrough', function() {\n      setTimeout(() => controllerRefForWalkthrough.startFeaturesWalkthrough(), 400)\n    })\n\n    // Auto-start features walkthrough if redirected from dashboard with ?walkthrough=1\n    const urlParams = new URLSearchParams(window.location.search)\n    if (urlParams.get('walkthrough') === '1') {\n      setTimeout(() => controllerRefForWalkthrough.startFeaturesWalkthrough(), 800)\n    }\n\n    // Prevents duplicate loading of connect events. (used in generating option lists)\n    if(!$('#configure_options').length){\n\n      // Determine if we have the terms modal to show\n      if($('#well-being-snapshot-terms-modal').length){\n        $(\"#well-being-snapshot-terms-modal\").modal({backdrop: 'static', keyboard: false})\n        $('#well-being-snapshot-terms-modal').modal('show')\n      }\n\n      document.offcanvas_snapshot = document.getElementById('configureReportOptions');\n      if (!document.offcanvas_snapshot) return;\n      document.bsOffcanvas_snapshot = new bootstrap.Offcanvas( document.offcanvas_snapshot );\n      document.offcanvas_snapshot.addEventListener('hide.bs.offcanvas', function () {\n        // Stop video\n        const modalElement = document.getElementById('combined_snapshot_modal_modal_for_settings');\n        if (modalElement) {\n          const iframe = modalElement.querySelector('iframe');\n          if (iframe && iframe.contentWindow) {\n            // Only works for youtube:\n            // iframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"stopVideo\",\"args\":\"\"}', '*');\n            var iframeSrc = iframe.src;\n            iframe.src = iframeSrc;\n          }\n          $(modalElement).modal(\"hide\");\n        }\n      })\n      document.offcanvas_snapshot.addEventListener('shown.bs.offcanvas', function () {\n        if ($(\"#combined_snapshot_modal_modal_for_settings\").length && $(\"#combined_snapshot_modal_modal_for_settings\").hasClass(\"show-on-settings-open\")) {\n          $(\"#combined_snapshot_modal_modal_for_settings\").modal(\"show\");\n        }\n      })\n\n      super.showLoader()\n\n      // Default Check if Data Exists\n      if($('#i_can_create_snapshot_folders').val() == 'true' || ($('#saved_report_settings_last').length && $('#default_loaded_report').length)) {\n\n        controllerRef.setInitialSettings()\n\n        if(document.initial_report_settings !== undefined) {\n\n          console.log(\"WE ARE LOADING DEFAULT WELLNESS SNAPSHOT SETTINGS\")\n          console.log(\"Initial Settings:\", document.initial_report_settings)\n\n          // Enable PopOvers\n          var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"popover\"]'))\n          var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {\n            return new bootstrap.Popover(popoverTriggerEl)\n          })\n\n          document.saved_filter_loaded = undefined;\n          document.edit_saved_filter_loaded = undefined;\n          document.initial_report_load_complete = false\n          \n\n          // Inital Load\n          super.loadQuestion('primary_question')\n            \n          controllerRef.loadSavedReportSettings(controllerRef)\n          super.setReportPanelSize()\n\n          // super.initialReportLoad()\n          add_google_chart_onload_callback(function(){\n            controllerRef.processReportSettingsForm();\n          });\n          \n        }\n      } else {\n        $('#configuration-panel').addClass(\"hidden\");\n        $('#ranges-explanation-all').addClass('hidden');\n        $('#report-name-holder').addClass('hidden');\n        $('#main_chart_wrapper').addClass('hidden');\n        if(document.getElementById('snapshot_no_reports_assigned') == undefined) {\n          $(\"<p id='snapshot_no_reports_assigned'>\" + I18n.wellness_snapshot.admin_no_reports_assigned + \"</p>\").insertBefore('#ranges-explanation-all')\n        }\n      }\n\n      if ($(\".csa-multiselect\").length) {\n        $(\".csa-multiselect\").each(function(){\n          let allow_search = false;\n          if ($(this).find(\"option\").length > 10) {\n            allow_search = true;\n          }\n          $(this).multiselect({columns: 1, search: allow_search, selectAll: true,\n            onOptionClick: function(element, option) {\n              controllerRef.customerSubAccountChange(this);\n            },\n            onControlClose: function(element) {\n              controllerRef.customerSubAccountChange(this);\n            },\n            onSelectAll: function(element, selected) {\n              controllerRef.customerSubAccountChange(this);\n            },\n            onSelectNone: function(element, selected) {\n              controllerRef.customerSubAccountChange(this);\n            }\n          });\n        });\n      }\n    }\n\n    // console.log(\"  Initial - default settings:\", document.saved_report_settings_default)\n    // console.log(\"  Initial - last settings:\", document.saved_report_settings_last)\n  } \n\n  checkForSingleSubAccountInCombinedSnapshot(event) {\n    // DEBUG: console.log(\"WS: checkForSingleSubAccountInCombinedSnapshot\");\n    if ($('#combined_snapshot_report_input').length) {\n      let primary_options_select = document.getElementById('primary_options');\n      let primary_option_kinds_select = document.getElementById('primary_option_kinds');\n      let primary_question_select = document.getElementById('primary_question');\n      let selected_options = [...primary_options_select.options].filter(option => option.selected).map(option => option.value);\n      if (primary_question_select.value === 'combined_snapshot_sub_accounts' && selected_options.length === 1 && parseInt(selected_options[0], 10) > 0 && primary_option_kinds_select.value === '0') {\n        if (!document.question_two_sub_account_question_list || document.question_two_sub_account_question_list === 'combined') {\n          document.question_two_sub_account_question_list = 'single';\n          this.changeQuestion(['', '', 'secondary']);\n          this.loadQuestion('secondary_question', primary_question_select.value);\n        }\n      } else {\n        if (document.question_two_sub_account_question_list && document.question_two_sub_account_question_list === 'single') {\n          this.changeQuestion(['', '', 'secondary']);\n          this.loadQuestion('secondary_question', primary_question_select.value);\n        }\n        document.question_two_sub_account_question_list = 'combined';\n      }\n    }\n  }\n\n  /* **************************************************************************\n  function: combinedAccountActionChange\n  * User triggered\n  * Adjusts configuration options displayed. Used in combined snapshot\n  ************************************************************************** */\n  combinedAccountActionChange(event) {\n    let current_val = $(event.currentTarget).val();\n    if (current_val == \"together\") {\n      $(\"#national-primary input[value='0']\").parent().click();\n      $(\"#national-secondary input[value='0']\").parent().click();\n    }\n    this.showNationalComparisons();\n  }\n\n  /* **************************************************************************\n  function: changePrimaryQuestion\n  * User and Internal triggered\n  * Gets the newly selected question, clears secondary and tertiary questions, loads secondary question builder\n  ************************************************************************** */\n  changePrimaryQuestion(event) {\n    console.log(\"WS: changePrimaryQuestion\")\n    this.resetQuestionPrimary();\n    this.resetQuestionSecondary();\n    this.resetQuestionTertiary();\n\n    var question_id = event.currentTarget.value\n\n    if( document.initial_report_load_complete == true) {\n\n      if(question_id == '') {\n        $('#primary_question_customize_options').attr('href', '#');\n\n        $('#dashboard-filter-options').addClass(\"hidden\");\n        $('#chart-sort-by').hide();\n\n        $('#secondary_question').html('')\n        $('#secondary_options').html('')\n\n        if($('#tertiary_question_holder').length){\n          $(\"#tertiary_question\").html('');\n          $('#tertiary_options').html('');\n        }\n      } else {\n        $('#primary_question_customize_options').attr('href', '/wellness_common/' + question_id.split(\"-\")[0] + '/configure_options')\n        $('#dashboard-filter-options').removeClass(\"hidden\");\n        $('#chart-sort-by').show();\n\n        this.changePrimaryQuestionProcess(question_id)\n\n        if($('#tertiary_question_holder').length){\n          $('#tertiary_question_holder').hide();\n          $(\"#tertiary_question\").html('');\n          $('#tertiary_options').html('');\n        }\n      }\n    }\n    this.showNationalComparisons();\n  }\n\n  /* **************************************************************************\n  function: changePrimaryQuestionProcess\n  * Internal triggered\n  * Loads the secondary questions and calls function to load primary question options\n  ************************************************************************** */\n  changePrimaryQuestionProcess(question_id, chosen_option_list_id = undefined) {\n    console.log(\"WS: changePrimaryQuestionProcess\")\n    const controllerRef = this\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_common/get_signup_questions\",\n      data: { selected_question: question_id },\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          $('#secondary_question').html( controllerRef.processQuestionList(data.questions) )\n          $('#secondary_options').html('')\n        }\n      }\n    });\n\n    controllerRef.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'primary', 'primary_option_kinds')\n  }\n\n  changeQuestionOptionKinds(event, question_id = undefined, option_id = undefined, question_level = undefined, prefix = '') {\n    super.changeQuestionOptionKinds(event, question_id, option_id, question_level, prefix);\n    this.checkForSingleSubAccountInCombinedSnapshot(null);\n  }\n\n  /* **************************************************************************\n  function: changeSecondaryQuestion\n  * User and Internal triggered\n  * Gets the newly selected question, clears tertiary questions, loads tertiary question builder if available\n  ************************************************************************** */\n  changeSecondaryQuestion(event) {\n    console.log(\"WS: changeSecondaryQuestion\")\n    this.resetQuestionSecondary();\n    this.resetQuestionTertiary();\n\n    if(document.initial_report_load_complete == true) {\n\n      if(event.currentTarget.value == '') {\n\n        $('#secondary_question_customize_options').attr('href', '#');\n\n        $('#secondary_questions').hide();\n        $(\"#tertiary_question_holder\").hide();\n        $('#tertiary_question').html('');\n      } else {\n        $('#secondary_questions').show();\n\n        $('#secondary_question_customize_options').attr('href', '/wellness_common/' + event.currentTarget.value.split(\"-\")[0] + '/configure_options')\n\n        this.changeSecondaryQuestionProcess(event.currentTarget.value)\n      }\n    }\n    this.showNationalComparisons();\n  }\n\n  /* **************************************************************************\n  function: changeSecondaryQuestionProcess\n  * Internal triggered\n  * Loads the tertiary questions and calls function to load secondary question options\n  ************************************************************************** */\n  changeSecondaryQuestionProcess(question_id, chosen_option_list_id = undefined) {\n    console.log(\"WS: changeSecondaryQuestionProcess\")\n    const controllerRef = this\n\n    if($('#tertiary_question_holder').length){\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: \"/wellness_common/get_signup_questions\",\n        data: { selected_question: question_id, primary_question: $('#primary_question').val() },\n        async: false,\n        success: function (data) {\n          if(data.status == 200) {\n            $(\"#tertiary_question_holder\").show();\n            $('#tertiary_question').html( controllerRef.processQuestionList(data.questions) )\n          }\n        }\n      }); \n    }\n\n    controllerRef.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'secondary', 'secondary_option_kinds')\n  }\n\n  /* **************************************************************************\n  function: changeTertiaryQuestion\n  * User and Internal triggered\n  * Gets the newly selected question, loads tertiary question builder if available\n  ************************************************************************** */\n  changeTertiaryQuestion(event) {\n    console.log(\"WS: changeTertiaryQuestion\")\n    this.resetQuestionTertiary();\n    if( document.initial_report_load_complete == true) {\n      if(event.currentTarget.value == '') {\n        $('#tertiary_questions').hide();\n\n        $('#tertiary_question_customize_options').attr('href', '#')\n      } else {\n        $('#tertiary_questions').show();\n\n        $('#tertiary_question_customize_options').attr('href', '/wellness_common/' + event.currentTarget.value.split(\"-\")[0] + '/configure_options')\n        this.changeTertiaryQuestionProcess(event.currentTarget.value)\n      }\n    }\n    this.showNationalComparisons();\n  }\n\n  /* **************************************************************************\n  function: changeTertiaryQuestionProcess\n  * Internal triggered\n  * Loads the tertiary question options\n  ************************************************************************** */\n  changeTertiaryQuestionProcess(question_id, chosen_option_list_id = undefined) {\n    console.log(\"WS: changeTertiaryQuestionProcess\")\n    const controllerRef = this\n\n    controllerRef.getSignUpQuestionOptionList(question_id, chosen_option_list_id, 'tertiary', 'tertiary_option_kinds')\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_common/get_signup_question_options\",\n      data: { selected_question:  question_id},\n      async: false,\n      success: function (data) {\n        if(data.status == 200) {\n          $('#tertiary_options').html( controllerRef.processOptionList(data.options) )\n        }\n      }\n    });\n  }\n\n  \n  /* **************************************************************************\n  function: currentSettingsSignature\n  * Internal triggered\n  * Serializes the settings form exactly the way saveLastReportSettings does, so\n  * two signatures taken at different moments can be compared to tell whether the\n  * settings actually changed in between.\n  *\n  * Both sides of that comparison come from this one function. The bug this\n  * replaces came from comparing the serialized form against a separate,\n  * hand-written hash of what the defaults were believed to be: two descriptions\n  * of the same thing, maintained apart, that inevitably drifted.\n  ************************************************************************** */\n  currentSettingsSignature() {\n    var $fields = this.getActiveTimePeriodFormFields($(\"#report-settings-panel-form\"));\n    return this.getJSONLoadSettingsString($fields);\n  }\n\n  /* **************************************************************************\n  function: applyFilterNoticeState\n  * Internal triggered\n  * Shows or hides the \"this snapshot is filtered\" notice and the save/update\n  * buttons that go with it.\n  *\n  * Whether the snapshot is filtered is told to us - by the server on page load,\n  * and by whoever saved the settings after that. It used to be inferred here by\n  * diffing the serialized form against setInitialSettings' hand-written hash of\n  * expected defaults. Those two were authored separately and drifted: once the\n  * \"_last_\" save started excluding the inactive time-period panel's fields, the\n  * hash still listed start_date/end_date/compare, so every snapshot on the\n  * default All Time range read as filtered and Clear Filter could not clear it,\n  * because the reset re-saved through the same exclusion.\n  ************************************************************************** */\n  applyFilterNoticeState(customized) {\n    console.log(\"WS: applyFilterNoticeState\", customized)\n\n    document.report_settings_customized = customized\n    $(\"#report_settings_customized\").val(customized ? '1' : '0')\n\n    if(customized){\n      // Notice on \"Configure Report\" button\n      // Notice in header area to reset\n      // Notice in settings panel to reset\n      // Notice in settings panel to save as \"Saved Configuration\"\n      $(\".report-settings-filter-applied-notice\").removeClass('hidden');\n      if(document.saved_filter_loaded && document.saved_filter_loaded > 0)\n      {\n        $(\".report-settings-filter-save-btn\").addClass('hidden');\n        $(\".report-settings-filter-save-as-new-btn\").removeClass('hidden');\n        // Check to see if the saved_filter_loaded differs from the current last filter\n        $(\".report-settings-filter-update-btn\").removeClass('hidden');\n      }\n      else\n      {\n        $(\".report-settings-filter-update-btn\").addClass('hidden');\n        $(\".report-settings-filter-save-as-new-btn\").addClass('hidden');\n        $(\".report-settings-filter-save-btn\").removeClass('hidden');\n      }\n    } else {\n      $(\".report-settings-filter-applied-notice\").addClass('hidden');\n      $(\".report-settings-filter-save-btn\").addClass('hidden');\n      $(\".report-settings-filter-update-btn\").addClass('hidden');\n      $(\".report-settings-filter-save-as-new-btn\").addClass('hidden');\n    }\n\n    super.setReportPanelSize()\n  } \n\n  /* **************************************************************************\n  function: clearHotspotSettings\n  * Internal triggered\n  * Resets and hides the snapshot label description gray box.\n  ************************************************************************** */\n  clearHotspotSettings() {\n    console.log(\"WS: clearHotspotSettings\")\n\n    var formData = new FormData();\n    const filterHsbs = document.getElementById('filter-hsbs');\n    for (const child of filterHsbs ? filterHsbs.children : []) {\n      if(child.id == 'hsbs_hotspot') {   \n        child.classList.remove(\"btn-disabled\")\n        formData.append(child.id, \"on\");\n      } else if(child.id !== undefined) {\n        child.classList.add(\"btn-disabled\")\n        child.classList.remove(\"d-none\")\n        formData.append(child.id, \"off\");\n      }\n    }\n    \n    // Change Time Period / Campaign\n    const timeperiodSelect = document.getElementById('timeperiod_quick_select');\n    if (timeperiodSelect) timeperiodSelect.selectedIndex = 0;\n    const dateRangeInput = document.querySelector('input[name=\"date_range_select\"][value=\"-1\"]');\n    if (dateRangeInput) dateRangeInput.parentElement.click();\n\n    $('#snapshot_quick_select').prop('selectedIndex', 0).trigger('change')\n\n    var data = Object.fromEntries(formData);\n\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/users/update_hotspot_settings\",\n      data: { hotspot_settings: data },\n      async: false,\n      success: function (data) {\n\n        if(data.status == 500) {\n          alert(\"Settings were not saved\")\n        } else {\n\n        }\n      }\n    });\n  }\n\n\n\n  /* **************************************************************************\n  function: clearSnapshotLabel\n  * Internal triggered\n  * Resets and hides the snapshot label description gray box.\n  ************************************************************************** */\n  clearSnapshotLabel() {\n    console.log(\"WS: clearSnapshotLabel\")\n    $('#report-name-holder').addClass('hidden')\n    $('#report-name').html('')\n    $('#report-description').html('')\n    $('#report-created-by').html('')\n  }\n\n\n\n\n  /* **************************************************************************\n  function: closeSettings\n  * User triggered\n  * Closes the off-canvas settings panel\n  ************************************************************************** */\n  closeSettings(event) {\n    console.log(\"WS: closeSettings\")\n    if( $(\"#configureReportOptions\").hasClass(\"show\")){\n      $(\"#configureReportOptions\").removeClass(\"show\")\n    }\n  }\n\n\n\n  /* **************************************************************************\n  function: closeSnapshotUpdates\n  * User triggered\n  * Saves when the user has closed the notification\n  ************************************************************************** */\n  closeSnapshotUpdates(e) {\n    console.log(\"WS: closeSnapshotUpdates\")\n    var formData = \"setting_name=viewed_snapshot_updates&setting_value=yes\";\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/users/viewed_snapshot_updates\",\n      data: { setting_name: 'viewed_snapshot_updates', setting_value: 'yes' },\n      success: function (data) {\n        if(data.status == 200) {\n          var modalEl = document.getElementById('well-being-snapshot-revisions-modal')\n          $(\"#well-being-snapshot-revisions-modal\").modal('hide');\n\n          modalEl.addEventListener('hidden.bs.modal', function(event){\n            modalEl.remove()\n          });\n\n          $('#submit').click()\n        }\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: closeSnapshotUpdates\n  * User triggered\n  * Saves when the user has closed the notification\n  ************************************************************************** */\n  closeSnapshotUpdatesDashboard(e) {\n    console.log(\"WS: closeSnapshotUpdatesDashboard\")\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/users/viewed_snapshot_updates_dashboard\",\n      data: { setting_name: 'viewed_snapshot_updates', setting_value: 'yes' },\n      success: function (data) {\n        if(data.status == 200) {\n          var modalEl = document.getElementById('well-being-snapshot-revisions-modal')\n          $(\"#well-being-snapshot-revisions-modal\").modal('hide');\n\n\n          modalEl.addEventListener('hidden.bs.modal', function(event){\n            modalEl.remove()\n          });\n\n          $('#submit').click()\n        }\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: configureSelect2Fields\n  * Internal triggered\n  * Sets up the select2 options\n  ************************************************************************** */\n  configureSelect2Fields(selector, options){\n    // console.log(\"WS: configureSelect2Fields\", selector)\n    $(selector).each(function () {\n      var parentElement = $(this).closest(\".select2-wrapper-div\");\n      // we need to check if the prevObject, if the ID is blank (saved snapshot quick select) then don't reprocess the select2 options.\n      if(parentElement.prevObject[0].id !== \"\"){\n        if (parentElement.length) {\n          options.dropdownParent = parentElement;\n        }\n        $(this).select2(options);\n      }\n    });\n  }\n\n  customerSubAccountChange(multiSelectObj) {\n    console.log(\"WS: customerSubAccountChange\");\n    let question_levels = [\"primary\", \"secondary\", \"tertiary\"];\n    question_levels.forEach((level) => {\n      let number_of_select_sub_accounts = 0;\n      if ($('#'+level+'_question').length && $('#'+level+'_question').val() == \"combined_snapshot_sub_accounts\") {\n        $(\"select[name='\"+level+\"_combine_account_action']\").removeClass(\"hidden\");\n      } else {\n        $(\"select[name='\"+level+\"_combine_account_action']\").addClass(\"hidden\");\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: determineReload\n  * Internal triggered\n  * Determines if we need to reload the snapshot report after the user closes the custom list modal\n  ************************************************************************** */\n  determineReload(event) {\n    console.log(\"WS: determineReload\")\n    const controllerRef = this\n    if(window.reloadSettings == true){\n      window.reloadSettings = false\n      controllerRef.resetSettings(event)\n    }\n  }\n\n  /* **************************************************************************\n  function: determineReloadFolders\n  * Internal triggered\n  * Determines if we need to reload the snapshot folders after the user closes the custom list modal\n  ************************************************************************** */\n  determineReloadFolders(event) {\n    console.log(\"WS: determineReloadFolders\")\n    if(window.reloadFolders == true){\n      window.reloadFolders = false\n      document.getElementById('load_saved_snapshots').reload()\n    }\n  }\n\n  /* **************************************************************************\n  function: displayComparisonDates\n  * User triggered\n  * Determines if we need to reload the snapshot folders after the user closes the custom list modal\n  ************************************************************************** */\n  displayComparisonDates(event) {\n    console.log(\"WS: displayComparisonDates\")\n    this.toggleActiveClass(event)\n    if(event.currentTarget.children[0].value == 'custom') {\n      $('#comparison-dates').removeClass('hidden');\n    } else {\n      $('#comparison-dates').addClass('hidden');\n    }\n\n    this.showNationalComparisons()\n  }\n\n\n  /* **************************************************************************\n  function: displayResponseAs\n  * User triggered\n  * Displays the data as either participants or percentages\n  ************************************************************************** */\n  displayResponseAs(event) {\n    console.log(\"WS: displayResponseAs\")\n    super.toggleActiveClass(event)\n\n    document.wsControllerRef.displayResponseAsProcess(event.currentTarget.children[0].value)\n    this.showNationalComparisons()\n  }\n\n\n  displayResponseAsProcess(kind, prefix = '') {\n    console.log(\"WS: displayResponseAsProcess\")\n    if(kind == 'participants') {\n      $('input[name=\"sort_distress_by\"][value=\"thriving\"]').parent().addClass('hidden');\n      $('input[name=\"sort_distress_by\"][value=\"distressed\"]').parent().click();\n      $('input[name=\"show_group_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n      $('input[name=\"show_group_total\"][value=\"0\"]').parent().click();\n      $('input[name=\"show_organization_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n      $('input[name=\"show_organization_total\"][value=\"0\"]').parent().click();\n      $('input[name=\"show_national_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n      $('input[name=\"show_national_total\"][value=\"0\"]').parent().click();\n      $('#national-overall').addClass(\"hidden\");\n      $('#national-primary').addClass('hidden');\n      $('#secondary-primary').addClass('hidden');\n      $('#tertiary-primary').addClass('hidden');\n    } else {\n      $('#' + prefix + 'display_responses_as').parent().click();\n      $('input[name=\"sort_distress_by\"][value=\"distressed\"]').parent().click();\n      $('input[name=\"sort_distress_by\"][value=\"thriving\"]').parent().removeClass('hidden');\n      $('input[name=\"show_group_total\"][value=\"1\"]').parent().removeClass(\"hidden\");\n      $('input[name=\"show_organization_total\"][value=\"1\"]').parent().removeClass(\"hidden\");\n      $('input[name=\"show_national_total\"][value=\"1\"]').parent().removeClass(\"hidden\");\n    }\n  }\n\n  /* **************************************************************************\n  function: doneWithQuestionGroupSetup\n  * User triggered\n  * Used in Combined Snapshot -- Triggers when they click the button that they finished question group setup.\n  ************************************************************************** */\n  doneWithQuestionGroupSetup(event) {\n    event.preventDefault();\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: \"/wellness_snapshot/update_question_groups_complete\",\n      data: { new_value: 1 },\n      success: function (data) {\n        if(data.status == 200) {\n          $(\"#report-settings\").removeClass(\"combined-question-settings-hide\");\n          // Get element with the class \"show-on-settings-open\" and remove that class.\n          $(\".show-on-settings-open\").removeClass(\"show-on-settings-open\");\n          // Remove element with id: combined_snapshot_show_settings_panel_on_load - to prevent auto-opening of panel\n          $(\"#combined_snapshot_show_settings_panel_on_load\").remove();\n          // Refresh question groups tab if loaded\n          if ($(\"#combined_questions_list_settings_panel_content\").length) {\n            let turbo_frame = document.getElementById(\"combined_questions_list_settings_panel\");\n            if (turbo_frame) {\n              turbo_frame.reload();\n            }\n          }\n        }\n      }\n    });\n  }\n\n\n  /* **************************************************************************\n  function: loadSavedReportSettings\n  * User and Internal triggered\n  * Loads settings from a saved snapshot report, resets all settings and processes new list.\n  * Main function to handle all resetting and loading of new data\n  ************************************************************************** */\n  loadSavedReportSettings(controllerRef, settings){\n    console.log(\"WS: loadSavedReportSettings\")\n\n    // This loads the default last saved report, or if settings are passed in loads that new report data\n    $('#tertiary_question_holder').addClass('hidden');\n\n    var primary_question_id = ''\n    var secondary_question_id = ''\n    var tertiary_question_id = ''\n\n    var loaded_settings = false\n\n    // Fully resetting options\n    if(document.resetFilter == true){\n      document.loadSettingsFromSerializedString = true;\n      var dataParsed = document.initial_report_settings;\n      var dataKeys = Object.keys(dataParsed);\n    } else {\n      // Load the current panel for settings\n      document.saved_report_settings_default = JSON.stringify(document.initial_report_settings)\n      if( ($(\"#saved_report_settings_last\").length && $(\"#saved_report_settings_last\").val() != \"\") || settings !== undefined) {\n        // Check if we changed any settings and if so set the current settings to that.\n        if(settings !== undefined) {\n          loaded_settings = true\n          document.saved_report_settings_last = settings;\n        } else {\n          document.saved_report_settings_last = $(\"#saved_report_settings_last\").val();\n        }\n\n        // Check if we have the same wbi version. If not set current settings to default.\n        // -- Do not do this check for combined_snapshot!\n        if (!$('#combined_snapshot_report_input').length) {\n          if (JSON.parse(document.saved_report_settings_default).wbi_version != JSON.parse(document.saved_report_settings_last).wbi_version) {\n            document.saved_report_settings_last = document.saved_report_settings_default;\n          }\n        }\n\n        if($(\"#saved_report_settings_last_save_id\").length) {\n          document.saved_filter_loaded = $(\"#saved_report_settings_last_save_id\").val();\n        }\n      } else {\n        document.saved_report_settings_last = document.saved_report_settings_default;\n      }\n\n      document.loadSettingsFromSerializedString = true;\n      var dataParsed = JSON.parse(document.saved_report_settings_last);\n      var dataKeys = Object.keys(dataParsed);\n    }\n  \n    // UNCHECK CHECKBOXES/MULTI-SELECTs\n    for(var i=0;i<dataKeys.length;i++){\n      var name = dataKeys[i];\n      var value = dataParsed[name];\n\n      if(name.indexOf('[') == -1 || $(\"[name='\"+name+\"']\").length > 0)\n      {\n\n        if(name == 'report_id') { \n          // do nothing\n        }\n\n        if(name == 'primary_question' && dataParsed[name] != '') {\n          // Originally used for generating the custom option lists. may not be needed ER 8/10/23\n          primary_question_id = dataParsed[name]\n\n          $('#dashboard-filter-options').removeClass('hidden');\n          $('#chart-sort-by').removeClass('hidden');\n          $('#primary_question').val(primary_question_id).trigger('change');\n          // this.changePrimaryQuestionProcess(primary_question_id)\n        }\n  \n        if(name == 'primary_option_kinds' && dataParsed[name] == \"default\"){\n          $('#primary_question_options_filter').removeClass(\"hidden\");\n        }\n\n        if(name == 'filter_by_primary_option' && dataParsed[name] == 1){\n          $('#primary_question_options').removeClass(\"hidden\");\n        }\n        \n        if(name == 'secondary_question' && dataParsed[name] != '') {\n\n          console.log(\"-=-=-=-=-=----- SECONDARY QUESTION ----=-=-=-=-=-=\")\n\n          secondary_question_id = dataParsed[name]\n\n          if($('#tertiary_question').length){\n            // Load Tertiary Question\n            $.ajax({\n              headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n              url: \"/wellness_common/get_signup_questions\",\n              method: \"post\",\n              data: { 'selected_question': secondary_question_id, 'primary_question': primary_question_id },\n              async: false\n            }).done(function( data){\n              if(data.status == 200){\n                $('#tertiary_question_holder').removeClass('hidden');\n                $('#tertiary_question').html( controllerRef.processQuestionList(data.questions) );\n              }\n            });\n          }\n\n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            type: \"POST\",\n            url: \"/wellness_common/get_signup_question_option_list\",\n            data: { selected_question: secondary_question_id },\n            async: false,\n            success: function (data) {\n              if(data.status == 200) {\n                $('#secondary_option_kinds').html( controllerRef.processOptionKind(data.options) )\n              }\n            }\n          });\n  \n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            url: \"/wellness_common/get_signup_question_options\",\n            method: \"post\",\n            data: { \"selected_question\": secondary_question_id },\n            async: false\n          }).done(function(data){\n            if(data.status == 200) {\n              $('#secondary_questions').removeClass('hidden')\n              $('#secondary_options').html( controllerRef.processOptionList(data.options) );\n            }\n          });\n        }\n  \n        if(name == 'filter_by_secondary_option' && dataParsed[name] == 1){\n          $('#secondary_question_options').removeClass(\"hidden\");\n        }\n  \n        if(name == 'tertiary_question' && dataParsed[name] != '') {\n          $('#tertiary_question_holder').removeClass('hidden');\n          $('#tertiary_questions').removeClass('hidden');\n  \n          $.ajax({\n            headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n            url: \"/wellness_common/get_signup_question_options\",\n            method: \"post\",\n            data: { \"selected_question\": dataParsed[name] },\n            async: false\n          }).done(function(data){\n            if(data.status == 200){\n              $('#tertiary_options').html( controllerRef.processOptionList(data.options) );\n            }\n          });\n        }\n  \n        if(name == 'filter_by_tertiary_option' && dataParsed[name] == 1){\n          $('#tertiary_question_options').removeClass(\"hidden\");\n        }\n  \n        // Choose Time Period\n        if(name == 'date_range_select') {\n          $('#assess_filter_holder').removeClass('hidden')\n          if(dataParsed[name] == '0') {\n            $('.report-date-range-custom-div').removeClass('hidden');\n          }\n          if(dataParsed[name] == 'campaign') {\n            $('#report-campaign-select-div').removeClass('hidden');\n            $('#assess_filter_holder').addClass('hidden')\n            $('#assess_filter').val('last_in_period')\n          }\n        }\n  \n        if(name == 'display_response_as') {\n          // Specifically filter options for participant display.\n          if(dataParsed[name] == 'participants') {\n            $('input[name=\"sort_distress_by\"][value=\"thriving\"]').parent().addClass('hidden');\n            $('input[name=\"sort_distress_by\"][value=\"distressed\"]').click();\n            $('input[name=\"show_group_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n            $('input[name=\"show_group_total\"][value=\"0\"]').click();\n            $('input[name=\"show_organization_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n            $('input[name=\"show_organization_total\"][value=\"0\"]').click();\n          }\n        }\n  \n        var $element = $(\"[name='\"+name+\"']\");\n        var inputType = $element.prop(\"type\");\n        if(inputType == \"checkbox\") {\n          $element.prop(\"checked\",false);\n        } else if(inputType == \"select-multiple\") {\n          $element.children(\"option\").prop(\"selected\", false);\n        }\n      }\n      else if(name.indexOf('[') != -1)\n      {\n        // Multi-select selectbox or checkbox array\n        var nameParts = name.split(\"[\");\n        name = nameParts[0]+\"[]\";\n        var $element = $(\"[name='\"+name+\"']\");\n        if($element.length > 0)\n        {\n          var inputType = $element.prop(\"type\");\n          if(inputType == \"checkbox\") {\n            $element.prop(\"checked\",false);\n          } else if(inputType == \"select-multiple\") {\n            $element.children(\"option\").prop(\"selected\", false);\n          }\n  \n        }\n      }\n    }\n\n    // SELECT NEW VALUES\n    var nonExistingIndexes = [];\n    for(var i=0;i<dataKeys.length;i++){\n      var name = dataKeys[i];\n      var value = dataParsed[name];\n      if(name.indexOf('[') == -1 || $(\"[name='\"+name+\"']\").length > 0)\n      {\n        if(name == 'report_id') { \n          // do nothing - we set this above when selecting the saved report\n        } \n\n        if(name == 'primary_question' && dataParsed[name] != '') {\n          // Originally used for generating the custom option lists. may not be needed ER 8/10/23\n          primary_question_id = dataParsed[name]\n          $('#primary_question_customize_options').attr('href', '/wellness_common/' + primary_question_id + '/configure_options')\n\n          $('#dashboard-filter-options').removeClass('hidden');\n          $('#chart-sort-by').removeClass('hidden');\n  \n          var obj = [\"\", primary_question_id, 'primary']\n          super.changeQuestion(obj, dataParsed['primary_option_kinds'])\n        }\n  \n\n        if(name == 'customize_primary_option_group' && dataParsed[name] == 1){\n          $('#primary_question_option_groups').removeClass('hidden');\n        }\n\n        if(name == 'filter_by_primary_option' && dataParsed[name] == 1){\n          $('#primary_question_options').removeClass(\"hidden\");\n        }\n        \n        if(name == 'secondary_question' && dataParsed[name] != '') {\n\n          secondary_question_id = dataParsed[name]\n          $('#secondary_questions').removeClass('hidden')\n          var obj = [\"\", secondary_question_id, 'secondary']\n          super.changeQuestion(obj, dataParsed['secondary_option_kinds'])\n          // this.changeSecondaryQuestionProcess(secondary_question_id, dataParsed['secondary_option_kinds'])\n        }\n  \n        if(name == 'customize_secondary_option_group' && dataParsed[name] == 1){\n          $('#secondary_question_option_groups').removeClass('hidden');\n        }\n\n        if(name == 'filter_by_secondary_option' && dataParsed[name] == 1){\n          $('#secondary_question_options').removeClass(\"hidden\");\n        }\n\n  \n        if(name == 'tertiary_question' && dataParsed[name] != '') {\n          $('#tertiary_question_holder').removeClass('hidden');\n          $('#tertiary_questions').removeClass('hidden');\n\n          tertiary_question_id = dataParsed[name]\n          var obj = [\"\", tertiary_question_id, 'tertiary']\n          super.changeQuestion(obj, dataParsed['tertiary_option_kinds'])\n        }\n  \n        if(name == 'tertiary_option_kinds' && dataParsed[name] == \"default\"){\n          $('#tertiary_question_options_filter').removeClass(\"hidden\");\n        }\n\n        if(name == 'filter_by_tertiary_option' && dataParsed[name] == 1){\n          $('#tertiary_question_options').removeClass(\"hidden\");\n        }\n  \n        // Choose Time Period\n        if(name == 'date_range_select') {\n          if(dataParsed[name] == '0') {\n            $('.report-date-range-custom-div').removeClass('hidden');\n          }\n          if(dataParsed[name] == 'campaign') {\n            $('#report-campaign-select-div').removeClass('hidden');\n          }\n        }\n  \n        if(name == 'display_response_as') {\n          // Specifically filter options for participant display.\n          if(dataParsed[name] == 'participants') {\n            $('input[name=\"sort_distress_by\"][value=\"thriving\"]').parent().addClass('hidden');\n            $('input[name=\"sort_distress_by\"][value=\"distressed\"]').click();\n            $('input[name=\"show_group_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n            $('input[name=\"show_group_total\"][value=\"0\"]').click();\n            $('input[name=\"show_organization_total\"][value=\"1\"]').parent().addClass(\"hidden\");\n            $('input[name=\"show_organization_total\"][value=\"0\"]').click();\n          }\n        }\n\n        // Only apply the saved campaign selection when Campaign was the actual saved\n        // time-period mode - otherwise this clicks the Campaign radio and clobbers the\n        // Date Range (or All Time) panel that dataParsed['date_range_select'] just restored.\n        if(name == 'campaign_select' && dataParsed['date_range_select'] == 'campaign') {\n          if(dataParsed[name] != '') {\n            // dataParsed[name] is an ID number or \"none\"\n            $('#campaign_select').val( dataParsed[name] )\n            $('#timeperiod_quick_select').val( dataParsed[name])\n            $('#choose_time_period_campaign').parent().click()\n\n            super.selectCampaign()\n            $('#report-campaign-select-comparison-div').removeClass('hidden');\n          } else {\n            $('#timeperiod_quick_select').val(-1)\n            $('#choose_time_period').parent().click()\n            super.selectCampaign()\n          }\n        }\n\n        if(name == 'campaign_select_comparison') {\n          if(dataParsed[name] != '') {\n            // dataParsed[name] is an ID number or \"none\"\n            $('#campaign_select_comparison').val( dataParsed[name] )\n          }\n        }\n\n        var $element = $(\"[name='\"+name+\"']\");\n        var inputType = $element.prop(\"type\");\n\n        if(inputType == \"radio\") {\n          $(\"[name='\"+name+\"'][value='\"+value+\"']\").parent().click();\n        } else if(inputType == \"checkbox\") {\n          $element.each(function(){\n            $(this).prop(\"checked\",true);\n          });\n        } else {\n          if(name != 'report_id') { \n            $element.val(value);\n          }\n        }\n  \n        if($element.hasClass(\"select2-hidden-accessible\")){\n          $element.trigger('change.select2');\n        }\n      }\n      else if(name.indexOf('[') != -1)\n      {\n        // Multi-select selectbox or checkbox array\n        var nameParts = name.split(\"[\");\n        name = nameParts[0]+\"[]\";\n        var $element = $(\"[name='\"+name+\"']\");\n        if($element.length > 0)\n        {\n          var inputType = $element.prop(\"type\");\n          if(inputType == \"radio\") {\n            $(\"[name='\"+name+\"'][value='\"+value+\"']\").click();\n          } else if(inputType == \"checkbox\") {\n            $element.each(function(){\n              if($(this).val() == value) {\n                $(this).prop(\"checked\", true);\n              }\n            });\n          } else if(inputType == \"select-multiple\") {\n            value = value.replaceAll(\"'\", \"\\\\'\")\n            $element.children(\"option[value='\" + value + \"']\").prop(\"selected\", true);\n          } else if ($element.length == 1){\n            $element.val(value);\n          }\n  \n          if($element.hasClass(\"select2-hidden-accessible\")){\n            $element.trigger('change.select2');\n          }\n        }\n        else\n        {\n          nonExistingIndexes.push(i);\n        }\n      }\n      let primary_options_select = document.getElementById('primary_options');\n      let primary_option_kinds_select = document.getElementById('primary_option_kinds');\n      let primary_question_select = document.getElementById('primary_question');\n      let selected_options = [...primary_options_select.options].filter(option => option.selected).map(option => option.value);\n      if (primary_question_select.value === 'combined_snapshot_sub_accounts' && selected_options.length === 1 && parseInt(selected_options[0], 10) > 0 && primary_option_kinds_select.value === '0') {\n        this.checkForSingleSubAccountInCombinedSnapshot(null);\n      }\n    }\n\n    // Refresh multiselect from <select> element\n    $(\".csa-multiselect\").each(function(){\n      $(this).multiselect('reload');\n    });\n\n    console.log(\"==-=-=-=-=-== LOAADED SETTINGS: \" + loaded_settings + \" -=-=-=-=-=-=-====\")\n\n    // Record the settings as they now stand, so a later save can tell whether the\n    // user changed anything. This has to happen here, at the end of the restore,\n    // and not once the report finishes loading: the report takes seconds on a large\n    // customer, and a filter the user chose while it was still loading would be\n    // baked into the baseline and then read as \"nothing changed\". Every request the\n    // restore makes is async: false, so the form is fully populated by this point.\n    //\n    // Only on the initial load. Choosing a saved snapshot also lands here, and that\n    // is a change - it must be compared against the baseline, not become one.\n    if(settings === undefined) {\n      document.saved_report_settings_last = this.currentSettingsSignature();\n    }\n\n    if(loaded_settings == true) {\n      // This happens when you choose a report\n      $('#submit').click()\n    }\n  }\n\n\n\n\n  /* **************************************************************************\n  function: loadSavedSettings\n  * User triggered\n  * Gathers the data from a saved report setting to load\n  ************************************************************************** */\n  loadSavedSettings(e) {\n    console.log(\"WS: loadSavedSettings\")\n    const controllerRef = this\n\n    e.preventDefault()\n    controllerRef.resetFilterOptions()\n\n    var item = e.currentTarget\n\n    var parentContainer = $(item).closest(\".report-settings-saved-filter\");\n    var save_id = parentContainer.data(\"save_id\");\n\n    if(save_id) {\n      document.saved_filter_loaded = save_id;\n\n      $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\");\n      parentContainer.addClass(\"list-group-item-success\");\n\n      $('#report_id').val(item.dataset.id)\n\n      if($('#i_can_create_snapshot_folders').val() == 'false') {\n        // Reset the default report settings to clicked report if limited admin\n        var loaded_filter = JSON.parse(item.dataset.filter)\n        loaded_filter.report_id = item.dataset.id\n        document.initial_report_settings = loaded_filter\n      }\n\n      window.leavePanelOpen = true\n      window.reportName = item.dataset.name\n      window.reportDescription = item.dataset.description\n      window.reportCreatedBy = item.dataset.createdby\n\n      controllerRef.loadSavedReportSettings(controllerRef, item.dataset.filter)\n      controllerRef.saveLastReportSettings(controllerRef)\n\n      // Sync the quick select dropdown to match the selected snapshot\n      $('#snapshot_quick_select').val(save_id).trigger('change.select2')\n    }\n  }\n\n  loadSavedSettingsQuickSelect(e) {\n    e.preventDefault\n    var item = e.currentTarget\n\n    var selectedReport = document.getElementById('saved_report_' + item.value)\n    if (!selectedReport) {\n      console.error('Could not find report with ID:', item.value)\n      return\n    }\n\n    // Find all parent collapse elements (folders) by traversing up the DOM\n    let parentFolders = []\n    let parentFolderIds = new Set()\n    let currentElement = selectedReport.closest('li')\n\n    while (currentElement) {\n      // Find the parent collapse div\n      let parentCollapse = currentElement.closest('.collapse')\n      if (parentCollapse) {\n        parentFolders.push(parentCollapse)\n        parentFolderIds.add(parentCollapse.id)\n        // Move up to find the next parent folder\n        currentElement = parentCollapse.closest('li')\n      } else {\n        break\n      }\n    }\n\n    // Close all currently open folders EXCEPT those in our target path\n    const savedSnapshotsPanel = document.getElementById('saved-snapshots')\n    if (savedSnapshotsPanel) {\n      const openFolders = savedSnapshotsPanel.querySelectorAll('.collapse.show')\n      openFolders.forEach(function(folder) {\n        // Don't close folders that are in our target path\n        if (!parentFolderIds.has(folder.id)) {\n          const bsCollapse = bootstrap.Collapse.getInstance(folder)\n          if (bsCollapse) {\n            bsCollapse.hide()\n          } else {\n            new bootstrap.Collapse(folder, { toggle: false }).hide()\n          }\n        }\n      })\n    }\n\n    // Load the new snapshot\n    document.getElementById('saved_report_' + item.value).click()\n    \n    // Wait a moment for unwanted folders to close, then ensure our path is open\n    setTimeout(function() {\n      // Expand folders from outermost to innermost\n      parentFolders.reverse().forEach(function(folder) {\n        if (!folder.classList.contains('show')) {\n          // Get or create a Bootstrap Collapse instance\n          let bsCollapse = bootstrap.Collapse.getInstance(folder)\n          if (bsCollapse) {\n            bsCollapse.show()\n          } else {\n            new bootstrap.Collapse(folder, { toggle: false }).show()\n          }\n        }\n      })\n\n      // Wait for folders to expand, then scroll\n      setTimeout(function() {\n        selectedReport.scrollIntoView({ behavior: 'smooth', block: 'center' })\n      }, 250)\n    }, 200)\n    \n  }\n\n\n\n\n\n  /* **************************************************************************\n  function: processReportSettingsForm\n  * Internal triggered\n  * Handles what the user sees on the settings panel, and send the data in the form to the Rails processing file.\n  ************************************************************************** */\n  processReportSettingsForm(prefix = '') {\n    if (window.snapshotWalkthroughActive) return\n\n    if(document.getElementById('campaign-missing')){\n      document.getElementById('campaign-missing').classList.add('d-none');\n    }\n    console.log(\"WS: processReportSettingsForm\", prefix)\n    const controllerRef = this\n\n    if($('#i_can_create_snapshot_folders').val() == 'false'){\n      $('#primary_question_option_text_list').html('')\n      $('#secondary_question_option_text_list').html('')\n      $('#tertiary_question_option_text_list').html('')\n\n      let question_levels = [\"primary\", \"secondary\", \"tertiary\"];\n      question_levels.forEach((level) => {\n        let number_of_select_sub_accounts = 0;\n        let $container = $(\"#\" + prefix + level + \"_combined_question_filter\");\n        if ($('#'+level+'_question').length && $('#'+level+'_question').val() == \"combined_snapshot_sub_accounts\") {\n          $(\"select[name='\"+level+\"_combine_account_action']\").removeClass(\"hidden\");\n        } else {\n          $(\"select[name='\"+level+\"_combine_account_action']\").addClass(\"hidden\");\n        }\n      });\n\n      if($('#primary_question').val() != '') {\n        $('#primary_question_option_text_list').removeClass('hidden')\n        $('#primary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.question + '</strong> ' + $(\"#primary_question option:selected\").text() + '</li>')\n\n        if( $(\"#primary_option_kinds\").val() != 0){\n          $('#primary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.custom_list + ':</strong> ' + $(\"#primary_option_kinds option:selected\").text() + '</li>')\n        }\n\n        if( $(\"#primary_options\").val() != '') {\n          var data = $(\"#primary_options :selected\").map(function(i, el) {\n            return $(el).text()\n          }).get();\n          $('#primary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.filter + ':</strong> ' + data.join(', ') + '</li>')\n        }\n      }\n\n      if($('#secondary_question').val() != '') {\n        $('#secondary_question_holder').removeClass('hidden')\n        $('#secondary_question_option_text_list').removeClass('hidden')\n        $('#secondary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.question + '</strong> ' + $(\"#secondary_question option:selected\").text() + '</li>')\n\n        if( $(\"#secondary_option_kinds\").val() != 0){\n          $('#secondary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.custom_list + ':</strong> ' + $(\"#secondary_option_kinds option:selected\").text() + '</li>')\n        }\n\n        if( $(\"#secondary_options\").val() != '') {\n          var data = $(\"#secondary_options :selected\").map(function(i, el) {\n            return $(el).text()\n          }).get();\n          $('#secondary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.filter + ':</strong> ' + data.join(', ') + '</li>')\n        }\n      } else {\n        $('#secondary_question_holder').addClass('hidden')\n      }\n\n      if($('#tertiary_question').val() != '' && $('#tertiary_question').val() != null) {\n\n        $('#tertiary_question_holder').removeClass('hidden')\n        $('#tertiary_question_option_text_list').removeClass('hidden')\n        $('#tertiary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.question + ':</strong> ' + $(\"#tertiary_question option:selected\").text() + '</li>')\n\n        if( $(\"#tertiary_option_kinds\").val() != 0){\n          $('#tertiary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.custom_list + ':</strong> ' + $(\"#tertiary_option_kinds option:selected\").text() + '</li>')\n        }\n\n        if( $(\"#tertiary_options\").val() != '') {\n          var data = $(\"#tertiary_options :selected\").map(function(i, el) {\n            return $(el).text()\n          }).get();\n          $('#tertiary_question_option_text_list').append('<li><strong>' + I18n.wellness_snapshot.filter + ':</strong> ' + data.join(', ') + '</li>')\n        }\n      } else {\n        $('#tertiary_question_holder').addClass('hidden')\n      }\n    }\n\n    // We are checking if the saved snapshot that is being loaded has a snapshot date range assigned. \n    // If the snapshot does not exist anymore (deleted or otherwise) choose all-time and show the notice to the user.\n    if( $(\"input[name='date_range_select']:checked\").val() == 'campaign' && ($('#campaign_select').val() == '' || !$('#campaign_select').val())) {\n      $('#choose_time_period').parent().click()\n      document.getElementById('campaign-missing').classList.remove('d-none');\n    }\n    // } else {\n    if(window.leavePanelOpen === true) {\n      window.leavePanelOpen = false\n      $('#report-settings-tab').click()\n    } else {\n      document.bsOffcanvas_snapshot.hide()\n    }\n\n\n    if(window.reportName !== undefined ) {\n      $('#report-name-holder').removeClass('hidden');\n      $('#report-name').html(\"<h4 class='m-0 p-0'>\" + window.reportName + \"</h4>\")\n      window.reportName = undefined\n    }\n    if(window.reportDescription !== undefined) {\n      $('#report-description').html('<p>' + window.reportDescription + '</p>')\n      window.reportDescription = undefined\n    }\n\n    \n    if(window.reportCreatedBy !== undefined) {\n      var name = '<a href=\"mailto:' + window.reportCreatedBy + '\">' + window.reportCreatedBy + '</a>'\n      if(window.reportCreatedBy == 'default-wbi-admin@cws.net') {\n        name = 'Well-Being Index Team'\n      }\n      $('#report-created-by').html('<p><small>' + I18n.wellness_snapshot.created_by + ': ' + name + '</small></p>')\n      window.reportCreatedBy = undefined\n    }\n\n    super.showLoader()\n\n    var formObj = $(\"#report-settings-panel-form\");\n    setTimeout(function() {\n      var formData = formObj.serializeArray();\n      formData.push({name: \"ajax_call\", value: \"report\"});\n\n      var chart_type = \"horizontal_bar\";\n\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: \"/wellness_snapshot/process_report\",\n        data: formData,\n        success: function (data) {\n          if(data.status == 200) {\n\n            $('#table-data-holder').removeClass('hidden')\n\n            if(data.chart_data == '') {\n              $('#' + prefix + 'chart-data-holder').html(\"<p class='text-center'>\" + I18n.wellness_snapshot.to_begin + \"</p>\");\n            } else if(data.chart_data.chart_data == 'no data' || data.chart_data == 'no data') { \n              $('#chart-holder').html(\"<p class='text-center'>\" + I18n.wellness_snapshot.no_data_found + \"</p>\");\n              $('#table-dates').html('')\n              $('#chart-holder').removeClass(\"hidden\")\n              $('#loader-holder').addClass(\"hidden\")\n              $(\"#table-data\").html('');\n            } else {\n              if(data.chart_data.length == 0 && (data.chart_data.sample_size_above_threshold == null || data.chart_data.sample_size_above_threshold == 0) ) {\n                $('#chart-holder').html(\"<p>\" + I18n.wellness_snapshot.not_enough_participants + \"</p>\");\n                $('#chart-holder').removeClass(\"hidden\")\n                $('#loader-holder').addClass(\"hidden\")\n                $('#table-dates').html('')\n                $(\"#table-data\").html('');\n              } else {\n                // Do chart update\n                document.wsControllerRef.replaceChartData(data, chart_type)\n              }\n            }\n\n            // Save as last settings -- Only after the inital load is complete.\n            // This must fire regardless of whether this particular filter combination\n            // returned chart data, otherwise a selection that happens to produce\n            // \"no data\" / too few participants is silently never persisted.\n            if(document.initial_report_load_complete == true) {\n              controllerRef.saveLastReportSettings(controllerRef);\n            } else {\n              document.initial_report_load_complete = true;\n              document.wsControllerRef.applyFilterNoticeState($(\"#report_settings_customized\").val() == '1');\n            }\n          }\n        }\n      });\n\n    },300);\n  }\n\n\n\n  quickSelectChooseCampaign(e) {\n    var item = e.currentTarget\n\n    if(item.value != -1) {\n      document.getElementById('campaign_select').value = item.value\n      document.querySelector('input[name=\"date_range_select\"][value=\"campaign\"]').parentElement.click()\n      super.selectCampaign()\n    } else {\n      document.querySelector('input[name=\"date_range_select\"][value=\"-1\"]').parentElement.click()\n      document.getElementById('choose_time_period').parentElement.click()\n    }\n\n    \n    this.processReportSettingsForm()\n\n  }\n\n\n\n  /* **************************************************************************\n  function: replaceChartData\n  * Internal triggered\n  * Displays the data returned from the ruby processing file to the user\n  ************************************************************************** */\n  replaceChartData(json_data, chart_type) {\n\n    console.log(\"WS: replaceChartData\")\n    $('#table-dates').html(\"\");\n\n    if(json_data.chart_data.report_table_data) {\n      $(\"#table-data\").html(json_data.chart_data.report_table_data);\n    }\n\n    if(json_data.date){\n      if(json_data.date.length == 1 && json_data.date[0][2] != 'All Time'){\n        $('#table-dates').html(json_data.date[0][2]);\n      } else if(json_data.date.length == 2) {\n        if(json_data.date[1] == null) {\n          $('#table-dates').html(json_data.date[0][2]);\n        } else {\n          $('#table-dates').html(\"Comparing <em>\" + json_data.date[0][2].substring(7) + \"</em> to <em>\" + json_data.date[1][2].substring(7) + \"</em>\");\n        }\n      } else if(json_data.date.length == 3) {\n        $('#table-dates').html(\"<strong>\" + I18n.wellness_snapshot.comparing_campaigns + \"</strong><br />\" + json_data.date[0][2].substring(9) + \" \" + I18n.advanced_reports.to + \" \" + json_data.date[1][2].substring(9) + \"\");\n      }\n    }\n\n    if( json_data.chart_data.chart_data.length > 0){\n      var data = new google.visualization.DataTable();\n      /*\n      Create Data Columns\n        We loop through the json object to create each option\n      */\n      $.each(json_data.chart_data.chart_columns, function(key, val){\n        var size = Object.keys(val).length;\n\n        if(size == 1)\n        {\n          $.each(val, function(key2,val2){\n            data.addColumn(key2, val2);\n          });\n        }\n\n        if(size == 2)\n        {\n          var arr = [];\n          $.each(val, function(key2,val2) {\n            arr.push([key2, val2] );\n          });\n\n          data.addColumn({ type: arr[0][1], role: arr[1][1] });\n        }\n\n        if(size == 3)\n        {\n          var arr = [];\n          $.each(val, function(key2,val2) {\n            arr.push([key2, val2] );\n          });\n          data.addColumn({ type: arr[0][1], role: arr[1][1], p: { 'html': true }});\n        }\n      });\n\n      /*********************************************\n      Create Options Object\n        We create the 'options' object from the json object returned from our php script(s)\n      *********************************************/\n      var options = {}\n      $.each(json_data.chart_data.chart_options, function(key, val) {\n        if($.isPlainObject(val))\n        {\n          var sub_options = {}\n          $.each(val, function(key_2, val_2){\n            sub_options[key_2] = val_2;\n          });\n          options[key] = sub_options;\n        }\n        else\n        {\n          options[key] = val;\n        }\n      });\n      \n      var arr = [];\n\n      $.each(json_data.chart_data.chart_data, function(key, val){\n\n        if(val.length > 0){ \n          // We need to remove the first item in the val array [\"First Label\", \"Full Item Label\"]\n          var list = Array.from(val)\n          if(Array.isArray(list[0])) {\n            list.shift()\n          }\n          var temp_arr = $.map(list, function(el) { return el });\n          for (var i=0;i<temp_arr.length;i++) {\n            if (temp_arr[i] === 0){\n              temp_arr[i] = null;\n            }\n          }\n          arr.push(temp_arr);\n        }\n      });\n\n      data.addRows(arr);\n\n      var explanation = $('#range-explanation-icons').html(); \n      $(\"#explanation_data\").val(explanation)\n\n      const chartHolder = document.getElementById(\"chart-holder\");\n      if (!chartHolder) { super.hideLoader(); return; }\n      var chart = new google.visualization.BarChart(chartHolder);\n\n      google.visualization.events.addListener(chart, 'ready', function() {\n        // Download report\n        $(\"#image_data\").val(chart.getImageURI());\n        $('#export_chart_total_text').val(json_data.chart_data.report_table_data);\n      });\n\n      super.hideLoader()\n\n      chart.draw(data, options);\n\n      if ($(\"#combined_snapshot_modal_modal_for_settings\").length && $(\"#combined_snapshot_modal_modal_for_settings\").hasClass(\"show-on-settings-open\")) {\n        if (document.getElementById('combined_snapshot_modal_modal_for_settings')) {\n          setTimeout(function () {\n            $(\"#configuration-panel button.configure-report-button\").click();\n          }, 300);\n        }\n      } else if ($(\"#combined_snapshot_show_settings_panel_on_load\").length) {\n        setTimeout(function () {\n          $(\"#configuration-panel button.configure-report-button\").click();\n        }, 300);\n      }\n    } else {\n      super.hideLoader()\n      $('#chart-holder').html(\"<p class='text-center'>\" + I18n.wellness_snapshot.not_enough_assessments + \"</p>\")\n      $('#chart-holder').removeClass('hidden')\n    }\n\n    // If the selected question's list grouping is not set to 0 AND selected question is present then open the panel for it.\n    if( $('#primary_option_kinds').val() != 0 && $('#primary_question').val() != ''){\n      $('#customize_primary_option_group').parent().parent().children().first().click()\n      $('#primary_question_option_groups').removeClass('hidden')\n    }\n\n    if( $('#secondary_option_kinds').val() != 0 && $('#secondary_question').val() != '' && $('#secondary_question').val() != null){\n      $('#customize_secondary_option_group').parent().parent().children().first().click()\n      $('#secondary_question_option_groups').removeClass('hidden')\n    }\n\n    if( $('#tertiary_option_kinds').val() != 0 && $('#tertiary_question').val() != '' && $('#tertiary_question').val() != null){\n      $('#customize_tertiary_option_group').parent().parent().children().first().click()\n      $('#tertiary_question_option_groups').removeClass('hidden')\n    }\n\n    setTimeout(function() {\n      initTooltips();\n    });\n  }\n\n\n\n  /* **************************************************************************\n  function: resetFilterOptions\n  * Internal triggered\n  * Handles resetting of the form to \"factory defaults\"\n  ************************************************************************** */\n  resetFilterOptions() {\n    console.log(\"WS: resetFilterOptions\")\n    var date = new Date();\n\n    if($(\"#primary_question\").length) { $('#primary_question').prop('selectedIndex', 0).trigger(\"change\"); }\n    if($(\"#secondary_question\").length) { $('#secondary_question').html(''); }\n    if($(\"#tertiary_question\").length) { $('#tertiary_question').html(''); }\n\n    super.resetQuestionPrimary();\n    super.resetQuestionSecondary();\n    super.resetQuestionTertiary();\n\n    // Reset Other Buttons\n    if($('#show_group_total').length) { $('#show_group_total').closest('.btn').click(); }\n    if($('#show_organization_total').length) { $('#show_organization_total').closest('.btn').click(); }\n    if($('#show_national_total').length) { $('#show_national_total').closest('.btn').click(); }\n    if($('#sort_distress_by').length) { $('#sort_distress_by').closest('.btn').click(); }\n    if($('#display_responses_as').length) { $('#display_responses_as').closest('.btn').click(); }\n    if($('#spectrum-date-compare').length) { $('#spectrum-date-compare').closest(\".btn\").click(); }\n    if($('#choose_time_period').length) { $('#choose_time_period').closest('.btn').click(); }\n    if($('#campaign_select').length) { $('#campaign_select').val(''); }\n    if($('#campaign_select_comparison').length) { $('#campaign_select_comparison').val('none'); }\n    if($('#end_date').length) { $('#end_date').val( date.toISOString().split('T')[0] ); }\n    if($('#start_date').length) { $('#start_date').val( $('#default_start_date').val() ); }\n    if($('#show_national_overall').length){ $('#show_national_overall').closest('.btn').click(); }\n    if($('#show_national_primary').length){ $('#show_national_primary').closest('.btn').click(); }\n    if($('#show_national_secondary').length){ $('#show_national_secondary').closest('.btn').click(); }\n    if($('#show_national_tertiary').length){ $('#show_national_tertiary').closest('.btn').click(); }\n    if($('#customize_primary_option_group').length){ $('#customize_primary_option_group').closest('.btn').click(); console.log(\"customize primary option group\") }\n    if($('#customize_secondary_option_group').length){ $('#customize_secondary_option_group').closest('.btn').click(); console.log(\"customize secondary option group\") }\n    if($('#customize_tertiary_option_group').length){ $('#customize_tertiary_option_group').closest('.btn').click(); console.log(\"customize tertiary option group\") }\n    \n    if ($(\"#sub-account-breakdown\").length) {\n      let default_breakdown_val = $(\"#sub-account-breakdown\").data(\"default-value\");\n      $(\"input[name=show_sub_account_breakdown][value=\"+default_breakdown_val+\"]\").closest('.btn').click();\n    }\n\n    // Reset hidden values from limited by report users\n    $('#report_id').val('')\n    if(document.saved_report_settings_default !== undefined) {\n      var saved_data = JSON.parse(document.saved_report_settings_default)\n      $('#report_id').val(saved_data.report_id)\n\n      document.saved_report_settings_last = document.saved_report_settings_default\n    }\n    this.showNationalComparisons();\n  }\n\n  /* **************************************************************************\n  function: resetQuestionPrimary\n  * Internal triggered\n  * Resets the primary question\n  ************************************************************************** */\n  resetQuestionPrimary() {\n    console.log(\"WS: resetQuestionPrimary\")\n    $('#primary_question_customize_options').attr('href', '#');\n    if($('#dashboard-filter-options').length) { $('#dashboard-filter-options').addClass(\"hidden\"); }\n    if($('#primary_question_options_filter').length) { $('#primary_question_options_filter').addClass(\"hidden\"); }\n    if($('#customize_primary_option_group').length) { \n      $('#customize_primary_option_group').closest('.btn').trigger('click'); \n      $('#customize_primary_option_group').parent().parent().children().removeClass('active')\n      $('#customize_primary_option_group').parent().addClass('active')\n    }\n    if($('#filter_by_primary_option').length) { $('#filter_by_primary_option').closest('.btn').click(); }\n    if($('#primary_options').length) { $('#primary_options').html(''); }\n    if($('#primary_option_kinds').length) { $('#primary_option_kinds').html(''); }\n  }\n\n\n  /* **************************************************************************\n  function: resetSettings\n  * User triggered\n  * User action to call the reset scripts, reloads default data, saves resetted settings as current settings\n  ************************************************************************** */\n  resetSettings(e) {\n    console.log(\"WS: resetSettings\")\n\n    document.resetFilter = true\n    this.clearHotspotSettings()\n    this.clearSnapshotLabel()\n\n    const controllerRef = this\n    e.preventDefault()\n    $('#dashboard-filter-options').addClass('hidden');\n    $('#saved_report_settings_last').remove();\n    $('#chart-sort-by').addClass('hidden');\n    $('#report-settings-tab').click()\n  \n    controllerRef.resetFilterOptions()\n    if(document.initial_report_settings){\n      document.saved_filter_loaded = undefined;\n      $(\".report-settings-saved-filter.list-group-item-success\").removeClass(\"list-group-item-success\");\n      controllerRef.loadSavedReportSettings(controllerRef, JSON.stringify(document.initial_report_settings));\n    }\n    \n    controllerRef.saveLastReportSettings(controllerRef, \"reset_settings\");\n  }\n\n\n\n\n  /* **************************************************************************\n  function: getActiveTimePeriodFormFields\n  * Internal triggered\n  * Returns the report settings form's fields, minus whichever \"Choose Time\n  * Period\" panel (Campaign vs. Date Range) is NOT currently selected. Only\n  * used for the \"_last_\" settings save/restore - switching between panels\n  * never clears the other panel's fields (e.g. campaign_select keeps its\n  * value after switching to Date Range), so without this exclusion the\n  * stale field rides along in the saved settings and, on return, wins the\n  * restore over the panel the user actually had selected.\n  ************************************************************************** */\n  getActiveTimePeriodFormFields($form) {\n    var activeTimePeriod = $form.find(\"input[name='date_range_select']:checked\").val();\n    var excludeNames = [];\n\n    if (activeTimePeriod != 'campaign') {\n      excludeNames = excludeNames.concat(['campaign_select', 'campaign_select_comparison']);\n    }\n    if (activeTimePeriod != '0') {\n      excludeNames = excludeNames.concat(['start_date', 'end_date', 'compare', 'compare_start_date', 'compare_end_date']);\n    }\n\n    if (excludeNames.length == 0) {\n      return $form.find(':input');\n    }\n\n    var excludeSelector = excludeNames.map(function(name) { return \"[name='\" + name + \"']\"; }).join(', ');\n    return $form.find(':input').not(excludeSelector);\n  }\n\n  /* **************************************************************************\n  function: saveLastReportSettings\n  * Internal triggered\n  * Saves the current settings on the settings form to the \"_last_\" settings for the user\n  ************************************************************************** */\n  saveLastReportSettings(controllerRef, location = '') {\n    console.log(\"WC: saveLastReportSettings\")\n    var $activeTimePeriodFields = controllerRef.getActiveTimePeriodFormFields($(\"#report-settings-panel-form\"));\n    var settings_last_data = $activeTimePeriodFields.serializeArray();\n\n    // \"Clear Filter\" is the one save that returns the snapshot to its defaults, and\n    // so is the report re-run it triggers straight afterwards. Every other save\n    // happens because the user changed something.\n    var isResetSave = (location == 'reset_settings');\n    var isResetRerunSave = (!isResetSave && document.resetFilter == true);\n    var serializedSettings = controllerRef.getJSONLoadSettingsString($activeTimePeriodFields);\n    var changedSinceLastLoad = (serializedSettings != document.saved_report_settings_last);\n\n    // Once a snapshot is filtered it stays filtered until Clear Filter, so re-running\n    // an already-filtered report without touching anything does not unfilter it.\n    var customized = (!isResetSave && !isResetRerunSave &&\n                      (changedSinceLastLoad || document.report_settings_customized === true));\n\n    if(isResetRerunSave) {\n      // The reset is finished once its re-run has been saved. Clear the flag now\n      // rather than in the callback, so a failed request cannot leave every later\n      // change looking like part of the reset.\n      document.resetFilter = null;\n    }\n\n    if($('#i_can_create_snapshot_folders').val() == 'false'){\n      var report_id = $('#report_id').val()\n    } else {\n      report_id = null\n    }\n\n    var report_type = \"wellness_snapshot\"\n    if ($('#combined_snapshot_report_input').length) {\n      report_type = \"combined_wellness_snapshot\"\n    }\n\n    var formData = {settings_data: settings_last_data, save_for: \"last\", report_id: report_id, report_type: report_type, customized: customized };\n\n    $.post(\"/reports/save_settings\", formData, function(returnDataStr) {\n      document.saved_report_settings_last = serializedSettings;\n      document.wsControllerRef.applyFilterNoticeState(customized);\n\n      if(isResetSave) {\n        controllerRef.processReportSettingsForm();\n      }\n    });\n  }\n\n  /* **************************************************************************\n  function: selectAll\n  * User triggered\n  * Selects all options for the question\n  ************************************************************************** */\n  selectAll(event) {\n    console.log(\"WS: selectAll\")\n    event.preventDefault()\n    var item = event.currentTarget\n\n    $(\"#\"+ item.dataset.field + \" > option\").prop(\"selected\",\"selected\");\n    $(\"#\"+ item.dataset.field ).trigger(\"change\");\n  }\n\n\n  /* **************************************************************************\n  function: selectNextSavedSetting\n  * User triggered\n  * Selects and loads the next saved snapshot\n  ************************************************************************** */\n\n  selectNextSavedSnapshot(e) {\n    e.preventDefault()\n\n    var selectElement = document.getElementById('snapshot_quick_select')\n\n    // Get all option elements, including those nested in optgroups\n    var allOptions = selectElement.querySelectorAll('option')\n\n    // Find the index of the currently selected option\n    var currentIndex = -1\n    for (var i = 0; i < allOptions.length; i++) {\n      if (allOptions[i].selected) {\n        currentIndex = i\n        break\n      }\n    }\n\n    // Calculate the next index (wrap around to 1 if at the end)\n    // Skip disabled options (folder headers)\n    var nextIndex = currentIndex + 1\n    if (nextIndex >= allOptions.length) {\n      nextIndex = 1\n    }\n\n    // Keep searching for next enabled option\n    var searchCount = 0\n    while (allOptions[nextIndex].disabled && searchCount < allOptions.length) {\n      nextIndex++\n      if (nextIndex >= allOptions.length) {\n        nextIndex = 1\n      }\n      searchCount++\n    }\n\n    // Get the next option element (if not disabled)\n    var nextOption = allOptions[nextIndex]\n    if (nextOption && !nextOption.disabled) {\n      // Unselect all options first\n      for (var i = 0; i < allOptions.length; i++) {\n        allOptions[i].selected = false\n      }\n\n      // Select the next option\n      nextOption.selected = true\n\n      document.getElementById('choose_time_period').parentElement.click()\n\n      // Dispatch native change event for Stimulus\n      selectElement.dispatchEvent(new Event('change', { bubbles: true }))\n    }\n  }\n\n\n  /* **************************************************************************\n  function: selectPreviousSavedSetting\n  * User triggered\n  * Selects and loads the previous saved snapshot\n  ************************************************************************** */\n  selectPreviousSavedSnapshot(e) {\n    e.preventDefault()\n\n    var selectElement = document.getElementById('snapshot_quick_select')\n\n    // Get all option elements, including those nested in optgroups\n    var allOptions = selectElement.querySelectorAll('option')\n\n    // Find the index of the currently selected option\n    var currentIndex = -1\n    for (var i = 0; i < allOptions.length; i++) {\n      if (allOptions[i].selected) {\n        currentIndex = i\n        break\n      }\n    }\n\n    // Calculate the previous index (skip index 0, wrap around to end if at index 1)\n    // Skip disabled options (folder headers)\n    var previousIndex = currentIndex - 1\n    if (previousIndex <= 0) {\n      previousIndex = allOptions.length - 1\n    }\n\n    // Keep searching for previous enabled option\n    var searchCount = 0\n    while (allOptions[previousIndex].disabled && searchCount < allOptions.length) {\n      previousIndex--\n      if (previousIndex <= 0) {\n        previousIndex = allOptions.length - 1\n      }\n      searchCount++\n    }\n\n    // Get the previous option element (if not disabled)\n    var previousOption = allOptions[previousIndex]\n    if (previousOption && !previousOption.disabled) {\n      // Unselect all options first\n      for (var i = 0; i < allOptions.length; i++) {\n        allOptions[i].selected = false\n      }\n\n      // Select the previous option\n      previousOption.selected = true\n\n      document.getElementById('choose_time_period').parentElement.click()\n\n      // Dispatch native change event for Stimulus\n      selectElement.dispatchEvent(new Event('change', { bubbles: true }))\n    }\n  }\n\n\n\n  /* **************************************************************************\n  function: setInitialSettings\n  * Internal triggered\n  * Loads initial settings for the snapshot report. Settings get updated and reset based on user interaction\n  ************************************************************************** */\n  setInitialSettings() {\n\n    console.log(\"WS: setInitialSettings\")\n\n    if($('#i_can_create_snapshot_folders').val() == 'true') {\n      var initial_settings = {\n        \"wbi_version\":$('#wbi_version').val(),\n        \"country\":$('#country').val(),\n        \"report_id\":\"\",\n        \"report_type\":\"wellness_snapshot\",\n        \"display_data\":\"spectrum\",\n        \"chart_type\":\"bar\",\n        \"compare\":\"none\",\n        \"compare_start_date\":$(\"#default_start_date\").val(),\n        \"compare_end_date\":$(\"#default_end_date\").val(),\n        \"primary_question\":$('#default_primary_question').val(),\n        \"filter_by_primary_option\":\"0\",\n        \"customize_primary_option_group\":\"0\",\n        \"customize_secondary_option_group\":\"0\",\n        \"filter_by_secondary_option\":\"0\",\n        \"display_response_as\":\"percent\",\n        \"sort_distress_by\":\"distressed\",\n        \"date_range_select\":\"-1\",\n        \"start_date\":$(\"#default_start_date\").val(),\n        \"end_date\":$(\"#default_end_date\").val(),\n        \"assess_filter\":\"last_in_period\",\n        \"show_group_total\":\"0\",\n        \"show_organization_total\":\"0\",\n        \"show_national_total\":\"0\",\n        \"show_national_overall\":\"0\",\n        \"show_national_primary\":\"1\",\n        \"show_national_secondary\":\"1\"\n      }\n\n      if ($('#combined_snapshot_report_input').length) {\n        initial_settings[\"report_type\"] = \"combined_wellness_snapshot\";\n        initial_settings[\"combined_snapshot_report\"] = \"1\";\n        initial_settings[\"primary_option_kinds\"] = \"0\";\n        // Loop through each question level\n        let question_levels = [\"primary\", \"secondary\", \"tertiary\"];\n        question_levels.forEach((level) => {\n          initial_settings[level+\"_combine_account_action\"] = \"separate\";\n        });\n        if(!$('#default_primary_question').val()) {\n          initial_settings[\"primary_question\"] = \"combined_snapshot_sub_accounts\";\n        }\n        if($(\"#default_combined_sub_account_id\").length && parseInt($(\"#default_combined_sub_account_id\").val()) > 0) {\n          initial_settings[\"primary_option_kinds\"] = $(\"#default_combined_sub_account_id\").val();\n          initial_settings[\"customize_primary_option_group\"] = \"1\";\n        }\n        initial_settings[\"secondary_question\"] = \"\"\n        initial_settings[\"show_organization_total\"] = \"1\"\n        if ($(\"#sub-account-breakdown\").length) {\n          initial_settings[\"show_sub_account_breakdown\"] = \"\"+$(\"#sub-account-breakdown\").data(\"default-value\");\n        }\n      }\n\n      if($('#default_primary_question').val() != '') {\n        initial_settings[\"show_organization_total\"] = \"1\"\n        initial_settings[\"primary_option_kinds\"] = \"0\"\n        initial_settings[\"secondary_question\"] = \"\"\n      }\n\n      if($(\"#campaign_select\").length) {\n        initial_settings = Object.assign({campaign_select:$(\"#campaign_select\").val()}, initial_settings)\n      }\n\n      if($(\"#campaign_select_comparison\").length) {\n        initial_settings = Object.assign({campaign_select_comparison:$(\"#campaign_select_comparison\").val()}, initial_settings)\n      }\n\n      if($('#show_national_tertiary').length) {\n        initial_settings = Object.assign({show_national_tertiary:\"1\"}, initial_settings)\n        initial_settings = Object.assign({filter_by_tertiary_option:\"0\"}, initial_settings)\n      }\n\n      if($(\"#tertiary_question_holder\").length) {\n        initial_settings = Object.assign({customize_tertiary_option_group:\"0\"}, initial_settings)\n      }\n    } else {\n\n      // LIMITED ACCESS USERS\n      if( $('#saved_report_settings_last').length && $('#default_loaded_report').length) {\n        var saved_report_settings_last = JSON.parse($('#saved_report_settings_last').val())\n        var initial_settings = JSON.parse($('#default_loaded_report').val())\n        initial_settings.report_id = saved_report_settings_last['report_id']\n      }\n    }\n\n    document.initial_report_settings = initial_settings\n  }\n\n\n\n  /* **************************************************************************\n  function: showCustomizeOptionGroup\n  * User triggered\n  * Shows or hides the \"Customize Question # List Grouping\" options\n  ************************************************************************** */\n  showCustomizeOptionGroup(event) {\n    console.log(\"WS: showCustomizeOptionGroup\")\n    const controllerRef = this\n    this.toggleActiveClass(event);\n\n    var item = event.currentTarget.dataset.item;\n    var field = event.currentTarget.dataset.field;\n\n    if(event.currentTarget.querySelector('input').value == 1) {\n      $('#' + item).removeClass(\"hidden\");\n    } else {\n      // Hide and reset the option data\n      $('#' + item).addClass('hidden');\n      $('#' + field).val(0).trigger('change');\n\n      var question_level = item.split(\"_\")[0]\n      if( $(\"#\" + question_level + \"_question\").val() !== null){\n        var question_id = $(\"#\" + question_level + \"_question\").val().split('-')[0]\n        controllerRef.changeQuestionOptionKinds(undefined, question_id, 0, question_level)\n      }\n\n      this.setReportPanelSize();\n    }\n  }\n\n  /* **************************************************************************\n  function: showLoader\n  * Internal triggered\n  * Clears the report visualization data and displays a loading ring\n  ************************************************************************** */\n  showLoader() {\n    console.log(\"WS: showLoader\")\n    $('#chart-loader-holder').html('<div class=\"chart-loader\"></div>');\n    $('#chart-data-holder').html('<div id=\"ajax_chart_div\"></div>');\n    $('#table-data').html(\"\");\n    $('#table-dates').html(\"\");\n  }\n\n  /* **************************************************************************\n  function: showNationalComparisons\n  * Internal triggered\n  * Determines if we should show the national comparison by question options at the bottom of the settings tab\n  ************************************************************************** */\n  showNationalComparisons(elem) {\n    console.log(\"WC: showNationalComparisons\")\n    var checked_val = 0;\n\n    if(elem) {\n      checked_val = $('#' + elem).children().val();\n    } else {\n      checked_val = $(\"input[name=show_national_total]:checked\").val();\n    }\n\n    $('#national-overall').addClass(\"hidden\");\n    $('#national-primary').addClass(\"hidden\");\n    $('#national-secondary').addClass(\"hidden\");\n    if($('#national-tertiary').length) {\n      $('#national-tertiary').addClass(\"hidden\");\n    }\n\n    if(checked_val != 1) {\n      $('#national-comparison').addClass(\"hidden\");\n    }\n\n    if(checked_val == 1 && $('#primary_question').val() != ''){\n      $('#national-comparison').removeClass(\"hidden\");\n      if ($('#combined_snapshot_report_input').length) {\n        $('#national-primary').addClass(\"pt-2\");\n      } else {\n        $('#national-overall').removeClass(\"hidden\");\n      }\n      $('#national-primary').removeClass(\"hidden\");\n    }\n\n    if(checked_val == 1 && ( $('#secondary_question').val() != '' && $('#secondary_question').val() != null )){\n      $('#national-secondary').removeClass(\"hidden\");\n    }\n\n    if($('#tertiary_question').length) {\n      if(checked_val == 1 && ($('#tertiary_question').val() != '' && $('#tertiary_question').val() != null )){\n        $('#national-tertiary').removeClass(\"hidden\");\n      }\n    }\n  }\n\n\n\n\n  /* **************************************************************************\n  function: showNationalTotal\n  * User triggered\n  * Determines if we should show the \"Show National Comparison\" data\n  ************************************************************************** */\n  showNationalTotal(event) {\n    console.log(\"WS: showNationalTotal\")\n    super.toggleActiveClass(event);\n    this.showNationalComparisons(event.currentTarget.id);\n  }\n\n\n  /* **************************************************************************\n  function: submitForm\n  * User and Internal triggered\n  * Handles when the user submits the settings form.\n  ************************************************************************** */\n  submitForm(e) {\n    console.log(\"WS: submitForm\")\n    e.preventDefault()\n\n    if($('#i_can_create_snapshot_folders').val() == 'true') {\n      this.clearSnapshotLabel()\n    }\n\n    this.processReportSettingsForm()\n  }\n\n  /* **************************************************************************\n  function: toggleCombinedSnapshotSubAccountsCell\n  * User triggered\n  * Handles when the user toggles toe expand/collapse the sub-account table cells\n  ************************************************************************** */\n  toggleCombinedSnapshotSubAccountsCell(e) {\n    e.preventDefault();\n    if (e.currentTarget.classList && e.currentTarget.classList.contains(\"expand-link\")) {\n      $(\".csa-list-collapsed\").removeClass(\"csa-list-collapsed\").addClass(\"csa-list-expanded\");\n    } else {\n      $(\".csa-list-expanded\").removeClass(\"csa-list-expanded\").addClass(\"csa-list-collapsed\");\n    }\n  }\n\n  /* **************************************************************************\n  function: startWalkthrough\n  * User triggered (top \"Walkthrough\" button)\n  * General walkthrough of the snapshot page sections.\n  ************************************************************************** */\n  startWalkthrough() {\n    if (typeof introJs === 'undefined') return;\n\n    introJs().setOptions({\n      steps: [\n        {\n          element: document.querySelector('.configure-report-button'),\n          intro: '<strong>Configure Report</strong><br>Open this panel to adjust your report settings, manage Saved Snapshots, and access the Snapshot Builder.',\n          position: 'left'\n        },\n        {\n          element: document.querySelector('#filter-hsbs'),\n          intro: '<strong>Hot Spots & Bright Spots</strong><br>Toggle Hot Spots and Bright Spots on or off to highlight which groups need the most attention.',\n          position: 'top'\n        },\n        {\n          element: document.querySelector('#quick-select-settings-table'),\n          intro: '<strong>Quick Settings Bar</strong><br>Use this bar to switch between Saved Snapshots, change the time period, and filter by Hot Spots & Bright Spots without opening the settings panel.',\n          position: 'bottom'\n        }\n      ],\n      showProgress: true,\n      showBullets: false,\n      exitOnOverlayClick: true,\n      nextLabel: 'Next &rarr;',\n      prevLabel: '&larr; Back',\n      doneLabel: 'Done'\n    }).start();\n  }\n\n  /* **************************************************************************\n  function: startFeaturesWalkthrough\n  * User triggered (modal \"Start Walkthrough\" button on the new features popup)\n  * Walks through the 3 specific new features introduced in the 2026 update.\n  *\n  * Segment 1 \u2014 highlights Configure Report button; user clicks \"Open Panel\"\n  * After panel opens, automatically switches to Saved Snapshots tab (no user action)\n  * Segment 2 \u2014 highlights snapshot builder callout, then Hot Spots, then Quick Settings\n  ************************************************************************** */\n  startFeaturesWalkthrough() {\n    if (typeof introJs === 'undefined') return;\n\n    const offcanvasEl = document.getElementById('configureReportOptions')\n    const savedSnapshotsTab = document.querySelector('#saved-snapshots-tab')\n\n    const disableBackdrop = () => {\n      const bd = document.querySelector('.offcanvas-backdrop')\n      if (bd) bd.style.pointerEvents = 'none'\n    }\n\n    const enableBackdrop = () => {\n      const bd = document.querySelector('.offcanvas-backdrop')\n      if (bd) bd.style.pointerEvents = ''\n    }\n\n    window.snapshotWalkthroughActive = true\n\n    const closePanel = () => {\n      window.snapshotWalkthroughActive = false\n      enableBackdrop()\n      document.bsOffcanvas_snapshot.hide()\n    }\n\n    const abortAll = () => {\n      window.snapshotWalkthroughActive = false\n      enableBackdrop()\n      document.bsOffcanvas_snapshot.hide()\n    }\n\n    // ------------------------------------------------------------------\n    // Segment 4: Main page \u2014 Hot Spots \u2192 Quick Settings\n    // ------------------------------------------------------------------\n    const startMainPageTour = () => {\n      const tour = introJs()\n      tour.setOptions({\n        steps: [\n          {\n            element: document.querySelector('#filter-hsbs'),\n            intro: '<strong>Hot Spots & Bright Spots</strong><br>Automatically designate groups as Hot Spots <em>(groups that need attention)</em> or Bright Spots <em>(top performers)</em>. Click the pencil icon to set your thresholds, then toggle them on here.',\n            position: 'top'\n          },\n          {\n            element: document.querySelector('#quick-select-settings-table'),\n            intro: '<strong>Quick Toggle Settings</strong><br>Quickly switch between Saved Snapshots, choose a time period, and filter by Hot Spots & Bright Spots \u2014 all from this bar without opening the settings panel.',\n            position: 'bottom'\n          }\n        ],\n        showProgress: false,\n        showBullets: false,\n        exitOnOverlayClick: true,\n        nextLabel: 'Next &rarr;',\n        prevLabel: '&larr; Back',\n        doneLabel: 'Done'\n      })\n      tour.oncomplete(() => { window.snapshotWalkthroughActive = false })\n      tour.onexit(() => { window.snapshotWalkthroughActive = false })\n      tour.start()\n    }\n\n    // ------------------------------------------------------------------\n    // Segment 3: Walk through sections inside the Snapshot Builder modal.\n    // Polls until #snapshot_builder is visible (loader has finished).\n    // ------------------------------------------------------------------\n    const startSnapshotBuilderTour = () => {\n      const maxWait = 12000\n      const checkEvery = 300\n      let elapsed = 0\n\n      const poll = setInterval(() => {\n        const sb = document.querySelector('#snapshot_builder')\n        elapsed += checkEvery\n\n        if (sb && !sb.classList.contains('d-none')) {\n          clearInterval(poll)\n          setTimeout(() => {\n            const tour = introJs()\n            tour.setOptions({\n              steps: [\n                {\n                  element: document.querySelector('#snapshot-builder-timeframe'),\n                  intro: '<strong>Time Frame</strong><br>Choose the date range or campaign for the snapshots you\\'re about to generate.',\n                  position: 'right'\n                },\n                {\n                  element: document.querySelector('#snapshot-builder-questions'),\n                  intro: '<strong>Question Groups</strong><br>Select Question 1 and Question 2 (required). Adding Question 3 creates a deeper breakdown. Each combination becomes its own Saved Snapshot.',\n                  position: 'right'\n                },\n                {\n                  element: document.querySelector('#snapshot-builder-preview'),\n                  intro: '<strong>Snapshot Preview</strong><br>As you select questions, this panel shows a preview of every Saved Snapshot that will be created. Review the list before saving.',\n                  position: 'left'\n                }\n              ],\n              showProgress: true,\n              showBullets: false,\n              exitOnOverlayClick: true,\n              nextLabel: 'Next &rarr;',\n              prevLabel: '&larr; Back',\n              doneLabel: 'Continue &rarr;'\n            })\n            tour.oncomplete(() => {\n              // Close the snapshot builder modal, then close the panel, then tour main page\n              const modal = bootstrap.Modal.getInstance(document.getElementById('system_modal_popup'))\n              if (modal) modal.hide()\n              closePanel()\n              setTimeout(startMainPageTour, 500)\n            })\n            tour.onexit(abortAll)\n            tour.start()\n          }, 300)\n        } else if (elapsed >= maxWait) {\n          clearInterval(poll)\n          abortAll()\n        }\n      }, checkEvery)\n    }\n\n    // ------------------------------------------------------------------\n    // Segment 2: Pause on the callout button \u2014 user opens the Snapshot\n    // Builder themselves, then clicks \"Continue \u2192\" to proceed.\n    // ------------------------------------------------------------------\n    const startSegment2 = () => {\n      const tour = introJs()\n      tour.setOptions({\n        steps: [{\n          element: document.querySelector('#snapshot-builder-callout') || document.querySelector('#saved-snapshots'),\n          intro: '<strong>Snapshot Builder</strong><br>Click <strong>Continue \u2192</strong> to open the Snapshot Builder and walk through each section.',\n          position: 'left'\n        }],\n        showProgress: false,\n        showBullets: false,\n        exitOnOverlayClick: false,\n        doneLabel: 'Continue &rarr;'\n      })\n      tour.oncomplete(() => {\n        const calloutBtn = document.querySelector('#snapshot-builder-callout a, #snapshot-builder-callout button')\n        if (calloutBtn) calloutBtn.click()\n        startSnapshotBuilderTour()\n      })\n      tour.onexit(abortAll)\n      tour.start()\n    }\n\n    // ------------------------------------------------------------------\n    // After panel opens: automatically switch to Saved Snapshots tab,\n    // wait for content, then start segment 2.\n    // ------------------------------------------------------------------\n    const openTabAndContinue = () => {\n      disableBackdrop()\n      if (savedSnapshotsTab) savedSnapshotsTab.click()\n      setTimeout(startSegment2, 800)\n    }\n\n    // ------------------------------------------------------------------\n    // Segment 1: Highlight Configure Report button; user clicks to open panel\n    // ------------------------------------------------------------------\n    const startSegment1 = () => {\n      const tour = introJs()\n      tour.setOptions({\n        steps: [{\n          element: document.querySelector('.configure-report-button'),\n          intro: '<strong>Configure Report</strong><br>The Snapshot Builder lives inside the settings panel. Let\\'s open it.',\n          position: 'left'\n        }],\n        showProgress: false,\n        showBullets: false,\n        exitOnOverlayClick: true,\n        doneLabel: 'Open Panel &rarr;'\n      })\n\n      tour.oncomplete(() => {\n        setTimeout(() => {\n          if (offcanvasEl.classList.contains('show')) {\n            openTabAndContinue()\n          } else {\n            offcanvasEl.addEventListener('shown.bs.offcanvas', function onShown() {\n              offcanvasEl.removeEventListener('shown.bs.offcanvas', onShown)\n              openTabAndContinue()\n            })\n            document.querySelector('.configure-report-button').click()\n          }\n        }, 150)\n      })\n      tour.onexit(abortAll)\n      tour.start()\n    }\n\n    startSegment1()\n  }\n\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wizard-autosave\"\n//\n// Handles debounced autosave for campaign wizard forms. On input/change events,\n// waits 1 second then POSTs form data as JSON. Shows saving/saved/error indicators.\n// Also syncs hidden field values and manages Bootstrap collapse visibility events.\n//\n// Usage:\n// - app/views/campaigns/wizard/campaign_settings.html.erb\n// - app/views/campaigns/wizard/invited_groups.html.erb\nexport default class extends Controller {\n  static targets = [\"form\", \"indicator\", \"syncSource\", \"syncTarget\"]\n\n  static values = {\n    url: String,\n    method: { type: String, default: \"PATCH\" }\n  }\n\n  connect() {\n    this.saveTimeout = null\n    this.isSaving = false\n    this.syncHiddenFields()\n\n    // Listen for Bootstrap collapse events to toggle navigation visibility\n    const savedGroupsSection = document.getElementById(\"saved-comparative-groups\")\n    const noGroupsNav = document.getElementById(\"no-groups-navigation\")\n\n    if (savedGroupsSection && noGroupsNav) {\n      savedGroupsSection.addEventListener(\"shown.bs.collapse\", () => {\n        noGroupsNav.classList.add(\"d-none\")\n      })\n      savedGroupsSection.addEventListener(\"hidden.bs.collapse\", () => {\n        noGroupsNav.classList.remove(\"d-none\")\n      })\n    }\n  }\n\n  disconnect() {\n    if (this.saveTimeout) clearTimeout(this.saveTimeout)\n  }\n\n  // Triggered by input/change events on form fields\n  scheduleAutosave() {\n    this.syncHiddenFields()\n    if (this.saveTimeout) clearTimeout(this.saveTimeout)\n    this.saveTimeout = setTimeout(() => this.autosave(), 1000)\n  }\n\n  // Sync source input value to all hidden sync targets\n  syncHiddenFields() {\n    if (this.hasSyncSourceTarget && this.hasSyncTargetTarget) {\n      const value = this.syncSourceTarget.value\n      this.syncTargetTargets.forEach(target => target.value = value)\n    }\n  }\n\n  // Called before form submission to ensure hidden fields are in sync\n  syncBeforeSubmit() {\n    this.syncHiddenFields()\n  }\n\n  autosave() {\n    if (this.isSaving) return\n\n    this.isSaving = true\n    this.showIndicator('<em class=\"fa fa-spinner fa-spin me-1\"></em> Saving...', 'saving')\n\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute(\"content\")\n    let body\n\n    if (this.hasFormTarget) {\n      body = new FormData(this.formTarget)\n    } else if (this.hasSyncSourceTarget) {\n      // For invited_groups: only send the invitee_total field\n      body = new FormData()\n      body.append(\"campaign[invitee_total]\", this.syncSourceTarget.value)\n    }\n\n    fetch(this.urlValue, {\n      method: this.methodValue,\n      headers: {\n        \"X-CSRF-Token\": csrfToken,\n        \"Accept\": \"application/json\"\n      },\n      body: body\n    })\n    .then(response => {\n      if (!response.ok) {\n        throw new Error(`Server returned ${response.status}`)\n      }\n      return response.json()\n    })\n    .then(data => {\n      this.isSaving = false\n      if (data.success) {\n        this.showIndicator('<em class=\"fa fa-check me-1\"></em> Saved', 'success')\n        this.hideIndicator()\n      } else {\n        this.showIndicator('<em class=\"fa fa-exclamation-triangle me-1\"></em> Error saving', 'error')\n      }\n    })\n    .catch(() => {\n      this.isSaving = false\n      this.showIndicator('<em class=\"fa fa-exclamation-triangle me-1\"></em> Could not save', 'error')\n    })\n  }\n\n  showIndicator(message, type) {\n    const className = type === 'success' ? 'text-success' : type === 'error' ? 'text-danger' : 'text-muted'\n    this.indicatorTargets.forEach(indicator => {\n      indicator.className = `me-3 ${className}`\n      indicator.innerHTML = message\n      indicator.classList.remove(\"d-none\")\n    })\n  }\n\n  hideIndicator() {\n    setTimeout(() => {\n      this.indicatorTargets.forEach(indicator => indicator.classList.add(\"d-none\"))\n    }, 2000)\n  }\n}\n", "import ValidateFormController from \"./validate_form_controller\"\n\n// Connects to data-controller=\"wizard-feedback-options\"\n//\n// Handles option CRUD for feedback question forms (new and edit).\n// Extends ValidateFormController to add:\n// - Show/hide options section based on display_control type (text vs select/radio)\n// - Add/remove option rows with dynamic index tracking\n// - jQuery UI sortable drag-and-drop option reordering\n// - Custom validation requiring at least 2 options for select/radio types\n//\n// Usage:\n// - app/views/campaigns/wizard/new_feedback_question.html.erb\n// - app/views/campaigns/wizard/edit_feedback_question.html.erb\nexport default class extends ValidateFormController {\n  static targets = [\"displayControl\", \"optionsSection\", \"multipleSelectOption\", \"optionsList\"]\n\n  static values = {\n    optionIndex: Number,\n    optionPlaceholder: { type: String, default: \"Enter option text...\" }\n  }\n\n  connect() {\n    // Run initial toggle to set correct visibility\n    if (this.hasDisplayControlTarget) {\n      this.toggleOptions()\n    }\n    // Initialize sortable on options list after modal is visible\n    setTimeout(() => {\n      this.initOptionSortable()\n    }, 750)\n  }\n\n  initOptionSortable() {\n    if (this.hasOptionsListTarget && $(this.optionsListTarget).length) {\n      $(this.optionsListTarget).sortable({\n        handle: '.input-group-text',\n        items: '.option-row:visible',\n        placeholder: 'sortable-placeholder mb-2',\n        tolerance: 'pointer',\n        update: () => {\n          this.updatePositions()\n        }\n      })\n    }\n  }\n\n  toggleOptions() {\n    const displayControl = this.displayControlTarget.value\n\n    if (displayControl === \"text\") {\n      this.optionsSectionTarget.classList.add(\"d-none\")\n      if (this.hasMultipleSelectOptionTarget) {\n        this.multipleSelectOptionTarget.classList.add(\"d-none\")\n      }\n    } else {\n      this.optionsSectionTarget.classList.remove(\"d-none\")\n      if (this.hasMultipleSelectOptionTarget) {\n        if (displayControl === \"select\") {\n          this.multipleSelectOptionTarget.classList.remove(\"d-none\")\n        } else {\n          this.multipleSelectOptionTarget.classList.add(\"d-none\")\n        }\n      }\n    }\n  }\n\n  addOption() {\n    const index = this.optionIndexValue\n    const placeholder = this.optionPlaceholderValue\n\n    const newRow = document.createElement(\"div\")\n    newRow.className = \"input-group mb-2 option-row\"\n    newRow.innerHTML = `<span class=\"input-group-text\" style=\"cursor: grab;\"><em class=\"fa fa-grip-vertical text-muted\"></em></span>` +\n      `<input type=\"hidden\" name=\"question[options_attributes][${index}][position]\" value=\"${index + 1}\" class=\"option-position\">` +\n      `<input type=\"text\" name=\"question[options_attributes][${index}][name]\" value=\"\" class=\"form-control\" placeholder=\"${placeholder}\">` +\n      `<button type=\"button\" class=\"btn btn-outline-danger\" data-action=\"click->wizard-feedback-options#removeOption\" title=\"Delete\"><em class=\"fa fa-times\"></em></button>`\n\n    this.optionsListTarget.appendChild(newRow)\n    this.optionIndexValue = index + 1\n\n    // Focus the new input\n    newRow.querySelector('input[type=\"text\"]').focus()\n  }\n\n  removeOption(event) {\n    const row = event.currentTarget.closest(\".option-row\")\n    const optionId = row.dataset.optionId\n\n    if (optionId) {\n      // Mark existing option for deletion\n      const idInput = row.querySelector('input[name*=\"[id]\"]')\n      if (idInput) {\n        const destroyInput = document.createElement(\"input\")\n        destroyInput.type = \"hidden\"\n        destroyInput.name = idInput.name.replace(\"[id]\", \"[_destroy]\")\n        destroyInput.value = \"1\"\n        row.appendChild(destroyInput)\n      }\n      row.style.display = \"none\"\n    } else {\n      // Remove new option row\n      row.remove()\n    }\n\n    this.updatePositions()\n  }\n\n  updatePositions() {\n    const rows = this.optionsListTarget.querySelectorAll(\".option-row\")\n    let position = 1\n    rows.forEach(row => {\n      if (row.style.display !== \"none\") {\n        const positionInput = row.querySelector(\".option-position\")\n        if (positionInput) {\n          positionInput.value = position\n          position++\n        }\n      }\n    })\n  }\n\n  validateForm(event) {\n    let alertContainerId = 'modal-message-container'\n    let formElement = event.target\n    if (formElement.dataset && formElement.dataset.alert_container) {\n      alertContainerId = formElement.dataset.alert_container\n    } else if (formElement.dataset && formElement.dataset.alertContainer) {\n      alertContainerId = formElement.dataset.alertContainer\n    }\n\n    let passed_normal_validation = super.validateForm(event, alertContainerId)\n    if (passed_normal_validation) {\n      let errors = []\n\n      // Check at least two options for select/radio types\n      let displayControl = this.hasDisplayControlTarget ? this.displayControlTarget.value : 'select'\n      if (displayControl === 'select' || displayControl === 'radio') {\n        let optCount = 0\n        if (this.hasOptionsListTarget) {\n          this.optionsListTarget.querySelectorAll('.option-row').forEach((row) => {\n            if (row.style.display !== 'none') {\n              let textInput = row.querySelector('input[type=\"text\"]')\n              if (textInput && textInput.value.trim() !== '') {\n                optCount++\n              }\n            }\n          })\n        }\n        if (optCount < 2) {\n          errors.push(i18n_string(\"process_improvement.you_must_have_at_least_two_options\", \"You must have at least two options\"))\n        }\n      }\n\n      if (errors.length > 0) {\n        event.preventDefault()\n        doJsAlert('<div class=\"alert alert-danger\">' + errors.join('<br />') + '</div>', alertContainerId)\n        return false\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wizard-questions\"\n//\n// Central controller for the wizard's question management steps (account,\n// campaign/situational, and feedback questions). Handles:\n// - Manage/Preview tab switching with dirty-state tracking and turbo frame refresh\n// - Display/Hide toggling via AJAX calls to signup-questions#diy-status\n// - jQuery UI sortable drag-and-drop reordering with position persistence\n// - Feedback question selection with max-limit enforcement\n// - Resource and feedback question deletion\n// - Inline save indicators (saving/saved/error)\n//\n// Three parallel sets of targets support account, campaign, and feedback\n// question tables independently within the same controller instance.\n//\n// Usage:\n// - app/views/campaigns/wizard/participant_account_questions.html.erb\n// - app/views/campaigns/wizard/participant_feedback_questions.html.erb\n// - app/views/campaigns/wizard/campaign_questions.html.erb\n// - app/views/campaigns/wizard/review_resources.html.erb\nexport default class extends Controller {\n  static targets = [\"manageView\", \"previewView\", \"previewBtn\", \"manageBtn\", \"displayedBody\", \"hiddenBody\", \"displayedCount\", \"hiddenCount\", \"noDisplayedMsg\", \"noHiddenMsg\", \"campaignDisplayedBody\", \"campaignHiddenBody\", \"campaignDisplayedCount\", \"campaignHiddenCount\", \"noCampaignDisplayedMsg\", \"noCampaignHiddenMsg\", \"feedbackDisplayedBody\", \"feedbackHiddenBody\", \"feedbackDisplayedCount\", \"feedbackHiddenCount\", \"noFeedbackDisplayedMsg\", \"noFeedbackHiddenMsg\", \"feedbackSelectedCount\", \"feedbackSaveIndicator\", \"feedbackMaxAlert\", \"saveIndicator\"]\n\n  static values = {\n    maxFeedbackQuestions: { type: Number, default: 5 },\n    campaignId: Number\n  }\n\n  connect() {\n    this.dirty = false\n    this.dirtyHandler = () => { this.dirty = true }\n    document.addEventListener('wizard-questions:dirty', this.dirtyHandler)\n    this.initAccountSortable()\n    this.initCampaignSortable()\n  }\n\n  // Reinitialize sortable when targets reconnect (e.g. after turbo stream replacements)\n  displayedBodyTargetConnected() {\n    this.initAccountSortable()\n  }\n\n  campaignDisplayedBodyTargetConnected() {\n    this.initCampaignSortable()\n  }\n\n  initAccountSortable() {\n    const displayedBody = document.getElementById('displayed-questions-body')\n    if (!displayedBody || typeof $ === 'undefined' || !$.fn.sortable) return\n\n    // Destroy existing sortable before reinitializing (e.g. after turbo frame replacement)\n    if ($(\"#displayed-questions-body\").sortable(\"instance\")) {\n      $(\"#displayed-questions-body\").sortable(\"destroy\")\n    }\n\n    const controller = this\n    $(\"#displayed-questions-body\").sortable({\n      items: 'tr.allow-sort',\n      handle: 'td:first-child',\n      placeholder: 'sortable-placeholder',\n      helper: function(e, tr) {\n        // Clone the row and preserve column widths so it doesn't collapse while dragging\n        let $originals = tr.children()\n        let $helper = tr.clone()\n        $helper.children().each(function(index) {\n          $(this).width($originals.eq(index).width())\n        })\n        return $helper\n      },\n      start: function(e, ui) {\n        // Give the placeholder a full-width cell so the highlight spans the entire row\n        let colCount = ui.item.children('td').length\n        ui.placeholder.height(ui.item.outerHeight())\n        ui.placeholder.html('<td colspan=\"' + colCount + '\">&nbsp;</td>')\n      },\n      update: function() {\n        controller.saveAccountQuestionOrder()\n      }\n    })\n  }\n\n  saveAccountQuestionOrder() {\n    const questOrder = {}\n    $('#displayed-questions-body tr.allow-sort').each(function(idx) {\n      questOrder[idx + 1] = $(this).data('quest_id')\n    })\n\n    // Get campaign ID from URL (supports both /assessments/ and /campaigns/ paths)\n    const pathParts = window.location.pathname.split('/')\n    let campaignIndex = pathParts.indexOf('assessments')\n    if (campaignIndex === -1) campaignIndex = pathParts.indexOf('campaigns')\n    const campaignId = campaignIndex !== -1 ? pathParts[campaignIndex + 1] : null\n\n    if (!campaignId) {\n      console.error('Could not determine campaign ID for saving question order')\n      return\n    }\n\n    this.showSaveIndicator()\n\n    const controller = this\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: `/assessments/${campaignId}/wizard/save_account_question_order`,\n      data: { question_order: questOrder },\n      success: function() {\n        controller._refreshPositions()\n        controller.showSaveSuccess()\n        controller.dirty = true\n      },\n      error: function() {\n        controller.showSaveError()\n      }\n    })\n  }\n\n  initCampaignSortable() {\n    const displayedBody = document.getElementById('campaign-displayed-questions-body')\n    if (!displayedBody || typeof $ === 'undefined' || !$.fn.sortable) return\n\n    if ($(\"#campaign-displayed-questions-body\").sortable(\"instance\")) {\n      $(\"#campaign-displayed-questions-body\").sortable(\"destroy\")\n    }\n\n    const controller = this\n    $(\"#campaign-displayed-questions-body\").sortable({\n      items: 'tr.allow-sort',\n      handle: 'td:first-child',\n      placeholder: 'sortable-placeholder',\n      helper: function(e, tr) {\n        let $originals = tr.children()\n        let $helper = tr.clone()\n        $helper.children().each(function(index) {\n          $(this).width($originals.eq(index).width())\n        })\n        return $helper\n      },\n      start: function(e, ui) {\n        let colCount = ui.item.children('td').length\n        ui.placeholder.height(ui.item.outerHeight())\n        ui.placeholder.html('<td colspan=\"' + colCount + '\">&nbsp;</td>')\n      },\n      update: function() {\n        controller.saveCampaignQuestionOrder()\n      }\n    })\n  }\n\n  saveCampaignQuestionOrder() {\n    const questOrder = {}\n    $('#campaign-displayed-questions-body tr.allow-sort').each(function(idx) {\n      questOrder[idx + 1] = $(this).data('quest_id')\n    })\n\n    const pathParts = window.location.pathname.split('/')\n    let campaignIndex = pathParts.indexOf('assessments')\n    if (campaignIndex === -1) campaignIndex = pathParts.indexOf('campaigns')\n    const campaignId = campaignIndex !== -1 ? pathParts[campaignIndex + 1] : null\n\n    if (!campaignId) {\n      console.error('Could not determine campaign ID for saving campaign question order')\n      return\n    }\n\n    this.showSaveIndicator()\n\n    const controller = this\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: `/assessments/${campaignId}/wizard/save_campaign_question_order`,\n      data: { question_order: questOrder },\n      success: function() {\n        controller._refreshCampaignPositions()\n        controller.showSaveSuccess()\n        controller.dirty = true\n      },\n      error: function() {\n        controller.showSaveError()\n      }\n    })\n  }\n\n  showSaveIndicator() {\n    if (this.hasSaveIndicatorTarget) {\n      this.saveIndicatorTarget.innerHTML = '<em class=\"fal fa-spin fa-circle-notch me-1\"></em> Saving...'\n      this.saveIndicatorTarget.classList.remove('d-none')\n    }\n  }\n\n  showSaveSuccess() {\n    if (this.hasSaveIndicatorTarget) {\n      setTimeout(function() {\n        this.saveIndicatorTarget.innerHTML = '<em class=\"fa fa-check text-success me-1\"></em> Saved'\n        const target = this.saveIndicatorTarget\n        setTimeout(function() { target.classList.add('d-none') }, 4000)\n      }.bind(this), 800)\n\n    }\n  }\n\n  showSaveError(message = 'Error saving') {\n    if (this.hasSaveIndicatorTarget) {\n      this.saveIndicatorTarget.innerHTML = `<em class=\"fa fa-exclamation-triangle text-danger me-1\"></em> ${message}`\n      const target = this.saveIndicatorTarget\n      setTimeout(function () {\n        target.classList.add('d-none')\n      }, 4000)\n    }\n  }\n\n  disconnect() {\n    document.removeEventListener('wizard-questions:dirty', this.dirtyHandler)\n  }\n\n  selectTab(event) {\n    // Move active class to the clicked nav-link, removing it from all siblings\n    const clickedLink = event.currentTarget\n    clickedLink.closest('ul').querySelectorAll('.nav-link').forEach(link => {\n      link.classList.toggle('active', link === clickedLink)\n    })\n\n    // Sync the \"Open in New Tab\" link to the selected version's resources URL\n    const resourcesUrl = clickedLink.dataset.resourcesUrl\n    if (resourcesUrl) {\n      const openTabLink = document.getElementById('resources-open-tab-link')\n      if (openTabLink) openTabLink.href = resourcesUrl\n    }\n  }\n\n  showPreview() {\n    // Update button states\n    if (this.hasPreviewBtnTarget && this.hasManageBtnTarget) {\n      this.previewBtnTarget.classList.add('active')\n      this.manageBtnTarget.classList.remove('active')\n    }\n\n    // Toggle views - must happen BEFORE refresh so the turbo frame is visible\n    // (loading: :lazy won't fetch for hidden elements)\n    if (this.hasManageViewTarget) {\n      this.manageViewTarget.style.display = \"none\"\n    }\n    if (this.hasPreviewViewTarget) {\n      this.previewViewTarget.style.display = \"block\"\n    }\n\n    // Refresh preview if data changed on the Manage tab\n    if (this.dirty) {\n      this.refreshPreview()\n      this.dirty = false\n    }\n  }\n\n  refreshPreview() {\n    const previewFrame = this.hasPreviewViewTarget ? this.previewViewTarget.querySelector('turbo-frame') : null\n    if (previewFrame) {\n      // Build a fresh URL with a cache-busting param so Turbo always re-fetches\n      const baseUrl = previewFrame.src.split('?')[0]\n      previewFrame.src = `${baseUrl}?_t=${Date.now()}`\n    }\n  }\n\n  showManage() {\n    // Update button states\n    if (this.hasPreviewBtnTarget && this.hasManageBtnTarget) {\n      this.manageBtnTarget.classList.add('active')\n      this.previewBtnTarget.classList.remove('active')\n    }\n\n    // Toggle views\n    if (this.hasManageViewTarget) {\n      this.manageViewTarget.style.display = \"block\"\n    }\n    if (this.hasPreviewViewTarget) {\n      this.previewViewTarget.style.display = \"none\"\n    }\n  }\n\n  toggleStatus(event) {\n    const element = event.currentTarget\n    const newStatus = element.dataset.newStatus\n    const questionId = element.dataset.questionId\n    const controller = this\n\n    // Disable button while processing\n    element.disabled = true\n\n    this.showSaveIndicator()\n\n    // Make AJAX call to change status using jQuery (consistent with rest of codebase)\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: `/signup-questions/${questionId}/diy-status`,\n      data: { new_status: newStatus },\n      success: function(data) {\n        if (data && data.load_options_for_question_id) {\n          // If a new custom question was selected, open the edit modal\n          const row = document.getElementById(`question_row_${questionId}`)\n          if (row) {\n            const editLink = row.querySelector('.edit-custom-options')\n            if (editLink) {\n              const returnTo = encodeURIComponent(window.location.pathname + '?view=manage')\n              editLink.href = `/signup-questions/${data.load_options_for_question_id}/diy-edit-options-modal?return_to=${returnTo}`\n              editLink.click()\n            }\n          }\n        }\n        if (data && data.error) {\n          element.disabled = false\n          controller.showSaveError(data.error)\n          return\n        }\n\n        // Move the row to the appropriate section and update button\n        controller.moveQuestionRow(questionId, newStatus)\n        controller.updateQuestionButton(element, newStatus)\n\n        // Update sortable class and drag handle (standard questions have fixed order)\n        const questionRow = document.getElementById(`question_row_${questionId}`)\n        if (questionRow) {\n          const isStandard = questionRow.dataset.kind === 'standard'\n          const dragTd = questionRow.querySelector('td:first-child')\n          if (newStatus === 'display' && !isStandard) {\n            questionRow.classList.add('allow-sort')\n            if (dragTd) {\n              dragTd.style.cursor = 'grab'\n              dragTd.innerHTML = '<em class=\"fa fa-grip-vertical text-muted\"></em>'\n            }\n          } else {\n            questionRow.classList.remove('allow-sort')\n            if (dragTd) {\n              dragTd.style.cursor = ''\n              dragTd.innerHTML = ''\n            }\n          }\n        }\n\n        // Refresh sortable so jQuery UI adds ui-sortable-handle to newly moved rows\n        if ($(\"#displayed-questions-body\").sortable(\"instance\")) {\n          $(\"#displayed-questions-body\").sortable(\"refresh\")\n        }\n\n        controller.showSaveSuccess()\n        controller.dirty = true\n      },\n      error: function(xhr, status, error) {\n        console.error('Error updating question status:', error)\n        element.disabled = false\n        controller.showSaveError()\n      }\n    })\n  }\n\n  updateQuestionButton(button, newStatus) {\n    // Swap the button to show the opposite action\n    if (newStatus === 'display') {\n      // Now showing, so button should offer to hide\n      button.className = 'btn btn-sm btn-outline-secondary'\n      button.dataset.newStatus = 'hide'\n      button.innerHTML = '<em class=\"fa fa-eye-slash me-1\"></em>Hide'\n    } else {\n      // Now hidden, so button should offer to display\n      button.className = 'btn btn-sm btn-outline-success'\n      button.dataset.newStatus = 'display'\n      button.innerHTML = '<em class=\"fa fa-eye me-1\"></em>Display'\n    }\n    button.disabled = false\n  }\n\n  moveQuestionRow(questionId, newStatus) {\n    const countryStateExtra = this._target('displayedBody')?.querySelector('#question_row_country_state') ? 1 : 0\n    this._moveRow(questionId, newStatus, {\n      rowIdPrefix: 'question_row',\n      displayedBody: this._target('displayedBody'),\n      hiddenBody: this._target('hiddenBody'),\n      displayedCount: this._target('displayedCount'),\n      hiddenCount: this._target('hiddenCount'),\n      noDisplayedMsg: this._target('noDisplayedMsg'),\n      noHiddenMsg: this._target('noHiddenMsg'),\n      extraDisplayedCount: countryStateExtra\n    })\n  }\n\n  // Campaign Questions specific toggle handler\n  toggleCampaignStatus(event) {\n    const element = event.currentTarget\n    const newStatus = element.dataset.newStatus\n    const questionId = element.dataset.questionId\n    const controller = this\n\n    // Disable button while processing\n    element.disabled = true\n\n    this.showSaveIndicator()\n\n    // Make AJAX call to change status using jQuery\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: `/signup-questions/${questionId}/diy-status`,\n      data: { new_status: newStatus },\n      success: function(data) {\n        // Move the row to the appropriate section and update button\n        controller.moveCampaignQuestionRow(questionId, newStatus)\n        controller.updateQuestionButton(element, newStatus)\n\n        // Update sortable class and drag handle for campaign rows\n        const campaignRow = document.getElementById(`campaign_question_row_${questionId}`)\n        if (campaignRow) {\n          const dragTd = campaignRow.querySelector('td:first-child')\n          if (newStatus === 'display') {\n            campaignRow.classList.add('allow-sort')\n            if (dragTd) {\n              dragTd.style.cursor = 'grab'\n              dragTd.innerHTML = '<em class=\"fa fa-grip-vertical text-muted\"></em>'\n            }\n          } else {\n            campaignRow.classList.remove('allow-sort')\n            if (dragTd) {\n              dragTd.style.cursor = ''\n              dragTd.innerHTML = ''\n            }\n          }\n        }\n\n        // Refresh sortable so jQuery UI adds ui-sortable-handle to newly moved rows\n        if ($(\"#campaign-displayed-questions-body\").sortable(\"instance\")) {\n          $(\"#campaign-displayed-questions-body\").sortable(\"refresh\")\n        }\n\n        controller.showSaveSuccess()\n        controller.dirty = true\n      },\n      error: function(xhr, status, error) {\n        console.error('Error updating campaign question status:', error)\n        element.disabled = false\n        controller.showSaveError()\n      }\n    })\n  }\n\n  moveCampaignQuestionRow(questionId, newStatus) {\n    this._moveRow(questionId, newStatus, {\n      rowIdPrefix: 'campaign_question_row',\n      displayedBody: this._target('campaignDisplayedBody'),\n      hiddenBody: this._target('campaignHiddenBody'),\n      displayedCount: this._target('campaignDisplayedCount'),\n      hiddenCount: this._target('campaignHiddenCount'),\n      noDisplayedMsg: this._target('noCampaignDisplayedMsg'),\n      noHiddenMsg: this._target('noCampaignHiddenMsg')\n    })\n  }\n\n  // Feedback Questions specific toggle handler\n  toggleFeedbackStatus(event) {\n    const element = event.currentTarget\n    const newStatus = element.dataset.newStatus\n    const questionId = element.dataset.questionId\n    const controller = this\n\n    // Check if we can add more questions (max limit)\n    if (newStatus === 'display') {\n      const currentDisplayed = this.hasFeedbackDisplayedBodyTarget ?\n        this.feedbackDisplayedBodyTarget.querySelectorAll('tr[data-question-id]').length : 0\n      const maxQuestions = this.maxFeedbackQuestionsValue || 5\n\n      if (currentDisplayed >= maxQuestions) {\n        if (this.hasFeedbackMaxAlertTarget) {\n          this.feedbackMaxAlertTarget.classList.remove('d-none')\n          setTimeout(() => this.feedbackMaxAlertTarget.classList.add('d-none'), 5000)\n        }\n        return\n      }\n    }\n\n    // Disable button while processing\n    element.disabled = true\n\n    // Get campaign ID from URL (supports both /assessments/ and /campaigns/ paths)\n    const pathParts = window.location.pathname.split('/')\n    let campaignIndex = pathParts.indexOf('assessments')\n    if (campaignIndex === -1) campaignIndex = pathParts.indexOf('campaigns')\n    const campaignId = campaignIndex !== -1 ? pathParts[campaignIndex + 1] : null\n\n    if (!campaignId) {\n      console.error('Could not determine campaign ID')\n      element.disabled = false\n      return\n    }\n\n    // Show saving indicator\n    if (this.hasFeedbackSaveIndicatorTarget) {\n      this.feedbackSaveIndicatorTarget.innerHTML = '<em class=\"fa fa-spinner fa-spin me-1\"></em> Saving...'\n      this.feedbackSaveIndicatorTarget.classList.remove('d-none')\n    }\n\n    // Make AJAX call to toggle feedback question status using jQuery\n    $.ajax({\n      headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n      type: \"POST\",\n      url: `/assessments/${campaignId}/wizard/toggle_feedback_question/${questionId}`,\n      data: { new_status: newStatus },\n      success: function(data) {\n        if (data.success) {\n          // Move the row to the appropriate section and update button\n          controller.moveFeedbackQuestionRow(questionId, newStatus)\n          controller.updateQuestionButton(element, newStatus)\n\n          // Update selected count\n          if (controller.hasFeedbackSelectedCountTarget) {\n            controller.feedbackSelectedCountTarget.textContent = data.selected_count\n          }\n\n          // Show success indicator\n          if (controller.hasFeedbackSaveIndicatorTarget) {\n            controller.feedbackSaveIndicatorTarget.innerHTML = '<em class=\"fa fa-check text-success me-1\"></em> Saved'\n            setTimeout(function() { controller.feedbackSaveIndicatorTarget.classList.add('d-none') }, 1500)\n          }\n\n          controller.dirty = true\n        }\n      },\n      error: function(xhr, status, error) {\n        console.error('Error updating feedback question status:', error)\n        element.disabled = false\n        if (controller.hasFeedbackSaveIndicatorTarget) {\n          controller.feedbackSaveIndicatorTarget.innerHTML = '<em class=\"fa fa-exclamation-triangle text-danger me-1\"></em> Error'\n          setTimeout(function() { controller.feedbackSaveIndicatorTarget.classList.add('d-none') }, 2000)\n        }\n      }\n    })\n  }\n\n  moveFeedbackQuestionRow(questionId, newStatus) {\n    this._moveRow(questionId, newStatus, {\n      rowIdPrefix: 'feedback_question_row',\n      displayedBody: this._target('feedbackDisplayedBody'),\n      hiddenBody: this._target('feedbackHiddenBody'),\n      displayedCount: this._target('feedbackDisplayedCount'),\n      hiddenCount: this._target('feedbackHiddenCount'),\n      noDisplayedMsg: this._target('noFeedbackDisplayedMsg'),\n      noHiddenMsg: this._target('noFeedbackHiddenMsg')\n    })\n  }\n\n  deleteWizardResource(event) {\n    event.preventDefault()\n    const element = event.currentTarget\n    const url = element.dataset.deleteUrl\n    const resourceId = element.dataset.resourceId\n\n    const confirmMessage = i18n_string(\"resources.are_you_sure_you_want_to_delete_this_resource\", \"Are you sure you want to delete this resource?\")\n    if (!confirm(confirmMessage)) return\n\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.content\n\n    fetch(url, {\n      method: 'DELETE',\n      headers: {\n        'X-CSRF-Token': csrfToken,\n        'Accept': 'application/json'\n      }\n    })\n    .then(response => response.json())\n    .then(data => {\n      if (data.success) {\n        const row = document.getElementById(`resource_${resourceId}`)\n        if (row) row.remove()\n        this.dirty = true\n      }\n    })\n    .catch(error => {\n      console.error('Error deleting resource:', error)\n    })\n  }\n\n  deleteFeedbackQuestion(event) {\n    event.preventDefault()\n    const element = event.currentTarget\n    const url = element.dataset.deleteUrl\n    const questionId = element.dataset.questionId\n    const controller = this\n\n    if (!confirm('Are you sure you want to delete this question?')) return\n\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.content\n\n    fetch(url, {\n      method: 'DELETE',\n      headers: {\n        'X-CSRF-Token': csrfToken,\n        'Accept': 'application/json'\n      }\n    })\n    .then(response => response.json())\n    .then(data => {\n      if (data.success) {\n        // Remove the row from the DOM\n        const row = document.getElementById(`feedback_question_row_${questionId}`)\n        if (row) row.remove()\n\n        // Update counts\n        this._updateRowCounts(\n          this._target('feedbackDisplayedBody'),\n          this._target('feedbackDisplayedCount'),\n          this._target('feedbackHiddenBody'),\n          this._target('feedbackHiddenCount')\n        )\n        this._updateNoQuestionsMessages(\n          this._target('feedbackDisplayedBody'),\n          this._target('noFeedbackDisplayedMsg'),\n          this._target('feedbackHiddenBody'),\n          this._target('noFeedbackHiddenMsg')\n        )\n\n        // Update selected count\n        if (controller.hasFeedbackSelectedCountTarget && data.selected_count !== undefined) {\n          controller.feedbackSelectedCountTarget.textContent = data.selected_count\n        }\n\n        controller.dirty = true\n      }\n    })\n    .catch(error => {\n      console.error('Error deleting feedback question:', error)\n    })\n  }\n\n  // --- Generic private helpers ---\n\n  // Safely resolve a Stimulus target by name, returns element or null\n  _target(name) {\n    const capitalized = name.charAt(0).toUpperCase() + name.slice(1)\n    return this[`has${capitalized}Target`] ? this[`${name}Target`] : null\n  }\n\n  // Generic row mover: find row, update status, move to correct table body, update counts & messages\n  _moveRow(questionId, newStatus, { rowIdPrefix, displayedBody, hiddenBody, displayedCount, hiddenCount, noDisplayedMsg, noHiddenMsg, extraDisplayedCount = 0 }) {\n    const row = document.getElementById(`${rowIdPrefix}_${questionId}`)\n    if (!row) {\n      console.error(`Could not find row with id ${rowIdPrefix}_${questionId}`)\n      return\n    }\n\n    row.dataset.status = newStatus\n\n    const targetBody = newStatus === 'display' ? displayedBody : hiddenBody\n    if (!targetBody) {\n      console.error(`Could not find target body for status ${newStatus}`)\n      return\n    }\n\n    if (row.parentElement !== targetBody) {\n      if (newStatus === 'display') {\n        this._insertInPosition(row, targetBody)\n      } else {\n        targetBody.prepend(row)\n      }\n      this._updateRowCounts(displayedBody, displayedCount, hiddenBody, hiddenCount, extraDisplayedCount)\n      this._updateNoQuestionsMessages(displayedBody, noDisplayedMsg, hiddenBody, noHiddenMsg)\n    }\n  }\n\n  // Generic count updater\n  _updateRowCounts(displayedBody, displayedCountEl, hiddenBody, hiddenCountEl, extraCount = 0) {\n    if (displayedCountEl && displayedBody) {\n      displayedCountEl.textContent = displayedBody.querySelectorAll('tr[data-question-id]').length + extraCount\n    }\n    if (hiddenCountEl && hiddenBody) {\n      hiddenCountEl.textContent = hiddenBody.querySelectorAll('tr[data-question-id]').length\n    }\n  }\n\n  // Generic no-questions message updater\n  _updateNoQuestionsMessages(displayedBody, noDisplayedMsg, hiddenBody, noHiddenMsg) {\n    if (noDisplayedMsg && displayedBody) {\n      noDisplayedMsg.style.display = displayedBody.querySelectorAll('tr[data-question-id]').length === 0 ? 'block' : 'none'\n    }\n    if (noHiddenMsg && hiddenBody) {\n      noHiddenMsg.style.display = hiddenBody.querySelectorAll('tr[data-question-id]').length === 0 ? 'block' : 'none'\n    }\n  }\n\n  // Insert a row into the displayed body in the correct position based on data-position\n  _insertInPosition(row, targetBody) {\n    const rowPosition = parseFloat(row.dataset.position) || Infinity\n    const existingRows = targetBody.querySelectorAll('tr.allow-sort')\n    let inserted = false\n\n    for (const existingRow of existingRows) {\n      const existingPosition = parseFloat(existingRow.dataset.position) || Infinity\n      if (rowPosition < existingPosition) {\n        targetBody.insertBefore(row, existingRow)\n        inserted = true\n        break\n      }\n    }\n\n    if (!inserted) {\n      targetBody.append(row)\n    }\n  }\n\n  // Update data-position on all sortable rows after drag reorder\n  _refreshPositions() {\n    const body = document.getElementById('displayed-questions-body')\n    if (!body) return\n    body.querySelectorAll('tr.allow-sort').forEach(function(row, idx) {\n      row.dataset.position = idx + 1\n    })\n  }\n\n  _refreshCampaignPositions() {\n    const body = document.getElementById('campaign-displayed-questions-body')\n    if (!body) return\n    body.querySelectorAll('tr.allow-sort').forEach(function(row, idx) {\n      row.dataset.position = idx + 1\n    })\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wizard-resource-tabs\"\n//\n// Handles tab switching for resource categories in the campaign wizard.\n//\n// Usage:\n// - app/views/campaigns/wizard/_resources_content.html.erb\nexport default class extends Controller {\n  static targets = [\"tab\", \"pane\"]\n\n  switchTab(event) {\n    event.preventDefault()\n    const tabName = event.params.tab\n\n    // Hide all panes\n    this.paneTargets.forEach(pane => pane.style.display = \"none\")\n\n    // Deactivate all tabs\n    this.tabTargets.forEach(tab => tab.classList.remove(\"active\"))\n\n    // Show selected pane\n    const selectedPane = document.getElementById(`tab-${tabName}`)\n    if (selectedPane) {\n      selectedPane.style.display = \"block\"\n    }\n\n    // Activate clicked tab\n    event.currentTarget.classList.add(\"active\")\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"wizard-sidebar-review\"\n//\n// Manages review toggle buttons in the wizard sidebar navigation. When a step's\n// toggle is clicked, PATCHes the review status to the server and dispatches a\n// 'wizard-sidebar-review-updated' event so the header checkbox can stay in sync.\n// Also listens for 'wizard-review-updated' events from the header controller.\n// Updates toggle appearance between outline circle (not ready) and solid\n// checkmark (ready) with Bootstrap tooltips.\n//\n// Usage:\n// - app/views/campaigns/wizard/_campaign_details_sidebar.html.erb\nexport default class extends Controller {\n  static values = {\n    url: String\n  }\n\n  static targets = [\"toggle\"]\n\n  connect() {\n    // Listen for updates from the header checkbox to keep sidebar in sync\n    this.boundHandleExternalUpdate = this.handleExternalUpdate.bind(this)\n    window.addEventListener('wizard-review-updated', this.boundHandleExternalUpdate)\n  }\n\n  disconnect() {\n    window.removeEventListener('wizard-review-updated', this.boundHandleExternalUpdate)\n  }\n\n  handleExternalUpdate(event) {\n    const { stepKey, reviewed } = event.detail\n    // Find the toggle button for this step and update its appearance\n    const toggle = this.element.querySelector(`[data-step-key=\"${stepKey}\"]`)\n    if (toggle) {\n      this.updateToggleAppearance(toggle, reviewed)\n    }\n  }\n\n  toggle(event) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    const button = event.currentTarget\n    const stepKey = button.dataset.stepKey\n    const currentlyReviewed = button.dataset.reviewed === 'true'\n    const newReviewedState = !currentlyReviewed\n\n    // Get CSRF token\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content')\n\n    // Use FormData for Rails compatibility\n    const formData = new FormData()\n    formData.append('step_key', stepKey)\n    formData.append('reviewed', newReviewedState)\n\n    fetch(this.urlValue, {\n      method: 'PATCH',\n      headers: {\n        'X-CSRF-Token': csrfToken,\n        'Accept': 'application/json'\n      },\n      body: formData,\n      credentials: 'same-origin'\n    })\n    .then(response => {\n      if (!response.ok) {\n        throw new Error('Network response was not ok: ' + response.status)\n      }\n      return response.json()\n    })\n    .then(data => {\n      if (data.success) {\n        // Update this toggle's appearance\n        this.updateToggleAppearance(button, newReviewedState)\n\n        // Dispatch event so header checkbox stays in sync\n        window.dispatchEvent(new CustomEvent('wizard-sidebar-review-updated', {\n          detail: { stepKey: stepKey, reviewed: newReviewedState }\n        }))\n      }\n    })\n    .catch(error => {\n      console.error('Error updating review status:', error)\n    })\n  }\n\n  updateToggleAppearance(button, reviewed) {\n    button.dataset.reviewed = reviewed\n    const icon = button.querySelector('em')\n    if (icon) {\n      if (reviewed) {\n        // Change from outline circle to solid checkmark\n        icon.classList.remove('far', 'fa-circle', 'text-muted')\n        icon.classList.add('fa', 'fa-check-circle', 'text-success')\n      } else {\n        // Change from solid checkmark to outline circle\n        icon.classList.remove('fa', 'fa-check-circle', 'text-success')\n        icon.classList.add('far', 'fa-circle', 'text-muted')\n      }\n    }\n\n    // Update tooltip text\n    const tooltipInstance = bootstrap?.Tooltip?.getInstance(button)\n    if (tooltipInstance) {\n      tooltipInstance.dispose()\n    }\n    button.setAttribute('title', reviewed ? 'Mark as Not Ready' : 'Mark as Ready')\n    new bootstrap.Tooltip(button)\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 AccountLaunchpadController from \"./account_launchpad_controller\"\napplication.register(\"account-launchpad\", AccountLaunchpadController)\n\nimport AccountLoginTrackingController from \"./account_login_tracking_controller\"\napplication.register(\"account-login-tracking\", AccountLoginTrackingController)\n\nimport AccountRetentionController from \"./account_retention_controller\"\napplication.register(\"account-retention\", AccountRetentionController)\n\nimport AccountSearchController from \"./account_search_controller\"\napplication.register(\"account-search\", AccountSearchController)\n\nimport AccountSetupVerificationController from \"./account_setup_verification_controller\"\napplication.register(\"account-setup-verification\", AccountSetupVerificationController)\n\nimport AccountSwitcherController from \"./account_switcher_controller\"\napplication.register(\"account-switcher\", AccountSwitcherController)\n\nimport AddAssociationController from \"./add_association_controller\"\napplication.register(\"add-association\", AddAssociationController)\n\nimport AddOrganizationController from \"./add_organization_controller\"\napplication.register(\"add-organization\", AddOrganizationController)\n\nimport AdditionalToolsController from \"./additional_tools_controller\"\napplication.register(\"additional-tools\", AdditionalToolsController)\n\nimport AdminImportController from \"./admin_import_controller\"\napplication.register(\"admin-import\", AdminImportController)\n\nimport AdminToolkitController from \"./admin_toolkit_controller\"\napplication.register(\"admin-toolkit\", AdminToolkitController)\n\nimport AdvancedReportEditorController from \"./advanced_report_editor_controller\"\napplication.register(\"advanced-report-editor\", AdvancedReportEditorController)\n\nimport AdvancedReportFoldersController from \"./advanced_report_folders_controller\"\napplication.register(\"advanced-report-folders\", AdvancedReportFoldersController)\n\nimport AlertController from \"./alert_controller\"\napplication.register(\"alert\", AlertController)\n\nimport AlertsController from \"./alerts_controller\"\napplication.register(\"alerts\", AlertsController)\n\nimport AnimateController from \"./animate_controller\"\napplication.register(\"animate\", AnimateController)\n\nimport AnswerTagDraftEditorController from \"./answer_tag_draft_editor_controller\"\napplication.register(\"answer-tag-draft-editor\", AnswerTagDraftEditorController)\n\nimport AnswerTagEditorController from \"./answer_tag_editor_controller\"\napplication.register(\"answer-tag-editor\", AnswerTagEditorController)\n\nimport AnswerThemeReviewController from \"./answer_theme_review_controller\"\napplication.register(\"answer-theme-review\", AnswerThemeReviewController)\n\nimport ArrController from \"./arr_controller\"\napplication.register(\"arr\", ArrController)\n\nimport AutomatedReportEditorController from \"./automated_report_editor_controller\"\napplication.register(\"automated-report-editor\", AutomatedReportEditorController)\n\nimport BarcodeScannerController from \"./barcode_scanner_controller\"\napplication.register(\"barcode-scanner\", BarcodeScannerController)\n\nimport CampaignManagerController from \"./campaign_manager_controller\"\napplication.register(\"campaign-manager\", CampaignManagerController)\n\nimport CertificateController from \"./certificate_controller\"\napplication.register(\"certificate\", CertificateController)\n\nimport CheckboxToggleController from \"./checkbox_toggle_controller\"\napplication.register(\"checkbox-toggle\", CheckboxToggleController)\n\nimport CkeditorBrowserController from \"./ckeditor_browser_controller\"\napplication.register(\"ckeditor-browser\", CkeditorBrowserController)\n\nimport CombinedQuestionController from \"./combined_question_controller\"\napplication.register(\"combined-question\", CombinedQuestionController)\n\nimport CombinedSelectController from \"./combined_select_controller\"\napplication.register(\"combined-select\", CombinedSelectController)\n\nimport ComparisonChartModalController from \"./comparison_chart_modal_controller\"\napplication.register(\"comparison-chart-modal\", ComparisonChartModalController)\n\nimport ConditionalQuestionController from \"./conditional_question_controller\"\napplication.register(\"conditional-question\", ConditionalQuestionController)\n\nimport ContractsController from \"./contracts_controller\"\napplication.register(\"contracts\", ContractsController)\n\nimport CostOfBurnoutFilterController from \"./cost_of_burnout_filter_controller\"\napplication.register(\"cost-of-burnout-filter\", CostOfBurnoutFilterController)\n\nimport CustomerSubAccountSearchController from \"./customer_sub_account_search_controller\"\napplication.register(\"customer-sub-account-search\", CustomerSubAccountSearchController)\n\nimport CustomersController from \"./customers_controller\"\napplication.register(\"customers\", CustomersController)\n\nimport DashboardController from \"./dashboard_controller\"\napplication.register(\"dashboard\", DashboardController)\n\nimport DevTestToolsController from \"./dev_test_tools_controller\"\napplication.register(\"dev-test-tools\", DevTestToolsController)\n\nimport DisassociateOrganizationController from \"./disassociate_organization_controller\"\napplication.register(\"disassociate-organization\", DisassociateOrganizationController)\n\nimport DismissAlertController from \"./dismiss_alert_controller\"\napplication.register(\"dismiss-alert\", DismissAlertController)\n\nimport DiyChecklistController from \"./diy_checklist_controller\"\napplication.register(\"diy-checklist\", DiyChecklistController)\n\nimport DownloadReportsController from \"./download_reports_controller\"\napplication.register(\"download-reports\", DownloadReportsController)\n\nimport EnableFromCheckboxController from \"./enable_from_checkbox_controller\"\napplication.register(\"enable-from-checkbox\", EnableFromCheckboxController)\n\nimport ExportQuestionController from \"./export_question_controller\"\napplication.register(\"export-question\", ExportQuestionController)\n\nimport FeedbackThemeShowController from \"./feedback_theme_show_controller\"\napplication.register(\"feedback-theme-show\", FeedbackThemeShowController)\n\nimport FreeAssessmentController from \"./free_assessment_controller\"\napplication.register(\"free-assessment\", FreeAssessmentController)\n\nimport GaugeController from \"./gauge_controller\"\napplication.register(\"gauge\", GaugeController)\n\nimport GaugePreviewerController from \"./gauge_previewer_controller\"\napplication.register(\"gauge-previewer\", GaugePreviewerController)\n\nimport HelloController from \"./hello_controller\"\napplication.register(\"hello\", HelloController)\n\nimport HotspotBrightspotController from \"./hotspot_brightspot_controller\"\napplication.register(\"hotspot-brightspot\", HotspotBrightspotController)\n\nimport InstitutionSearchController from \"./institution_search_controller\"\napplication.register(\"institution-search\", InstitutionSearchController)\n\nimport InvitationToggleController from \"./invitation_toggle_controller\"\napplication.register(\"invitation-toggle\", InvitationToggleController)\n\nimport InvitesController from \"./invites_controller\"\napplication.register(\"invites\", InvitesController)\n\nimport LoginController from \"./login_controller\"\napplication.register(\"login\", LoginController)\n\nimport ManageAdministratorController from \"./manage_administrator_controller\"\napplication.register(\"manage-administrator\", ManageAdministratorController)\n\nimport MobileAppSignupController from \"./mobile_app_signup_controller\"\napplication.register(\"mobile-app-signup\", MobileAppSignupController)\n\nimport ModalCloserController from \"./modal_closer_controller\"\napplication.register(\"modal-closer\", ModalCloserController)\n\nimport ModalController from \"./modal_controller\"\napplication.register(\"modal\", ModalController)\n\nimport MultiSelectController from \"./multi_select_controller\"\napplication.register(\"multi-select\", MultiSelectController)\n\nimport NestedFormController from \"./nested_form_controller\"\napplication.register(\"nested-form\", NestedFormController)\n\nimport NotificationBellController from \"./notification_bell_controller\"\napplication.register(\"notification-bell\", NotificationBellController)\n\nimport NotificationsController from \"./notifications_controller\"\napplication.register(\"notifications\", NotificationsController)\n\nimport OfferingsController from \"./offerings_controller\"\napplication.register(\"offerings\", OfferingsController)\n\nimport OrganizationQuickSearchController from \"./organization_quick_search_controller\"\napplication.register(\"organization-quick-search\", OrganizationQuickSearchController)\n\nimport OrganizationsController from \"./organizations_controller\"\napplication.register(\"organizations\", OrganizationsController)\n\nimport ParticipantsController from \"./participants_controller\"\napplication.register(\"participants\", ParticipantsController)\n\nimport PasswordController from \"./password_controller\"\napplication.register(\"password\", PasswordController)\n\nimport PeerReviewedResourcesController from \"./peer_reviewed_resources_controller\"\napplication.register(\"peer-reviewed-resources\", PeerReviewedResourcesController)\n\nimport PhoneInputController from \"./phone_input_controller\"\napplication.register(\"phone-input\", PhoneInputController)\n\nimport PlansController from \"./plans_controller\"\napplication.register(\"plans\", PlansController)\n\nimport PopoverHintController from \"./popover_hint_controller\"\napplication.register(\"popover-hint\", PopoverHintController)\n\nimport PreventDefaultController from \"./prevent_default_controller\"\napplication.register(\"prevent-default\", PreventDefaultController)\n\nimport PriorityGroupsController from \"./priority_groups_controller\"\napplication.register(\"priority-groups\", PriorityGroupsController)\n\nimport PriorityGroupsExportController from \"./priority_groups_export_controller\"\napplication.register(\"priority-groups-export\", PriorityGroupsExportController)\n\nimport ProcessImprovementController from \"./process_improvement_controller\"\napplication.register(\"process-improvement\", ProcessImprovementController)\n\nimport ProcessImprovementResultController from \"./process_improvement_result_controller\"\napplication.register(\"process-improvement-result\", ProcessImprovementResultController)\n\nimport RefreshController from \"./refresh_controller\"\napplication.register(\"refresh\", RefreshController)\n\nimport ReportDisplayController from \"./report_display_controller\"\napplication.register(\"report-display\", ReportDisplayController)\n\nimport RecentChangesController from \"./recent_changes_controller\"\napplication.register(\"recent-changes\", RecentChangesController)\n\nimport ReportsController from \"./reports_controller\"\napplication.register(\"reports\", ReportsController)\n\nimport ResourceSubAccountCategoriesController from \"./resource_sub_account_categories_controller\"\napplication.register(\"resource-sub-account-categories\", ResourceSubAccountCategoriesController)\n\nimport ResourcesController from \"./resources_controller\"\napplication.register(\"resources\", ResourcesController)\n\nimport SaDashboardController from \"./sa_dashboard_controller\"\napplication.register(\"sa-dashboard\", SaDashboardController)\n\nimport ScheduledSettingsController from \"./scheduled_settings_controller\"\napplication.register(\"scheduled-settings\", ScheduledSettingsController)\n\nimport ScrollIntoViewController from \"./scroll_into_view_controller\"\napplication.register(\"scroll-into-view\", ScrollIntoViewController)\n\nimport Select2Controller from \"./select2_controller\"\napplication.register(\"select2\", Select2Controller)\n\nimport SessionRefreshController from \"./session_refresh_controller\"\napplication.register(\"session-refresh\", SessionRefreshController)\n\nimport SignupController from \"./signup_controller\"\napplication.register(\"signup\", SignupController)\n\nimport SignupQuestionsController from \"./signup_questions_controller\"\napplication.register(\"signup-questions\", SignupQuestionsController)\n\nimport StarterKitController from \"./starter_kit_controller\"\napplication.register(\"starter-kit\", StarterKitController)\n\nimport SubAccountVerificationController from \"./sub_account_verification_controller\"\napplication.register(\"sub-account-verification\", SubAccountVerificationController)\n\nimport SuperAdminController from \"./super_admin_controller\"\napplication.register(\"super-admin\", SuperAdminController)\n\nimport SupportController from \"./support_controller\"\napplication.register(\"support\", SupportController)\n\nimport TermsAcceptanceController from \"./terms_acceptance_controller\"\napplication.register(\"terms-acceptance\", TermsAcceptanceController)\n\nimport ThemeClassifierController from \"./theme_classifier_controller\"\napplication.register(\"theme-classifier\", ThemeClassifierController)\n\nimport ThemePreviewController from \"./theme_preview_controller\"\napplication.register(\"theme-preview\", ThemePreviewController)\n\nimport ThemeQualityReviewController from \"./theme_quality_review_controller\"\napplication.register(\"theme-quality-review\", ThemeQualityReviewController)\n\nimport ToolsController from \"./tools_controller\"\napplication.register(\"tools\", ToolsController)\n\nimport TwoFactorAuthenticationController from \"./two_factor_authentication_controller\"\napplication.register(\"two-factor-authentication\", TwoFactorAuthenticationController)\n\nimport UserFeedbackController from \"./user_feedback_controller\"\napplication.register(\"user-feedback\", UserFeedbackController)\n\nimport UserSurveyController from \"./user_survey_controller\"\napplication.register(\"user-survey\", UserSurveyController)\n\nimport ValidateEmailChangeController from \"./validate_email_change_controller\"\napplication.register(\"validate-email-change\", ValidateEmailChangeController)\n\nimport ValidateFormController from \"./validate_form_controller\"\napplication.register(\"validate-form\", ValidateFormController)\n\nimport VerifyAccountController from \"./verify_account_controller\"\napplication.register(\"verify-account\", VerifyAccountController)\n\nimport WbiVersionSelectorController from \"./wbi_version_selector_controller\"\napplication.register(\"wbi-version-selector\", WbiVersionSelectorController)\n\nimport WellnessCommonController from \"./wellness_common_controller\"\napplication.register(\"wellness-common\", WellnessCommonController)\n\nimport WellnessCommonCustomListController from \"./wellness_common_custom_list_controller\"\napplication.register(\"wellness-common-custom-list\", WellnessCommonCustomListController)\n\nimport WellnessCommonFoldersController from \"./wellness_common_folders_controller\"\napplication.register(\"wellness-common-folders\", WellnessCommonFoldersController)\n\nimport WellnessJourneyController from \"./wellness_journey_controller\"\napplication.register(\"wellness-journey\", WellnessJourneyController)\n\nimport WellnessSnapshotBuilderController from \"./wellness_snapshot_builder_controller\"\napplication.register(\"wellness-snapshot-builder\", WellnessSnapshotBuilderController)\n\nimport WellnessSnapshotController from \"./wellness_snapshot_controller\"\napplication.register(\"wellness-snapshot\", WellnessSnapshotController)\n\nimport WizardAutosaveController from \"./wizard_autosave_controller\"\napplication.register(\"wizard-autosave\", WizardAutosaveController)\n\nimport WizardFeedbackOptionsController from \"./wizard_feedback_options_controller\"\napplication.register(\"wizard-feedback-options\", WizardFeedbackOptionsController)\n\nimport WizardQuestionsController from \"./wizard_questions_controller\"\napplication.register(\"wizard-questions\", WizardQuestionsController)\n\nimport WizardResourceTabsController from \"./wizard_resource_tabs_controller\"\napplication.register(\"wizard-resource-tabs\", WizardResourceTabsController)\n\nimport WizardSidebarReviewController from \"./wizard_sidebar_review_controller\"\napplication.register(\"wizard-sidebar-review\", WizardSidebarReviewController)\n", "$(function(){\n  // Ensure we have the admin support panel loaded\n  // if($(\"#admin_support_ticket\").length) {\n    $(document).on('click', '.admin-support-item', function(e){\n      e.preventDefault();\n      $('.admin-support-item').removeClass(\"active\");\n      $(this).addClass(\"active\");\n\n      $('#support_form_holder').removeClass(\"hidden\");\n      $('#support_ticket_kind').val( $(this).data(\"kind\") );\n\n      $(\"#support_ticket_browser\").val( navigator.userAgent );\n      $(\"#support_ticket_link\").val(document.location.href);\n    });\n\n    $(document).on('submit', '#new_support_panel_ticket', function(){\n      $('#support_status').show();\n    });\n  // }\n\n  if($(\"#new_support_ticket\").length) {\n    $(\"#support_ticket_browser\").val( navigator.userAgent );\n    $(\"#support_ticket_link\").val(document.location.href);\n  }\n});", "/*\n\tMasked Input plugin for jQuery\n\tCopyright (c) 2007-2013 Josh Bush (digitalbush.com)\n\tLicensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)\n\tVersion: 1.3.1\n*/\n(function(e){function t(){var e=document.createElement(\"input\"),t=\"onpaste\";return e.setAttribute(t,\"\"),\"function\"==typeof e[t]?\"paste\":\"input\"}var n,a=t()+\".mask\",r=navigator.userAgent,i=/iphone/i.test(r),o=/android/i.test(r);e.mask={definitions:{9:\"[0-9]\",a:\"[A-Za-z]\",\"*\":\"[A-Za-z0-9]\"},dataName:\"rawMaskFn\",placeholder:\"_\"},e.fn.extend({caret:function(e,t){var n;if(0!==this.length&&!this.is(\":hidden\"))return\"number\"==typeof e?(t=\"number\"==typeof t?t:e,this.each(function(){this.setSelectionRange?this.setSelectionRange(e,t):this.createTextRange&&(n=this.createTextRange(),n.collapse(!0),n.moveEnd(\"character\",t),n.moveStart(\"character\",e),n.select())})):(this[0].setSelectionRange?(e=this[0].selectionStart,t=this[0].selectionEnd):document.selection&&document.selection.createRange&&(n=document.selection.createRange(),e=0-n.duplicate().moveStart(\"character\",-1e5),t=e+n.text.length),{begin:e,end:t})},unmask:function(){return this.trigger(\"unmask\")},mask:function(t,r){var c,l,s,u,f,h;return!t&&this.length>0?(c=e(this[0]),c.data(e.mask.dataName)()):(r=e.extend({placeholder:e.mask.placeholder,completed:null},r),l=e.mask.definitions,s=[],u=h=t.length,f=null,e.each(t.split(\"\"),function(e,t){\"?\"==t?(h--,u=e):l[t]?(s.push(RegExp(l[t])),null===f&&(f=s.length-1)):s.push(null)}),this.trigger(\"unmask\").each(function(){function c(e){for(;h>++e&&!s[e];);return e}function d(e){for(;--e>=0&&!s[e];);return e}function m(e,t){var n,a;if(!(0>e)){for(n=e,a=c(t);h>n;n++)if(s[n]){if(!(h>a&&s[n].test(R[a])))break;R[n]=R[a],R[a]=r.placeholder,a=c(a)}b(),x.caret(Math.max(f,e))}}function p(e){var t,n,a,i;for(t=e,n=r.placeholder;h>t;t++)if(s[t]){if(a=c(t),i=R[t],R[t]=n,!(h>a&&s[a].test(i)))break;n=i}}function g(e){var t,n,a,r=e.which;8===r||46===r||i&&127===r?(t=x.caret(),n=t.begin,a=t.end,0===a-n&&(n=46!==r?d(n):a=c(n-1),a=46===r?c(a):a),k(n,a),m(n,a-1),e.preventDefault()):27==r&&(x.val(S),x.caret(0,y()),e.preventDefault())}function v(t){var n,a,i,l=t.which,u=x.caret();t.ctrlKey||t.altKey||t.metaKey||32>l||l&&(0!==u.end-u.begin&&(k(u.begin,u.end),m(u.begin,u.end-1)),n=c(u.begin-1),h>n&&(a=String.fromCharCode(l),s[n].test(a)&&(p(n),R[n]=a,b(),i=c(n),o?setTimeout(e.proxy(e.fn.caret,x,i),0):x.caret(i),r.completed&&i>=h&&r.completed.call(x))),t.preventDefault())}function k(e,t){var n;for(n=e;t>n&&h>n;n++)s[n]&&(R[n]=r.placeholder)}function b(){x.val(R.join(\"\"))}function y(e){var t,n,a=x.val(),i=-1;for(t=0,pos=0;h>t;t++)if(s[t]){for(R[t]=r.placeholder;pos++<a.length;)if(n=a.charAt(pos-1),s[t].test(n)){R[t]=n,i=t;break}if(pos>a.length)break}else R[t]===a.charAt(pos)&&t!==u&&(pos++,i=t);return e?b():u>i+1?(x.val(\"\"),k(0,h)):(b(),x.val(x.val().substring(0,i+1))),u?t:f}var x=e(this),R=e.map(t.split(\"\"),function(e){return\"?\"!=e?l[e]?r.placeholder:e:void 0}),S=x.val();x.data(e.mask.dataName,function(){return e.map(R,function(e,t){return s[t]&&e!=r.placeholder?e:null}).join(\"\")}),x.attr(\"readonly\")||x.one(\"unmask\",function(){x.unbind(\".mask\").removeData(e.mask.dataName)}).bind(\"focus.mask\",function(){clearTimeout(n);var e;S=x.val(),e=y(),n=setTimeout(function(){b(),e==t.length?x.caret(0,e):x.caret(e)},10)}).bind(\"blur.mask\",function(){y(),x.val()!=S&&x.change()}).bind(\"keydown.mask\",g).bind(\"keypress.mask\",v).bind(a,function(){setTimeout(function(){var e=y(!0);x.caret(e),r.completed&&e==x.val().length&&r.completed.call(x)},0)}),y()}))}})})(jQuery);\n\n// jQuery(function($){\n//    //$(\".phone\").mask(\"999-999-9999\");\n//    //$(\".mask-phone\").attr(\"placeholder\",\"___-___-____\").mask(\"999-999-9999\");\n// });\n", "import select2 from \"./select2.full.min\"\nselect2(window, jQuery);\n\n/*\nAdapter to add \"Select all\" \"Select none\" within select2 dropdown\n\nUseage\n$('#selector').select2({\n    dropdownAdapter: $.fn.select2.amd.require('select2/selectAllAdapter')\n});\n */\n$.fn.select2.amd.define('select2/selectAllAdapter', [\n    'select2/utils',\n    'select2/dropdown',\n    'select2/dropdown/attachBody'\n], function (Utils, Dropdown, AttachBody) {\n\n    function SelectAll() {\n    }\n\n    SelectAll.prototype.render = function (decorated) {\n        var self = this,\n            $rendered = decorated.call(this),\n            $selectAll = $(\n                '<button class=\"btn btn-xxs btn-outline-secondary select2-all-btn\" type=\"button\">'+i18n_string(\"general.select_all\", \"Select All\")+'</button>'\n            ),\n            $unselectAll = $(\n                '<button class=\"btn btn-xxs btn-outline-secondary select2-all-btn\" type=\"button\">'+i18n_string(\"general.deselect_all\", \"Deselect All\")+'</button>'\n            ),\n            $btnContainer = $('<div class=\"select2-custom-header\">').append($selectAll).append($unselectAll);\n\n        if (self.$element.data(\"show_close_btn\")) {\n            var $closeBTN = $(\n                    '<button class=\"btn btn-xxs btn-outline-secondary select2-all-btn\" type=\"button\">&times;</button>'\n                );\n            $btnContainer.append($closeBTN);\n            $closeBTN.on('click', function (e) {\n                self.trigger('close');\n            });\n        }\n        if (!this.$element.prop(\"multiple\")) {\n            // this isn't a multi-select -> don't add the buttons!\n            return $rendered;\n        }\n        $rendered.find('.select2-dropdown').prepend($btnContainer);\n        $selectAll.on('click', function (e) {\n            // The exclusive options setting is used in the combined question editor\n            if (self.$element.data(\"exclusive_options\")) {\n                // 'mapped_options['+customer_sub_account_id+']'+name_str.replace('option_name','')+'[]';\n                let name_str = self.$element.attr(\"name\");\n                let name_str_array = name_str.split(/[\\[|\\]]/);\n                let customer_sub_account_id = name_str_array[1];\n\n                let skip_options = [];\n                let option_already_selected = false;\n                document.querySelectorAll(\".sub-account-question-option-cell-\" + customer_sub_account_id).forEach(function (optionCell) {\n                    let select_element = optionCell.querySelector('select');\n                    for (let check_option of select_element.selectedOptions) {\n                        skip_options.push(check_option.value);\n                    }\n                });\n                self.$element.find('option').each(function () {\n                    if (skip_options.indexOf(this.value) === -1) {\n                        $(this).prop(\"selected\", true);\n                    }\n                });\n            } else {\n                self.$element.find('option').each(function () {\n                    $(this).prop(\"selected\", true);\n                });\n            }\n            //self.$element.trigger('change');\n            let event = new Event('change', { bubbles: true }) // fire a native event\n            self.$element[0].dispatchEvent(event);\n            self.trigger('close');\n        });\n        $unselectAll.on('click', function (e) {\n            self.$element.find('option').each(function(){\n                $(this).prop(\"selected\", false);\n            });\n            //self.$element.trigger('change');\n            let event = new Event('change', { bubbles: true }) // fire a native event\n            self.$element[0].dispatchEvent(event);\n            self.trigger('close');\n        });\n        return $rendered;\n    };\n\n    return Utils.Decorate(\n        Utils.Decorate(\n            Dropdown,\n            AttachBody\n        ),\n        SelectAll\n    );\n\n});\n\n// import \"./select2-i18n/include-languages\" -- Does not work -- need to include the js code here\n// select2-i18n/en.js\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Please delete \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results\u2026\"},maximumSelected:function(e){var n=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No results found\"},searching:function(){return\"Searching\u2026\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define,e.require}();\n\n// select2-i18n/es.js\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"No se pudieron cargar los resultados\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Por favor, elimine \"+n+\" car\";return r+=1==n?\"\u00E1cter\":\"acteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Por favor, introduzca \"+n+\" car\";return r+=1==n?\"\u00E1cter\":\"acteres\"},loadingMore:function(){return\"Cargando m\u00E1s resultados\u2026\"},maximumSelected:function(e){var n=\"S\u00F3lo puede seleccionar \"+e.maximum+\" elemento\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando\u2026\"},removeAllItems:function(){return\"Eliminar todos los elementos\"}}}),e.define,e.require}();\n\n// select2-i18n/fr.js\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les r\u00E9sultats ne peuvent pas \u00EAtre charg\u00E9s.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return\"Supprimez \"+n+\" caract\u00E8re\"+(n>1?\"s\":\"\")},inputTooShort:function(e){var n=e.minimum-e.input.length;return\"Saisissez au moins \"+n+\" caract\u00E8re\"+(n>1?\"s\":\"\")},loadingMore:function(){return\"Chargement de r\u00E9sultats suppl\u00E9mentaires\u2026\"},maximumSelected:function(e){return\"Vous pouvez seulement s\u00E9lectionner \"+e.maximum+\" \u00E9l\u00E9ment\"+(e.maximum>1?\"s\":\"\")},noResults:function(){return\"Aucun r\u00E9sultat trouv\u00E9\"},searching:function(){return\"Recherche en cours\u2026\"},removeAllItems:function(){return\"Supprimer tous les \u00E9l\u00E9ments\"}}}),e.define,e.require}();", "/*! TableSorter (FORK) v2.31.1 *//*\n* Client-side table sorting with ease!\n* @requires jQuery v1.2.6+\n*\n* Copyright (c) 2007 Christian Bach\n* fork maintained by Rob Garrison\n*\n* Examples and original docs at: http://tablesorter.com\n* Dual licensed under the MIT and GPL licenses:\n* http://www.opensource.org/licenses/mit-license.php\n* http://www.gnu.org/licenses/gpl.html\n*\n* @type jQuery\n* @name tablesorter (FORK)\n* @cat Plugins/Tablesorter\n* @author Christian Bach - christian.bach@polyester.se\n* @contributor Rob Garrison - https://github.com/Mottie/tablesorter\n* @docs (fork) - https://mottie.github.io/tablesorter/docs/\n*/\n/*jshint browser:true, jquery:true, unused:false, expr: true */\n;( function( $ ) {\n\t'use strict';\n\tvar ts = $.tablesorter = {\n\n\t\tversion : '2.31.1',\n\n\t\tparsers : [],\n\t\twidgets : [],\n\t\tdefaults : {\n\n\t\t\t// *** appearance\n\t\t\ttheme            : 'default',  // adds tablesorter-{theme} to the table for styling\n\t\t\twidthFixed       : false,      // adds colgroup to fix widths of columns\n\t\t\tshowProcessing   : false,      // show an indeterminate timer icon in the header when the table is sorted or filtered.\n\n\t\t\theaderTemplate   : '{content}',// header layout template (HTML ok); {content} = innerHTML, {icon} = <i/> // class from cssIcon\n\t\t\tonRenderTemplate : null,       // function( index, template ) { return template; }, // template is a string\n\t\t\tonRenderHeader   : null,       // function( index ) {}, // nothing to return\n\n\t\t\t// *** functionality\n\t\t\tcancelSelection  : true,       // prevent text selection in the header\n\t\t\ttabIndex         : true,       // add tabindex to header for keyboard accessibility\n\t\t\tdateFormat       : 'mmddyyyy', // other options: 'ddmmyyy' or 'yyyymmdd'\n\t\t\tsortMultiSortKey : 'shiftKey', // key used to select additional columns\n\t\t\tsortResetKey     : 'ctrlKey',  // key used to remove sorting on a column\n\t\t\tusNumberFormat   : true,       // false for German '1.234.567,89' or French '1 234 567,89'\n\t\t\tdelayInit        : false,      // if false, the parsed table contents will not update until the first sort\n\t\t\tserverSideSorting: false,      // if true, server-side sorting should be performed because client-side sorting will be disabled, but the ui and events will still be used.\n\t\t\tresort           : true,       // default setting to trigger a resort after an 'update', 'addRows', 'updateCell', etc has completed\n\n\t\t\t// *** sort options\n\t\t\theaders          : {},         // set sorter, string, empty, locked order, sortInitialOrder, filter, etc.\n\t\t\tignoreCase       : true,       // ignore case while sorting\n\t\t\tsortForce        : null,       // column(s) first sorted; always applied\n\t\t\tsortList         : [],         // Initial sort order; applied initially; updated when manually sorted\n\t\t\tsortAppend       : null,       // column(s) sorted last; always applied\n\t\t\tsortStable       : false,      // when sorting two rows with exactly the same content, the original sort order is maintained\n\n\t\t\tsortInitialOrder : 'asc',      // sort direction on first click\n\t\t\tsortLocaleCompare: false,      // replace equivalent character (accented characters)\n\t\t\tsortReset        : false,      // third click on the header will reset column to default - unsorted\n\t\t\tsortRestart      : false,      // restart sort to 'sortInitialOrder' when clicking on previously unsorted columns\n\n\t\t\temptyTo          : 'bottom',   // sort empty cell to bottom, top, none, zero, emptyMax, emptyMin\n\t\t\tstringTo         : 'max',      // sort strings in numerical column as max, min, top, bottom, zero\n\t\t\tduplicateSpan    : true,       // colspan cells in the tbody will have duplicated content in the cache for each spanned column\n\t\t\ttextExtraction   : 'basic',    // text extraction method/function - function( node, table, cellIndex ) {}\n\t\t\ttextAttribute    : 'data-text',// data-attribute that contains alternate cell text (used in default textExtraction function)\n\t\t\ttextSorter       : null,       // choose overall or specific column sorter function( a, b, direction, table, columnIndex ) [alt: ts.sortText]\n\t\t\tnumberSorter     : null,       // choose overall numeric sorter function( a, b, direction, maxColumnValue )\n\n\t\t\t// *** widget options\n\t\t\tinitWidgets      : true,       // apply widgets on tablesorter initialization\n\t\t\twidgetClass      : 'widget-{name}', // table class name template to match to include a widget\n\t\t\twidgets          : [],         // method to add widgets, e.g. widgets: ['zebra']\n\t\t\twidgetOptions    : {\n\t\t\t\tzebra : [ 'even', 'odd' ]  // zebra widget alternating row class names\n\t\t\t},\n\n\t\t\t// *** callbacks\n\t\t\tinitialized      : null,       // function( table ) {},\n\n\t\t\t// *** extra css class names\n\t\t\ttableClass       : '',\n\t\t\tcssAsc           : '',\n\t\t\tcssDesc          : '',\n\t\t\tcssNone          : '',\n\t\t\tcssHeader        : '',\n\t\t\tcssHeaderRow     : '',\n\t\t\tcssProcessing    : '', // processing icon applied to header during sort/filter\n\n\t\t\tcssChildRow      : 'tablesorter-childRow', // class name indiciating that a row is to be attached to its parent\n\t\t\tcssInfoBlock     : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)\n\t\t\tcssNoSort        : 'tablesorter-noSort',   // class name added to element inside header; clicking on it won't cause a sort\n\t\t\tcssIgnoreRow     : 'tablesorter-ignoreRow',// header row to ignore; cells within this row will not be added to c.$headers\n\n\t\t\tcssIcon          : 'tablesorter-icon', // if this class does not exist, the {icon} will not be added from the headerTemplate\n\t\t\tcssIconNone      : '', // class name added to the icon when there is no column sort\n\t\t\tcssIconAsc       : '', // class name added to the icon when the column has an ascending sort\n\t\t\tcssIconDesc      : '', // class name added to the icon when the column has a descending sort\n\t\t\tcssIconDisabled  : '', // class name added to the icon when the column has a disabled sort\n\n\t\t\t// *** events\n\t\t\tpointerClick     : 'click',\n\t\t\tpointerDown      : 'mousedown',\n\t\t\tpointerUp        : 'mouseup',\n\n\t\t\t// *** selectors\n\t\t\tselectorHeaders  : '> thead th, > thead td',\n\t\t\tselectorSort     : 'th, td', // jQuery selector of content within selectorHeaders that is clickable to trigger a sort\n\t\t\tselectorRemove   : '.remove-me',\n\n\t\t\t// *** advanced\n\t\t\tdebug            : false,\n\n\t\t\t// *** Internal variables\n\t\t\theaderList: [],\n\t\t\tempties: {},\n\t\t\tstrings: {},\n\t\t\tparsers: [],\n\n\t\t\t// *** parser options for validator; values must be falsy!\n\t\t\tglobalize: 0,\n\t\t\timgAttr: 0\n\n\t\t\t// removed: widgetZebra: { css: ['even', 'odd'] }\n\n\t\t},\n\n\t\t// internal css classes - these will ALWAYS be added to\n\t\t// the table and MUST only contain one class name - fixes #381\n\t\tcss : {\n\t\t\ttable      : 'tablesorter',\n\t\t\tcssHasChild: 'tablesorter-hasChildRow',\n\t\t\tchildRow   : 'tablesorter-childRow',\n\t\t\tcolgroup   : 'tablesorter-colgroup',\n\t\t\theader     : 'tablesorter-header',\n\t\t\theaderRow  : 'tablesorter-headerRow',\n\t\t\theaderIn   : 'tablesorter-header-inner',\n\t\t\ticon       : 'tablesorter-icon',\n\t\t\tprocessing : 'tablesorter-processing',\n\t\t\tsortAsc    : 'tablesorter-headerAsc',\n\t\t\tsortDesc   : 'tablesorter-headerDesc',\n\t\t\tsortNone   : 'tablesorter-headerUnSorted'\n\t\t},\n\n\t\t// labels applied to sortable headers for accessibility (aria) support\n\t\tlanguage : {\n\t\t\tsortAsc      : 'Ascending sort applied, ',\n\t\t\tsortDesc     : 'Descending sort applied, ',\n\t\t\tsortNone     : 'No sort applied, ',\n\t\t\tsortDisabled : 'sorting is disabled',\n\t\t\tnextAsc      : 'activate to apply an ascending sort',\n\t\t\tnextDesc     : 'activate to apply a descending sort',\n\t\t\tnextNone     : 'activate to remove the sort'\n\t\t},\n\n\t\tregex : {\n\t\t\ttemplateContent : /\\{content\\}/g,\n\t\t\ttemplateIcon    : /\\{icon\\}/g,\n\t\t\ttemplateName    : /\\{name\\}/i,\n\t\t\tspaces          : /\\s+/g,\n\t\t\tnonWord         : /\\W/g,\n\t\t\tformElements    : /(input|select|button|textarea)/i,\n\n\t\t\t// *** sort functions ***\n\t\t\t// regex used in natural sort\n\t\t\t// chunk/tokenize numbers & letters\n\t\t\tchunk  : /(^([+\\-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\n\t\t\t// replace chunks @ ends\n\t\t\tchunks : /(^\\\\0|\\\\0$)/,\n\t\t\thex    : /^0x[0-9a-f]+$/i,\n\n\t\t\t// *** formatFloat ***\n\t\t\tcomma                : /,/g,\n\t\t\tdigitNonUS           : /[\\s|\\.]/g,\n\t\t\tdigitNegativeTest    : /^\\s*\\([.\\d]+\\)/,\n\t\t\tdigitNegativeReplace : /^\\s*\\(([.\\d]+)\\)/,\n\n\t\t\t// *** isDigit ***\n\t\t\tdigitTest    : /^[\\-+(]?\\d+[)]?$/,\n\t\t\tdigitReplace : /[,.'\"\\s]/g\n\n\t\t},\n\n\t\t// digit sort, text location\n\t\tstring : {\n\t\t\tmax      : 1,\n\t\t\tmin      : -1,\n\t\t\temptymin : 1,\n\t\t\temptymax : -1,\n\t\t\tzero     : 0,\n\t\t\tnone     : 0,\n\t\t\t'null'   : 0,\n\t\t\ttop      : true,\n\t\t\tbottom   : false\n\t\t},\n\n\t\tkeyCodes : {\n\t\t\tenter : 13\n\t\t},\n\n\t\t// placeholder date parser data (globalize)\n\t\tdates : {},\n\n\t\t// These methods can be applied on table.config instance\n\t\tinstanceMethods : {},\n\n\t\t/*\n\t\t\u2584\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584\n\t\t\u2580\u2588\u2584    \u2588\u2588\u2584\u2584     \u2588\u2588   \u2588\u2588  \u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588\n\t\t   \u2580\u2588\u2584 \u2588\u2588\u2580\u2580     \u2588\u2588   \u2588\u2588  \u2588\u2588 \u2588\u2588\u2580\u2580\u2580\n\t\t\u2588\u2588\u2588\u2588\u2588\u2580 \u2588\u2588\u2588\u2588\u2588\u2588   \u2588\u2588   \u2580\u2588\u2588\u2588\u2588\u2580 \u2588\u2588\n\t\t*/\n\n\t\tsetup : function( table, c ) {\n\t\t\t// if no thead or tbody, or tablesorter is already present, quit\n\t\t\tif ( !table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true ) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tif ( table.hasInitialized ) {\n\t\t\t\t\t\tconsole.warn( 'Stopping initialization. Tablesorter has already been initialized' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error( 'Stopping initialization! No table, thead or tbody', table );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar tmp = '',\n\t\t\t\t$table = $( table ),\n\t\t\t\tmeta = $.metadata;\n\t\t\t// initialization flag\n\t\t\ttable.hasInitialized = false;\n\t\t\t// table is being processed flag\n\t\t\ttable.isProcessing = true;\n\t\t\t// make sure to store the config object\n\t\t\ttable.config = c;\n\t\t\t// save the settings where they read\n\t\t\t$.data( table, 'tablesorter', c );\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Initializing tablesorter v' + ts.version );\n\t\t\t\t$.data( table, 'startoveralltimer', new Date() );\n\t\t\t}\n\n\t\t\t// removing this in version 3 (only supports jQuery 1.7+)\n\t\t\tc.supportsDataObject = ( function( version ) {\n\t\t\t\tversion[ 0 ] = parseInt( version[ 0 ], 10 );\n\t\t\t\treturn ( version[ 0 ] > 1 ) || ( version[ 0 ] === 1 && parseInt( version[ 1 ], 10 ) >= 4 );\n\t\t\t})( $.fn.jquery.split( '.' ) );\n\t\t\t// ensure case insensitivity\n\t\t\tc.emptyTo = c.emptyTo.toLowerCase();\n\t\t\tc.stringTo = c.stringTo.toLowerCase();\n\t\t\tc.last = { sortList : [], clickedIndex : -1 };\n\t\t\t// add table theme class only if there isn't already one there\n\t\t\tif ( !/tablesorter\\-/.test( $table.attr( 'class' ) ) ) {\n\t\t\t\ttmp = ( c.theme !== '' ? ' tablesorter-' + c.theme : '' );\n\t\t\t}\n\n\t\t\t// give the table a unique id, which will be used in namespace binding\n\t\t\tif ( !c.namespace ) {\n\t\t\t\tc.namespace = '.tablesorter' + Math.random().toString( 16 ).slice( 2 );\n\t\t\t} else {\n\t\t\t\t// make sure namespace starts with a period & doesn't have weird characters\n\t\t\t\tc.namespace = '.' + c.namespace.replace( ts.regex.nonWord, '' );\n\t\t\t}\n\n\t\t\tc.table = table;\n\t\t\tc.$table = $table\n\t\t\t\t// add namespace to table to allow bindings on extra elements to target\n\t\t\t\t// the parent table (e.g. parser-input-select)\n\t\t\t\t.addClass( ts.css.table + ' ' + c.tableClass + tmp + ' ' + c.namespace.slice(1) )\n\t\t\t\t.attr( 'role', 'grid' );\n\t\t\tc.$headers = $table.find( c.selectorHeaders );\n\n\t\t\tc.$table.children().children( 'tr' ).attr( 'role', 'row' );\n\t\t\tc.$tbodies = $table.children( 'tbody:not(.' + c.cssInfoBlock + ')' ).attr({\n\t\t\t\t'aria-live' : 'polite',\n\t\t\t\t'aria-relevant' : 'all'\n\t\t\t});\n\t\t\tif ( c.$table.children( 'caption' ).length ) {\n\t\t\t\ttmp = c.$table.children( 'caption' )[ 0 ];\n\t\t\t\tif ( !tmp.id ) { tmp.id = c.namespace.slice( 1 ) + 'caption'; }\n\t\t\t\tc.$table.attr( 'aria-labelledby', tmp.id );\n\t\t\t}\n\t\t\tc.widgetInit = {}; // keep a list of initialized widgets\n\t\t\t// change textExtraction via data-attribute\n\t\t\tc.textExtraction = c.$table.attr( 'data-text-extraction' ) || c.textExtraction || 'basic';\n\t\t\t// build headers\n\t\t\tts.buildHeaders( c );\n\t\t\t// fixate columns if the users supplies the fixedWidth option\n\t\t\t// do this after theme has been applied\n\t\t\tts.fixColumnWidth( table );\n\t\t\t// add widgets from class name\n\t\t\tts.addWidgetFromClass( table );\n\t\t\t// add widget options before parsing (e.g. grouping widget has parser settings)\n\t\t\tts.applyWidgetOptions( table );\n\t\t\t// try to auto detect column type, and store in tables config\n\t\t\tts.setupParsers( c );\n\t\t\t// start total row count at zero\n\t\t\tc.totalRows = 0;\n\t\t\t// only validate options while debugging. See #1528\n\t\t\tif (c.debug) {\n\t\t\t\tts.validateOptions( c );\n\t\t\t}\n\t\t\t// build the cache for the tbody cells\n\t\t\t// delayInit will delay building the cache until the user starts a sort\n\t\t\tif ( !c.delayInit ) { ts.buildCache( c ); }\n\t\t\t// bind all header events and methods\n\t\t\tts.bindEvents( table, c.$headers, true );\n\t\t\tts.bindMethods( c );\n\t\t\t// get sort list from jQuery data or metadata\n\t\t\t// in jQuery < 1.4, an error occurs when calling $table.data()\n\t\t\tif ( c.supportsDataObject && typeof $table.data().sortlist !== 'undefined' ) {\n\t\t\t\tc.sortList = $table.data().sortlist;\n\t\t\t} else if ( meta && ( $table.metadata() && $table.metadata().sortlist ) ) {\n\t\t\t\tc.sortList = $table.metadata().sortlist;\n\t\t\t}\n\t\t\t// apply widget init code\n\t\t\tts.applyWidget( table, true );\n\t\t\t// if user has supplied a sort list to constructor\n\t\t\tif ( c.sortList.length > 0 ) {\n\t\t\t\t// save sortList before any sortAppend is added\n\t\t\t\tc.last.sortList = c.sortList;\n\t\t\t\tts.sortOn( c, c.sortList, {}, !c.initWidgets );\n\t\t\t} else {\n\t\t\t\tts.setHeadersCss( c );\n\t\t\t\tif ( c.initWidgets ) {\n\t\t\t\t\t// apply widget format\n\t\t\t\t\tts.applyWidget( table, false );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// show processesing icon\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\t$table\n\t\t\t\t.unbind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace )\n\t\t\t\t.bind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace, function( e ) {\n\t\t\t\t\tclearTimeout( c.timerProcessing );\n\t\t\t\t\tts.isProcessing( table );\n\t\t\t\t\tif ( e.type === 'sortBegin' ) {\n\t\t\t\t\t\tc.timerProcessing = setTimeout( function() {\n\t\t\t\t\t\t\tts.isProcessing( table, true );\n\t\t\t\t\t\t}, 500 );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// initialized\n\t\t\ttable.hasInitialized = true;\n\t\t\ttable.isProcessing = false;\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Overall initialization time:' + ts.benchmark( $.data( table, 'startoveralltimer' ) ) );\n\t\t\t\tif ( ts.debug(c, 'core') && console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\t$table.triggerHandler( 'tablesorter-initialized', table );\n\t\t\tif ( typeof c.initialized === 'function' ) {\n\t\t\t\tc.initialized( table );\n\t\t\t}\n\t\t},\n\n\t\tbindMethods : function( c ) {\n\t\t\tvar $table = c.$table,\n\t\t\t\tnamespace = c.namespace,\n\t\t\t\tevents = ( 'sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete ' +\n\t\t\t\t\t'sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup ' +\n\t\t\t\t\t'mouseleave ' ).split( ' ' )\n\t\t\t\t\t.join( namespace + ' ' );\n\t\t\t// apply easy methods that trigger bound events\n\t\t\t$table\n\t\t\t.unbind( events.replace( ts.regex.spaces, ' ' ) )\n\t\t\t.bind( 'sortReset' + namespace, function( e, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// using this.config to ensure functions are getting a non-cached version of the config\n\t\t\t\tts.sortReset( this.config, function( table ) {\n\t\t\t\t\tif (table.isApplyingWidgets) {\n\t\t\t\t\t\t// multiple triggers in a row... filterReset, then sortReset - see #1361\n\t\t\t\t\t\t// wait to update widgets\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tts.applyWidget( table, '', callback );\n\t\t\t\t\t\t}, 100 );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tts.applyWidget( table, '', callback );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.bind( 'updateAll' + namespace, function( e, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateAll( this.config, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'update' + namespace + ' updateRows' + namespace, function( e, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.update( this.config, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'updateHeaders' + namespace, function( e, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateHeaders( this.config, callback );\n\t\t\t})\n\t\t\t.bind( 'updateCell' + namespace, function( e, cell, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateCell( this.config, cell, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'addRows' + namespace, function( e, $row, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.addRows( this.config, $row, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'updateComplete' + namespace, function() {\n\t\t\t\tthis.isUpdating = false;\n\t\t\t})\n\t\t\t.bind( 'sorton' + namespace, function( e, list, callback, init ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.sortOn( this.config, list, callback, init );\n\t\t\t})\n\t\t\t.bind( 'appendCache' + namespace, function( e, callback, init ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.appendCache( this.config, init );\n\t\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\t\tcallback( this );\n\t\t\t\t}\n\t\t\t})\n\t\t\t// $tbodies variable is used by the tbody sorting widget\n\t\t\t.bind( 'updateCache' + namespace, function( e, callback, $tbodies ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateCache( this.config, callback, $tbodies );\n\t\t\t})\n\t\t\t.bind( 'applyWidgetId' + namespace, function( e, id ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.applyWidgetId( this, id );\n\t\t\t})\n\t\t\t.bind( 'applyWidgets' + namespace, function( e, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// apply widgets (false = not initializing)\n\t\t\t\tts.applyWidget( this, false, callback );\n\t\t\t})\n\t\t\t.bind( 'refreshWidgets' + namespace, function( e, all, dontapply ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.refreshWidgets( this, all, dontapply );\n\t\t\t})\n\t\t\t.bind( 'removeWidget' + namespace, function( e, name, refreshing ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.removeWidget( this, name, refreshing );\n\t\t\t})\n\t\t\t.bind( 'destroy' + namespace, function( e, removeClasses, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.destroy( this, removeClasses, callback );\n\t\t\t})\n\t\t\t.bind( 'resetToLoadState' + namespace, function( e ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// remove all widgets\n\t\t\t\tts.removeWidget( this, true, false );\n\t\t\t\tvar tmp = $.extend( true, {}, c.originalSettings );\n\t\t\t\t// restore original settings; this clears out current settings, but does not clear\n\t\t\t\t// values saved to storage.\n\t\t\t\tc = $.extend( true, {}, ts.defaults, tmp );\n\t\t\t\tc.originalSettings = tmp;\n\t\t\t\tthis.hasInitialized = false;\n\t\t\t\t// setup the entire table again\n\t\t\t\tts.setup( this, c );\n\t\t\t});\n\t\t},\n\n\t\tbindEvents : function( table, $headers, core ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar tmp,\n\t\t\t\tc = table.config,\n\t\t\t\tnamespace = c.namespace,\n\t\t\t\tdownTarget = null;\n\t\t\tif ( core !== true ) {\n\t\t\t\t$headers.addClass( namespace.slice( 1 ) + '_extra_headers' );\n\t\t\t\ttmp = ts.getClosest( $headers, 'table' );\n\t\t\t\tif ( tmp.length && tmp[ 0 ].nodeName === 'TABLE' && tmp[ 0 ] !== table ) {\n\t\t\t\t\t$( tmp[ 0 ] ).addClass( namespace.slice( 1 ) + '_extra_table' );\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = ( c.pointerDown + ' ' + c.pointerUp + ' ' + c.pointerClick + ' sort keyup ' )\n\t\t\t\t.replace( ts.regex.spaces, ' ' )\n\t\t\t\t.split( ' ' )\n\t\t\t\t.join( namespace + ' ' );\n\t\t\t// apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)\n\t\t\t$headers\n\t\t\t// http://stackoverflow.com/questions/5312849/jquery-find-self;\n\t\t\t.find( c.selectorSort )\n\t\t\t.add( $headers.filter( c.selectorSort ) )\n\t\t\t.unbind( tmp )\n\t\t\t.bind( tmp, function( e, external ) {\n\t\t\t\tvar $cell, cell, temp,\n\t\t\t\t\t$target = $( e.target ),\n\t\t\t\t\t// wrap event type in spaces, so the match doesn't trigger on inner words\n\t\t\t\t\ttype = ' ' + e.type + ' ';\n\t\t\t\t// only recognize left clicks\n\t\t\t\tif ( ( ( e.which || e.button ) !== 1 && !type.match( ' ' + c.pointerClick + ' | sort | keyup ' ) ) ||\n\t\t\t\t\t// allow pressing enter\n\t\t\t\t\t( type === ' keyup ' && e.which !== ts.keyCodes.enter ) ||\n\t\t\t\t\t// allow triggering a click event (e.which is undefined) & ignore physical clicks\n\t\t\t\t\t( type.match( ' ' + c.pointerClick + ' ' ) && typeof e.which !== 'undefined' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// ignore mouseup if mousedown wasn't on the same target\n\t\t\t\tif ( type.match( ' ' + c.pointerUp + ' ' ) && downTarget !== e.target && external !== true ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// set target on mousedown\n\t\t\t\tif ( type.match( ' ' + c.pointerDown + ' ' ) ) {\n\t\t\t\t\tdownTarget = e.target;\n\t\t\t\t\t// preventDefault needed or jQuery v1.3.2 and older throws an\n\t\t\t\t\t// \"Uncaught TypeError: handler.apply is not a function\" error\n\t\t\t\t\ttemp = $target.jquery.split( '.' );\n\t\t\t\t\tif ( temp[ 0 ] === '1' && temp[ 1 ] < 4 ) { e.preventDefault(); }\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdownTarget = null;\n\t\t\t\t$cell = ts.getClosest( $( this ), '.' + ts.css.header );\n\t\t\t\t// prevent sort being triggered on form elements\n\t\t\t\tif ( ts.regex.formElements.test( e.target.nodeName ) ||\n\t\t\t\t\t// nosort class name, or elements within a nosort container\n\t\t\t\t\t$target.hasClass( c.cssNoSort ) || $target.parents( '.' + c.cssNoSort ).length > 0 ||\n\t\t\t\t\t// disabled cell directly clicked\n\t\t\t\t\t$cell.hasClass( 'sorter-false' ) ||\n\t\t\t\t\t// elements within a button\n\t\t\t\t\t$target.parents( 'button' ).length > 0 ) {\n\t\t\t\t\treturn !c.cancelSelection;\n\t\t\t\t}\n\t\t\t\tif ( c.delayInit && ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t\tts.buildCache( c );\n\t\t\t\t}\n\t\t\t\t// use column index from data-attribute or index of current row; fixes #1116\n\t\t\t\tc.last.clickedIndex = $cell.attr( 'data-column' ) || $cell.index();\n\t\t\t\tcell = c.$headerIndexed[ c.last.clickedIndex ][0];\n\t\t\t\tif ( cell && !cell.sortDisabled ) {\n\t\t\t\t\tts.initSort( c, cell, e );\n\t\t\t\t}\n\t\t\t});\n\t\t\tif ( c.cancelSelection ) {\n\t\t\t\t// cancel selection\n\t\t\t\t$headers\n\t\t\t\t\t.attr( 'unselectable', 'on' )\n\t\t\t\t\t.bind( 'selectstart', false )\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'user-select' : 'none',\n\t\t\t\t\t\t'MozUserSelect' : 'none' // not needed for jQuery 1.8+\n\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tbuildHeaders : function( c ) {\n\t\t\tvar $temp, icon, timer, indx;\n\t\t\tc.headerList = [];\n\t\t\tc.headerContent = [];\n\t\t\tc.sortVars = [];\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\ttimer = new Date();\n\t\t\t}\n\t\t\t// children tr in tfoot - see issue #196 & #547\n\t\t\t// don't pass table.config to computeColumnIndex here - widgets (math) pass it to \"quickly\" index tbody cells\n\t\t\tc.columns = ts.computeColumnIndex( c.$table.children( 'thead, tfoot' ).children( 'tr' ) );\n\t\t\t// add icon if cssIcon option exists\n\t\t\ticon = c.cssIcon ?\n\t\t\t\t'<i class=\"' + ( c.cssIcon === ts.css.icon ? ts.css.icon : c.cssIcon + ' ' + ts.css.icon ) + '\"></i>' :\n\t\t\t\t'';\n\t\t\t// redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683\n\t\t\tc.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {\n\t\t\t\tvar configHeaders, header, column, template, tmp,\n\t\t\t\t\t$elem = $( elem );\n\t\t\t\t// ignore cell (don't add it to c.$headers) if row has ignoreRow class\n\t\t\t\tif ( ts.getClosest( $elem, 'tr' ).hasClass( c.cssIgnoreRow ) ) { return; }\n\t\t\t\t// transfer data-column to element if not th/td - #1459\n\t\t\t\tif ( !/(th|td)/i.test( elem.nodeName ) ) {\n\t\t\t\t\ttmp = ts.getClosest( $elem, 'th, td' );\n\t\t\t\t\t$elem.attr( 'data-column', tmp.attr( 'data-column' ) );\n\t\t\t\t}\n\t\t\t\t// make sure to get header cell & not column indexed cell\n\t\t\t\tconfigHeaders = ts.getColumnData( c.table, c.headers, index, true );\n\t\t\t\t// save original header content\n\t\t\t\tc.headerContent[ index ] = $elem.html();\n\t\t\t\t// if headerTemplate is empty, don't reformat the header cell\n\t\t\t\tif ( c.headerTemplate !== '' && !$elem.find( '.' + ts.css.headerIn ).length ) {\n\t\t\t\t\t// set up header template\n\t\t\t\t\ttemplate = c.headerTemplate\n\t\t\t\t\t\t.replace( ts.regex.templateContent, $elem.html() )\n\t\t\t\t\t\t.replace( ts.regex.templateIcon, $elem.find( '.' + ts.css.icon ).length ? '' : icon );\n\t\t\t\t\tif ( c.onRenderTemplate ) {\n\t\t\t\t\t\theader = c.onRenderTemplate.apply( $elem, [ index, template ] );\n\t\t\t\t\t\t// only change t if something is returned\n\t\t\t\t\t\tif ( header && typeof header === 'string' ) {\n\t\t\t\t\t\t\ttemplate = header;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$elem.html( '<div class=\"' + ts.css.headerIn + '\">' + template + '</div>' ); // faster than wrapInner\n\t\t\t\t}\n\t\t\t\tif ( c.onRenderHeader ) {\n\t\t\t\t\tc.onRenderHeader.apply( $elem, [ index, c, c.$table ] );\n\t\t\t\t}\n\t\t\t\tcolumn = parseInt( $elem.attr( 'data-column' ), 10 );\n\t\t\t\telem.column = column;\n\t\t\t\ttmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );\n\t\t\t\t// this may get updated numerous times if there are multiple rows\n\t\t\t\tc.sortVars[ column ] = {\n\t\t\t\t\tcount : -1, // set to -1 because clicking on the header automatically adds one\n\t\t\t\t\torder : tmp ?\n\t\t\t\t\t\t( c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ] ) : // desc, asc, unsorted\n\t\t\t\t\t\t( c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ] ),  // asc, desc, unsorted\n\t\t\t\t\tlockedOrder : false,\n\t\t\t\t\tsortedBy : ''\n\t\t\t\t};\n\t\t\t\ttmp = ts.getData( $elem, configHeaders, 'lockedOrder' ) || false;\n\t\t\t\tif ( typeof tmp !== 'undefined' && tmp !== false ) {\n\t\t\t\t\tc.sortVars[ column ].lockedOrder = true;\n\t\t\t\t\tc.sortVars[ column ].order = ts.getOrder( tmp ) ? [ 1, 1 ] : [ 0, 0 ];\n\t\t\t\t}\n\t\t\t\t// add cell to headerList\n\t\t\t\tc.headerList[ index ] = elem;\n\t\t\t\t$elem.addClass( ts.css.header + ' ' + c.cssHeader );\n\t\t\t\t// add to parent in case there are multiple rows\n\t\t\t\tts.getClosest( $elem, 'tr' )\n\t\t\t\t\t.addClass( ts.css.headerRow + ' ' + c.cssHeaderRow )\n\t\t\t\t\t.attr( 'role', 'row' );\n\t\t\t\t// allow keyboard cursor to focus on element\n\t\t\t\tif ( c.tabIndex ) {\n\t\t\t\t\t$elem.attr( 'tabindex', 0 );\n\t\t\t\t}\n\t\t\t\treturn elem;\n\t\t\t}) );\n\t\t\t// cache headers per column\n\t\t\tc.$headerIndexed = [];\n\t\t\tfor ( indx = 0; indx < c.columns; indx++ ) {\n\t\t\t\t// colspan in header making a column undefined\n\t\t\t\tif ( ts.isEmptyObject( c.sortVars[ indx ] ) ) {\n\t\t\t\t\tc.sortVars[ indx ] = {};\n\t\t\t\t}\n\t\t\t\t// Use c.$headers.parent() in case selectorHeaders doesn't point to the th/td\n\t\t\t\t$temp = c.$headers.filter( '[data-column=\"' + indx + '\"]' );\n\t\t\t\t// target sortable column cells, unless there are none, then use non-sortable cells\n\t\t\t\t// .last() added in jQuery 1.4; use .filter(':last') to maintain compatibility with jQuery v1.2.6\n\t\t\t\tc.$headerIndexed[ indx ] = $temp.length ?\n\t\t\t\t\t$temp.not( '.sorter-false' ).length ?\n\t\t\t\t\t\t$temp.not( '.sorter-false' ).filter( ':last' ) :\n\t\t\t\t\t\t$temp.filter( ':last' ) :\n\t\t\t\t\t$();\n\t\t\t}\n\t\t\tc.$table.find( c.selectorHeaders ).attr({\n\t\t\t\tscope: 'col',\n\t\t\t\trole : 'columnheader'\n\t\t\t});\n\t\t\t// enable/disable sorting\n\t\t\tts.updateHeader( c );\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Built headers:' + ts.benchmark( timer ) );\n\t\t\t\tconsole.log( c.$headers );\n\t\t\t}\n\t\t},\n\n\t\t// Use it to add a set of methods to table.config which will be available for all tables.\n\t\t// This should be done before table initialization\n\t\taddInstanceMethods : function( methods ) {\n\t\t\t$.extend( ts.instanceMethods, methods );\n\t\t},\n\n\t\t/*\n\t\t\u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2588\n\t\t\u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588 \u2580\u2588\u2584    \u2588\u2588\u2584\u2584   \u2588\u2588\u2584\u2584\u2588\u2588 \u2580\u2588\u2584\n\t\t\u2588\u2588\u2580\u2580\u2580  \u2588\u2588\u2580\u2580\u2588\u2588 \u2588\u2588\u2580\u2588\u2588     \u2580\u2588\u2584 \u2588\u2588\u2580\u2580   \u2588\u2588\u2580\u2588\u2588     \u2580\u2588\u2584\n\t\t\u2588\u2588     \u2588\u2588  \u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2580 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2580\n\t\t*/\n\t\tsetupParsers : function( c, $tbodies ) {\n\t\t\tvar rows, list, span, max, colIndex, indx, header, configHeaders,\n\t\t\t\tnoParser, parser, extractor, time, tbody, len,\n\t\t\t\ttable = c.table,\n\t\t\t\ttbodyIndex = 0,\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\tdebugOutput = {};\n\t\t\t// update table bodies in case we start with an empty table\n\t\t\tc.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );\n\t\t\ttbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies;\n\t\t\tlen = tbody.length;\n\t\t\tif ( len === 0 ) {\n\t\t\t\treturn debug ? console.warn( 'Warning: *Empty table!* Not building a parser cache' ) : '';\n\t\t\t} else if ( debug ) {\n\t\t\t\ttime = new Date();\n\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Detecting parsers for each column' );\n\t\t\t}\n\t\t\tlist = {\n\t\t\t\textractors: [],\n\t\t\t\tparsers: []\n\t\t\t};\n\t\t\twhile ( tbodyIndex < len ) {\n\t\t\t\trows = tbody[ tbodyIndex ].rows;\n\t\t\t\tif ( rows.length ) {\n\t\t\t\t\tcolIndex = 0;\n\t\t\t\t\tmax = c.columns;\n\t\t\t\t\tfor ( indx = 0; indx < max; indx++ ) {\n\t\t\t\t\t\theader = c.$headerIndexed[ colIndex ];\n\t\t\t\t\t\tif ( header && header.length ) {\n\t\t\t\t\t\t\t// get column indexed table cell; adding true parameter fixes #1362 but\n\t\t\t\t\t\t\t// it would break backwards compatibility...\n\t\t\t\t\t\t\tconfigHeaders = ts.getColumnData( table, c.headers, colIndex ); // , true );\n\t\t\t\t\t\t\t// get column parser/extractor\n\t\t\t\t\t\t\textractor = ts.getParserById( ts.getData( header, configHeaders, 'extractor' ) );\n\t\t\t\t\t\t\tparser = ts.getParserById( ts.getData( header, configHeaders, 'sorter' ) );\n\t\t\t\t\t\t\tnoParser = ts.getData( header, configHeaders, 'parser' ) === 'false';\n\t\t\t\t\t\t\t// empty cells behaviour - keeping emptyToBottom for backwards compatibility\n\t\t\t\t\t\t\tc.empties[colIndex] = (\n\t\t\t\t\t\t\t\tts.getData( header, configHeaders, 'empty' ) ||\n\t\t\t\t\t\t\t\tc.emptyTo || ( c.emptyToBottom ? 'bottom' : 'top' ) ).toLowerCase();\n\t\t\t\t\t\t\t// text strings behaviour in numerical sorts\n\t\t\t\t\t\t\tc.strings[colIndex] = (\n\t\t\t\t\t\t\t\tts.getData( header, configHeaders, 'string' ) ||\n\t\t\t\t\t\t\t\tc.stringTo ||\n\t\t\t\t\t\t\t\t'max' ).toLowerCase();\n\t\t\t\t\t\t\tif ( noParser ) {\n\t\t\t\t\t\t\t\tparser = ts.getParserById( 'no-parser' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( !extractor ) {\n\t\t\t\t\t\t\t\t// For now, maybe detect someday\n\t\t\t\t\t\t\t\textractor = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( !parser ) {\n\t\t\t\t\t\t\t\tparser = ts.detectParserForColumn( c, rows, -1, colIndex );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\t\t\tdebugOutput[ '(' + colIndex + ') ' + header.text() ] = {\n\t\t\t\t\t\t\t\t\tparser : parser.id,\n\t\t\t\t\t\t\t\t\textractor : extractor ? extractor.id : 'none',\n\t\t\t\t\t\t\t\t\tstring : c.strings[ colIndex ],\n\t\t\t\t\t\t\t\t\tempty  : c.empties[ colIndex ]\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlist.parsers[ colIndex ] = parser;\n\t\t\t\t\t\t\tlist.extractors[ colIndex ] = extractor;\n\t\t\t\t\t\t\tspan = header[ 0 ].colSpan - 1;\n\t\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\t\tcolIndex += span;\n\t\t\t\t\t\t\t\tmax += span;\n\t\t\t\t\t\t\t\twhile ( span + 1 > 0 ) {\n\t\t\t\t\t\t\t\t\t// set colspan columns to use the same parsers & extractors\n\t\t\t\t\t\t\t\t\tlist.parsers[ colIndex - span ] = parser;\n\t\t\t\t\t\t\t\t\tlist.extractors[ colIndex - span ] = extractor;\n\t\t\t\t\t\t\t\t\tspan--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolIndex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttbodyIndex += ( list.parsers.length ) ? len : 1;\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tif ( !ts.isEmptyObject( debugOutput ) ) {\n\t\t\t\t\tconsole[ console.table ? 'table' : 'log' ]( debugOutput );\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn( '  No parsers detected!' );\n\t\t\t\t}\n\t\t\t\tconsole.log( 'Completed detecting parsers' + ts.benchmark( time ) );\n\t\t\t\tif ( console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\tc.parsers = list.parsers;\n\t\t\tc.extractors = list.extractors;\n\t\t},\n\n\t\taddParser : function( parser ) {\n\t\t\tvar indx,\n\t\t\t\tlen = ts.parsers.length,\n\t\t\t\tadd = true;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( ts.parsers[ indx ].id.toLowerCase() === parser.id.toLowerCase() ) {\n\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( add ) {\n\t\t\t\tts.parsers[ ts.parsers.length ] = parser;\n\t\t\t}\n\t\t},\n\n\t\tgetParserById : function( name ) {\n\t\t\t/*jshint eqeqeq:false */ // eslint-disable-next-line eqeqeq\n\t\t\tif ( name == 'false' ) { return false; }\n\t\t\tvar indx,\n\t\t\t\tlen = ts.parsers.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( ts.parsers[ indx ].id.toLowerCase() === ( name.toString() ).toLowerCase() ) {\n\t\t\t\t\treturn ts.parsers[ indx ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tdetectParserForColumn : function( c, rows, rowIndex, cellIndex ) {\n\t\t\tvar cur, $node, row,\n\t\t\t\tindx = ts.parsers.length,\n\t\t\t\tnode = false,\n\t\t\t\tnodeValue = '',\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\tkeepLooking = true;\n\t\t\twhile ( nodeValue === '' && keepLooking ) {\n\t\t\t\trowIndex++;\n\t\t\t\trow = rows[ rowIndex ];\n\t\t\t\t// stop looking after 50 empty rows\n\t\t\t\tif ( row && rowIndex < 50 ) {\n\t\t\t\t\tif ( row.className.indexOf( ts.cssIgnoreRow ) < 0 ) {\n\t\t\t\t\t\tnode = rows[ rowIndex ].cells[ cellIndex ];\n\t\t\t\t\t\tnodeValue = ts.getElementText( c, node, cellIndex );\n\t\t\t\t\t\t$node = $( node );\n\t\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\t\tconsole.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +\n\t\t\t\t\t\t\t\tcellIndex + ': \"' + nodeValue + '\"' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tkeepLooking = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( --indx >= 0 ) {\n\t\t\t\tcur = ts.parsers[ indx ];\n\t\t\t\t// ignore the default text parser because it will always be true\n\t\t\t\tif ( cur && cur.id !== 'text' && cur.is && cur.is( nodeValue, c.table, node, $node ) ) {\n\t\t\t\t\treturn cur;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// nothing found, return the generic parser (text)\n\t\t\treturn ts.getParserById( 'text' );\n\t\t},\n\n\t\tgetElementText : function( c, node, cellIndex ) {\n\t\t\tif ( !node ) { return ''; }\n\t\t\tvar tmp,\n\t\t\t\textract = c.textExtraction || '',\n\t\t\t\t// node could be a jquery object\n\t\t\t\t// http://jsperf.com/jquery-vs-instanceof-jquery/2\n\t\t\t\t$node = node.jquery ? node : $( node );\n\t\t\tif ( typeof extract === 'string' ) {\n\t\t\t\t// check data-attribute first when set to 'basic'; don't use node.innerText - it's really slow!\n\t\t\t\t// http://www.kellegous.com/j/2013/02/27/innertext-vs-textcontent/\n\t\t\t\tif ( extract === 'basic' && typeof ( tmp = $node.attr( c.textAttribute ) ) !== 'undefined' ) {\n\t\t\t\t\treturn $.trim( tmp );\n\t\t\t\t}\n\t\t\t\treturn $.trim( node.textContent || $node.text() );\n\t\t\t} else {\n\t\t\t\tif ( typeof extract === 'function' ) {\n\t\t\t\t\treturn $.trim( extract( $node[ 0 ], c.table, cellIndex ) );\n\t\t\t\t} else if ( typeof ( tmp = ts.getColumnData( c.table, extract, cellIndex ) ) === 'function' ) {\n\t\t\t\t\treturn $.trim( tmp( $node[ 0 ], c.table, cellIndex ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback\n\t\t\treturn $.trim( $node[ 0 ].textContent || $node.text() );\n\t\t},\n\n\t\t// centralized function to extract/parse cell contents\n\t\tgetParsedText : function( c, cell, colIndex, txt ) {\n\t\t\tif ( typeof txt === 'undefined' ) {\n\t\t\t\ttxt = ts.getElementText( c, cell, colIndex );\n\t\t\t}\n\t\t\t// if no parser, make sure to return the txt\n\t\t\tvar val = '' + txt,\n\t\t\t\tparser = c.parsers[ colIndex ],\n\t\t\t\textractor = c.extractors[ colIndex ];\n\t\t\tif ( parser ) {\n\t\t\t\t// do extract before parsing, if there is one\n\t\t\t\tif ( extractor && typeof extractor.format === 'function' ) {\n\t\t\t\t\ttxt = extractor.format( txt, c.table, cell, colIndex );\n\t\t\t\t}\n\t\t\t\t// allow parsing if the string is empty, previously parsing would change it to zero,\n\t\t\t\t// in case the parser needs to extract data from the table cell attributes\n\t\t\t\tval = parser.id === 'no-parser' ? '' :\n\t\t\t\t\t// make sure txt is a string (extractor may have converted it)\n\t\t\t\t\tparser.format( '' + txt, c.table, cell, colIndex );\n\t\t\t\tif ( c.ignoreCase && typeof val === 'string' ) {\n\t\t\t\t\tval = val.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\t/*\n\t\t\u2584\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\n\t\t\u2588\u2588  \u2580\u2580 \u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588  \u2580\u2580 \u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588\u2584\u2584\n\t\t\u2588\u2588  \u2584\u2584 \u2588\u2588\u2580\u2580\u2588\u2588 \u2588\u2588  \u2584\u2584 \u2588\u2588\u2580\u2580\u2588\u2588 \u2588\u2588\u2580\u2580\n\t\t\u2580\u2588\u2588\u2588\u2588\u2580 \u2588\u2588  \u2588\u2588 \u2580\u2588\u2588\u2588\u2588\u2580 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\n\t\t*/\n\t\tbuildCache : function( c, callback, $tbodies ) {\n\t\t\tvar cache, val, txt, rowIndex, colIndex, tbodyIndex, $tbody, $row,\n\t\t\t\tcols, $cells, cell, cacheTime, totalRows, rowData, prevRowData,\n\t\t\t\tcolMax, span, cacheIndex, hasParser, max, len, index,\n\t\t\t\ttable = c.table,\n\t\t\t\tparsers = c.parsers,\n\t\t\t\tdebug = ts.debug(c, 'core');\n\t\t\t// update tbody variable\n\t\t\tc.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );\n\t\t\t$tbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies,\n\t\t\tc.cache = {};\n\t\t\tc.totalRows = 0;\n\t\t\t// if no parsers found, return - it's an empty table.\n\t\t\tif ( !parsers ) {\n\t\t\t\treturn debug ? console.warn( 'Warning: *Empty table!* Not building a cache' ) : '';\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tcacheTime = new Date();\n\t\t\t}\n\t\t\t// processing icon\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\tts.isProcessing( table, true );\n\t\t\t}\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbody.length; tbodyIndex++ ) {\n\t\t\t\tcolMax = []; // column max value per tbody\n\t\t\t\tcache = c.cache[ tbodyIndex ] = {\n\t\t\t\t\tnormalized: [] // array of normalized row data; last entry contains 'rowData' above\n\t\t\t\t\t// colMax: #   // added at the end\n\t\t\t\t};\n\n\t\t\t\ttotalRows = ( $tbody[ tbodyIndex ] && $tbody[ tbodyIndex ].rows.length ) || 0;\n\t\t\t\tfor ( rowIndex = 0; rowIndex < totalRows; ++rowIndex ) {\n\t\t\t\t\trowData = {\n\t\t\t\t\t\t// order: original row order #\n\t\t\t\t\t\t// $row : jQuery Object[]\n\t\t\t\t\t\tchild: [], // child row text (filter widget)\n\t\t\t\t\t\traw: []    // original row text\n\t\t\t\t\t};\n\t\t\t\t\t/** Add the table data to main data array */\n\t\t\t\t\t$row = $( $tbody[ tbodyIndex ].rows[ rowIndex ] );\n\t\t\t\t\tcols = [];\n\t\t\t\t\t// ignore \"remove-me\" rows\n\t\t\t\t\tif ( $row.hasClass( c.selectorRemove.slice(1) ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// if this is a child row, add it to the last row's children and continue to the next row\n\t\t\t\t\t// ignore child row class, if it is the first row\n\t\t\t\t\tif ( $row.hasClass( c.cssChildRow ) && rowIndex !== 0 ) {\n\t\t\t\t\t\tlen = cache.normalized.length - 1;\n\t\t\t\t\t\tprevRowData = cache.normalized[ len ][ c.columns ];\n\t\t\t\t\t\tprevRowData.$row = prevRowData.$row.add( $row );\n\t\t\t\t\t\t// add 'hasChild' class name to parent row\n\t\t\t\t\t\tif ( !$row.prev().hasClass( c.cssChildRow ) ) {\n\t\t\t\t\t\t\t$row.prev().addClass( ts.css.cssHasChild );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// save child row content (un-parsed!)\n\t\t\t\t\t\t$cells = $row.children( 'th, td' );\n\t\t\t\t\t\tlen = prevRowData.child.length;\n\t\t\t\t\t\tprevRowData.child[ len ] = [];\n\t\t\t\t\t\t// child row content does not account for colspans/rowspans; so indexing may be off\n\t\t\t\t\t\tcacheIndex = 0;\n\t\t\t\t\t\tmax = c.columns;\n\t\t\t\t\t\tfor ( colIndex = 0; colIndex < max; colIndex++ ) {\n\t\t\t\t\t\t\tcell = $cells[ colIndex ];\n\t\t\t\t\t\t\tif ( cell ) {\n\t\t\t\t\t\t\t\tprevRowData.child[ len ][ colIndex ] = ts.getParsedText( c, cell, colIndex );\n\t\t\t\t\t\t\t\tspan = $cells[ colIndex ].colSpan - 1;\n\t\t\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\t\t\tcacheIndex += span;\n\t\t\t\t\t\t\t\t\tmax += span;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcacheIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// go to the next for loop\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\trowData.$row = $row;\n\t\t\t\t\trowData.order = rowIndex; // add original row position to rowCache\n\t\t\t\t\tcacheIndex = 0;\n\t\t\t\t\tmax = c.columns;\n\t\t\t\t\tfor ( colIndex = 0; colIndex < max; ++colIndex ) {\n\t\t\t\t\t\tcell = $row[ 0 ].cells[ colIndex ];\n\t\t\t\t\t\tif ( cell && cacheIndex < c.columns ) {\n\t\t\t\t\t\t\thasParser = typeof parsers[ cacheIndex ] !== 'undefined';\n\t\t\t\t\t\t\tif ( !hasParser && debug ) {\n\t\t\t\t\t\t\t\tconsole.warn( 'No parser found for row: ' + rowIndex + ', column: ' + colIndex +\n\t\t\t\t\t\t\t\t\t'; cell containing: \"' + $(cell).text() + '\"; does it have a header?' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tval = ts.getElementText( c, cell, cacheIndex );\n\t\t\t\t\t\t\trowData.raw[ cacheIndex ] = val; // save original row text\n\t\t\t\t\t\t\t// save raw column text even if there is no parser set\n\t\t\t\t\t\t\ttxt = ts.getParsedText( c, cell, cacheIndex, val );\n\t\t\t\t\t\t\tcols[ cacheIndex ] = txt;\n\t\t\t\t\t\t\tif ( hasParser && ( parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {\n\t\t\t\t\t\t\t\t// determine column max value (ignore sign)\n\t\t\t\t\t\t\t\tcolMax[ cacheIndex ] = Math.max( Math.abs( txt ) || 0, colMax[ cacheIndex ] || 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// allow colSpan in tbody\n\t\t\t\t\t\t\tspan = cell.colSpan - 1;\n\t\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\twhile ( index <= span ) {\n\t\t\t\t\t\t\t\t\t// duplicate text (or not) to spanned columns\n\t\t\t\t\t\t\t\t\t// instead of setting duplicate span to empty string, use textExtraction to try to get a value\n\t\t\t\t\t\t\t\t\t// see http://stackoverflow.com/q/36449711/145346\n\t\t\t\t\t\t\t\t\ttxt = c.duplicateSpan || index === 0 ?\n\t\t\t\t\t\t\t\t\t\tval :\n\t\t\t\t\t\t\t\t\t\ttypeof c.textExtraction !== 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tts.getElementText( c, cell, cacheIndex + index ) || '' :\n\t\t\t\t\t\t\t\t\t\t\t'';\n\t\t\t\t\t\t\t\t\trowData.raw[ cacheIndex + index ] = txt;\n\t\t\t\t\t\t\t\t\tcols[ cacheIndex + index ] = txt;\n\t\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcacheIndex += span;\n\t\t\t\t\t\t\t\tmax += span;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcacheIndex++;\n\t\t\t\t\t}\n\t\t\t\t\t// ensure rowData is always in the same location (after the last column)\n\t\t\t\t\tcols[ c.columns ] = rowData;\n\t\t\t\t\tcache.normalized[ cache.normalized.length ] = cols;\n\t\t\t\t}\n\t\t\t\tcache.colMax = colMax;\n\t\t\t\t// total up rows, not including child rows\n\t\t\t\tc.totalRows += cache.normalized.length;\n\n\t\t\t}\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\tts.isProcessing( table ); // remove processing icon\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tlen = Math.min( 5, c.cache[ 0 ].normalized.length );\n\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Building cache for ' + c.totalRows +\n\t\t\t\t\t' rows (showing ' + len + ' rows in log) and ' + c.columns + ' columns' +\n\t\t\t\t\tts.benchmark( cacheTime ) );\n\t\t\t\tval = {};\n\t\t\t\tfor ( colIndex = 0; colIndex < c.columns; colIndex++ ) {\n\t\t\t\t\tfor ( cacheIndex = 0; cacheIndex < len; cacheIndex++ ) {\n\t\t\t\t\t\tif ( !val[ 'row: ' + cacheIndex ] ) {\n\t\t\t\t\t\t\tval[ 'row: ' + cacheIndex ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tval[ 'row: ' + cacheIndex ][ c.$headerIndexed[ colIndex ].text() ] =\n\t\t\t\t\t\t\tc.cache[ 0 ].normalized[ cacheIndex ][ colIndex ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconsole[ console.table ? 'table' : 'log' ]( val );\n\t\t\t\tif ( console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t},\n\n\t\tgetColumnText : function( table, column, callback, rowFilter ) {\n\t\t\ttable = $( table )[0];\n\t\t\tvar tbodyIndex, rowIndex, cache, row, tbodyLen, rowLen, raw, parsed, $cell, result,\n\t\t\t\thasCallback = typeof callback === 'function',\n\t\t\t\tallColumns = column === 'all',\n\t\t\t\tdata = { raw : [], parsed: [], $cell: [] },\n\t\t\t\tc = table.config;\n\t\t\tif ( ts.isEmptyObject( c ) ) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.warn( 'No cache found - aborting getColumnText function!' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttbodyLen = c.$tbodies.length;\n\t\t\t\tfor ( tbodyIndex = 0; tbodyIndex < tbodyLen; tbodyIndex++ ) {\n\t\t\t\t\tcache = c.cache[ tbodyIndex ].normalized;\n\t\t\t\t\trowLen = cache.length;\n\t\t\t\t\tfor ( rowIndex = 0; rowIndex < rowLen; rowIndex++ ) {\n\t\t\t\t\t\trow = cache[ rowIndex ];\n\t\t\t\t\t\tif ( rowFilter && !row[ c.columns ].$row.is( rowFilter ) ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = true;\n\t\t\t\t\t\tparsed = ( allColumns ) ? row.slice( 0, c.columns ) : row[ column ];\n\t\t\t\t\t\trow = row[ c.columns ];\n\t\t\t\t\t\traw = ( allColumns ) ? row.raw : row.raw[ column ];\n\t\t\t\t\t\t$cell = ( allColumns ) ? row.$row.children() : row.$row.children().eq( column );\n\t\t\t\t\t\tif ( hasCallback ) {\n\t\t\t\t\t\t\tresult = callback({\n\t\t\t\t\t\t\t\ttbodyIndex : tbodyIndex,\n\t\t\t\t\t\t\t\trowIndex : rowIndex,\n\t\t\t\t\t\t\t\tparsed : parsed,\n\t\t\t\t\t\t\t\traw : raw,\n\t\t\t\t\t\t\t\t$row : row.$row,\n\t\t\t\t\t\t\t\t$cell : $cell\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== false ) {\n\t\t\t\t\t\t\tdata.parsed[ data.parsed.length ] = parsed;\n\t\t\t\t\t\t\tdata.raw[ data.raw.length ] = raw;\n\t\t\t\t\t\t\tdata.$cell[ data.$cell.length ] = $cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// return everything\n\t\t\t\treturn data;\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\t\u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\n\t\t\u2588\u2588  \u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588   \u2588\u2588   \u2588\u2588\u2584\u2584\n\t\t\u2588\u2588  \u2588\u2588 \u2588\u2588\u2580\u2580\u2580  \u2588\u2588  \u2588\u2588 \u2588\u2588\u2580\u2580\u2588\u2588   \u2588\u2588   \u2588\u2588\u2580\u2580\n\t\t\u2580\u2588\u2588\u2588\u2588\u2580 \u2588\u2588     \u2588\u2588\u2588\u2588\u2588\u2580 \u2588\u2588  \u2588\u2588   \u2588\u2588   \u2588\u2588\u2588\u2588\u2588\u2588\n\t\t*/\n\t\tsetHeadersCss : function( c ) {\n\t\t\tvar indx, column,\n\t\t\t\tlist = c.sortList,\n\t\t\t\tlen = list.length,\n\t\t\t\tnone = ts.css.sortNone + ' ' + c.cssNone,\n\t\t\t\tcss = [ ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc ],\n\t\t\t\tcssIcon = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ],\n\t\t\t\taria = [ 'ascending', 'descending' ],\n\t\t\t\tupdateColumnSort = function($el, index) {\n\t\t\t\t\t$el\n\t\t\t\t\t\t.removeClass( none )\n\t\t\t\t\t\t.addClass( css[ index ] )\n\t\t\t\t\t\t.attr( 'aria-sort', aria[ index ] )\n\t\t\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t\t\t.removeClass( cssIcon[ 2 ] )\n\t\t\t\t\t\t.addClass( cssIcon[ index ] );\n\t\t\t\t},\n\t\t\t\t// find the footer\n\t\t\t\t$extras = c.$table\n\t\t\t\t\t.find( 'tfoot tr' )\n\t\t\t\t\t.children( 'td, th' )\n\t\t\t\t\t.add( $( c.namespace + '_extra_headers' ) )\n\t\t\t\t\t.removeClass( css.join( ' ' ) ),\n\t\t\t\t// remove all header information\n\t\t\t\t$sorted = c.$headers\n\t\t\t\t\t.add( $( 'thead ' + c.namespace + '_extra_headers' ) )\n\t\t\t\t\t.removeClass( css.join( ' ' ) )\n\t\t\t\t\t.addClass( none )\n\t\t\t\t\t.attr( 'aria-sort', 'none' )\n\t\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t\t.removeClass( cssIcon.join( ' ' ) )\n\t\t\t\t\t.end();\n\t\t\t// add css none to all sortable headers\n\t\t\t$sorted\n\t\t\t\t.not( '.sorter-false' )\n\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t.addClass( cssIcon[ 2 ] );\n\t\t\t// add disabled css icon class\n\t\t\tif ( c.cssIconDisabled ) {\n\t\t\t\t$sorted\n\t\t\t\t\t.filter( '.sorter-false' )\n\t\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t\t.addClass( c.cssIconDisabled );\n\t\t\t}\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t// direction = 2 means reset!\n\t\t\t\tif ( list[ indx ][ 1 ] !== 2 ) {\n\t\t\t\t\t// multicolumn sorting updating - see #1005\n\t\t\t\t\t// .not(function() {}) needs jQuery 1.4\n\t\t\t\t\t// filter(function(i, el) {}) <- el is undefined in jQuery v1.2.6\n\t\t\t\t\t$sorted = c.$headers.filter( function( i ) {\n\t\t\t\t\t\t// only include headers that are in the sortList (this includes colspans)\n\t\t\t\t\t\tvar include = true,\n\t\t\t\t\t\t\t$el = c.$headers.eq( i ),\n\t\t\t\t\t\t\tcol = parseInt( $el.attr( 'data-column' ), 10 ),\n\t\t\t\t\t\t\tend = col + ts.getClosest( $el, 'th, td' )[0].colSpan;\n\t\t\t\t\t\tfor ( ; col < end; col++ ) {\n\t\t\t\t\t\t\tinclude = include ? include || ts.isValueInArray( col, c.sortList ) > -1 : false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn include;\n\t\t\t\t\t});\n\n\t\t\t\t\t// choose the :last in case there are nested columns\n\t\t\t\t\t$sorted = $sorted\n\t\t\t\t\t\t.not( '.sorter-false' )\n\t\t\t\t\t\t.filter( '[data-column=\"' + list[ indx ][ 0 ] + '\"]' + ( len === 1 ? ':last' : '' ) );\n\t\t\t\t\tif ( $sorted.length ) {\n\t\t\t\t\t\tfor ( column = 0; column < $sorted.length; column++ ) {\n\t\t\t\t\t\t\tif ( !$sorted[ column ].sortDisabled ) {\n\t\t\t\t\t\t\t\tupdateColumnSort( $sorted.eq( column ), list[ indx ][ 1 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// add sorted class to footer & extra headers, if they exist\n\t\t\t\t\tif ( $extras.length ) {\n\t\t\t\t\t\tupdateColumnSort( $extras.filter( '[data-column=\"' + list[ indx ][ 0 ] + '\"]' ), list[ indx ][ 1 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// add verbose aria labels\n\t\t\tlen = c.$headers.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tts.setColumnAriaLabel( c, c.$headers.eq( indx ) );\n\t\t\t}\n\t\t},\n\n\t\tgetClosest : function( $el, selector ) {\n\t\t\t// jQuery v1.2.6 doesn't have closest()\n\t\t\tif ( $.fn.closest ) {\n\t\t\t\treturn $el.closest( selector );\n\t\t\t}\n\t\t\treturn $el.is( selector ) ?\n\t\t\t\t$el :\n\t\t\t\t$el.parents( selector ).filter( ':first' );\n\t\t},\n\n\t\t// nextSort (optional), lets you disable next sort text\n\t\tsetColumnAriaLabel : function( c, $header, nextSort ) {\n\t\t\tif ( $header.length ) {\n\t\t\t\tvar column = parseInt( $header.attr( 'data-column' ), 10 ),\n\t\t\t\t\tvars = c.sortVars[ column ],\n\t\t\t\t\ttmp = $header.hasClass( ts.css.sortAsc ) ?\n\t\t\t\t\t\t'sortAsc' :\n\t\t\t\t\t\t$header.hasClass( ts.css.sortDesc ) ? 'sortDesc' : 'sortNone',\n\t\t\t\t\ttxt = $.trim( $header.text() ) + ': ' + ts.language[ tmp ];\n\t\t\t\tif ( $header.hasClass( 'sorter-false' ) || nextSort === false ) {\n\t\t\t\t\ttxt += ts.language.sortDisabled;\n\t\t\t\t} else {\n\t\t\t\t\ttmp = ( vars.count + 1 ) % vars.order.length;\n\t\t\t\t\tnextSort = vars.order[ tmp ];\n\t\t\t\t\t// if nextSort\n\t\t\t\t\ttxt += ts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];\n\t\t\t\t}\n\t\t\t\t$header.attr( 'aria-label', txt );\n\t\t\t\tif (vars.sortedBy) {\n\t\t\t\t\t$header.attr( 'data-sortedBy', vars.sortedBy );\n\t\t\t\t} else {\n\t\t\t\t\t$header.removeAttr('data-sortedBy');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdateHeader : function( c ) {\n\t\t\tvar index, isDisabled, $header, col,\n\t\t\t\ttable = c.table,\n\t\t\t\tlen = c.$headers.length;\n\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t$header = c.$headers.eq( index );\n\t\t\t\tcol = ts.getColumnData( table, c.headers, index, true );\n\t\t\t\t// add 'sorter-false' class if 'parser-false' is set\n\t\t\t\tisDisabled = ts.getData( $header, col, 'sorter' ) === 'false' || ts.getData( $header, col, 'parser' ) === 'false';\n\t\t\t\tts.setColumnSort( c, $header, isDisabled );\n\t\t\t}\n\t\t},\n\n\t\tsetColumnSort : function( c, $header, isDisabled ) {\n\t\t\tvar id = c.table.id;\n\t\t\t$header[ 0 ].sortDisabled = isDisabled;\n\t\t\t$header[ isDisabled ? 'addClass' : 'removeClass' ]( 'sorter-false' )\n\t\t\t\t.attr( 'aria-disabled', '' + isDisabled );\n\t\t\t// disable tab index on disabled cells\n\t\t\tif ( c.tabIndex ) {\n\t\t\t\tif ( isDisabled ) {\n\t\t\t\t\t$header.removeAttr( 'tabindex' );\n\t\t\t\t} else {\n\t\t\t\t\t$header.attr( 'tabindex', '0' );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// aria-controls - requires table ID\n\t\t\tif ( id ) {\n\t\t\t\tif ( isDisabled ) {\n\t\t\t\t\t$header.removeAttr( 'aria-controls' );\n\t\t\t\t} else {\n\t\t\t\t\t$header.attr( 'aria-controls', id );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdateHeaderSortCount : function( c, list ) {\n\t\t\tvar col, dir, group, indx, primary, temp, val, order,\n\t\t\t\tsortList = list || c.sortList,\n\t\t\t\tlen = sortList.length;\n\t\t\tc.sortList = [];\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tval = sortList[ indx ];\n\t\t\t\t// ensure all sortList values are numeric - fixes #127\n\t\t\t\tcol = parseInt( val[ 0 ], 10 );\n\t\t\t\t// prevents error if sorton array is wrong\n\t\t\t\tif ( col < c.columns ) {\n\n\t\t\t\t\t// set order if not already defined - due to colspan header without associated header cell\n\t\t\t\t\t// adding this check prevents a javascript error\n\t\t\t\t\tif ( !c.sortVars[ col ].order ) {\n\t\t\t\t\t\tif ( ts.getOrder( c.sortInitialOrder ) ) {\n\t\t\t\t\t\t\torder = c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\torder = c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tc.sortVars[ col ].order = order;\n\t\t\t\t\t\tc.sortVars[ col ].count = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\torder = c.sortVars[ col ].order;\n\t\t\t\t\tdir = ( '' + val[ 1 ] ).match( /^(1|d|s|o|n)/ );\n\t\t\t\t\tdir = dir ? dir[ 0 ] : '';\n\t\t\t\t\t// 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext\n\t\t\t\t\tswitch ( dir ) {\n\t\t\t\t\t\tcase '1' : case 'd' : // descending\n\t\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's' : // same direction (as primary column)\n\t\t\t\t\t\t\t// if primary sort is set to 's', make it ascending\n\t\t\t\t\t\t\tdir = primary || 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'o' :\n\t\t\t\t\t\t\ttemp = order[ ( primary || 0 ) % order.length ];\n\t\t\t\t\t\t\t// opposite of primary column; but resets if primary resets\n\t\t\t\t\t\t\tdir = temp === 0 ? 1 : temp === 1 ? 0 : 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'n' :\n\t\t\t\t\t\t\tdir = order[ ( ++c.sortVars[ col ].count ) % order.length ];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault : // ascending\n\t\t\t\t\t\t\tdir = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tprimary = indx === 0 ? dir : primary;\n\t\t\t\t\tgroup = [ col, parseInt( dir, 10 ) || 0 ];\n\t\t\t\t\tc.sortList[ c.sortList.length ] = group;\n\t\t\t\t\tdir = $.inArray( group[ 1 ], order ); // fixes issue #167\n\t\t\t\t\tc.sortVars[ col ].count = dir >= 0 ? dir : group[ 1 ] % order.length;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdateAll : function( c, resort, callback ) {\n\t\t\tvar table = c.table;\n\t\t\ttable.isUpdating = true;\n\t\t\tts.refreshWidgets( table, true, true );\n\t\t\tts.buildHeaders( c );\n\t\t\tts.bindEvents( table, c.$headers, true );\n\t\t\tts.bindMethods( c );\n\t\t\tts.commonUpdate( c, resort, callback );\n\t\t},\n\n\t\tupdate : function( c, resort, callback ) {\n\t\t\tvar table = c.table;\n\t\t\ttable.isUpdating = true;\n\t\t\t// update sorting (if enabled/disabled)\n\t\t\tts.updateHeader( c );\n\t\t\tts.commonUpdate( c, resort, callback );\n\t\t},\n\n\t\t// simple header update - see #989\n\t\tupdateHeaders : function( c, callback ) {\n\t\t\tc.table.isUpdating = true;\n\t\t\tts.buildHeaders( c );\n\t\t\tts.bindEvents( c.table, c.$headers, true );\n\t\t\tts.resortComplete( c, callback );\n\t\t},\n\n\t\tupdateCell : function( c, cell, resort, callback ) {\n\t\t\t// updateCell for child rows is a mess - we'll ignore them for now\n\t\t\t// eventually I'll break out the \"update\" row cache code to make everything consistent\n\t\t\tif ( $( cell ).closest( 'tr' ).hasClass( c.cssChildRow ) ) {\n\t\t\t\tconsole.warn('Tablesorter Warning! \"updateCell\" for child row content has been disabled, use \"update\" instead');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t// empty table, do an update instead - fixes #1099\n\t\t\t\tts.updateHeader( c );\n\t\t\t\tts.commonUpdate( c, resort, callback );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tc.table.isUpdating = true;\n\t\t\tc.$table.find( c.selectorRemove ).remove();\n\t\t\t// get position from the dom\n\t\t\tvar tmp, indx, row, icell, cache, len,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\t$cell = $( cell ),\n\t\t\t\t// update cache - format: function( s, table, cell, cellIndex )\n\t\t\t\t// no closest in jQuery v1.2.6\n\t\t\t\ttbodyIndex = $tbodies.index( ts.getClosest( $cell, 'tbody' ) ),\n\t\t\t\ttbcache = c.cache[ tbodyIndex ],\n\t\t\t\t$row = ts.getClosest( $cell, 'tr' );\n\t\t\tcell = $cell[ 0 ]; // in case cell is a jQuery object\n\t\t\t// tbody may not exist if update is initialized while tbody is removed for processing\n\t\t\tif ( $tbodies.length && tbodyIndex >= 0 ) {\n\t\t\t\trow = $tbodies.eq( tbodyIndex ).find( 'tr' ).not( '.' + c.cssChildRow ).index( $row );\n\t\t\t\tcache = tbcache.normalized[ row ];\n\t\t\t\tlen = $row[ 0 ].cells.length;\n\t\t\t\tif ( len !== c.columns ) {\n\t\t\t\t\t// colspan in here somewhere!\n\t\t\t\t\ticell = 0;\n\t\t\t\t\ttmp = false;\n\t\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\t\tif ( !tmp && $row[ 0 ].cells[ indx ] !== cell ) {\n\t\t\t\t\t\t\ticell += $row[ 0 ].cells[ indx ].colSpan;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ticell = $cell.index();\n\t\t\t\t}\n\t\t\t\ttmp = ts.getElementText( c, cell, icell ); // raw\n\t\t\t\tcache[ c.columns ].raw[ icell ] = tmp;\n\t\t\t\ttmp = ts.getParsedText( c, cell, icell, tmp );\n\t\t\t\tcache[ icell ] = tmp; // parsed\n\t\t\t\tif ( ( c.parsers[ icell ].type || '' ).toLowerCase() === 'numeric' ) {\n\t\t\t\t\t// update column max value (ignore sign)\n\t\t\t\t\ttbcache.colMax[ icell ] = Math.max( Math.abs( tmp ) || 0, tbcache.colMax[ icell ] || 0 );\n\t\t\t\t}\n\t\t\t\ttmp = resort !== 'undefined' ? resort : c.resort;\n\t\t\t\tif ( tmp !== false ) {\n\t\t\t\t\t// widgets will be reapplied\n\t\t\t\t\tts.checkResort( c, tmp, callback );\n\t\t\t\t} else {\n\t\t\t\t\t// don't reapply widgets is resort is false, just in case it causes\n\t\t\t\t\t// problems with element focus\n\t\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.error( 'updateCell aborted, tbody missing or not within the indicated table' );\n\t\t\t\t}\n\t\t\t\tc.table.isUpdating = false;\n\t\t\t}\n\t\t},\n\n\t\taddRows : function( c, $row, resort, callback ) {\n\t\t\tvar txt, val, tbodyIndex, rowIndex, rows, cellIndex, len, order,\n\t\t\t\tcacheIndex, rowData, cells, cell, span,\n\t\t\t\t// allow passing a row string if only one non-info tbody exists in the table\n\t\t\t\tvalid = typeof $row === 'string' && c.$tbodies.length === 1 && /<tr/.test( $row || '' ),\n\t\t\t\ttable = c.table;\n\t\t\tif ( valid ) {\n\t\t\t\t$row = $( $row );\n\t\t\t\tc.$tbodies.append( $row );\n\t\t\t} else if (\n\t\t\t\t!$row ||\n\t\t\t\t// row is a jQuery object?\n\t\t\t\t!( $row instanceof $ ) ||\n\t\t\t\t// row contained in the table?\n\t\t\t\t( ts.getClosest( $row, 'table' )[ 0 ] !== c.table )\n\t\t\t) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.error( 'addRows method requires (1) a jQuery selector reference to rows that have already ' +\n\t\t\t\t\t\t'been added to the table, or (2) row HTML string to be added to a table with only one tbody' );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttable.isUpdating = true;\n\t\t\tif ( ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t// empty table, do an update instead - fixes #450\n\t\t\t\tts.updateHeader( c );\n\t\t\t\tts.commonUpdate( c, resort, callback );\n\t\t\t} else {\n\t\t\t\trows = $row.filter( 'tr' ).attr( 'role', 'row' ).length;\n\t\t\t\ttbodyIndex = c.$tbodies.index( $row.parents( 'tbody' ).filter( ':first' ) );\n\t\t\t\t// fixes adding rows to an empty table - see issue #179\n\t\t\t\tif ( !( c.parsers && c.parsers.length ) ) {\n\t\t\t\t\tts.setupParsers( c );\n\t\t\t\t}\n\t\t\t\t// add each row\n\t\t\t\tfor ( rowIndex = 0; rowIndex < rows; rowIndex++ ) {\n\t\t\t\t\tcacheIndex = 0;\n\t\t\t\t\tlen = $row[ rowIndex ].cells.length;\n\t\t\t\t\torder = c.cache[ tbodyIndex ].normalized.length;\n\t\t\t\t\tcells = [];\n\t\t\t\t\trowData = {\n\t\t\t\t\t\tchild : [],\n\t\t\t\t\t\traw : [],\n\t\t\t\t\t\t$row : $row.eq( rowIndex ),\n\t\t\t\t\t\torder : order\n\t\t\t\t\t};\n\t\t\t\t\t// add each cell\n\t\t\t\t\tfor ( cellIndex = 0; cellIndex < len; cellIndex++ ) {\n\t\t\t\t\t\tcell = $row[ rowIndex ].cells[ cellIndex ];\n\t\t\t\t\t\ttxt = ts.getElementText( c, cell, cacheIndex );\n\t\t\t\t\t\trowData.raw[ cacheIndex ] = txt;\n\t\t\t\t\t\tval = ts.getParsedText( c, cell, cacheIndex, txt );\n\t\t\t\t\t\tcells[ cacheIndex ] = val;\n\t\t\t\t\t\tif ( ( c.parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {\n\t\t\t\t\t\t\t// update column max value (ignore sign)\n\t\t\t\t\t\t\tc.cache[ tbodyIndex ].colMax[ cacheIndex ] =\n\t\t\t\t\t\t\t\tMath.max( Math.abs( val ) || 0, c.cache[ tbodyIndex ].colMax[ cacheIndex ] || 0 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspan = cell.colSpan - 1;\n\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\tcacheIndex += span;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcacheIndex++;\n\t\t\t\t\t}\n\t\t\t\t\t// add the row data to the end\n\t\t\t\t\tcells[ c.columns ] = rowData;\n\t\t\t\t\t// update cache\n\t\t\t\t\tc.cache[ tbodyIndex ].normalized[ order ] = cells;\n\t\t\t\t}\n\t\t\t\t// resort using current settings\n\t\t\t\tts.checkResort( c, resort, callback );\n\t\t\t}\n\t\t},\n\n\t\tupdateCache : function( c, callback, $tbodies ) {\n\t\t\t// rebuild parsers\n\t\t\tif ( !( c.parsers && c.parsers.length ) ) {\n\t\t\t\tts.setupParsers( c, $tbodies );\n\t\t\t}\n\t\t\t// rebuild the cache map\n\t\t\tts.buildCache( c, callback, $tbodies );\n\t\t},\n\n\t\t// init flag (true) used by pager plugin to prevent widget application\n\t\t// renamed from appendToTable\n\t\tappendCache : function( c, init ) {\n\t\t\tvar parsed, totalRows, $tbody, $curTbody, rowIndex, tbodyIndex, appendTime,\n\t\t\t\ttable = c.table,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\trows = [],\n\t\t\t\tcache = c.cache;\n\t\t\t// empty table - fixes #206/#346\n\t\t\tif ( ts.isEmptyObject( cache ) ) {\n\t\t\t\t// run pager appender in case the table was just emptied\n\t\t\t\treturn c.appender ? c.appender( table, rows ) :\n\t\t\t\t\ttable.isUpdating ? c.$table.triggerHandler( 'updateComplete', table ) : ''; // Fixes #532\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tappendTime = new Date();\n\t\t\t}\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = $tbodies.eq( tbodyIndex );\n\t\t\t\tif ( $tbody.length ) {\n\t\t\t\t\t// detach tbody for manipulation\n\t\t\t\t\t$curTbody = ts.processTbody( table, $tbody, true );\n\t\t\t\t\tparsed = cache[ tbodyIndex ].normalized;\n\t\t\t\t\ttotalRows = parsed.length;\n\t\t\t\t\tfor ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {\n\t\t\t\t\t\trows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;\n\t\t\t\t\t\t// removeRows used by the pager plugin; don't render if using ajax - fixes #411\n\t\t\t\t\t\tif ( !c.appender || ( c.pager && !c.pager.removeRows && !c.pager.ajax ) ) {\n\t\t\t\t\t\t\t$curTbody.append( parsed[ rowIndex ][ c.columns ].$row );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// restore tbody\n\t\t\t\t\tts.processTbody( table, $curTbody, false );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( c.appender ) {\n\t\t\t\tc.appender( table, rows );\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Rebuilt table' + ts.benchmark( appendTime ) );\n\t\t\t}\n\t\t\t// apply table widgets; but not before ajax completes\n\t\t\tif ( !init && !c.appender ) {\n\t\t\t\tts.applyWidget( table );\n\t\t\t}\n\t\t\tif ( table.isUpdating ) {\n\t\t\t\tc.$table.triggerHandler( 'updateComplete', table );\n\t\t\t}\n\t\t},\n\n\t\tcommonUpdate : function( c, resort, callback ) {\n\t\t\t// remove rows/elements before update\n\t\t\tc.$table.find( c.selectorRemove ).remove();\n\t\t\t// rebuild parsers\n\t\t\tts.setupParsers( c );\n\t\t\t// rebuild the cache map\n\t\t\tts.buildCache( c );\n\t\t\tts.checkResort( c, resort, callback );\n\t\t},\n\n\t\t/*\n\t\t\u2584\u2588\u2588\u2588\u2588\u2588 \u2584\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584\n\t\t\u2580\u2588\u2584    \u2588\u2588  \u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588 \u2584\u2584\u2584\n\t\t   \u2580\u2588\u2584 \u2588\u2588  \u2588\u2588 \u2588\u2588\u2580\u2588\u2588    \u2588\u2588   \u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588 \u2580\u2588\u2588\n\t\t\u2588\u2588\u2588\u2588\u2588\u2580 \u2580\u2588\u2588\u2588\u2588\u2580 \u2588\u2588  \u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588  \u2588\u2588 \u2580\u2588\u2588\u2588\u2588\u2580\n\t\t*/\n\t\tinitSort : function( c, cell, event ) {\n\t\t\tif ( c.table.isUpdating ) {\n\t\t\t\t// let any updates complete before initializing a sort\n\t\t\t\treturn setTimeout( function() {\n\t\t\t\t\tts.initSort( c, cell, event );\n\t\t\t\t}, 50 );\n\t\t\t}\n\n\t\t\tvar arry, indx, headerIndx, dir, temp, tmp, $header,\n\t\t\t\tnotMultiSort = !event[ c.sortMultiSortKey ],\n\t\t\t\ttable = c.table,\n\t\t\t\tlen = c.$headers.length,\n\t\t\t\tth = ts.getClosest( $( cell ), 'th, td' ),\n\t\t\t\tcol = parseInt( th.attr( 'data-column' ), 10 ),\n\t\t\t\tsortedBy = event.type === 'mouseup' ? 'user' : event.type,\n\t\t\t\torder = c.sortVars[ col ].order;\n\t\t\tth = th[0];\n\t\t\t// Only call sortStart if sorting is enabled\n\t\t\tc.$table.triggerHandler( 'sortStart', table );\n\t\t\t// get current column sort order\n\t\t\ttmp = ( c.sortVars[ col ].count + 1 ) % order.length;\n\t\t\tc.sortVars[ col ].count = event[ c.sortResetKey ] ? 2 : tmp;\n\t\t\t// reset all sorts on non-current column - issue #30\n\t\t\tif ( c.sortRestart ) {\n\t\t\t\tfor ( headerIndx = 0; headerIndx < len; headerIndx++ ) {\n\t\t\t\t\t$header = c.$headers.eq( headerIndx );\n\t\t\t\t\ttmp = parseInt( $header.attr( 'data-column' ), 10 );\n\t\t\t\t\t// only reset counts on columns that weren't just clicked on and if not included in a multisort\n\t\t\t\t\tif ( col !== tmp && ( notMultiSort || $header.hasClass( ts.css.sortNone ) ) ) {\n\t\t\t\t\t\tc.sortVars[ tmp ].count = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// user only wants to sort on one column\n\t\t\tif ( notMultiSort ) {\n\t\t\t\t$.each( c.sortVars, function( i ) {\n\t\t\t\t\tc.sortVars[ i ].sortedBy = '';\n\t\t\t\t});\n\t\t\t\t// flush the sort list\n\t\t\t\tc.sortList = [];\n\t\t\t\tc.last.sortList = [];\n\t\t\t\tif ( c.sortForce !== null ) {\n\t\t\t\t\tarry = c.sortForce;\n\t\t\t\t\tfor ( indx = 0; indx < arry.length; indx++ ) {\n\t\t\t\t\t\tif ( arry[ indx ][ 0 ] !== col ) {\n\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = arry[ indx ];\n\t\t\t\t\t\t\tc.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortForce';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// add column to sort list\n\t\t\t\tdir = order[ c.sortVars[ col ].count ];\n\t\t\t\tif ( dir < 2 ) {\n\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col, dir ];\n\t\t\t\t\tc.sortVars[ col ].sortedBy = sortedBy;\n\t\t\t\t\t// add other columns if header spans across multiple\n\t\t\t\t\tif ( th.colSpan > 1 ) {\n\t\t\t\t\t\tfor ( indx = 1; indx < th.colSpan; indx++ ) {\n\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col + indx, dir ];\n\t\t\t\t\t\t\t// update count on columns in colSpan\n\t\t\t\t\t\t\tc.sortVars[ col + indx ].count = $.inArray( dir, order );\n\t\t\t\t\t\t\tc.sortVars[ col + indx ].sortedBy = sortedBy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// multi column sorting\n\t\t\t} else {\n\t\t\t\t// get rid of the sortAppend before adding more - fixes issue #115 & #523\n\t\t\t\tc.sortList = $.extend( [], c.last.sortList );\n\n\t\t\t\t// the user has clicked on an already sorted column\n\t\t\t\tif ( ts.isValueInArray( col, c.sortList ) >= 0 ) {\n\t\t\t\t\t// reverse the sorting direction\n\t\t\t\t\tc.sortVars[ col ].sortedBy = sortedBy;\n\t\t\t\t\tfor ( indx = 0; indx < c.sortList.length; indx++ ) {\n\t\t\t\t\t\ttmp = c.sortList[ indx ];\n\t\t\t\t\t\tif ( tmp[ 0 ] === col ) {\n\t\t\t\t\t\t\t// order.count seems to be incorrect when compared to cell.count\n\t\t\t\t\t\t\ttmp[ 1 ] = order[ c.sortVars[ col ].count ];\n\t\t\t\t\t\t\tif ( tmp[1] === 2 ) {\n\t\t\t\t\t\t\t\tc.sortList.splice( indx, 1 );\n\t\t\t\t\t\t\t\tc.sortVars[ col ].count = -1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// add column to sort list array\n\t\t\t\t\tdir = order[ c.sortVars[ col ].count ];\n\t\t\t\t\tc.sortVars[ col ].sortedBy = sortedBy;\n\t\t\t\t\tif ( dir < 2 ) {\n\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col, dir ];\n\t\t\t\t\t\t// add other columns if header spans across multiple\n\t\t\t\t\t\tif ( th.colSpan > 1 ) {\n\t\t\t\t\t\t\tfor ( indx = 1; indx < th.colSpan; indx++ ) {\n\t\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col + indx, dir ];\n\t\t\t\t\t\t\t\t// update count on columns in colSpan\n\t\t\t\t\t\t\t\tc.sortVars[ col + indx ].count = $.inArray( dir, order );\n\t\t\t\t\t\t\t\tc.sortVars[ col + indx ].sortedBy = sortedBy;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// save sort before applying sortAppend\n\t\t\tc.last.sortList = $.extend( [], c.sortList );\n\t\t\tif ( c.sortList.length && c.sortAppend ) {\n\t\t\t\tarry = $.isArray( c.sortAppend ) ? c.sortAppend : c.sortAppend[ c.sortList[ 0 ][ 0 ] ];\n\t\t\t\tif ( !ts.isEmptyObject( arry ) ) {\n\t\t\t\t\tfor ( indx = 0; indx < arry.length; indx++ ) {\n\t\t\t\t\t\tif ( arry[ indx ][ 0 ] !== col && ts.isValueInArray( arry[ indx ][ 0 ], c.sortList ) < 0 ) {\n\t\t\t\t\t\t\tdir = arry[ indx ][ 1 ];\n\t\t\t\t\t\t\ttemp = ( '' + dir ).match( /^(a|d|s|o|n)/ );\n\t\t\t\t\t\t\tif ( temp ) {\n\t\t\t\t\t\t\t\ttmp = c.sortList[ 0 ][ 1 ];\n\t\t\t\t\t\t\t\tswitch ( temp[ 0 ] ) {\n\t\t\t\t\t\t\t\t\tcase 'd' :\n\t\t\t\t\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 's' :\n\t\t\t\t\t\t\t\t\t\tdir = tmp;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'o' :\n\t\t\t\t\t\t\t\t\t\tdir = tmp === 0 ? 1 : 0;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'n' :\n\t\t\t\t\t\t\t\t\t\tdir = ( tmp + 1 ) % order.length;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tdir = 0;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ arry[ indx ][ 0 ], dir ];\n\t\t\t\t\t\t\tc.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortAppend';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// sortBegin event triggered immediately before the sort\n\t\t\tc.$table.triggerHandler( 'sortBegin', table );\n\t\t\t// setTimeout needed so the processing icon shows up\n\t\t\tsetTimeout( function() {\n\t\t\t\t// set css for headers\n\t\t\t\tts.setHeadersCss( c );\n\t\t\t\tts.multisort( c );\n\t\t\t\tts.appendCache( c );\n\t\t\t\tc.$table.triggerHandler( 'sortBeforeEnd', table );\n\t\t\t\tc.$table.triggerHandler( 'sortEnd', table );\n\t\t\t}, 1 );\n\t\t},\n\n\t\t// sort multiple columns\n\t\tmultisort : function( c ) { /*jshint loopfunc:true */\n\t\t\tvar tbodyIndex, sortTime, colMax, rows, tmp,\n\t\t\t\ttable = c.table,\n\t\t\t\tsorter = [],\n\t\t\t\tdir = 0,\n\t\t\t\ttextSorter = c.textSorter || '',\n\t\t\t\tsortList = c.sortList,\n\t\t\t\tsortLen = sortList.length,\n\t\t\t\tlen = c.$tbodies.length;\n\t\t\tif ( c.serverSideSorting || ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t// empty table - fixes #206/#346\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) { sortTime = new Date(); }\n\t\t\t// cache textSorter to optimize speed\n\t\t\tif ( typeof textSorter === 'object' ) {\n\t\t\t\tcolMax = c.columns;\n\t\t\t\twhile ( colMax-- ) {\n\t\t\t\t\ttmp = ts.getColumnData( table, textSorter, colMax );\n\t\t\t\t\tif ( typeof tmp === 'function' ) {\n\t\t\t\t\t\tsorter[ colMax ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < len; tbodyIndex++ ) {\n\t\t\t\tcolMax = c.cache[ tbodyIndex ].colMax;\n\t\t\t\trows = c.cache[ tbodyIndex ].normalized;\n\n\t\t\t\trows.sort( function( a, b ) {\n\t\t\t\t\tvar sortIndex, num, col, order, sort, x, y;\n\t\t\t\t\t// rows is undefined here in IE, so don't use it!\n\t\t\t\t\tfor ( sortIndex = 0; sortIndex < sortLen; sortIndex++ ) {\n\t\t\t\t\t\tcol = sortList[ sortIndex ][ 0 ];\n\t\t\t\t\t\torder = sortList[ sortIndex ][ 1 ];\n\t\t\t\t\t\t// sort direction, true = asc, false = desc\n\t\t\t\t\t\tdir = order === 0;\n\n\t\t\t\t\t\tif ( c.sortStable && a[ col ] === b[ col ] && sortLen === 1 ) {\n\t\t\t\t\t\t\treturn a[ c.columns ].order - b[ c.columns ].order;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// fallback to natural sort since it is more robust\n\t\t\t\t\t\tnum = /n/i.test( ts.getSortType( c.parsers, col ) );\n\t\t\t\t\t\tif ( num && c.strings[ col ] ) {\n\t\t\t\t\t\t\t// sort strings in numerical columns\n\t\t\t\t\t\t\tif ( typeof ( ts.string[ c.strings[ col ] ] ) === 'boolean' ) {\n\t\t\t\t\t\t\t\tnum = ( dir ? 1 : -1 ) * ( ts.string[ c.strings[ col ] ] ? -1 : 1 );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnum = ( c.strings[ col ] ) ? ts.string[ c.strings[ col ] ] || 0 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// fall back to built-in numeric sort\n\t\t\t\t\t\t\t// var sort = $.tablesorter['sort' + s]( a[col], b[col], dir, colMax[col], table );\n\t\t\t\t\t\t\tsort = c.numberSorter ? c.numberSorter( a[ col ], b[ col ], dir, colMax[ col ], table ) :\n\t\t\t\t\t\t\t\tts[ 'sortNumeric' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ], b[ col ], num, colMax[ col ], col, c );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// set a & b depending on sort direction\n\t\t\t\t\t\t\tx = dir ? a : b;\n\t\t\t\t\t\t\ty = dir ? b : a;\n\t\t\t\t\t\t\t// text sort function\n\t\t\t\t\t\t\tif ( typeof textSorter === 'function' ) {\n\t\t\t\t\t\t\t\t// custom OVERALL text sorter\n\t\t\t\t\t\t\t\tsort = textSorter( x[ col ], y[ col ], dir, col, table );\n\t\t\t\t\t\t\t} else if ( typeof sorter[ col ] === 'function' ) {\n\t\t\t\t\t\t\t\t// custom text sorter for a SPECIFIC COLUMN\n\t\t\t\t\t\t\t\tsort = sorter[ col ]( x[ col ], y[ col ], dir, col, table );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// fall back to natural sort\n\t\t\t\t\t\t\t\tsort = ts[ 'sortNatural' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ] || '', b[ col ] || '', col, c );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( sort ) { return sort; }\n\t\t\t\t\t}\n\t\t\t\t\treturn a[ c.columns ].order - b[ c.columns ].order;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Applying sort ' + sortList.toString() + ts.benchmark( sortTime ) );\n\t\t\t}\n\t\t},\n\n\t\tresortComplete : function( c, callback ) {\n\t\t\tif ( c.table.isUpdating ) {\n\t\t\t\tc.$table.triggerHandler( 'updateComplete', c.table );\n\t\t\t}\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( c.table );\n\t\t\t}\n\t\t},\n\n\t\tcheckResort : function( c, resort, callback ) {\n\t\t\tvar sortList = $.isArray( resort ) ? resort : c.sortList,\n\t\t\t\t// if no resort parameter is passed, fallback to config.resort (true by default)\n\t\t\t\tresrt = typeof resort === 'undefined' ? c.resort : resort;\n\t\t\t// don't try to resort if the table is still processing\n\t\t\t// this will catch spamming of the updateCell method\n\t\t\tif ( resrt !== false && !c.serverSideSorting && !c.table.isProcessing ) {\n\t\t\t\tif ( sortList.length ) {\n\t\t\t\t\tts.sortOn( c, sortList, function() {\n\t\t\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\t\t}, true );\n\t\t\t\t} else {\n\t\t\t\t\tts.sortReset( c, function() {\n\t\t\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\t\t\tts.applyWidget( c.table, false );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\tts.applyWidget( c.table, false );\n\t\t\t}\n\t\t},\n\n\t\tsortOn : function( c, list, callback, init ) {\n\t\t\tvar indx,\n\t\t\t\ttable = c.table;\n\t\t\tc.$table.triggerHandler( 'sortStart', table );\n\t\t\tfor (indx = 0; indx < c.columns; indx++) {\n\t\t\t\tc.sortVars[ indx ].sortedBy = ts.isValueInArray( indx, list ) > -1 ? 'sorton' : '';\n\t\t\t}\n\t\t\t// update header count index\n\t\t\tts.updateHeaderSortCount( c, list );\n\t\t\t// set css for headers\n\t\t\tts.setHeadersCss( c );\n\t\t\t// fixes #346\n\t\t\tif ( c.delayInit && ts.isEmptyObject( c.cache ) ) {\n\t\t\t\tts.buildCache( c );\n\t\t\t}\n\t\t\tc.$table.triggerHandler( 'sortBegin', table );\n\t\t\t// sort the table and append it to the dom\n\t\t\tts.multisort( c );\n\t\t\tts.appendCache( c, init );\n\t\t\tc.$table.triggerHandler( 'sortBeforeEnd', table );\n\t\t\tc.$table.triggerHandler( 'sortEnd', table );\n\t\t\tts.applyWidget( table );\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t},\n\n\t\tsortReset : function( c, callback ) {\n\t\t\tc.sortList = [];\n\t\t\tvar indx;\n\t\t\tfor (indx = 0; indx < c.columns; indx++) {\n\t\t\t\tc.sortVars[ indx ].count = -1;\n\t\t\t\tc.sortVars[ indx ].sortedBy = '';\n\t\t\t}\n\t\t\tts.setHeadersCss( c );\n\t\t\tts.multisort( c );\n\t\t\tts.appendCache( c );\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( c.table );\n\t\t\t}\n\t\t},\n\n\t\tgetSortType : function( parsers, column ) {\n\t\t\treturn ( parsers && parsers[ column ] ) ? parsers[ column ].type || '' : '';\n\t\t},\n\n\t\tgetOrder : function( val ) {\n\t\t\t// look for 'd' in 'desc' order; return true\n\t\t\treturn ( /^d/i.test( val ) || val === 1 );\n\t\t},\n\n\t\t// Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)\n\t\tsortNatural : function( a, b ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\ta = ( a || '' ).toString();\n\t\t\tb = ( b || '' ).toString();\n\t\t\tvar aNum, bNum, aFloat, bFloat, indx, max,\n\t\t\t\tregex = ts.regex;\n\t\t\t// first try and sort Hex codes\n\t\t\tif ( regex.hex.test( b ) ) {\n\t\t\t\taNum = parseInt( a.match( regex.hex ), 16 );\n\t\t\t\tbNum = parseInt( b.match( regex.hex ), 16 );\n\t\t\t\tif ( aNum < bNum ) { return -1; }\n\t\t\t\tif ( aNum > bNum ) { return 1; }\n\t\t\t}\n\t\t\t// chunk/tokenize\n\t\t\taNum = a.replace( regex.chunk, '\\\\0$1\\\\0' ).replace( regex.chunks, '' ).split( '\\\\0' );\n\t\t\tbNum = b.replace( regex.chunk, '\\\\0$1\\\\0' ).replace( regex.chunks, '' ).split( '\\\\0' );\n\t\t\tmax = Math.max( aNum.length, bNum.length );\n\t\t\t// natural sorting through split numeric strings and default strings\n\t\t\tfor ( indx = 0; indx < max; indx++ ) {\n\t\t\t\t// find floats not starting with '0', string or 0 if not defined\n\t\t\t\taFloat = isNaN( aNum[ indx ] ) ? aNum[ indx ] || 0 : parseFloat( aNum[ indx ] ) || 0;\n\t\t\t\tbFloat = isNaN( bNum[ indx ] ) ? bNum[ indx ] || 0 : parseFloat( bNum[ indx ] ) || 0;\n\t\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\n\t\t\t\tif ( isNaN( aFloat ) !== isNaN( bFloat ) ) { return isNaN( aFloat ) ? 1 : -1; }\n\t\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\n\t\t\t\tif ( typeof aFloat !== typeof bFloat ) {\n\t\t\t\t\taFloat += '';\n\t\t\t\t\tbFloat += '';\n\t\t\t\t}\n\t\t\t\tif ( aFloat < bFloat ) { return -1; }\n\t\t\t\tif ( aFloat > bFloat ) { return 1; }\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\tsortNaturalAsc : function( a, b, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }\n\t\t\treturn ts.sortNatural( a, b );\n\t\t},\n\n\t\tsortNaturalDesc : function( a, b, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }\n\t\t\treturn ts.sortNatural( b, a );\n\t\t},\n\n\t\t// basic alphabetical sort\n\t\tsortText : function( a, b ) {\n\t\t\treturn a > b ? 1 : ( a < b ? -1 : 0 );\n\t\t},\n\n\t\t// return text string value by adding up ascii value\n\t\t// so the text is somewhat sorted when using a digital sort\n\t\t// this is NOT an alphanumeric sort\n\t\tgetTextValue : function( val, num, max ) {\n\t\t\tif ( max ) {\n\t\t\t\t// make sure the text value is greater than the max numerical value (max)\n\t\t\t\tvar indx,\n\t\t\t\t\tlen = val ? val.length : 0,\n\t\t\t\t\tn = max + num;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\tn += val.charCodeAt( indx );\n\t\t\t\t}\n\t\t\t\treturn num * n;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\tsortNumericAsc : function( a, b, num, max, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }\n\t\t\tif ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }\n\t\t\tif ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }\n\t\t\treturn a - b;\n\t\t},\n\n\t\tsortNumericDesc : function( a, b, num, max, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }\n\t\t\tif ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }\n\t\t\tif ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }\n\t\t\treturn b - a;\n\t\t},\n\n\t\tsortNumeric : function( a, b ) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\t/*\n\t\t\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2584\u2588\u2588\u2588\u2588\u2588\n\t\t\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588 \u2584\u2584\u2584 \u2588\u2588\u2584\u2584     \u2588\u2588   \u2580\u2588\u2584\n\t\t\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588  \u2588\u2588 \u2588\u2588 \u2580\u2588\u2588 \u2588\u2588\u2580\u2580     \u2588\u2588      \u2580\u2588\u2584\n\t\t\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2580 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2580 \u2580\u2588\u2588\u2588\u2588\u2580 \u2588\u2588\u2588\u2588\u2588\u2588   \u2588\u2588   \u2588\u2588\u2588\u2588\u2588\u2580\n\t\t*/\n\t\taddWidget : function( widget ) {\n\t\t\tif ( widget.id && !ts.isEmptyObject( ts.getWidgetById( widget.id ) ) ) {\n\t\t\t\tconsole.warn( '\"' + widget.id + '\" widget was loaded more than once!' );\n\t\t\t}\n\t\t\tts.widgets[ ts.widgets.length ] = widget;\n\t\t},\n\n\t\thasWidget : function( $table, name ) {\n\t\t\t$table = $( $table );\n\t\t\treturn $table.length && $table[ 0 ].config && $table[ 0 ].config.widgetInit[ name ] || false;\n\t\t},\n\n\t\tgetWidgetById : function( name ) {\n\t\t\tvar indx, widget,\n\t\t\t\tlen = ts.widgets.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\twidget = ts.widgets[ indx ];\n\t\t\t\tif ( widget && widget.id && widget.id.toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\treturn widget;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tapplyWidgetOptions : function( table ) {\n\t\t\tvar indx, widget, wo,\n\t\t\t\tc = table.config,\n\t\t\t\tlen = c.widgets.length;\n\t\t\tif ( len ) {\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = ts.getWidgetById( c.widgets[ indx ] );\n\t\t\t\t\tif ( widget && widget.options ) {\n\t\t\t\t\t\two = $.extend( true, {}, widget.options );\n\t\t\t\t\t\tc.widgetOptions = $.extend( true, wo, c.widgetOptions );\n\t\t\t\t\t\t// add widgetOptions to defaults for option validator\n\t\t\t\t\t\t$.extend( true, ts.defaults.widgetOptions, widget.options );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\taddWidgetFromClass : function( table ) {\n\t\t\tvar len, indx,\n\t\t\t\tc = table.config,\n\t\t\t\t// look for widgets to apply from table class\n\t\t\t\t// don't match from 'ui-widget-content'; use \\S instead of \\w to include widgets\n\t\t\t\t// with dashes in the name, e.g. \"widget-test-2\" extracts out \"test-2\"\n\t\t\t\tregex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\\\S+)+' ) + '$',\n\t\t\t\twidgetClass = new RegExp( regex, 'g' ),\n\t\t\t\t// split up table class (widget id's can include dashes) - stop using match\n\t\t\t\t// otherwise only one widget gets extracted, see #1109\n\t\t\t\twidgets = ( table.className || '' ).split( ts.regex.spaces );\n\t\t\tif ( widgets.length ) {\n\t\t\t\tlen = widgets.length;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\tif ( widgets[ indx ].match( widgetClass ) ) {\n\t\t\t\t\t\tc.widgets[ c.widgets.length ] = widgets[ indx ].replace( widgetClass, '$1' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tapplyWidgetId : function( table, id, init ) {\n\t\t\ttable = $(table)[0];\n\t\t\tvar applied, time, name,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\twidget = ts.getWidgetById( id );\n\t\t\tif ( widget ) {\n\t\t\t\tname = widget.id;\n\t\t\t\tapplied = false;\n\t\t\t\t// add widget name to option list so it gets reapplied after sorting, filtering, etc\n\t\t\t\tif ( $.inArray( name, c.widgets ) < 0 ) {\n\t\t\t\t\tc.widgets[ c.widgets.length ] = name;\n\t\t\t\t}\n\t\t\t\tif ( debug ) { time = new Date(); }\n\n\t\t\t\tif ( init || !( c.widgetInit[ name ] ) ) {\n\t\t\t\t\t// set init flag first to prevent calling init more than once (e.g. pager)\n\t\t\t\t\tc.widgetInit[ name ] = true;\n\t\t\t\t\tif ( table.hasInitialized ) {\n\t\t\t\t\t\t// don't reapply widget options on tablesorter init\n\t\t\t\t\t\tts.applyWidgetOptions( table );\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof widget.init === 'function' ) {\n\t\t\t\t\t\tapplied = true;\n\t\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Initializing ' + name + ' widget' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\twidget.init( table, widget, c, wo );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( !init && typeof widget.format === 'function' ) {\n\t\t\t\t\tapplied = true;\n\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Updating ' + name + ' widget' );\n\t\t\t\t\t}\n\t\t\t\t\twidget.format( table, c, wo, false );\n\t\t\t\t}\n\t\t\t\tif ( debug ) {\n\t\t\t\t\tif ( applied ) {\n\t\t\t\t\t\tconsole.log( 'Completed ' + ( init ? 'initializing ' : 'applying ' ) + name + ' widget' + ts.benchmark( time ) );\n\t\t\t\t\t\tif ( console.groupEnd ) { console.groupEnd(); }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tapplyWidget : function( table, init, callback ) {\n\t\t\ttable = $( table )[ 0 ]; // in case this is called externally\n\t\t\tvar indx, len, names, widget, time,\n\t\t\t\tc = table.config,\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\twidgets = [];\n\t\t\t// prevent numerous consecutive widget applications\n\t\t\tif ( init !== false && table.hasInitialized && ( table.isApplyingWidgets || table.isUpdating ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( debug ) { time = new Date(); }\n\t\t\tts.addWidgetFromClass( table );\n\t\t\t// prevent \"tablesorter-ready\" from firing multiple times in a row\n\t\t\tclearTimeout( c.timerReady );\n\t\t\tif ( c.widgets.length ) {\n\t\t\t\ttable.isApplyingWidgets = true;\n\t\t\t\t// ensure unique widget ids\n\t\t\t\tc.widgets = $.grep( c.widgets, function( val, index ) {\n\t\t\t\t\treturn $.inArray( val, c.widgets ) === index;\n\t\t\t\t});\n\t\t\t\tnames = c.widgets || [];\n\t\t\t\tlen = names.length;\n\t\t\t\t// build widget array & add priority as needed\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = ts.getWidgetById( names[ indx ] );\n\t\t\t\t\tif ( widget && widget.id ) {\n\t\t\t\t\t\t// set priority to 10 if not defined\n\t\t\t\t\t\tif ( !widget.priority ) { widget.priority = 10; }\n\t\t\t\t\t\twidgets[ indx ] = widget;\n\t\t\t\t\t} else if ( debug ) {\n\t\t\t\t\t\tconsole.warn( '\"' + names[ indx ] + '\" was enabled, but the widget code has not been loaded!' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// sort widgets by priority\n\t\t\t\twidgets.sort( function( a, b ) {\n\t\t\t\t\treturn a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;\n\t\t\t\t});\n\t\t\t\t// add/update selected widgets\n\t\t\t\tlen = widgets.length;\n\t\t\t\tif ( debug ) {\n\t\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Start ' + ( init ? 'initializing' : 'applying' ) + ' widgets' );\n\t\t\t\t}\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = widgets[ indx ];\n\t\t\t\t\tif ( widget && widget.id ) {\n\t\t\t\t\t\tts.applyWidgetId( table, widget.id, init );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( debug && console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\tc.timerReady = setTimeout( function() {\n\t\t\t\ttable.isApplyingWidgets = false;\n\t\t\t\t$.data( table, 'lastWidgetApplication', new Date() );\n\t\t\t\tc.$table.triggerHandler( 'tablesorter-ready' );\n\t\t\t\t// callback executed on init only\n\t\t\t\tif ( !init && typeof callback === 'function' ) {\n\t\t\t\t\tcallback( table );\n\t\t\t\t}\n\t\t\t\tif ( debug ) {\n\t\t\t\t\twidget = c.widgets.length;\n\t\t\t\t\tconsole.log( 'Completed ' +\n\t\t\t\t\t\t( init === true ? 'initializing ' : 'applying ' ) + widget +\n\t\t\t\t\t\t' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );\n\t\t\t\t}\n\t\t\t}, 10 );\n\t\t},\n\n\t\tremoveWidget : function( table, name, refreshing ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar index, widget, indx, len,\n\t\t\t\tc = table.config;\n\t\t\t// if name === true, add all widgets from $.tablesorter.widgets\n\t\t\tif ( name === true ) {\n\t\t\t\tname = [];\n\t\t\t\tlen = ts.widgets.length;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = ts.widgets[ indx ];\n\t\t\t\t\tif ( widget && widget.id ) {\n\t\t\t\t\t\tname[ name.length ] = widget.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// name can be either an array of widgets names,\n\t\t\t\t// or a space/comma separated list of widget names\n\t\t\t\tname = ( $.isArray( name ) ? name.join( ',' ) : name || '' ).toLowerCase().split( /[\\s,]+/ );\n\t\t\t}\n\t\t\tlen = name.length;\n\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\twidget = ts.getWidgetById( name[ index ] );\n\t\t\t\tindx = $.inArray( name[ index ], c.widgets );\n\t\t\t\t// don't remove the widget from config.widget if refreshing\n\t\t\t\tif ( indx >= 0 && refreshing !== true ) {\n\t\t\t\t\tc.widgets.splice( indx, 1 );\n\t\t\t\t}\n\t\t\t\tif ( widget && widget.remove ) {\n\t\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\t\tconsole.log( ( refreshing ? 'Refreshing' : 'Removing' ) + ' \"' + name[ index ] + '\" widget' );\n\t\t\t\t\t}\n\t\t\t\t\twidget.remove( table, c, c.widgetOptions, refreshing );\n\t\t\t\t\tc.widgetInit[ name[ index ] ] = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.$table.triggerHandler( 'widgetRemoveEnd', table );\n\t\t},\n\n\t\trefreshWidgets : function( table, doAll, dontapply ) {\n\t\t\ttable = $( table )[ 0 ]; // see issue #243\n\t\t\tvar indx, widget,\n\t\t\t\tc = table.config,\n\t\t\t\tcurWidgets = c.widgets,\n\t\t\t\twidgets = ts.widgets,\n\t\t\t\tlen = widgets.length,\n\t\t\t\tlist = [],\n\t\t\t\tcallback = function( table ) {\n\t\t\t\t\t$( table ).triggerHandler( 'refreshComplete' );\n\t\t\t\t};\n\t\t\t// remove widgets not defined in config.widgets, unless doAll is true\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\twidget = widgets[ indx ];\n\t\t\t\tif ( widget && widget.id && ( doAll || $.inArray( widget.id, curWidgets ) < 0 ) ) {\n\t\t\t\t\tlist[ list.length ] = widget.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tts.removeWidget( table, list.join( ',' ), true );\n\t\t\tif ( dontapply !== true ) {\n\t\t\t\t// call widget init if\n\t\t\t\tts.applyWidget( table, doAll || false, callback );\n\t\t\t\tif ( doAll ) {\n\t\t\t\t\t// apply widget format\n\t\t\t\t\tts.applyWidget( table, false, callback );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\t\u2588\u2588  \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588     \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2584\u2588\u2588\u2588\u2588\u2588\n\t\t\u2588\u2588  \u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588     \u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588\u2584\u2584   \u2580\u2588\u2584\n\t\t\u2588\u2588  \u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588     \u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588\u2580\u2580      \u2580\u2588\u2584\n\t\t\u2580\u2588\u2588\u2588\u2588\u2580   \u2588\u2588   \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588   \u2588\u2588   \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2580\n\t\t*/\n\t\tbenchmark : function( diff ) {\n\t\t\treturn ( ' (' + ( new Date().getTime() - diff.getTime() ) + ' ms)' );\n\t\t},\n\t\t// deprecated ts.log\n\t\tlog : function() {\n\t\t\tconsole.log( arguments );\n\t\t},\n\t\tdebug : function(c, name) {\n\t\t\treturn c && (\n\t\t\t\tc.debug === true ||\n\t\t\t\ttypeof c.debug === 'string' && c.debug.indexOf(name) > -1\n\t\t\t);\n\t\t},\n\n\t\t// $.isEmptyObject from jQuery v1.4\n\t\tisEmptyObject : function( obj ) {\n\t\t\t/*jshint forin: false */\n\t\t\tfor ( var name in obj ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tisValueInArray : function( column, arry ) {\n\t\t\tvar indx,\n\t\t\t\tlen = arry && arry.length || 0;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( arry[ indx ][ 0 ] === column ) {\n\t\t\t\t\treturn indx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\n\t\tformatFloat : function( str, table ) {\n\t\t\tif ( typeof str !== 'string' || str === '' ) { return str; }\n\t\t\t// allow using formatFloat without a table; defaults to US number format\n\t\t\tvar num,\n\t\t\t\tusFormat = table && table.config ? table.config.usNumberFormat !== false :\n\t\t\t\t\ttypeof table !== 'undefined' ? table : true;\n\t\t\tif ( usFormat ) {\n\t\t\t\t// US Format - 1,234,567.89 -> 1234567.89\n\t\t\t\tstr = str.replace( ts.regex.comma, '' );\n\t\t\t} else {\n\t\t\t\t// German Format = 1.234.567,89 -> 1234567.89\n\t\t\t\t// French Format = 1 234 567,89 -> 1234567.89\n\t\t\t\tstr = str.replace( ts.regex.digitNonUS, '' ).replace( ts.regex.comma, '.' );\n\t\t\t}\n\t\t\tif ( ts.regex.digitNegativeTest.test( str ) ) {\n\t\t\t\t// make (#) into a negative number -> (10) = -10\n\t\t\t\tstr = str.replace( ts.regex.digitNegativeReplace, '-$1' );\n\t\t\t}\n\t\t\tnum = parseFloat( str );\n\t\t\t// return the text instead of zero\n\t\t\treturn isNaN( num ) ? $.trim( str ) : num;\n\t\t},\n\n\t\tisDigit : function( str ) {\n\t\t\t// replace all unwanted chars and match\n\t\t\treturn isNaN( str ) ?\n\t\t\t\tts.regex.digitTest.test( str.toString().replace( ts.regex.digitReplace, '' ) ) :\n\t\t\t\tstr !== '';\n\t\t},\n\n\t\t// computeTableHeaderCellIndexes from:\n\t\t// http://www.javascripttoolbox.com/lib/table/examples.php\n\t\t// http://www.javascripttoolbox.com/temp/table_cellindex.html\n\t\tcomputeColumnIndex : function( $rows, c ) {\n\t\t\tvar i, j, k, l, cell, cells, rowIndex, rowSpan, colSpan, firstAvailCol,\n\t\t\t\t// total columns has been calculated, use it to set the matrixrow\n\t\t\t\tcolumns = c && c.columns || 0,\n\t\t\t\tmatrix = [],\n\t\t\t\tmatrixrow = new Array( columns );\n\t\t\tfor ( i = 0; i < $rows.length; i++ ) {\n\t\t\t\tcells = $rows[ i ].cells;\n\t\t\t\tfor ( j = 0; j < cells.length; j++ ) {\n\t\t\t\t\tcell = cells[ j ];\n\t\t\t\t\trowIndex = i;\n\t\t\t\t\trowSpan = cell.rowSpan || 1;\n\t\t\t\t\tcolSpan = cell.colSpan || 1;\n\t\t\t\t\tif ( typeof matrix[ rowIndex ] === 'undefined' ) {\n\t\t\t\t\t\tmatrix[ rowIndex ] = [];\n\t\t\t\t\t}\n\t\t\t\t\t// Find first available column in the first row\n\t\t\t\t\tfor ( k = 0; k < matrix[ rowIndex ].length + 1; k++ ) {\n\t\t\t\t\t\tif ( typeof matrix[ rowIndex ][ k ] === 'undefined' ) {\n\t\t\t\t\t\t\tfirstAvailCol = k;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// jscs:disable disallowEmptyBlocks\n\t\t\t\t\tif ( columns && cell.cellIndex === firstAvailCol ) {\n\t\t\t\t\t\t// don't to anything\n\t\t\t\t\t} else if ( cell.setAttribute ) {\n\t\t\t\t\t\t// jscs:enable disallowEmptyBlocks\n\t\t\t\t\t\t// add data-column (setAttribute = IE8+)\n\t\t\t\t\t\tcell.setAttribute( 'data-column', firstAvailCol );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// remove once we drop support for IE7 - 1/12/2016\n\t\t\t\t\t\t$( cell ).attr( 'data-column', firstAvailCol );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( k = rowIndex; k < rowIndex + rowSpan; k++ ) {\n\t\t\t\t\t\tif ( typeof matrix[ k ] === 'undefined' ) {\n\t\t\t\t\t\t\tmatrix[ k ] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatrixrow = matrix[ k ];\n\t\t\t\t\t\tfor ( l = firstAvailCol; l < firstAvailCol + colSpan; l++ ) {\n\t\t\t\t\t\t\tmatrixrow[ l ] = 'x';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tts.checkColumnCount($rows, matrix, matrixrow.length);\n\t\t\treturn matrixrow.length;\n\t\t},\n\n\t\tcheckColumnCount : function($rows, matrix, columns) {\n\t\t\t// this DOES NOT report any tbody column issues, except for the math and\n\t\t\t// and column selector widgets\n\t\t\tvar i, len,\n\t\t\t\tvalid = true,\n\t\t\t\tcells = [];\n\t\t\tfor ( i = 0; i < matrix.length; i++ ) {\n\t\t\t\t// some matrix entries are undefined when testing the footer because\n\t\t\t\t// it is using the rowIndex property\n\t\t\t\tif ( matrix[i] ) {\n\t\t\t\t\tlen = matrix[i].length;\n\t\t\t\t\tif ( matrix[i].length !== columns ) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !valid ) {\n\t\t\t\t$rows.each( function( indx, el ) {\n\t\t\t\t\tvar cell = el.parentElement.nodeName;\n\t\t\t\t\tif ( cells.indexOf( cell ) < 0 ) {\n\t\t\t\t\t\tcells.push( cell );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Invalid or incorrect number of columns in the ' +\n\t\t\t\t\tcells.join( ' or ' ) + '; expected ' + columns +\n\t\t\t\t\t', but found ' + len + ' columns'\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t// automatically add a colgroup with col elements set to a percentage width\n\t\tfixColumnWidth : function( table ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar overallWidth, percent, $tbodies, len, index,\n\t\t\t\tc = table.config,\n\t\t\t\t$colgroup = c.$table.children( 'colgroup' );\n\t\t\t// remove plugin-added colgroup, in case we need to refresh the widths\n\t\t\tif ( $colgroup.length && $colgroup.hasClass( ts.css.colgroup ) ) {\n\t\t\t\t$colgroup.remove();\n\t\t\t}\n\t\t\tif ( c.widthFixed && c.$table.children( 'colgroup' ).length === 0 ) {\n\t\t\t\t$colgroup = $( '<colgroup class=\"' + ts.css.colgroup + '\">' );\n\t\t\t\toverallWidth = c.$table.width();\n\t\t\t\t// only add col for visible columns - fixes #371\n\t\t\t\t$tbodies = c.$tbodies.find( 'tr:first' ).children( ':visible' );\n\t\t\t\tlen = $tbodies.length;\n\t\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t\tpercent = parseInt( ( $tbodies.eq( index ).width() / overallWidth ) * 1000, 10 ) / 10 + '%';\n\t\t\t\t\t$colgroup.append( $( '<col>' ).css( 'width', percent ) );\n\t\t\t\t}\n\t\t\t\tc.$table.prepend( $colgroup );\n\t\t\t}\n\t\t},\n\n\t\t// get sorter, string, empty, etc options for each column from\n\t\t// jQuery data, metadata, header option or header class name ('sorter-false')\n\t\t// priority = jQuery data > meta > headers option > header class name\n\t\tgetData : function( header, configHeader, key ) {\n\t\t\tvar meta, cl4ss,\n\t\t\t\tval = '',\n\t\t\t\t$header = $( header );\n\t\t\tif ( !$header.length ) { return ''; }\n\t\t\tmeta = $.metadata ? $header.metadata() : false;\n\t\t\tcl4ss = ' ' + ( $header.attr( 'class' ) || '' );\n\t\t\tif ( typeof $header.data( key ) !== 'undefined' ||\n\t\t\t\ttypeof $header.data( key.toLowerCase() ) !== 'undefined' ) {\n\t\t\t\t// 'data-lockedOrder' is assigned to 'lockedorder'; but 'data-locked-order' is assigned to 'lockedOrder'\n\t\t\t\t// 'data-sort-initial-order' is assigned to 'sortInitialOrder'\n\t\t\t\tval += $header.data( key ) || $header.data( key.toLowerCase() );\n\t\t\t} else if ( meta && typeof meta[ key ] !== 'undefined' ) {\n\t\t\t\tval += meta[ key ];\n\t\t\t} else if ( configHeader && typeof configHeader[ key ] !== 'undefined' ) {\n\t\t\t\tval += configHeader[ key ];\n\t\t\t} else if ( cl4ss !== ' ' && cl4ss.match( ' ' + key + '-' ) ) {\n\t\t\t\t// include sorter class name 'sorter-text', etc; now works with 'sorter-my-custom-parser'\n\t\t\t\tval = cl4ss.match( new RegExp( '\\\\s' + key + '-([\\\\w-]+)' ) )[ 1 ] || '';\n\t\t\t}\n\t\t\treturn $.trim( val );\n\t\t},\n\n\t\tgetColumnData : function( table, obj, indx, getCell, $headers ) {\n\t\t\tif ( typeof obj !== 'object' || obj === null ) {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar $header, key,\n\t\t\t\tc = table.config,\n\t\t\t\t$cells = ( $headers || c.$headers ),\n\t\t\t\t// c.$headerIndexed is not defined initially\n\t\t\t\t$cell = c.$headerIndexed && c.$headerIndexed[ indx ] ||\n\t\t\t\t\t$cells.find( '[data-column=\"' + indx + '\"]:last' );\n\t\t\tif ( typeof obj[ indx ] !== 'undefined' ) {\n\t\t\t\treturn getCell ? obj[ indx ] : obj[ $cells.index( $cell ) ];\n\t\t\t}\n\t\t\tfor ( key in obj ) {\n\t\t\t\tif ( typeof key === 'string' ) {\n\t\t\t\t\t$header = $cell\n\t\t\t\t\t\t// header cell with class/id\n\t\t\t\t\t\t.filter( key )\n\t\t\t\t\t\t// find elements within the header cell with cell/id\n\t\t\t\t\t\t.add( $cell.find( key ) );\n\t\t\t\t\tif ( $header.length ) {\n\t\t\t\t\t\treturn obj[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t},\n\n\t\t// *** Process table ***\n\t\t// add processing indicator\n\t\tisProcessing : function( $table, toggle, $headers ) {\n\t\t\t$table = $( $table );\n\t\t\tvar c = $table[ 0 ].config,\n\t\t\t\t// default to all headers\n\t\t\t\t$header = $headers || $table.find( '.' + ts.css.header );\n\t\t\tif ( toggle ) {\n\t\t\t\t// don't use sortList if custom $headers used\n\t\t\t\tif ( typeof $headers !== 'undefined' && c.sortList.length > 0 ) {\n\t\t\t\t\t// get headers from the sortList\n\t\t\t\t\t$header = $header.filter( function() {\n\t\t\t\t\t\t// get data-column from attr to keep compatibility with jQuery 1.2.6\n\t\t\t\t\t\treturn this.sortDisabled ?\n\t\t\t\t\t\t\tfalse :\n\t\t\t\t\t\t\tts.isValueInArray( parseFloat( $( this ).attr( 'data-column' ) ), c.sortList ) >= 0;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$table.add( $header ).addClass( ts.css.processing + ' ' + c.cssProcessing );\n\t\t\t} else {\n\t\t\t\t$table.add( $header ).removeClass( ts.css.processing + ' ' + c.cssProcessing );\n\t\t\t}\n\t\t},\n\n\t\t// detach tbody but save the position\n\t\t// don't use tbody because there are portions that look for a tbody index (updateCell)\n\t\tprocessTbody : function( table, $tb, getIt ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tif ( getIt ) {\n\t\t\t\ttable.isProcessing = true;\n\t\t\t\t$tb.before( '<colgroup class=\"tablesorter-savemyplace\"/>' );\n\t\t\t\treturn $.fn.detach ? $tb.detach() : $tb.remove();\n\t\t\t}\n\t\t\tvar holdr = $( table ).find( 'colgroup.tablesorter-savemyplace' );\n\t\t\t$tb.insertAfter( holdr );\n\t\t\tholdr.remove();\n\t\t\ttable.isProcessing = false;\n\t\t},\n\n\t\tclearTableBody : function( table ) {\n\t\t\t$( table )[ 0 ].config.$tbodies.children().detach();\n\t\t},\n\n\t\t// used when replacing accented characters during sorting\n\t\tcharacterEquivalents : {\n\t\t\t'a' : '\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5', // \u00E1\u00E0\u00E2\u00E3\u00E4\u0105\u00E5\n\t\t\t'A' : '\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5', // \u00C1\u00C0\u00C2\u00C3\u00C4\u0104\u00C5\n\t\t\t'c' : '\\u00e7\\u0107\\u010d', // \u00E7\u0107\u010D\n\t\t\t'C' : '\\u00c7\\u0106\\u010c', // \u00C7\u0106\u010C\n\t\t\t'e' : '\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119', // \u00E9\u00E8\u00EA\u00EB\u011B\u0119\n\t\t\t'E' : '\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118', // \u00C9\u00C8\u00CA\u00CB\u011A\u0118\n\t\t\t'i' : '\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131', // \u00ED\u00EC\u0130\u00EE\u00EF\u0131\n\t\t\t'I' : '\\u00cd\\u00cc\\u0130\\u00ce\\u00cf', // \u00CD\u00CC\u0130\u00CE\u00CF\n\t\t\t'o' : '\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6\\u014d', // \u00F3\u00F2\u00F4\u00F5\u00F6\u014D\n\t\t\t'O' : '\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6\\u014c', // \u00D3\u00D2\u00D4\u00D5\u00D6\u014C\n\t\t\t'ss': '\\u00df', // \u00DF (s sharp)\n\t\t\t'SS': '\\u1e9e', // \u1E9E (Capital sharp s)\n\t\t\t'u' : '\\u00fa\\u00f9\\u00fb\\u00fc\\u016f', // \u00FA\u00F9\u00FB\u00FC\u016F\n\t\t\t'U' : '\\u00da\\u00d9\\u00db\\u00dc\\u016e' // \u00DA\u00D9\u00DB\u00DC\u016E\n\t\t},\n\n\t\treplaceAccents : function( str ) {\n\t\t\tvar chr,\n\t\t\t\tacc = '[',\n\t\t\t\teq = ts.characterEquivalents;\n\t\t\tif ( !ts.characterRegex ) {\n\t\t\t\tts.characterRegexArray = {};\n\t\t\t\tfor ( chr in eq ) {\n\t\t\t\t\tif ( typeof chr === 'string' ) {\n\t\t\t\t\t\tacc += eq[ chr ];\n\t\t\t\t\t\tts.characterRegexArray[ chr ] = new RegExp( '[' + eq[ chr ] + ']', 'g' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tts.characterRegex = new RegExp( acc + ']' );\n\t\t\t}\n\t\t\tif ( ts.characterRegex.test( str ) ) {\n\t\t\t\tfor ( chr in eq ) {\n\t\t\t\t\tif ( typeof chr === 'string' ) {\n\t\t\t\t\t\tstr = str.replace( ts.characterRegexArray[ chr ], chr );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\n\t\tvalidateOptions : function( c ) {\n\t\t\tvar setting, setting2, typ, timer,\n\t\t\t\t// ignore options containing an array\n\t\t\t\tignore = 'headers sortForce sortList sortAppend widgets'.split( ' ' ),\n\t\t\t\torig = c.originalSettings;\n\t\t\tif ( orig ) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\ttimer = new Date();\n\t\t\t\t}\n\t\t\t\tfor ( setting in orig ) {\n\t\t\t\t\ttyp = typeof ts.defaults[setting];\n\t\t\t\t\tif ( typ === 'undefined' ) {\n\t\t\t\t\t\tconsole.warn( 'Tablesorter Warning! \"table.config.' + setting + '\" option not recognized' );\n\t\t\t\t\t} else if ( typ === 'object' ) {\n\t\t\t\t\t\tfor ( setting2 in orig[setting] ) {\n\t\t\t\t\t\t\ttyp = ts.defaults[setting] && typeof ts.defaults[setting][setting2];\n\t\t\t\t\t\t\tif ( $.inArray( setting, ignore ) < 0 && typ === 'undefined' ) {\n\t\t\t\t\t\t\t\tconsole.warn( 'Tablesorter Warning! \"table.config.' + setting + '.' + setting2 + '\" option not recognized' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.log( 'validate options time:' + ts.benchmark( timer ) );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// restore headers\n\t\trestoreHeaders : function( table ) {\n\t\t\tvar index, $cell,\n\t\t\t\tc = $( table )[ 0 ].config,\n\t\t\t\t$headers = c.$table.find( c.selectorHeaders ),\n\t\t\t\tlen = $headers.length;\n\t\t\t// don't use c.$headers here in case header cells were swapped\n\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t$cell = $headers.eq( index );\n\t\t\t\t// only restore header cells if it is wrapped\n\t\t\t\t// because this is also used by the updateAll method\n\t\t\t\tif ( $cell.find( '.' + ts.css.headerIn ).length ) {\n\t\t\t\t\t$cell.html( c.headerContent[ index ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdestroy : function( table, removeClasses, callback ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tif ( !table.hasInitialized ) { return; }\n\t\t\t// remove all widgets\n\t\t\tts.removeWidget( table, true, false );\n\t\t\tvar events,\n\t\t\t\t$t = $( table ),\n\t\t\t\tc = table.config,\n\t\t\t\t$h = $t.find( 'thead:first' ),\n\t\t\t\t$r = $h.find( 'tr.' + ts.css.headerRow ).removeClass( ts.css.headerRow + ' ' + c.cssHeaderRow ),\n\t\t\t\t$f = $t.find( 'tfoot:first > tr' ).children( 'th, td' );\n\t\t\tif ( removeClasses === false && $.inArray( 'uitheme', c.widgets ) >= 0 ) {\n\t\t\t\t// reapply uitheme classes, in case we want to maintain appearance\n\t\t\t\t$t.triggerHandler( 'applyWidgetId', [ 'uitheme' ] );\n\t\t\t\t$t.triggerHandler( 'applyWidgetId', [ 'zebra' ] );\n\t\t\t}\n\t\t\t// remove widget added rows, just in case\n\t\t\t$h.find( 'tr' ).not( $r ).remove();\n\t\t\t// disable tablesorter - not using .unbind( namespace ) because namespacing was\n\t\t\t// added in jQuery v1.4.3 - see http://api.jquery.com/event.namespace/\n\t\t\tevents = 'sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton ' +\n\t\t\t\t'appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave ' +\n\t\t\t\t'keypress sortBegin sortEnd resetToLoadState '.split( ' ' )\n\t\t\t\t.join( c.namespace + ' ' );\n\t\t\t$t\n\t\t\t\t.removeData( 'tablesorter' )\n\t\t\t\t.unbind( events.replace( ts.regex.spaces, ' ' ) );\n\t\t\tc.$headers\n\t\t\t\t.add( $f )\n\t\t\t\t.removeClass( [ ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone ].join( ' ' ) )\n\t\t\t\t.removeAttr( 'data-column' )\n\t\t\t\t.removeAttr( 'aria-label' )\n\t\t\t\t.attr( 'aria-disabled', 'true' );\n\t\t\t$r\n\t\t\t\t.find( c.selectorSort )\n\t\t\t\t.unbind( ( 'mousedown mouseup keypress '.split( ' ' ).join( c.namespace + ' ' ) ).replace( ts.regex.spaces, ' ' ) );\n\t\t\tts.restoreHeaders( table );\n\t\t\t$t.toggleClass( ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false );\n\t\t\t$t.removeClass(c.namespace.slice(1));\n\t\t\t// clear flag in case the plugin is initialized again\n\t\t\ttable.hasInitialized = false;\n\t\t\tdelete table.config.cache;\n\t\t\tif ( typeof callback === 'function' ) {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'tablesorter has been removed' );\n\t\t\t}\n\t\t}\n\n\t};\n\n\t$.fn.tablesorter = function( settings ) {\n\t\treturn this.each( function() {\n\t\t\tvar table = this,\n\t\t\t// merge & extend config options\n\t\t\tc = $.extend( true, {}, ts.defaults, settings, ts.instanceMethods );\n\t\t\t// save initial settings\n\t\t\tc.originalSettings = settings;\n\t\t\t// create a table from data (build table widget)\n\t\t\tif ( !table.hasInitialized && ts.buildTable && this.nodeName !== 'TABLE' ) {\n\t\t\t\t// return the table (in case the original target is the table's container)\n\t\t\t\tts.buildTable( table, c );\n\t\t\t} else {\n\t\t\t\tts.setup( table, c );\n\t\t\t}\n\t\t});\n\t};\n\n\t// set up debug logs\n\tif ( !( window.console && window.console.log ) ) {\n\t\t// access $.tablesorter.logs for browsers that don't have a console...\n\t\tts.logs = [];\n\t\t/*jshint -W020 */\n\t\tconsole = {};\n\t\tconsole.log = console.warn = console.error = console.table = function() {\n\t\t\tvar arg = arguments.length > 1 ? arguments : arguments[0];\n\t\t\tts.logs[ ts.logs.length ] = { date: Date.now(), log: arg };\n\t\t};\n\t}\n\n\t// add default parsers\n\tts.addParser({\n\t\tid : 'no-parser',\n\t\tis : function() {\n\t\t\treturn false;\n\t\t},\n\t\tformat : function() {\n\t\t\treturn '';\n\t\t},\n\t\ttype : 'text'\n\t});\n\n\tts.addParser({\n\t\tid : 'text',\n\t\tis : function() {\n\t\t\treturn true;\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\tvar c = table.config;\n\t\t\tif ( str ) {\n\t\t\t\tstr = $.trim( c.ignoreCase ? str.toLocaleLowerCase() : str );\n\t\t\t\tstr = c.sortLocaleCompare ? ts.replaceAccents( str ) : str;\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\ttype : 'text'\n\t});\n\n\tts.regex.nondigit = /[^\\w,. \\-()]/g;\n\tts.addParser({\n\t\tid : 'digit',\n\t\tis : function( str ) {\n\t\t\treturn ts.isDigit( str );\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\tvar num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );\n\t\t\treturn str && typeof num === 'number' ? num :\n\t\t\t\tstr ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\tts.regex.currencyReplace = /[+\\-,. ]/g;\n\tts.regex.currencyTest = /^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/;\n\tts.addParser({\n\t\tid : 'currency',\n\t\tis : function( str ) {\n\t\t\tstr = ( str || '' ).replace( ts.regex.currencyReplace, '' );\n\t\t\t// test for \u00A3$\u20AC\u00A4\u00A5\u00A2\n\t\t\treturn ts.regex.currencyTest.test( str );\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\tvar num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );\n\t\t\treturn str && typeof num === 'number' ? num :\n\t\t\t\tstr ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// too many protocols to add them all https://en.wikipedia.org/wiki/URI_scheme\n\t// now, this regex can be updated before initialization\n\tts.regex.urlProtocolTest = /^(https?|ftp|file):\\/\\//;\n\tts.regex.urlProtocolReplace = /(https?|ftp|file):\\/\\/(www\\.)?/;\n\tts.addParser({\n\t\tid : 'url',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.urlProtocolTest.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\treturn str ? $.trim( str.replace( ts.regex.urlProtocolReplace, '' ) ) : str;\n\t\t},\n\t\ttype : 'text'\n\t});\n\n\tts.regex.dash = /-/g;\n\tts.regex.isoDate = /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/;\n\tts.addParser({\n\t\tid : 'isoDate',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.isoDate.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\tvar date = str ? new Date( str.replace( ts.regex.dash, '/' ) ) : str;\n\t\t\treturn date instanceof Date && isFinite( date ) ? date.getTime() : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\tts.regex.percent = /%/g;\n\tts.regex.percentTest = /(\\d\\s*?%|%\\s*?\\d)/;\n\tts.addParser({\n\t\tid : 'percent',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.percentTest.test( str ) && str.length < 15;\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\treturn str ? ts.formatFloat( str.replace( ts.regex.percent, '' ), table ) : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// added image parser to core v2.17.9\n\tts.addParser({\n\t\tid : 'image',\n\t\tis : function( str, table, node, $node ) {\n\t\t\treturn $node.find( 'img' ).length > 0;\n\t\t},\n\t\tformat : function( str, table, cell ) {\n\t\t\treturn $( cell ).find( 'img' ).attr( table.config.imgAttr || 'alt' ) || str;\n\t\t},\n\t\tparsed : true, // filter widget flag\n\t\ttype : 'text'\n\t});\n\n\tts.regex.dateReplace = /(\\S)([AP]M)$/i; // used by usLongDate & time parser\n\tts.regex.usLongDateTest1 = /^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i;\n\tts.regex.usLongDateTest2 = /^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i;\n\tts.addParser({\n\t\tid : 'usLongDate',\n\t\tis : function( str ) {\n\t\t\t// two digit years are not allowed cross-browser\n\t\t\t// Jan 01, 2013 12:34:56 PM or 01 Jan 2013\n\t\t\treturn ts.regex.usLongDateTest1.test( str ) || ts.regex.usLongDateTest2.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\tvar date = str ? new Date( str.replace( ts.regex.dateReplace, '$1 $2' ) ) : str;\n\t\t\treturn date instanceof Date && isFinite( date ) ? date.getTime() : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included\n\tts.regex.shortDateTest = /(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/;\n\t// escaped \"-\" because JSHint in Firefox was showing it as an error\n\tts.regex.shortDateReplace = /[\\-.,]/g;\n\t// XXY covers MDY & DMY formats\n\tts.regex.shortDateXXY = /(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/;\n\tts.regex.shortDateYMD = /(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/;\n\tts.convertFormat = function( dateString, format ) {\n\t\tdateString = ( dateString || '' )\n\t\t\t.replace( ts.regex.spaces, ' ' )\n\t\t\t.replace( ts.regex.shortDateReplace, '/' );\n\t\tif ( format === 'mmddyyyy' ) {\n\t\t\tdateString = dateString.replace( ts.regex.shortDateXXY, '$3/$1/$2' );\n\t\t} else if ( format === 'ddmmyyyy' ) {\n\t\t\tdateString = dateString.replace( ts.regex.shortDateXXY, '$3/$2/$1' );\n\t\t} else if ( format === 'yyyymmdd' ) {\n\t\t\tdateString = dateString.replace( ts.regex.shortDateYMD, '$1/$2/$3' );\n\t\t}\n\t\tvar date = new Date( dateString );\n\t\treturn date instanceof Date && isFinite( date ) ? date.getTime() : '';\n\t};\n\n\tts.addParser({\n\t\tid : 'shortDate', // 'mmddyyyy', 'ddmmyyyy' or 'yyyymmdd'\n\t\tis : function( str ) {\n\t\t\tstr = ( str || '' ).replace( ts.regex.spaces, ' ' ).replace( ts.regex.shortDateReplace, '/' );\n\t\t\treturn ts.regex.shortDateTest.test( str );\n\t\t},\n\t\tformat : function( str, table, cell, cellIndex ) {\n\t\t\tif ( str ) {\n\t\t\t\tvar c = table.config,\n\t\t\t\t\t$header = c.$headerIndexed[ cellIndex ],\n\t\t\t\t\tformat = $header.length && $header.data( 'dateFormat' ) ||\n\t\t\t\t\t\tts.getData( $header, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat' ) ||\n\t\t\t\t\t\tc.dateFormat;\n\t\t\t\t// save format because getData can be slow...\n\t\t\t\tif ( $header.length ) {\n\t\t\t\t\t$header.data( 'dateFormat', format );\n\t\t\t\t}\n\t\t\t\treturn ts.convertFormat( str, format ) || str;\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk\n\tts.regex.timeTest = /^(0?[1-9]|1[0-2]):([0-5]\\d)(\\s[AP]M)$|^((?:[01]\\d|[2][0-4]):[0-5]\\d)$/i;\n\tts.regex.timeMatch = /(0?[1-9]|1[0-2]):([0-5]\\d)(\\s[AP]M)|((?:[01]\\d|[2][0-4]):[0-5]\\d)/i;\n\tts.addParser({\n\t\tid : 'time',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.timeTest.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\t// isolate time... ignore month, day and year\n\t\t\tvar temp,\n\t\t\t\ttimePart = ( str || '' ).match( ts.regex.timeMatch ),\n\t\t\t\torig = new Date( str ),\n\t\t\t\t// no time component? default to 00:00 by leaving it out, but only if str is defined\n\t\t\t\ttime = str && ( timePart !== null ? timePart[ 0 ] : '00:00 AM' ),\n\t\t\t\tdate = time ? new Date( '2000/01/01 ' + time.replace( ts.regex.dateReplace, '$1 $2' ) ) : time;\n\t\t\tif ( date instanceof Date && isFinite( date ) ) {\n\t\t\t\ttemp = orig instanceof Date && isFinite( orig ) ? orig.getTime() : 0;\n\t\t\t\t// if original string was a valid date, add it to the decimal so the column sorts in some kind of order\n\t\t\t\t// luckily new Date() ignores the decimals\n\t\t\t\treturn temp ? parseFloat( date.getTime() + '.' + orig.getTime() ) : date.getTime();\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\tts.addParser({\n\t\tid : 'metadata',\n\t\tis : function() {\n\t\t\treturn false;\n\t\t},\n\t\tformat : function( str, table, cell ) {\n\t\t\tvar c = table.config,\n\t\t\tp = ( !c.parserMetadataName ) ? 'sortValue' : c.parserMetadataName;\n\t\t\treturn $( cell ).metadata()[ p ];\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t/*\n\t\t\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2588\u2588\u2588\u2584 \u2584\u2588\u2588\u2588\u2588\u2584\n\t\t  \u2584\u2588\u2580  \u2588\u2588\u2584\u2584   \u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588 \u2588\u2588\u2584\u2584\u2588\u2588\n\t\t\u2584\u2588\u2580    \u2588\u2588\u2580\u2580   \u2588\u2588\u2580\u2580\u2588\u2588 \u2588\u2588\u2580\u2580\u2588  \u2588\u2588\u2580\u2580\u2588\u2588\n\t\t\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2580 \u2588\u2588  \u2588\u2588 \u2588\u2588  \u2588\u2588\n\t\t*/\n\t// add default widgets\n\tts.addWidget({\n\t\tid : 'zebra',\n\t\tpriority : 90,\n\t\tformat : function( table, c, wo ) {\n\t\t\tvar $visibleRows, $row, count, isEven, tbodyIndex, rowIndex, len,\n\t\t\t\tchild = new RegExp( c.cssChildRow, 'i' ),\n\t\t\t\t$tbodies = c.$tbodies.add( $( c.namespace + '_extra_table' ).children( 'tbody:not(.' + c.cssInfoBlock + ')' ) );\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t// loop through the visible rows\n\t\t\t\tcount = 0;\n\t\t\t\t$visibleRows = $tbodies.eq( tbodyIndex ).children( 'tr:visible' ).not( c.selectorRemove );\n\t\t\t\tlen = $visibleRows.length;\n\t\t\t\tfor ( rowIndex = 0; rowIndex < len; rowIndex++ ) {\n\t\t\t\t\t$row = $visibleRows.eq( rowIndex );\n\t\t\t\t\t// style child rows the same way the parent row was styled\n\t\t\t\t\tif ( !child.test( $row[ 0 ].className ) ) { count++; }\n\t\t\t\t\tisEven = ( count % 2 === 0 );\n\t\t\t\t\t$row\n\t\t\t\t\t\t.removeClass( wo.zebra[ isEven ? 1 : 0 ] )\n\t\t\t\t\t\t.addClass( wo.zebra[ isEven ? 0 : 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremove : function( table, c, wo, refreshing ) {\n\t\t\tif ( refreshing ) { return; }\n\t\t\tvar tbodyIndex, $tbody,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\ttoRemove = ( wo.zebra || [ 'even', 'odd' ] ).join( ' ' );\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody\n\t\t\t\t$tbody.children().removeClass( toRemove );\n\t\t\t\tts.processTbody( table, $tbody, false ); // restore tbody\n\t\t\t}\n\t\t}\n\t});\n\n})( jQuery );\n\n/*! Widget: storage - updated 2018-03-18 (v2.30.0) */\n/*global JSON:false */\n;(function ($, window, document) {\n\t'use strict';\n\n\tvar ts = $.tablesorter || {};\n\n\t// update defaults for validator; these values must be falsy!\n\t$.extend(true, ts.defaults, {\n\t\tfixedUrl: '',\n\t\twidgetOptions: {\n\t\t\tstorage_fixedUrl: '',\n\t\t\tstorage_group: '',\n\t\t\tstorage_page: '',\n\t\t\tstorage_storageType: '',\n\t\t\tstorage_tableId: '',\n\t\t\tstorage_useSessionStorage: ''\n\t\t}\n\t});\n\n\t// *** Store data in local storage, with a cookie fallback ***\n\t/* IE7 needs JSON library for JSON.stringify - (http://caniuse.com/#search=json)\n\t   if you need it, then include https://github.com/douglascrockford/JSON-js\n\n\t   $.parseJSON is not available is jQuery versions older than 1.4.1, using older\n\t   versions will only allow storing information for one page at a time\n\n\t   // *** Save data (JSON format only) ***\n\t   // val must be valid JSON... use http://jsonlint.com/ to ensure it is valid\n\t   var val = { \"mywidget\" : \"data1\" }; // valid JSON uses double quotes\n\t   // $.tablesorter.storage(table, key, val);\n\t   $.tablesorter.storage(table, 'tablesorter-mywidget', val);\n\n\t   // *** Get data: $.tablesorter.storage(table, key); ***\n\t   v = $.tablesorter.storage(table, 'tablesorter-mywidget');\n\t   // val may be empty, so also check for your data\n\t   val = (v && v.hasOwnProperty('mywidget')) ? v.mywidget : '';\n\t   alert(val); // 'data1' if saved, or '' if not\n\t*/\n\tts.storage = function(table, key, value, options) {\n\t\ttable = $(table)[0];\n\t\tvar cookieIndex, cookies, date,\n\t\t\thasStorage = false,\n\t\t\tvalues = {},\n\t\t\tc = table.config,\n\t\t\two = c && c.widgetOptions,\n\t\t\tdebug = ts.debug(c, 'storage'),\n\t\t\tstorageType = (\n\t\t\t\t( options && options.storageType ) || ( wo && wo.storage_storageType )\n\t\t\t).toString().charAt(0).toLowerCase(),\n\t\t\t// deprecating \"useSessionStorage\"; any storageType setting overrides it\n\t\t\tsession = storageType ? '' :\n\t\t\t\t( options && options.useSessionStorage ) || ( wo && wo.storage_useSessionStorage ),\n\t\t\t$table = $(table),\n\t\t\t// id from (1) options ID, (2) table 'data-table-group' attribute, (3) widgetOptions.storage_tableId,\n\t\t\t// (4) table ID, then (5) table index\n\t\t\tid = options && options.id ||\n\t\t\t\t$table.attr( options && options.group || wo && wo.storage_group || 'data-table-group') ||\n\t\t\t\two && wo.storage_tableId || table.id || $('.tablesorter').index( $table ),\n\t\t\t// url from (1) options url, (2) table 'data-table-page' attribute, (3) widgetOptions.storage_fixedUrl,\n\t\t\t// (4) table.config.fixedUrl (deprecated), then (5) window location path\n\t\t\turl = options && options.url ||\n\t\t\t\t$table.attr(options && options.page || wo && wo.storage_page || 'data-table-page') ||\n\t\t\t\two && wo.storage_fixedUrl || c && c.fixedUrl || window.location.pathname;\n\n\t\t// skip if using cookies\n\t\tif (storageType !== 'c') {\n\t\t\tstorageType = (storageType === 's' || session) ? 'sessionStorage' : 'localStorage';\n\t\t\t// https://gist.github.com/paulirish/5558557\n\t\t\tif (storageType in window) {\n\t\t\t\ttry {\n\t\t\t\t\twindow[storageType].setItem('_tmptest', 'temp');\n\t\t\t\t\thasStorage = true;\n\t\t\t\t\twindow[storageType].removeItem('_tmptest');\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn( storageType + ' is not supported in this browser' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (debug) {\n\t\t\tconsole.log('Storage >> Using', hasStorage ? storageType : 'cookies');\n\t\t}\n\t\t// *** get value ***\n\t\tif ($.parseJSON) {\n\t\t\tif (hasStorage) {\n\t\t\t\tvalues = $.parseJSON( window[storageType][key] || 'null' ) || {};\n\t\t\t} else {\n\t\t\t\t// old browser, using cookies\n\t\t\t\tcookies = document.cookie.split(/[;\\s|=]/);\n\t\t\t\t// add one to get from the key to the value\n\t\t\t\tcookieIndex = $.inArray(key, cookies) + 1;\n\t\t\t\tvalues = (cookieIndex !== 0) ? $.parseJSON(cookies[cookieIndex] || 'null') || {} : {};\n\t\t\t}\n\t\t}\n\t\t// allow value to be an empty string too\n\t\tif (typeof value !== 'undefined' && window.JSON && JSON.hasOwnProperty('stringify')) {\n\t\t\t// add unique identifiers = url pathname > table ID/index on page > data\n\t\t\tif (!values[url]) {\n\t\t\t\tvalues[url] = {};\n\t\t\t}\n\t\t\tvalues[url][id] = value;\n\t\t\t// *** set value ***\n\t\t\tif (hasStorage) {\n\t\t\t\twindow[storageType][key] = JSON.stringify(values);\n\t\t\t} else {\n\t\t\t\tdate = new Date();\n\t\t\t\tdate.setTime(date.getTime() + (31536e+6)); // 365 days\n\t\t\t\tdocument.cookie = key + '=' + (JSON.stringify(values)).replace(/\\\"/g, '\\\"') + '; expires=' + date.toGMTString() + '; path=/';\n\t\t\t}\n\t\t} else {\n\t\t\treturn values && values[url] ? values[url][id] : '';\n\t\t}\n\t};\n\n})(jQuery, window, document);\n\n/*! Widget: saveSort - updated 2018-03-19 (v2.30.1) *//*\n* Requires tablesorter v2.16+\n* by Rob Garrison\n*/\n;(function ($) {\n\t'use strict';\n\tvar ts = $.tablesorter || {};\n\n\tfunction getStoredSortList(c) {\n\t\tvar stored = ts.storage( c.table, 'tablesorter-savesort' );\n\t\treturn (stored && stored.hasOwnProperty('sortList') && $.isArray(stored.sortList)) ? stored.sortList : [];\n\t}\n\n\tfunction sortListChanged(c, sortList) {\n\t\treturn (sortList || getStoredSortList(c)).join(',') !== c.sortList.join(',');\n\t}\n\n\t// this widget saves the last sort only if the\n\t// saveSort widget option is true AND the\n\t// $.tablesorter.storage function is included\n\t// **************************\n\tts.addWidget({\n\t\tid: 'saveSort',\n\t\tpriority: 20,\n\t\toptions: {\n\t\t\tsaveSort : true\n\t\t},\n\t\tinit: function(table, thisWidget, c, wo) {\n\t\t\t// run widget format before all other widgets are applied to the table\n\t\t\tthisWidget.format(table, c, wo, true);\n\t\t},\n\t\tformat: function(table, c, wo, init) {\n\t\t\tvar time,\n\t\t\t\t$table = c.$table,\n\t\t\t\tsaveSort = wo.saveSort !== false, // make saveSort active/inactive; default to true\n\t\t\t\tsortList = { 'sortList' : c.sortList },\n\t\t\t\tdebug = ts.debug(c, 'saveSort');\n\t\t\tif (debug) {\n\t\t\t\ttime = new Date();\n\t\t\t}\n\t\t\tif ($table.hasClass('hasSaveSort')) {\n\t\t\t\tif (saveSort && table.hasInitialized && ts.storage && sortListChanged(c)) {\n\t\t\t\t\tts.storage( table, 'tablesorter-savesort', sortList );\n\t\t\t\t\tif (debug) {\n\t\t\t\t\t\tconsole.log('saveSort >> Saving last sort: ' + c.sortList + ts.benchmark(time));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// set table sort on initial run of the widget\n\t\t\t\t$table.addClass('hasSaveSort');\n\t\t\t\tsortList = '';\n\t\t\t\t// get data\n\t\t\t\tif (ts.storage) {\n\t\t\t\t\tsortList = getStoredSortList(c);\n\t\t\t\t\tif (debug) {\n\t\t\t\t\t\tconsole.log('saveSort >> Last sort loaded: \"' + sortList + '\"' + ts.benchmark(time));\n\t\t\t\t\t}\n\t\t\t\t\t$table.bind('saveSortReset', function(event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tts.storage( table, 'tablesorter-savesort', '' );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// init is true when widget init is run, this will run this widget before all other widgets have initialized\n\t\t\t\t// this method allows using this widget in the original tablesorter plugin; but then it will run all widgets twice.\n\t\t\t\tif (init && sortList && sortList.length > 0) {\n\t\t\t\t\tc.sortList = sortList;\n\t\t\t\t} else if (table.hasInitialized && sortList && sortList.length > 0) {\n\t\t\t\t\t// update sort change\n\t\t\t\t\tif (sortListChanged(c, sortList)) {\n\t\t\t\t\t\tts.sortOn(c, sortList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremove: function(table, c) {\n\t\t\tc.$table.removeClass('hasSaveSort');\n\t\t\t// clear storage\n\t\t\tif (ts.storage) { ts.storage( table, 'tablesorter-savesort', '' ); }\n\t\t}\n\t});\n\n})(jQuery);", "/*! Copyright (c) Jonas Mosbech - https://github.com/jmosbech/StickyTableHeaders\n\tMIT license info: https://github.com/jmosbech/StickyTableHeaders/blob/master/license.txt */\n\n  ;(function ($, window, undefined) {\n    'use strict';\n  \n    var name = 'stickyTableHeaders',\n      id = 0,\n      defaults = {\n        fixedOffset: 0,\n        leftOffset: 0,\n        marginTop: 0,\n        objDocument: document,\n        objHead: 'head',\n        objWindow: window,\n        scrollableArea: window,\n        horizontalScrollableArea: null,\n        cacheHeaderHeight: false,\n        cacheHeaderWidth: false,\n        cacheClippingContainerWidth: true,\n        zIndex: 3,\n        clippingContainerId: null,\n        dynamicTopOffset: function() { return 0; }\n      };\n  \n    function Plugin (el, options) {\n      // To avoid scope issues, use 'base' instead of 'this'\n      // to reference this class from internal events and functions.\n      var base = this;\n  \n      // Access to jQuery and DOM versions of element\n      base.$el = $(el);\n      base.el = el;\n      base.id = id++;\n  \n      // Listen for destroyed, call teardown\n      base.$el.bind('destroyed',\n        $.proxy(base.teardown, base));\n  \n      // Cache DOM refs for performance reasons\n      base.$clonedHeader = null;\n      base.$originalHeader = null;\n  \n      // Cache header height, width and clippingContainer width for performance reasons\n      base.cachedHeaderHeight = null;\n      base.cachedHeaderWidth = null;\n      base.cachedClippingContainerWidth = null;\n  \n      // Keep track of state\n      base.isSticky = false;\n      base.hasBeenSticky = false;\n      base.leftOffset = null;\n      base.topOffset = null;\n  \n      base.init = function () {\n        base.setOptions(options);\n  \n        base.$el.each(function () {\n          var $this = $(this);\n  \n          // remove padding on <table> to fix issue #7\n          $this.css('padding', 0);\n  \n          base.$originalHeader = $('thead:first', this);\n          base.$clonedHeader = base.$originalHeader.clone();\n          $this.trigger('clonedHeader.' + name, [base.$clonedHeader]);\n  \n          base.$clonedHeader.addClass('tableFloatingHeader');\n          base.$clonedHeader.css({display: 'none', opacity: 0.0});\n  \n          base.$originalHeader.addClass('tableFloatingHeaderOriginal');\n  \n          base.changeClonedHeaderIds(base.$clonedHeader);\n          base.$originalHeader.after(base.$clonedHeader);\n  \n          base.$printStyle = $('<style type=\"text/css\" media=\"print\">' +\n            '.tableFloatingHeader{display:none !important;}' +\n            '.tableFloatingHeaderOriginal{position:static !important;}' +\n            '</style>');\n          base.$head.append(base.$printStyle);\n        });\n  \n        base.$clonedHeader.find(\"input, select\").attr(\"disabled\", true);\n  \n        base.toggleHeaders();\n        base.updateWidth();\n        base.updateHeaderCssPropertyClip();\n        base.bind();\n      };\n  \n      base.changeClonedHeaderIds = function($clonedHeader) {\n        $clonedHeader.find('*').addBack().filter('[id]').each(function() {\n          var $component = $(this);\n          $component.attr('id', $component.attr('id') + '-' + name + '-cloned');\n        });\n      };\n  \n      base.destroy = function (){\n        base.$el.unbind('destroyed', base.teardown);\n        base.teardown();\n      };\n  \n      base.teardown = function(){\n        if (base.isSticky) {\n          base.$originalHeader.css('position', 'static');\n        }\n        $.removeData(base.el, 'plugin_' + name);\n        base.unbind();\n  \n        base.$clonedHeader.remove();\n        base.$originalHeader.removeClass('tableFloatingHeaderOriginal');\n        base.$originalHeader.css('visibility', 'visible');\n        base.$printStyle.remove();\n  \n        base.el = null;\n        base.$el = null;\n      };\n  \n      base.bind = function(){\n        base.$scrollableArea.on('scroll.' + name, base.debouncedToggleHeaders);\n        if(base.$horizontalScrollableArea)\n        {\n          base.$horizontalScrollableArea.on('scroll.' + name, base.debouncedToggleHeaders);\n        }\n        if (!base.isWindowScrolling) {\n          base.$window.on('scroll.' + name + base.id, base.setPositionValues);\n          base.$window.on('scroll.' + name + base.id, base.debouncedToggleHeaders);\n          base.$window.on('resize.' + name + base.id, base.debouncedToggleHeaders);\n        }\n        base.$scrollableArea.on('resize.' + name, base.debouncedToggleHeaders);\n        base.$scrollableArea.on('resize.' + name, base.debouncedUpdateWidth);\n        if(base.$horizontalScrollableArea)\n        {\n          base.$horizontalScrollableArea.on('resize.' + name, base.debouncedToggleHeaders);\n          base.$horizontalScrollableArea.on('resize.' + name, base.debouncedUpdateWidth);\n        }\n      };\n  \n      base.unbind = function(){\n        // unbind window events by specifying handle so we don't remove too much\n        base.$scrollableArea.off('.' + name, base.debouncedToggleHeaders);\n        if (!base.isWindowScrolling) {\n          base.$window.off('.' + name + base.id, base.setPositionValues);\n          base.$window.off('.' + name + base.id, base.debouncedToggleHeaders);\n        }\n        base.$scrollableArea.off('.' + name, base.debouncedUpdateWidth);\n      };\n  \n      // We debounce the functions bound to the scroll and resize events\n      base.debounce = function (fn, delay) {\n        var timer = null;\n        return function () {\n          var context = this, args = arguments;\n          clearTimeout(timer);\n          timer = setTimeout(function () {\n            fn.apply(context, args);\n          }, delay);\n        };\n      };\n  \n      base.toggleHeaders = function () {\n        if (base.$el) {\n          base.$el.each(function () {\n            var $this = $(this),\n              dynamicTopOffset = base.options.dynamicTopOffset(),\n              newTopOffset = dynamicTopOffset + (base.isWindowScrolling ? (\n                    isNaN(base.options.fixedOffset) ?\n                    base.options.fixedOffset.outerHeight() :\n                    base.options.fixedOffset\n                  ) :\n                  base.$scrollableArea.offset().top + (!isNaN(base.options.fixedOffset) ? base.options.fixedOffset : 0)),\n              offset = $this.offset(),\n  \n              scrollTop = base.$scrollableArea.scrollTop() + newTopOffset,\n              scrollLeft = base.$window.scrollLeft(),\n  \n              headerHeight,\n  \n              scrolledPastTop = base.isWindowScrolling ?\n                  scrollTop > offset.top :\n                  newTopOffset > offset.top,\n              notScrolledPastBottom;\n  \n            if (scrolledPastTop) {\n              headerHeight = base.getHeaderHeight();\n              notScrolledPastBottom = (base.isWindowScrolling ? scrollTop : 0) <\n                (offset.top + $this.height() - headerHeight - (base.isWindowScrolling ? 0 : newTopOffset));\n            }\n  \n            if (scrolledPastTop && notScrolledPastBottom) {\n              base.leftOffset = offset.left - scrollLeft + base.options.leftOffset;\n              base.topOffset = newTopOffset;\n              base.$originalHeader.css({\n                'position': 'fixed',\n                'margin-top': base.options.marginTop,\n                'top': base.topOffset - (base.isWindowScrolling ? 0 : base.$window.scrollTop()),\n                'left': base.leftOffset,\n                'z-index': base.options.zIndex\n              });\n              base.$clonedHeader.css('display', '');\n              if (!base.isSticky) {\n                base.isSticky = true;\n                // make sure the width is correct: the user might have resized the browser while in static mode\n                base.updateWidth();\n                $this.trigger('enabledStickiness.' + name);\n              }\n              base.setPositionValues();\n              base.updateHeaderCssPropertyClip();\n            } else if (base.isSticky) {\n              base.$originalHeader.css('position', 'static');\n              base.$clonedHeader.css('display', 'none');\n              base.isSticky = false;\n              base.resetWidth($('td,th', base.$clonedHeader), $('td,th', base.$originalHeader));\n              $this.trigger('disabledStickiness.' + name);\n            }\n          });\n        }\n      };\n  \n      base.debouncedToggleHeaders = base.debounce(base.toggleHeaders, 0);\n  \n      base.setPositionValues = base.debounce(function () {\n        var winScrollTop = base.$window.scrollTop(),\n          winScrollLeft = base.$window.scrollLeft();\n        if (!base.isSticky ||\n            winScrollTop < 0 || winScrollTop + base.$window.height() > base.$document.height() ||\n            winScrollLeft < 0 || winScrollLeft + base.$window.width() > base.$document.width()) {\n          return;\n        }\n        base.$originalHeader.css({\n          'top': base.topOffset - (base.isWindowScrolling ? 0 : winScrollTop),\n          'left': base.leftOffset\n        });\n      }, 0);\n  \n      base.updateWidth = function () {\n        if (!base.isSticky) {\n          return;\n        }\n        // Copy cell widths from clone\n        if (!base.$originalHeaderCells) {\n          base.$originalHeaderCells = $('th,td', base.$originalHeader);\n        }\n        if (!base.$clonedHeaderCells) {\n          base.$clonedHeaderCells = $('th,td', base.$clonedHeader);\n        }\n        var cellWidths = base.getWidth(base.$clonedHeaderCells);\n        base.setWidth(cellWidths, base.$clonedHeaderCells, base.$originalHeaderCells);\n  \n        // Copy row width from whole table\n        base.$originalHeader.css('width', base.$clonedHeader.width());\n  \n        // If we're caching the height or width, we need to update the cached values when the width or height changes.\n        if (base.options.cacheHeaderHeight) {\n          base.cachedHeaderHeight = base.$clonedHeader.height();\n        }\n        if (base.options.cacheHeaderWidth) {\n          base.cachedHeaderWidth = base.$clonedHeader.width();\n        }\n      };\n  \n      base.debouncedUpdateWidth = base.debounce(base.updateWidth, 0);\n  \n      base.updateHeaderCssPropertyClip = function() {\n        if (base.$clippingContainer.length === 0) {\n          return;\n        }\n        var container = base.$clippingContainer,\n          containerOffset = container.offset(),\n          headerOffset = base.$originalHeader.offset(),\n          fromHeaderToContainer = containerOffset.left - headerOffset.left,\n          left = Math.max(0, fromHeaderToContainer),\n          right = Math.max(0, Math.min(base.getHeaderWidth(), fromHeaderToContainer + base.clippingContainerWidth())),\n          top = 0,\n          bottom = base.getHeaderHeight();\n        var clipString = 'rect(' + top + 'px,' + right + 'px,' + bottom + 'px,' + left + 'px)';\n        base.$originalHeader.css('clip', clipString);\n      };\n  \n      base.clippingContainerWidth = function() {\n        if (!base.cachedClippingContainerWidth || !base.options.cacheClippingContainerWidth) {\n          base.cachedClippingContainerWidth = base.$clippingContainer.width();\n        }\n        return base.cachedClippingContainerWidth;\n      }\n  \n      base.getWidth = function ($clonedHeaders) {\n        var widths = [];\n        $clonedHeaders.each(function (index) {\n          var width, $this = $(this);\n  \n          if ($this.css('box-sizing') === 'border-box') {\n            var boundingClientRect = $this[0].getBoundingClientRect();\n            if(boundingClientRect.width) {\n              width = boundingClientRect.width; // #39: border-box bug\n            } else {\n              width = boundingClientRect.right - boundingClientRect.left; // ie8 bug: getBoundingClientRect() does not have a width property\n            }\n          } else {\n            var $origTh = $('th', base.$originalHeader);\n            if ($origTh.css('border-collapse') === 'collapse') {\n              if (window.getComputedStyle) {\n                width = parseFloat(window.getComputedStyle(this, null).width);\n              } else {\n                // ie8 only\n                var leftPadding = parseFloat($this.css('padding-left'));\n                var rightPadding = parseFloat($this.css('padding-right'));\n                // Needs more investigation - this is assuming constant border around this cell and it's neighbours.\n                var border = parseFloat($this.css('border-width'));\n                width = $this.outerWidth() - leftPadding - rightPadding - border;\n              }\n            } else {\n              width = $this.width();\n            }\n          }\n  \n          widths[index] = width;\n        });\n        return widths;\n      };\n  \n      base.setWidth = function (widths, $clonedHeaders, $origHeaders) {\n        $clonedHeaders.each(function (index) {\n          var width = widths[index];\n          $origHeaders.eq(index).css({\n            'min-width': width,\n            'max-width': width\n          });\n        });\n      };\n  \n      base.resetWidth = function ($clonedHeaders, $origHeaders) {\n        $clonedHeaders.each(function (index) {\n          var $this = $(this);\n          $origHeaders.eq(index).css({\n            'min-width': $this.css('min-width'),\n            'max-width': $this.css('max-width')\n          });\n        });\n      };\n  \n      base.getHeaderHeight = function() {\n         return base.options.cacheHeaderHeight ? base.cachedHeaderHeight : base.$clonedHeader.height();\n      }\n  \n      base.getHeaderWidth = function() {\n        return base.options.cacheHeaderWidth ? base.cachedHeaderWidth : base.$clonedHeader.width();\n      }\n  \n      base.setOptions = function (options) {\n        base.options = $.extend({}, defaults, options);\n        base.$window = $(base.options.objWindow);\n        base.$head = $(base.options.objHead);\n        base.$document = $(base.options.objDocument);\n        base.$scrollableArea = $(base.options.scrollableArea);\n        if(base.options.horizontalScrollableArea)\n        {\n          base.$horizontalScrollableArea = $(base.options.horizontalScrollableArea);\n        }\n        base.isWindowScrolling = base.$scrollableArea[0] === base.$window[0];\n        base.$clippingContainer = $('#' + base.options.clippingContainerId);\n      };\n  \n      base.updateOptions = function (options) {\n        base.setOptions(options);\n        // scrollableArea might have changed\n        base.unbind();\n        base.bind();\n        base.updateWidth();\n        base.toggleHeaders();\n      };\n  \n      // Run initializer\n      base.init();\n    }\n  \n    // A plugin wrapper around the constructor,\n    // preventing against multiple instantiations\n    $.fn[name] = function ( options ) {\n      return this.each(function () {\n        var instance = $.data(this, 'plugin_' + name);\n        if (instance) {\n          if (typeof options === 'string') {\n            instance[options].apply(instance);\n          } else {\n            instance.updateOptions(options);\n          }\n        } else if(options !== 'destroy') {\n          $.data(this, 'plugin_' + name, new Plugin( this, options ));\n        }\n      });\n    };\n  \n  })(jQuery, window);\n  ", "/*\n * jQuery UI Nested Sortable\n * v 2.1a / 2016-02-04\n * https://github.com/ilikenwf/nestedSortable\n *\n * Depends on:\n *\t jquery.ui.sortable.js 1.10+\n *\n * Copyright (c) 2010-2016 Manuele J Sarfatti and contributors\n * Licensed under the MIT License\n * http://www.opensource.org/licenses/mit-license.php\n */\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([\n\t\t\t\"jquery\",\n\t\t\t\"jquery-ui/ui/sortable\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( window.jQuery );\n\t}\n}(function($) {\n\t\"use strict\";\n\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x > reference ) && ( x < ( reference + size ) );\n\t}\n\n\t$.widget(\"mjs.nestedSortable\", $.extend({}, $.ui.sortable.prototype, {\n\n\t\toptions: {\n\t\t\tdisableParentChange: false,\n\t\t\tdoNotClear: false,\n\t\t\texpandOnHover: 700,\n\t\t\tisAllowed: function() { return true; },\n\t\t\tisTree: false,\n\t\t\tlistType: \"ol\",\n\t\t\tmaxLevels: 0,\n\t\t\tprotectRoot: false,\n\t\t\trootID: null,\n\t\t\trtl: false,\n\t\t\tstartCollapsed: false,\n\t\t\ttabSize: 20,\n\n\t\t\tbranchClass: \"mjs-nestedSortable-branch\",\n\t\t\tcollapsedClass: \"mjs-nestedSortable-collapsed\",\n\t\t\tdisableNestingClass: \"mjs-nestedSortable-no-nesting\",\n\t\t\terrorClass: \"mjs-nestedSortable-error\",\n\t\t\texpandedClass: \"mjs-nestedSortable-expanded\",\n\t\t\thoveringClass: \"mjs-nestedSortable-hovering\",\n\t\t\tleafClass: \"mjs-nestedSortable-leaf\",\n\t\t\tdisabledClass: \"mjs-nestedSortable-disabled\"\n\t\t},\n\n\t\t_create: function() {\n\t\t\tvar self = this,\n\t\t\t\terr;\n\n\t\t\tthis.element.data(\"ui-sortable\", this.element.data(\"mjs-nestedSortable\"));\n\n\t\t\t// mjs - prevent browser from freezing if the HTML is not correct\n\t\t\tif (!this.element.is(this.options.listType)) {\n\t\t\t\terr = \"nestedSortable: \" +\n\t\t\t\t\t\"Please check that the listType option is set to your actual list type\";\n\n\t\t\t\tthrow new Error(err);\n\t\t\t}\n\n\t\t\t// if we have a tree with expanding/collapsing functionality,\n\t\t\t// force 'intersect' tolerance method\n\t\t\tif (this.options.isTree && this.options.expandOnHover) {\n\t\t\t\tthis.options.tolerance = \"intersect\";\n\t\t\t}\n\n\t\t\t$.ui.sortable.prototype._create.apply(this, arguments);\n\n\t\t\t// prepare the tree by applying the right classes\n\t\t\t// (the CSS is responsible for actual hide/show functionality)\n\t\t\tif (this.options.isTree) {\n\t\t\t\t$(this.items).each(function() {\n\t\t\t\t\tvar $li = this.item,\n\t\t\t\t\t\thasCollapsedClass = $li.hasClass(self.options.collapsedClass),\n\t\t\t\t\t\thasExpandedClass = $li.hasClass(self.options.expandedClass);\n\n\t\t\t\t\tif ($li.children(self.options.listType).length) {\n\t\t\t\t\t\t$li.addClass(self.options.branchClass);\n\t\t\t\t\t\t// expand/collapse class only if they have children\n\n\t\t\t\t\t\tif ( !hasCollapsedClass && !hasExpandedClass ) {\n\t\t\t\t\t\t\tif (self.options.startCollapsed) {\n\t\t\t\t\t\t\t\t$li.addClass(self.options.collapsedClass);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$li.addClass(self.options.expandedClass);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$li.addClass(self.options.leafClass);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t_destroy: function() {\n\t\t\tthis.element\n\t\t\t\t.removeData(\"mjs-nestedSortable\")\n\t\t\t\t.removeData(\"ui-sortable\");\n\t\t\treturn $.ui.sortable.prototype._destroy.apply(this, arguments);\n\t\t},\n\n\t\t_mouseDrag: function(event) {\n\t\t\tvar i,\n\t\t\t\titem,\n\t\t\t\titemElement,\n\t\t\t\tintersection,\n\t\t\t\tself = this,\n\t\t\t\to = this.options,\n\t\t\t\tscrolled = false,\n\t\t\t\t$document = $(document),\n\t\t\t\tpreviousTopOffset,\n\t\t\t\tparentItem,\n\t\t\t\tlevel,\n\t\t\t\tchildLevels,\n\t\t\t\titemAfter,\n\t\t\t\titemBefore,\n\t\t\t\tnewList,\n\t\t\t\tmethod,\n\t\t\t\ta,\n\t\t\t\tpreviousItem,\n\t\t\t\tnextItem,\n\t\t\t\thelperIsNotSibling;\n\n\t\t\t//Compute the helpers position\n\t\t\tthis.position = this._generatePosition(event);\n\t\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t\tif (!this.lastPositionAbs) {\n\t\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t\t}\n\n\t\t\t//Do scrolling\n\t\t\tif (this.options.scroll) {\n\t\t\t\tif (this.scrollParent[0] !== document && this.scrollParent[0].tagName !== \"HTML\") {\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tthis.overflowOffset.top +\n\t\t\t\t\t\t\tthis.scrollParent[0].offsetHeight\n\t\t\t\t\t\t) -\n\t\t\t\t\t\tevent.pageY <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = this.scrollParent.scrollTop() + o.scrollSpeed;\n\t\t\t\t\t\tthis.scrollParent.scrollTop(scrolled);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tevent.pageY -\n\t\t\t\t\t\tthis.overflowOffset.top <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = this.scrollParent.scrollTop() - o.scrollSpeed;\n\t\t\t\t\t\tthis.scrollParent.scrollTop(scrolled);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tthis.overflowOffset.left +\n\t\t\t\t\t\t\tthis.scrollParent[0].offsetWidth\n\t\t\t\t\t\t) -\n\t\t\t\t\t\tevent.pageX <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = this.scrollParent.scrollLeft() + o.scrollSpeed;\n\t\t\t\t\t\tthis.scrollParent.scrollLeft(scrolled);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tevent.pageX -\n\t\t\t\t\t\tthis.overflowOffset.left <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = this.scrollParent.scrollLeft() - o.scrollSpeed;\n\t\t\t\t\t\tthis.scrollParent.scrollLeft(scrolled);\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.pageY -\n\t\t\t\t\t\t$document.scrollTop() <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = $document.scrollTop() - o.scrollSpeed;\n\t\t\t\t\t\t$document.scrollTop(scrolled);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t$(window).height() -\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tevent.pageY -\n\t\t\t\t\t\t\t$document.scrollTop()\n\t\t\t\t\t\t) <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = $document.scrollTop() + o.scrollSpeed;\n\t\t\t\t\t\t$document.scrollTop(scrolled);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.pageX -\n\t\t\t\t\t\t$document.scrollLeft() <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = $document.scrollLeft() - o.scrollSpeed;\n\t\t\t\t\t\t$document.scrollLeft(scrolled);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t$(window).width() -\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tevent.pageX -\n\t\t\t\t\t\t\t$document.scrollLeft()\n\t\t\t\t\t\t) <\n\t\t\t\t\t\to.scrollSensitivity\n\t\t\t\t\t) {\n\t\t\t\t\t\tscrolled = $document.scrollLeft() + o.scrollSpeed;\n\t\t\t\t\t\t$document.scrollLeft(scrolled);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Regenerate the absolute position used for position checks\n\t\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t\t// mjs - find the top offset before rearrangement,\n\t\t\tpreviousTopOffset = this.placeholder.offset().top;\n\n\t\t\t//Set the helper position\n\t\t\tif (!this.options.axis || this.options.axis !== \"y\") {\n\t\t\t\tthis.helper[0].style.left = this.position.left + \"px\";\n\t\t\t}\n\t\t\tif (!this.options.axis || this.options.axis !== \"x\") {\n\t\t\t\tthis.helper[0].style.top = (this.position.top) + \"px\";\n\t\t\t}\n\n\t\t\t// mjs - check and reset hovering state at each cycle\n\t\t\tthis.hovering = this.hovering ? this.hovering : null;\n\t\t\tthis.mouseentered = this.mouseentered ? this.mouseentered : false;\n\n\t\t\t// mjs - let's start caching some variables\n\t\t\t(function() {\n\t\t\t\tvar _parentItem = this.placeholder.parent().parent();\n\t\t\t\tif (_parentItem && _parentItem.closest(\".ui-sortable\").length) {\n\t\t\t\t\tparentItem = _parentItem;\n\t\t\t\t}\n\t\t\t}.call(this));\n\n\t\t\tlevel = this._getLevel(this.placeholder);\n\t\t\tchildLevels = this._getChildLevels(this.helper);\n\t\t\tnewList = document.createElement(o.listType);\n\n  \t\t        // dragDirection object is required by jquery.ui.sortable.js 1.13+\n\t\t       \tthis.dragDirection = {\n\t\t\t      \tvertical: this._getDragVerticalDirection(),\n\t\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t    \t};\n\t\t\t\n\t\t\t//Rearrange\n\t\t\tfor (i = this.items.length - 1; i >= 0; i--) {\n\n\t\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\t\titem = this.items[i];\n\t\t\t\titemElement = item.item[0];\n\t\t\t\tintersection = this._intersectsWithPointer(item);\n\t\t\t\tif (!intersection) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t\t// items form other containers. This works because when moving\n\t\t\t\t// an item from one container to another the\n\t\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t\t//\n\t\t\t\t// Without this moving items in \"sub-sortables\" can cause the placeholder to jitter\n\t\t\t\t// beetween the outer and inner container.\n\t\t\t\tif (item.instance !== this.currentContainer) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// No action if intersected item is disabled\n\t\t\t\t// and the element above or below in the direction we're going is also disabled\n\t\t\t\tif (itemElement.className.indexOf(o.disabledClass) !== -1) {\n\t\t\t\t\t// Note: intersection hardcoded direction values from\n\t\t\t\t\t// jquery.ui.sortable.js:_intersectsWithPointer\n\t\t\t\t\tif (intersection === 2) {\n\t\t\t\t\t\t// Going down\n\t\t\t\t\t\titemAfter = this.items[i + 1];\n\t\t\t\t\t\tif (itemAfter && itemAfter.item.hasClass(o.disabledClass)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (intersection === 1) {\n\t\t\t\t\t\t// Going up\n\t\t\t\t\t\titemBefore = this.items[i - 1];\n\t\t\t\t\t\tif (itemBefore && itemBefore.item.hasClass(o.disabledClass)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmethod = intersection === 1 ? \"next\" : \"prev\";\n\n\t\t\t\t// cannot intersect with itself\n\t\t\t\t// no useless actions that have been done before\n\t\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\t\tif (itemElement !== this.currentItem[0] &&\n\t\t\t\t\tthis.placeholder[method]()[0] !== itemElement &&\n\t\t\t\t\t!$.contains(this.placeholder[0], itemElement) &&\n\t\t\t\t\t(\n\t\t\t\t\t\tthis.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t\t\t!$.contains(this.element[0], itemElement) :\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t) {\n\n\t\t\t\t\t// mjs - we are intersecting an element:\n\t\t\t\t\t// trigger the mouseenter event and store this state\n\t\t\t\t\tif (!this.mouseentered) {\n\t\t\t\t\t\t$(itemElement).mouseenter();\n\t\t\t\t\t\tthis.mouseentered = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// mjs - if the element has children and they are hidden,\n\t\t\t\t\t// show them after a delay (CSS responsible)\n\t\t\t\t\tif (o.isTree && $(itemElement).hasClass(o.collapsedClass) && o.expandOnHover) {\n\t\t\t\t\t\tif (!this.hovering) {\n\t\t\t\t\t\t\t$(itemElement).addClass(o.hoveringClass);\n\t\t\t\t\t\t\tthis.hovering = window.setTimeout(function() {\n\t\t\t\t\t\t\t\t$(itemElement)\n\t\t\t\t\t\t\t\t\t.removeClass(o.collapsedClass)\n\t\t\t\t\t\t\t\t\t.addClass(o.expandedClass);\n\n\t\t\t\t\t\t\t\tself.refreshPositions();\n\t\t\t\t\t\t\t\tself._trigger(\"expand\", event, [self._uiHash(), itemElement]);\n\t\t\t\t\t\t\t}, o.expandOnHover);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\t\t// mjs - rearrange the elements and reset timeouts and hovering state\n\t\t\t\t\tif (this.options.tolerance === \"pointer\" || this._intersectsWithSides(item)) {\n\t\t\t\t\t\t$(itemElement).mouseleave();\n\t\t\t\t\t\tthis.mouseentered = false;\n\t\t\t\t\t\t$(itemElement).removeClass(o.hoveringClass);\n\t\t\t\t\t\tif (this.hovering) {\n\t\t\t\t\t\t\twindow.clearTimeout(this.hovering);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.hovering = null;\n\n\t\t\t\t\t\t// mjs - do not switch container if\n\t\t\t\t\t\t// it's a root item and 'protectRoot' is true\n\t\t\t\t\t\t// or if it's not a root item but we are trying to make it root\n\t\t\t\t\t\tif (o.protectRoot &&\n\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\tthis.currentItem[0].parentNode === this.element[0] &&\n\t\t\t\t\t\t\t\t// it's a root item\n\t\t\t\t\t\t\t\titemElement.parentNode !== this.element[0]\n\t\t\t\t\t\t\t\t// it's intersecting a non-root item\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (this.currentItem[0].parentNode !== this.element[0] &&\n\t\t\t\t\t\t\t\titemElement.parentNode === this.element[0]\n\t\t\t\t\t\t\t) {\n\n\t\t\t\t\t\t\t\tif ( !$(itemElement).children(o.listType).length) {\n\t\t\t\t\t\t\t\t\titemElement.appendChild(newList);\n\t\t\t\t\t\t\t\t\tif (o.isTree) {\n\t\t\t\t\t\t\t\t\t\t$(itemElement)\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(o.leafClass)\n\t\t\t\t\t\t\t\t\t\t\t.addClass(o.branchClass + \" \" + o.expandedClass);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (this.direction === \"down\") {\n\t\t\t\t\t\t\t\t\ta = $(itemElement).prev().children(o.listType);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ta = $(itemElement).children(o.listType);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (a[0] !== undefined) {\n\t\t\t\t\t\t\t\t\tthis._rearrange(event, null, a);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._rearrange(event, item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!o.protectRoot) {\n\t\t\t\t\t\t\tthis._rearrange(event, item);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clear emtpy ul's/ol's\n\t\t\t\t\tthis._clearEmpty(itemElement);\n\n\t\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// mjs - to find the previous sibling in the list,\n\t\t\t// keep backtracking until we hit a valid list item.\n\t\t\t(function() {\n\t\t\t\tvar _previousItem = this.placeholder.prev();\n\t\t\t\tif (_previousItem.length) {\n\t\t\t\t\tpreviousItem = _previousItem;\n\t\t\t\t} else {\n\t\t\t\t\tpreviousItem = null;\n\t\t\t\t}\n\t\t\t}.call(this));\n\n\t\t\tif (previousItem != null) {\n\t\t\t\twhile (\n\t\t\t\t\tpreviousItem[0].nodeName.toLowerCase() !== \"li\" ||\n\t\t\t\t\tpreviousItem[0].className.indexOf(o.disabledClass) !== -1 ||\n\t\t\t\t\tpreviousItem[0] === this.currentItem[0] ||\n\t\t\t\t\tpreviousItem[0] === this.helper[0]\n\t\t\t\t) {\n\t\t\t\t\tif (previousItem[0].previousSibling) {\n\t\t\t\t\t\tpreviousItem = $(previousItem[0].previousSibling);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpreviousItem = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// mjs - to find the next sibling in the list,\n\t\t\t// keep stepping forward until we hit a valid list item.\n\t\t\t(function() {\n\t\t\t\tvar _nextItem = this.placeholder.next();\n\t\t\t\tif (_nextItem.length) {\n\t\t\t\t\tnextItem = _nextItem;\n\t\t\t\t} else {\n\t\t\t\t\tnextItem = null;\n\t\t\t\t}\n\t\t\t}.call(this));\n\n\t\t\tif (nextItem != null) {\n\t\t\t\twhile (\n\t\t\t\t\tnextItem[0].nodeName.toLowerCase() !== \"li\" ||\n\t\t\t\t\tnextItem[0].className.indexOf(o.disabledClass) !== -1 ||\n\t\t\t\t\tnextItem[0] === this.currentItem[0] ||\n\t\t\t\t\tnextItem[0] === this.helper[0]\n\t\t\t\t) {\n\t\t\t\t\tif (nextItem[0].nextSibling) {\n\t\t\t\t\t\tnextItem = $(nextItem[0].nextSibling);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnextItem = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.beyondMaxLevels = 0;\n\n\t\t\t// mjs - if the item is moved to the left, send it one level up\n\t\t\t// but only if it's at the bottom of the list\n\t\t\tif (parentItem != null &&\n\t\t\t\tnextItem == null &&\n\t\t\t\t!(o.protectRoot && parentItem[0].parentNode == this.element[0]) &&\n\t\t\t\t(\n\t\t\t\t\to.rtl &&\n\t\t\t\t\t(\n\t\t\t\t\t\tthis.positionAbs.left +\n\t\t\t\t\t\tthis.helper.outerWidth() > parentItem.offset().left +\n\t\t\t\t\t\tparentItem.outerWidth()\n\t\t\t\t\t) ||\n\t\t\t\t\t!o.rtl && (this.positionAbs.left < parentItem.offset().left)\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tparentItem.after(this.placeholder[0]);\n\t\t\t\thelperIsNotSibling = !parentItem\n\t\t\t\t\t\t\t\t\t\t\t.children(o.listItem)\n\t\t\t\t\t\t\t\t\t\t\t.children(\"li:visible:not(.ui-sortable-helper)\")\n\t\t\t\t\t\t\t\t\t\t\t.length;\n\t\t\t\tif (o.isTree && helperIsNotSibling) {\n\t\t\t\t\tparentItem\n\t\t\t\t\t\t.removeClass(this.options.branchClass + \" \" + this.options.expandedClass)\n\t\t\t\t\t\t.addClass(this.options.leafClass);\n\t\t\t\t}\n                if(typeof parentItem !== 'undefined')\n\t\t\t\t    this._clearEmpty(parentItem[0]);\n\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\t\t// mjs - if the item is below a sibling and is moved to the right,\n\t\t\t\t// make it a child of that sibling\n\t\t\t} else if (previousItem != null &&\n\t\t\t\t!previousItem.hasClass(o.disableNestingClass) &&\n\t\t\t\t(\n\t\t\t\t\tpreviousItem.children(o.listType).length &&\n\t\t\t\t\tpreviousItem.children(o.listType).is(\":visible\") ||\n\t\t\t\t\t!previousItem.children(o.listType).length\n\t\t\t\t) &&\n\t\t\t\t!(o.protectRoot && this.currentItem[0].parentNode === this.element[0]) &&\n\t\t\t\t(\n\t\t\t\t\to.rtl &&\n\t\t\t\t\t(\n\t\t\t\t\t\tthis.positionAbs.left +\n\t\t\t\t\t\tthis.helper.outerWidth() <\n\t\t\t\t\t\tpreviousItem.offset().left +\n\t\t\t\t\t\tpreviousItem.outerWidth() -\n\t\t\t\t\t\to.tabSize\n\t\t\t\t\t) ||\n\t\t\t\t\t!o.rtl &&\n\t\t\t\t\t(this.positionAbs.left > previousItem.offset().left + o.tabSize)\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis._isAllowed(previousItem, level, level + childLevels + 1);\n\n\t\t\t\tif (!previousItem.children(o.listType).length) {\n\t\t\t\t\tpreviousItem[0].appendChild(newList);\n\t\t\t\t\tif (o.isTree) {\n\t\t\t\t\t\tpreviousItem\n\t\t\t\t\t\t\t.removeClass(o.leafClass)\n\t\t\t\t\t\t\t.addClass(o.branchClass + \" \" + o.expandedClass);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// mjs - if this item is being moved from the top, add it to the top of the list.\n\t\t\t\tif (previousTopOffset && (previousTopOffset <= previousItem.offset().top)) {\n\t\t\t\t\tpreviousItem.children(o.listType).prepend(this.placeholder);\n\t\t\t\t} else {\n\t\t\t\t\t// mjs - otherwise, add it to the bottom of the list.\n\t\t\t\t\tpreviousItem.children(o.listType)[0].appendChild(this.placeholder[0]);\n\t\t\t\t}\n                if(typeof parentItem !== 'undefined')\n\t\t\t\t    this._clearEmpty(parentItem[0]);\n\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\t} else {\n\t\t\t\tthis._isAllowed(parentItem, level, level + childLevels);\n\t\t\t}\n\n\t\t\t//Post events to containers\n\t\t\tthis._contactContainers(event);\n\n\t\t\t//Interconnect with droppables\n\t\t\tif ($.ui.ddmanager) {\n\t\t\t\t$.ui.ddmanager.drag(this, event);\n\t\t\t}\n\n\t\t\t//Call callbacks\n\t\t\tthis._trigger(\"sort\", event, this._uiHash());\n\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t\treturn false;\n\n\t\t},\n\n\t\t_mouseStop: function(event) {\n\t\t\t// mjs - if the item is in a position not allowed, send it back\n\t\t\tif (this.beyondMaxLevels) {\n\n\t\t\t\tthis.placeholder.removeClass(this.options.errorClass);\n\n\t\t\t\tif (this.domPosition.prev) {\n\t\t\t\t\t$(this.domPosition.prev).after(this.placeholder);\n\t\t\t\t} else {\n\t\t\t\t\t$(this.domPosition.parent).prepend(this.placeholder);\n\t\t\t\t}\n\n\t\t\t\tthis._trigger(\"revert\", event, this._uiHash());\n\n\t\t\t}\n\n\t\t\t// mjs - clear the hovering timeout, just to be sure\n\t\t\t$(\".\" + this.options.hoveringClass)\n\t\t\t\t.mouseleave()\n\t\t\t\t.removeClass(this.options.hoveringClass);\n\n\t\t\tthis.mouseentered = false;\n\t\t\tif (this.hovering) {\n\t\t\t\twindow.clearTimeout(this.hovering);\n\t\t\t}\n\t\t\tthis.hovering = null;\n\n\t\t\tthis._relocate_event = event;\n\t\t\tthis._pid_current = $(this.domPosition.parent).parent().attr(\"id\");\n\t\t\tthis._sort_current = this.domPosition.prev ? $(this.domPosition.prev).next().index() : 0;\n\t\t\t$.ui.sortable.prototype._mouseStop.apply(this, arguments); //asybnchronous execution, @see _clear for the relocate event.\n\t\t},\n\n\t\t// mjs - this function is slightly modified\n\t\t// to make it easier to hover over a collapsed element and have it expand\n\t\t_intersectsWithSides: function(item) {\n\n\t\t\tvar half = this.options.isTree ? .8 : .5,\n\t\t\t\tisOverBottomHalf = isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top,\n\t\t\t\t\titem.top + (item.height * half),\n\t\t\t\t\titem.height\n\t\t\t\t),\n\t\t\t\tisOverTopHalf = isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top,\n\t\t\t\t\titem.top - (item.height * half),\n\t\t\t\t\titem.height\n\t\t\t\t),\n\t\t\t\tisOverRightHalf = isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left,\n\t\t\t\t\titem.left + (item.width / 2),\n\t\t\t\t\titem.width\n\t\t\t\t),\n\t\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\t\tif (this.floating && horizontalDirection) {\n\t\t\t\treturn (\n\t\t\t\t\t(horizontalDirection === \"right\" && isOverRightHalf) ||\n\t\t\t\t\t(horizontalDirection === \"left\" && !isOverRightHalf)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn verticalDirection && (\n\t\t\t\t\t(verticalDirection === \"down\" && isOverBottomHalf) ||\n\t\t\t\t\t(verticalDirection === \"up\" && isOverTopHalf)\n\t\t\t\t);\n\t\t\t}\n\n\t\t},\n\n\t\t_contactContainers: function() {\n\n\t\t\tif (this.options.protectRoot && this.currentItem[0].parentNode === this.element[0] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.ui.sortable.prototype._contactContainers.apply(this, arguments);\n\n\t\t},\n\n\t\t_clear: function() {\n\t\t\tvar i,\n\t\t\t\titem;\n\n\t\t\t$.ui.sortable.prototype._clear.apply(this, arguments);\n\n\t\t\t//relocate event\n\t\t\tif (!(this._pid_current === this._uiHash().item.parent().parent().attr(\"id\") &&\n\t\t\t\tthis._sort_current === this._uiHash().item.index())) {\n\t\t\t\tthis._trigger(\"relocate\", this._relocate_event, this._uiHash());\n\t\t\t}\n\n\t\t\t// mjs - clean last empty ul/ol\n\t\t\tfor (i = this.items.length - 1; i >= 0; i--) {\n\t\t\t\titem = this.items[i].item[0];\n\t\t\t\tthis._clearEmpty(item);\n\t\t\t}\n\n\t\t},\n\n\t\tserialize: function(options) {\n\n\t\t\tvar o = $.extend({}, this.options, options),\n\t\t\t\titems = this._getItemsAsjQuery(o && o.connected),\n\t\t\t\tstr = [];\n\n\t\t\t$(items).each(function() {\n\t\t\t\tvar res = ($(o.item || this).attr(o.attribute || \"id\") || \"\")\n\t\t\t\t\t\t.match(o.expression || (/(.+)[-=_](.+)/)),\n\t\t\t\t\tpid = ($(o.item || this).parent(o.listType)\n\t\t\t\t\t\t.parent(o.items)\n\t\t\t\t\t\t.attr(o.attribute || \"id\") || \"\")\n\t\t\t\t\t\t.match(o.expression || (/(.+)[-=_](.+)/));\n\n\t\t\t\tif (res) {\n\t\t\t\t\tstr.push(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(o.key || res[1]) +\n\t\t\t\t\t\t\t\"[\" +\n\t\t\t\t\t\t\t(o.key && o.expression ? res[1] : res[2]) + \"]\"\n\t\t\t\t\t\t) +\n\t\t\t\t\t\t\"=\" +\n\t\t\t\t\t\t(pid ? (o.key && o.expression ? pid[1] : pid[2]) : o.rootID));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!str.length && o.key) {\n\t\t\t\tstr.push(o.key + \"=\");\n\t\t\t}\n\n\t\t\treturn str.join(\"&\");\n\n\t\t},\n\n\t\ttoHierarchy: function(options) {\n\n\t\t\tvar o = $.extend({}, this.options, options),\n\t\t\t\tret = [];\n\n\t\t\t$(this.element).children(o.items).each(function() {\n\t\t\t\tvar level = _recursiveItems(this);\n\t\t\t\tret.push(level);\n\t\t\t});\n\n\t\t\treturn ret;\n\n\t\t\tfunction _recursiveItems(item) {\n\t\t\t\tvar id = ($(item).attr(o.attribute || \"id\") || \"\").match(o.expression || (/(.+)[-=_](.+)/)),\n\t\t\t\t\tcurrentItem;\n\n\t\t\t\tvar data = $(item).data();\n\t\t\t\tif (data.nestedSortableItem) {\n\t\t\t\t\tdelete data.nestedSortableItem; // Remove the nestedSortableItem object from the data\n\t\t\t\t}\n\n\t\t\t\tif (id) {\n\t\t\t\t\tcurrentItem = {\n\t\t\t\t\t\t\"id\": id[2]\n\t\t\t\t\t};\n\n\t\t\t\t\tcurrentItem = $.extend({}, currentItem, data); // Combine the two objects\n\n\t\t\t\t\tif ($(item).children(o.listType).children(o.items).length > 0) {\n\t\t\t\t\t\tcurrentItem.children = [];\n\t\t\t\t\t\t$(item).children(o.listType).children(o.items).each(function() {\n\t\t\t\t\t\t\tvar level = _recursiveItems(this);\n\t\t\t\t\t\t\tcurrentItem.children.push(level);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn currentItem;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\ttoArray: function(options) {\n\n\t\t\tvar o = $.extend({}, this.options, options),\n\t\t\t\tsDepth = o.startDepthCount || 0,\n\t\t\t\tret = [],\n\t\t\t\tleft = 1;\n\n\t\t\tif (!o.excludeRoot) {\n\t\t\t\tret.push({\n\t\t\t\t\t\"item_id\": o.rootID,\n\t\t\t\t\t\"parent_id\": null,\n\t\t\t\t\t\"depth\": sDepth,\n\t\t\t\t\t\"left\": left,\n\t\t\t\t\t\"right\": ($(o.items, this.element).length + 1) * 2\n\t\t\t\t});\n\t\t\t\tleft++;\n\t\t\t}\n\n\t\t\t$(this.element).children(o.items).each(function() {\n\t\t\t\tleft = _recursiveArray(this, sDepth, left);\n\t\t\t});\n\n\t\t\tret = ret.sort(function(a, b) { return (a.left - b.left); });\n\n\t\t\treturn ret;\n\n\t\t\tfunction _recursiveArray(item, depth, _left) {\n\n\t\t\t\tvar right = _left + 1,\n\t\t\t\t\tid,\n\t\t\t\t\tpid,\n\t\t\t\t\tparentItem;\n\n\t\t\t\tif ($(item).children(o.listType).children(o.items).length > 0) {\n\t\t\t\t\tdepth++;\n\t\t\t\t\t$(item).children(o.listType).children(o.items).each(function() {\n\t\t\t\t\t\tright = _recursiveArray($(this), depth, right);\n\t\t\t\t\t});\n\t\t\t\t\tdepth--;\n\t\t\t\t}\n\n\t\t\t\tid = ($(item).attr(o.attribute || \"id\") || \"\").match(o.expression || (/(.+)[-=_](.+)/));\n\n\t\t\t\tif (depth === sDepth) {\n\t\t\t\t\tpid = o.rootID;\n\t\t\t\t} else {\n\t\t\t\t\tparentItem = ($(item).parent(o.listType)\n\t\t\t\t\t\t\t\t\t\t\t.parent(o.items)\n\t\t\t\t\t\t\t\t\t\t\t.attr(o.attribute || \"id\"))\n\t\t\t\t\t\t\t\t\t\t\t.match(o.expression || (/(.+)[-=_](.+)/));\n\t\t\t\t\tpid = parentItem[2];\n\t\t\t\t}\n\n\t\t\t\tif (id) {\n\t\t\t\t\tvar data = $(item).children('div').data();\n\t\t\t\t\tvar itemObj = $.extend( data, {\n\t\t\t\t\t\t\"id\":id[2],\n\t\t\t\t\t\t\"parent_id\":pid,\n\t\t\t\t\t\t\"depth\":depth,\n\t\t\t\t\t\t\"left\":_left,\n\t\t\t\t\t\t\"right\":right\n\t\t\t\t\t\t} );\n\t\t\t\t\tret.push( itemObj );\n\t\t\t\t}\n\n\t\t\t\t_left = right + 1;\n\t\t\t\treturn _left;\n\t\t\t}\n\n\t\t},\n\n\t\t_clearEmpty: function (item) {\n\t\t\tfunction replaceClass(elem, search, replace, swap) {\n\t\t\t\tif (swap) {\n\t\t\t\t\tsearch = [replace, replace = search][0];\n\t\t\t\t}\n\n\t\t\t\t$(elem).removeClass(search).addClass(replace);\n\t\t\t}\n\n\t\t\tvar o = this.options,\n\t\t\t\tchildrenList = $(item).children(o.listType),\n\t\t\t\thasChildren = childrenList.has('li').length;\n\n\t\t\tvar doNotClear =\n\t\t\t\to.doNotClear ||\n\t\t\t\thasChildren ||\n\t\t\t\to.protectRoot && $(item)[0] === this.element[0];\n\n\t\t\tif (o.isTree) {\n\t\t\t\treplaceClass(item, o.branchClass, o.leafClass, doNotClear);\n\t\t\t}\n\n\t\t\tif (!doNotClear) {\n\t\t\t\tchildrenList.parent().removeClass(o.expandedClass);\n\t\t\t\tchildrenList.remove();\n\t\t\t}\n\t\t},\n\n\t\t_getLevel: function(item) {\n\n\t\t\tvar level = 1,\n\t\t\t\tlist;\n\n\t\t\tif (this.options.listType) {\n\t\t\t\tlist = item.closest(this.options.listType);\n\t\t\t\twhile (list && list.length > 0 && !list.is(\".ui-sortable\")) {\n\t\t\t\t\tlevel++;\n\t\t\t\t\tlist = list.parent().closest(this.options.listType);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn level;\n\t\t},\n\n\t\t_getChildLevels: function(parent, depth) {\n\t\t\tvar self = this,\n\t\t\t\to = this.options,\n\t\t\t\tresult = 0;\n\t\t\tdepth = depth || 0;\n\n\t\t\t$(parent).children(o.listType).children(o.items).each(function(index, child) {\n\t\t\t\tresult = Math.max(self._getChildLevels(child, depth + 1), result);\n\t\t\t});\n\n\t\t\treturn depth ? result + 1 : result;\n\t\t},\n\n\t\t_isAllowed: function(parentItem, level, levels) {\n\t\t\tvar o = this.options,\n\t\t\t\t// this takes into account the maxLevels set to the recipient list\n\t\t\t\tmaxLevels = this\n\t\t\t\t\t.placeholder\n\t\t\t\t\t.closest(\".ui-sortable\")\n\t\t\t\t\t.nestedSortable(\"option\", \"maxLevels\"),\n\n\t\t\t\t// Check if the parent has changed to prevent it, when o.disableParentChange is true\n\t\t\t\toldParent = this.currentItem.parent().parent(),\n\t\t\t\tdisabledByParentchange = o.disableParentChange && (\n\t\t\t\t\t//From somewhere to somewhere else, except the root\n\t\t\t\t\ttypeof parentItem !== 'undefined' && !oldParent.is(parentItem) ||\n\t\t\t\t\ttypeof parentItem === 'undefined' && oldParent.is(\"li\")\t//From somewhere to the root\n\t\t\t\t);\n\t\t\t// mjs - is the root protected?\n\t\t\t// mjs - are we nesting too deep?\n\t\t\tif (\n\t\t\t\tdisabledByParentchange ||\n\t\t\t\t!o.isAllowed(this.placeholder, parentItem, this.currentItem)\n\t\t\t) {\n\t\t\t\tthis.placeholder.addClass(o.errorClass);\n\t\t\t\tif (maxLevels < levels && maxLevels !== 0) {\n\t\t\t\t\tthis.beyondMaxLevels = levels - maxLevels;\n\t\t\t\t} else {\n\t\t\t\t\tthis.beyondMaxLevels = 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (maxLevels < levels && maxLevels !== 0) {\n\t\t\t\t\tthis.placeholder.addClass(o.errorClass);\n\t\t\t\t\tthis.beyondMaxLevels = levels - maxLevels;\n\t\t\t\t} else {\n\t\t\t\t\tthis.placeholder.removeClass(o.errorClass);\n\t\t\t\t\tthis.beyondMaxLevels = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}));\n\n\t$.mjs.nestedSortable.prototype.options = $.extend(\n\t\t{},\n\t\t$.ui.sortable.prototype.options,\n\t\t$.mjs.nestedSortable.prototype.options\n\t);\n}));\n", "window.advanced_report_editor_setup = function(advanced_report_data_combo_url) {\n  document.advanced_report_data_combo_url = advanced_report_data_combo_url;\n  document.selected_option_groups = [];\n  document.question_id_to_option_group_map = {};\n  document.option_group_combinations = {};\n//+\n  document.add_group_modal_quest_id = undefined;\n  document.add_group_modal_options = undefined;\n  document.add_group_modal_custom = undefined;\n\n  $(\".question-option-select\").off(\"change\").on(\"change\", function (e) {\n    var quest_id = $(this).data(\"quest_id\");\n    var custom = $(this).data(\"custom\");\n    custom = custom ? custom : \"\"; // Make sure if undefined we set to empty string\n    if ($(\"#\" + custom + \"question_add_group_btn_\" + quest_id).is(\":visible\")) {\n      if ($(this).val().length > 1) {\n        $(\"#\" + custom + \"question_add_group_btn_\" + quest_id).removeClass(\"disabled\");\n      } else {\n        $(\"#\" + custom + \"question_add_group_btn_\" + quest_id).addClass(\"disabled\");\n      }\n    }\n    if ($(this).val().length > 0) {\n      $(\"#\" + custom + \"question_add_btn_\" + quest_id).removeClass(\"disabled\");\n    } else {\n      $(\"#\" + custom + \"question_add_btn_\" + quest_id).addClass(\"disabled\");\n    }\n  });\n  $(\"#adv_report_data_type\").off('select2:unselecting').on('select2:unselecting',\n      function (e) {\n        if ($(this).select2('data').length <= 1) {\n          e.preventDefault();\n          return false;\n        }\n      }\n  );\n  $(\".signup-question\").off(\"click\").on(\"click\", function (e) {\n    var quest_id = $(this).data(\"quest_id\");\n    var div_id = ($(this).data(\"custom\") ? 'custom_signup_question_div_' : 'signup_question_div_');\n    var remove_class = ($(this).data(\"custom\") ? \"list-item-custom-\" : 'list-item-signup-') + quest_id;\n    if (this.checked) {\n      $(\"#\" + div_id + quest_id).slideDown();\n    } else {\n      // Remove all selected groups with this question\n      // -- this will remove all combinations as well\n      $(\".\" + remove_class).find(\".remove-option-group\").click();\n\n      $(\"#\" + div_id + quest_id).slideUp();\n    }\n  });\n  $(\".question-option-add-btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    $(this).blur();\n    var quest_id = $(this).data(\"quest_id\");\n    var custom = $(this).data(\"custom\");\n    custom = custom ? custom : \"\"; // Make sure if undefined we set to empty string\n    // Get all selected options\n    // Add each one as a separate option\n    var oplist = $(\"#\" + custom + \"question_options_\" + quest_id).val();\n\n    for (var z = 0; z < oplist.length; z++) {\n\n      // Check if this question allows user to select multile answers\n      var is_multi = false;\n      if ($(\"#\" + custom + \"question_options_\" + quest_id).data(\"multi\") == \"yes\") {\n        is_multi = true;\n      }\n      if (custom != \"\") {\n        addQuestionOption(quest_id, true, oplist[z], is_multi, false, '');\n      } else {\n        addQuestionOption(quest_id, false, oplist[z], is_multi, false, '');\n      }\n    }\n    // Disable options in select2 dropdown\n    $(\"#\" + custom + \"question_options_\" + quest_id).val('').change();\n  });\n  $(\".question-option-add-group-btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    $(this).blur();\n    var custom = $(this).data(\"custom\");\n    custom = custom ? custom : \"\"; // Make sure if undefined we set to empty string\n    // Get all selected options\n    document.add_group_modal_quest_id = $(this).data(\"quest_id\");\n    document.add_group_modal_options = $(\"#\" + custom + \"question_options_\" + document.add_group_modal_quest_id).val();\n    document.add_group_modal_custom = custom;\n    // Prompt for \"Group Name\"\n    $(\"#group-name-modal\").modal(\"show\");\n  });\n  $('#group-name-modal').off(\"shown.bs.modal\").on('shown.bs.modal', function (e) {\n    $(\"#group_name_input\").focus();\n  });\n  $('#group-name-modal').off(\"hidden.bs.modal\").on('hidden.bs.modal', function (e) {\n    document.add_group_modal_quest_id = undefined;\n    document.add_group_modal_options = undefined;\n    document.add_group_modal_custom = undefined;\n    $(\"#group_name_input\").val(\"\");\n  });\n  $(\"#add_group_name_button\").off(\"click\").on(\"click\", function (e) {\n    var custom = document.add_group_modal_custom;\n    var group_name = $(\"#group_name_input\").val();\n\n    if (group_name != \"\" && document.add_group_modal_quest_id && document.add_group_modal_options) {\n      var is_multi = false;\n      if ($(\"#\" + custom + \"question_options_\" + document.add_group_modal_quest_id).data(\"multi\") == \"yes\") {\n        is_multi = true;\n      }\n      // Add as a group\n      if (custom != \"\") {\n        addQuestionOption(document.add_group_modal_quest_id, true, document.add_group_modal_options, is_multi, true, group_name);\n      } else {\n        addQuestionOption(document.add_group_modal_quest_id, false, document.add_group_modal_options, is_multi, true, group_name);\n      }\n\n      $(\"#\" + custom + \"question_options_\" + document.add_group_modal_quest_id).val('').change();\n      // Close modal\n      $('#group-name-modal').modal(\"hide\");\n      document.add_group_modal_quest_id = undefined;\n      document.add_group_modal_options = undefined;\n      document.add_group_modal_custom = undefined;\n    }\n  });\n  $(\".question-option-add-ranged-btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    $(this).blur();\n    var quest_id = $(this).data(\"quest_id\");\n    var custom = $(this).data(\"custom\");\n    custom = custom ? custom : \"\"; // Make sure if undefined we set to empty string\n    var range_start = $(\"#\" + custom + \"question_range_start_\" + quest_id).val();\n    var range_end = $(\"#\" + custom + \"question_range_end_\" + quest_id).val();\n    var range_text = $(this).data(\"range_text\");\n    if (range_start != \"\" && range_end != \"\") {\n      if (custom != \"\") {\n        addQuestionOption(quest_id, true, {\n          range: true,\n          start: range_start,\n          end: range_end,\n          range_text: range_text\n        }, false, false, \"\");\n      } else {\n        addQuestionOption(quest_id, false, {\n          range: true,\n          start: range_start,\n          end: range_end,\n          range_text: range_text\n        }, false, false, \"\");\n      }\n      $(\"#\" + custom + \"question_range_start_\" + quest_id).val(\"\");\n      $(\"#\" + custom + \"question_range_end_\" + quest_id).val(\"\");\n      $(\"#\" + custom + \"question_range_start_\" + quest_id).change();\n    }\n    // // Get all selected options\n    // // Add each one as a separate option\n    // var oplist = $(\"#\"+custom+\"question_options_\"+quest_id).val();\n\n    // for(var z=0;z<oplist.length;z++)\n    // {\n    //   // Check if this question allows user to select multile answers\n    //   var is_multi = false;\n    //   if($(\"#\"+custom+\"question_options_\"+quest_id).data(\"multi\") == \"yes\")\n    //   {\n    //     is_multi = true;\n    //   }\n    //   if(custom != \"\")\n    //   {\n    //     addQuestionOption(quest_id,true,oplist[z],is_multi,false,'');\n    //   }\n    //   else\n    //   {\n    //     addQuestionOption(quest_id,false,oplist[z],is_multi,false,'');\n    //   }\n    // }\n  });\n  $(\".question-range-input\").off(\"keyup change\").on(\"keyup change\", function (e) {\n    var quest_id = $(this).data(\"quest_id\");\n    if ($(\"#question_range_start_\" + quest_id).val() != \"\" && $(\"#question_range_end_\" + quest_id).val() != \"\") {\n      $(\"#question_add_range_btn_\" + quest_id).removeClass(\"disabled\");\n    } else {\n      $(\"#question_add_range_btn_\" + quest_id).addClass(\"disabled\");\n    }\n  });\n  $(\"#question-option-add-ranged-btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    $(this).blur();\n    var quest_id = $(this).data(\"quest_id\");\n    var custom = $(this).data(\"custom\");\n    custom = custom ? custom : \"\"; // Make sure if undefined we set to empty string\n    // Get ranage values\n    var range_start = $(\"#question_range_start_\" + quest_id).val();\n    var range_end = $(\"#question_range_end_\" + quest_id).val();\n    // Add range to filter options\n    addQuestionOption(quest_id, false, {\n      range: true,\n      start: range_start,\n      end: range_end\n    }, false, false, '');\n    // Clear\n    $(\"#question_range_start_\" + quest_id).val(\"\");\n    $(\"#question_range_end_\" + quest_id).val(\"\");\n    $(\"#question_range_start_\" + quest_id).change();\n  });\n\n// ZZZ\n\n\n  $(document).off(\"click\", \".remove-option-group\").on(\"click\", \".remove-option-group\", function (e) {\n    e.preventDefault();\n    var remove_index = $(this).data(\"option_group_index\");\n    if (document.selected_option_groups[remove_index] && !document.selected_option_groups[remove_index].removed) {\n      // Return the selected options to enabled in the dropdowns\n      var quest_id = document.selected_option_groups[remove_index].quest_id;\n\n      var oplist = document.selected_option_groups[remove_index].options;\n\n      var custom = document.selected_option_groups[remove_index].is_custom ? \"custom_\" : \"\";\n\n      $(\"#\" + custom + \"question_options_\" + quest_id).val('').change();\n      // Remove any combinations that use this\n      if (document.option_group_combinations) {\n        var combo_ids = Object.keys(document.option_group_combinations);\n        for (var i = 0; i < combo_ids.length; i++) {\n          var index_list = document.option_group_combinations[combo_ids[i]];\n          if (index_list) {\n            var remove_combo = false;\n            for (var x = 0; x < index_list.length; x++) {\n              if (parseInt(index_list[x]) === parseInt(remove_index)) {\n                remove_combo = true;\n                break;\n              }\n            }\n            if (remove_combo) {\n              $(\".remove-combo-btn[data-combo_id='\" + combo_ids[i] + \"']\").click();\n            }\n          }\n        }\n      }\n\n      // Remove from mapping\n      var map_id = (document.selected_option_groups[remove_index].is_custom ? \"custom-\" : \"signup-\") + quest_id;\n      if (document.question_id_to_option_group_map[map_id]) {\n        var unmapIndex = document.question_id_to_option_group_map[map_id].indexOf(remove_index);\n        document.question_id_to_option_group_map[map_id].splice(unmapIndex, 1);\n      }\n\n      // Unset\n      document.selected_option_groups[remove_index] = {removed: true};\n      // Can not set to \"undefined\" either\n      // Can not splice -- document.selected_option_groups.splice(remove_index, 1);\n    }\n    $(this).closest(\"li\").find(\"input\").prop(\"checked\", false);\n    // Disable the add combo button if there are not enough options selected anymore\n    if ($(\".verify-group-combo:checked\").length > 0) {\n      $(\"#add-combo-btn\").removeClass(\"disabled\");\n    } else {\n      $(\"#add-combo-btn\").addClass(\"disabled\");\n    }\n    $(this).closest(\"li\").hide();\n\n    setTimeout(function () {\n      checkIfAutoCombineCanRun();\n    }, 50);\n  });\n\n  $(document).off(\"click\", \".verify-group-combo\").on(\"click\", \".verify-group-combo\", function (e) {\n    var option_group_index = $(this).data(\"option_group_index\");\n    if (this.checked) {\n      // Make sure this quest_id is not already selected in aother option group (unless custom question allows multiple selection)\n      var my_uid = document.selected_option_groups[option_group_index].uid;\n      var unique_question_part = my_uid.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n      var have_matching_question = false;\n      if (!document.selected_option_groups[option_group_index].is_multi) {\n        for (var z = 0; z < document.selected_option_groups.length; z++) {\n          if (z != option_group_index && document.selected_option_groups[z] && !document.selected_option_groups[z].removed) {\n            if (document.selected_option_groups[z].uid.indexOf(unique_question_part) != -1 && !document.selected_option_groups[z].is_multi) {\n              if ($(\".verify-group-combo[data-option_group_index='\" + z + \"']\").prop(\"checked\")) {\n                have_matching_question = true;\n                break;\n              }\n            }\n\n          }\n        }\n      }\n      if (!have_matching_question) {\n        // -- added when button is pressed\n      } else {\n        e.preventDefault();\n        document.comboExistsErrorCount++;\n        document.comboExistsErrorTimestamp = (new Date()).getTime();\n        var error_message = i18n_string(\"advanced_reports.you_can_no_have_combo_from_same_question\", \"You can not have combinations from the same question. You should instead group them together in the first step.\");\n        $(\"#add-combination-error-message\").html(error_message).fadeIn('fast');\n        setTimeout(function () {\n          if ($(\"#add-combination-error-message\").is(\":visible\")) {\n            var timeDiff = (new Date()).getTime() - document.comboExistsErrorTimestamp;\n            if (timeDiff > 7000) {\n              $(\"#add-combination-error-message\").fadeOut('fast');\n              document.comboExistsErrorCount = 0;\n            }\n          }\n        }, 8000);\n      }\n    } else {\n      // Nothing to do here!\n    }\n    if (!e.isDefaultPrevented()) {\n      if ($(\".verify-group-combo:checked\").length > 0) {\n        $(\"#add-combo-btn\").removeClass(\"disabled\");\n      } else {\n        $(\"#add-combo-btn\").addClass(\"disabled\");\n      }\n    }\n\n  });\n\n  window.sort_option_last_clicks = function(a, b) {\n    return ($(b).data('last_click')) < ($(a).data('last_click')) ? 1 : -1;\n  }\n\n  window.sort_option_order_data = function(a, b) {\n    return ($(b).data('order')) < ($(a).data('order')) ? 1 : -1;\n  }\n\n  document.addComboNetworkCheck = [];\n  document.addComboNetworkCheckIndex = 0;\n  document.comboExistsErrorCount = 0;\n  document.comboExistsErrorTimestamp = 0;\n  $(\"#add-combo-btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    // Add to document.option_group_combinations array\n    if ($(\".verify-group-combo:checked\").length > 0) {\n      var index_list = [];\n      var combo_option_names = [];\n      $(\".verify-group-combo:checked\").sort(sort_option_last_clicks).each(function (e) {\n        var option_group_index = $(this).data(\"option_group_index\");\n        var option_group_name = $(this).data(\"option_group_name\");\n        index_list.push(option_group_index);\n        combo_option_names.push('<span class=\"display_option_name_' + option_group_index + '\">' + escapeHtml(option_group_name) + '</span>');\n      });\n      // TODO: find way to speed up this - Future Enhancement\n      // Make sure this exact list of indexes is not used - before adding to document.option_group_combinations\n      var index_list_for_id = index_list.slice().sort();\n      var combo_id = \"c\" + index_list_for_id.join(\"-\");\n      if (document.option_group_combinations[combo_id]) {\n        $(this).blur();\n        document.comboExistsErrorCount++;\n        document.comboExistsErrorTimestamp = (new Date()).getTime();\n        var countText = \"\";\n        if (document.comboExistsErrorCount > 1) {\n          countText = \" (\" + document.comboExistsErrorCount + \")\";\n        }\n        var error_message = i18n_string(\"advanced_reports.that_combo_has_already_been_added\",\"That combination has already been added\");\n        $(\"#add-combination-error-message\").html(error_message + countText).fadeIn('fast');\n        setTimeout(function () {\n          if ($(\"#add-combination-error-message\").is(\":visible\")) {\n            var timeDiff = (new Date()).getTime() - document.comboExistsErrorTimestamp;\n            if (timeDiff > 7000) {\n              $(\"#add-combination-error-message\").fadeOut('fast');\n              document.comboExistsErrorCount = 0;\n            }\n          }\n        }, 8000);\n        return false;\n      }\n      document.option_group_combinations[combo_id] = index_list;\n\n      // Ajax call to get sample size + mean score\n      var combo_json = JSON.stringify(index_list);\n      var option_group_json = JSON.stringify(document.selected_option_groups);\n      if (document.addComboNetworkCheck.length < 40) {\n        document.addComboNetworkCheck[document.addComboNetworkCheckIndex] = (new Date()).getTime();\n        $.ajax({\n          headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n          myNetworkCheckIndex: document.addComboNetworkCheckIndex,\n          type: \"POST\",\n          url: document.advanced_report_data_combo_url,\n          data: {\n            combo_array: combo_json,\n            option_groups: option_group_json\n          },\n          success: function (ret_data) {\n            // var ret_data = JSON.parse(data);\n            // Add row to table\n            if (ret_data && ret_data.sample_size !== undefined) {\n              processNewComboSetup(combo_id, combo_option_names, index_list, ret_data, this.myNetworkCheckIndex);\n            } else {\n              // No data/incorrect data\n            }\n            $(\"#add-combo-btn\").addClass(\"disabled\");\n            // Uncheck previous option groups\n            $(\".verify-group-combo\").each(function () {\n              this.checked = false;\n            });\n          }\n        });\n        document.addComboNetworkCheckIndex++;\n      } else {\n        addComboWithoutSampleData(combo_id, combo_option_names, index_list);\n        $(\"#add-combo-btn\").addClass(\"disabled\");\n        // Uncheck previous option groups\n        $(\".verify-group-combo\").each(function () {\n          this.checked = false;\n        });\n      }\n    }\n    updateForSampleData();\n    $(this).blur();\n  });\n  $(document).off(\"click\", \".remove-combo-btn\").on(\"click\", \".remove-combo-btn\", function (e) {\n    e.preventDefault();\n    var combo_id = $(this).data(\"combo_id\");\n    if (combo_id) {\n      document.option_group_combinations[combo_id] = undefined;\n      $(\"#combo-row-\" + combo_id).hide();\n    }\n    updateForSampleData();\n  });\n\n  $(\"#edit-advanced-report-form\").off(\"submit\").on(\"submit\", function (e) {\n    var error_msg = \"\";\n    // There should be a name set\n    if ($(\"#adv_report_name\").val() == \"\") {\n      error_msg += i18n_string(\"advanced_reports.please_enter_a_name_for_the_report\", \"Please enter a name for the report.\")+\"<br />\";\n    }\n    // There should be at least one combo\n    var count_combos = 0;\n    if (document.option_group_combinations) {\n      var combo_ids = Object.keys(document.option_group_combinations);\n      for (var i = 0; i < combo_ids.length; i++) {\n        if (document.option_group_combinations[combo_ids[i]]) {\n          count_combos++;\n        }\n      }\n    }\n    if (count_combos == 0) {\n      error_msg += i18n_string(\"advanced_reports.select_at_least_one_combo\", \"You must select at least one option combination to save the report.\")+\"<br />\";\n    }\n\n    if (error_msg != \"\") {\n      e.preventDefault();\n      error_msg = error_msg.substr(0, error_msg.length - 6);\n      dojsalert(error_msg);\n      dojsalert(error_msg);\n    } else {\n      // Everything is ok\n      // Save the data arrays as JSON and save to the hidden variables\n      var adv_option_combos_json = JSON.stringify(document.option_group_combinations);\n      var adv_option_groups_json = JSON.stringify(document.selected_option_groups);\n      $(\"#adv_report_option_combos\").val(adv_option_combos_json);\n      $(\"#adv_report_option_groups\").val(adv_option_groups_json);\n    }\n  });\n\n////////////////////////////////////////////////////////////////////////////////\n// INIT these arrays if editing -- check adv_report_id > 0\n////////////////////////////////////////////////////////////////////////////////\n\n  document.loading_combo_list = {};\n  document.loading_combo_list_index = 0;\n  document.current_loading_combo = undefined;\n  if ($(\"#adv_report_id\").val() > 0) {\n    document.temp_selected_option_groups = JSON.parse($(\"#adv_report_option_groups\").val());\n    document.temp_option_group_combinations = JSON.parse($(\"#adv_report_option_combos\").val());\n  }\n  window.loadReportFromHiddenInputs = function() {\n    document.option_group_objects = undefined;\n    if ($(\"#adv_report_id\").val() > 0) {\n      // var temp_selected_option_groups = JSON.parse($(\"#adv_report_option_groups\").val());\n      // var temp_option_group_combinations = JSON.parse($(\"#adv_report_option_combos\").val());\n\n      for (var x = 0; x < document.temp_selected_option_groups.length; x++) {\n        if (document.temp_selected_option_groups[x] && !document.temp_selected_option_groups[x].removed) {\n          var oplist = document.temp_selected_option_groups[x].options;\n          var custom = document.temp_selected_option_groups[x].is_custom ? \"custom_\" : \"\";\n          var quest_id = document.temp_selected_option_groups[x].quest_id;\n          $(\"#\" + custom + \"signup_question_check_\" + quest_id).prop(\"checked\", true);\n          $(\"#\" + custom + \"signup_question_div_\" + quest_id).show();\n\n          $(\"#\" + custom + \"question_options_\" + quest_id).val('').change();\n          var send_option = oplist;\n          if (!document.temp_selected_option_groups[x].is_group && !document.temp_selected_option_groups[x].options.range) {\n            send_option = oplist[0];\n          }\n          // Validate that this question still exists\n          var quest_check_error = \"\";\n          var quest_search_id = \"\";\n          if (document.temp_selected_option_groups[x].is_custom) {\n            quest_search_id = \"#\" + custom + \"question_options_\" + quest_id;\n          } else {\n            quest_search_id = \"#question_options_\" + quest_id;\n          }\n          if (!document.temp_selected_option_groups[x].options.range) {\n            if (quest_search_id.length > 0 && $(quest_search_id).length > 0) {\n              // Make sure options are still valid\n              var missing_option = false;\n              if (document.temp_selected_option_groups[x].is_group) {\n                for (var z = 0; z < send_option.length; z++) {\n                  if ($(quest_search_id).find(\"option[value='\" + send_option[z] + \"']\").length == 0) {\n                    missing_option = true;\n                    break;\n                  }\n                }\n              } else {\n                if ($(quest_search_id).find(\"option[value='\" + send_option + \"']\").length == 0) {\n                  missing_option = true;\n                }\n              }\n              if (missing_option) {\n                quest_check_error = i18n_string(\"advanced_reports.error_one_or_more_options_removed\", \"One or more selected options that this report used were removed or are not available from the account, and you can no longer edit this report. You can continue to run the report or create a new report.\");\n              }\n            } else {\n              quest_check_error = i18n_string(\"advanced_reports.error_one_or_more_options_removed\", \"One or more selected options that this report used were removed or are not available from the account, and you can no longer edit this report. You can continue to run the report or create a new report.\");\n            }\n          }\n\n          if (quest_check_error.length > 0) {\n            if ($(\"#is_duplicate_report\").val()) {\n              document.selected_option_groups.push({removed: true});\n            } else {\n              clearTimeout(checkComboLoadingStatus);\n              $(\"#advanced-creation-tools-btn\").hide();\n              $(\"#advanced-creation-tools-div\").hide();\n              $(\"#adv-editor-container-div\").hide();\n              $(\"#adv_report_loader\").data(\"has_load_error\", \"yes\");\n              $(\"#adv_report_loader\").css(\"background\", \"#FFFFFF\");\n              var heading_text = i18n_string(\"advanced_reports.unable_to_edit_report\", \"Unable to edit report.\");\n              var button_text = i18n_string(\"advanced_reports.create_new_reports\", \"Create New Report\");\n              $(\"#adv_report_loader\").html('<div class=\"alert alert-danger text-left\" style=\"height:auto;padding:75px 50px;\"><h2 class=\"text-danger\">'+heading_text+'</h2>' + quest_check_error + '<br><br><br><a class=\"btn btn-success\" href=\"?edit=new\">'+button_text+'</a></div>');\n            }\n          } else {\n            addQuestionOption(quest_id, document.temp_selected_option_groups[x].is_custom, send_option, document.temp_selected_option_groups[x].is_multi, document.temp_selected_option_groups[x].is_group, document.temp_selected_option_groups[x].group_name);\n          }\n        } else if (document.temp_selected_option_groups[x] && document.temp_selected_option_groups[x].removed) {\n          document.selected_option_groups.push({removed: true});\n        }\n      }\n      // Need to change to only load one combo at a time ------------\n      var combo_ids = Object.keys(document.temp_option_group_combinations);\n      var final_temp_option_group_combinations = {};\n      var did_conversion = false;\n      for (var i = 0; i < combo_ids.length; i++) {\n        // Update combo ids to all be strings\n        var combo_id_final = combo_ids[i];\n        if (combo_id_final.charAt(0) != \"c\") {\n          final_temp_option_group_combinations[\"c\" + combo_id_final] = document.temp_option_group_combinations[combo_id_final];\n          combo_id_final = \"c\" + combo_id_final;\n          did_conversion = true;\n        }\n        document.loading_combo_list[combo_id_final] = \"loading\";\n      }\n      if (did_conversion) {\n        document.temp_option_group_combinations = final_temp_option_group_combinations;\n      }\n\n      // Remove any that are missing an option\n      var final2_temp_option_group_combinations = {};\n      var combo_ids2 = Object.keys(document.temp_option_group_combinations);\n      for (var i = 0; i < combo_ids2.length; i++) {\n        var index_list = document.temp_option_group_combinations[combo_ids2[i]];\n        var missing = false;\n        if (index_list) {\n          for (var x = 0; x < index_list.length; x++) {\n            if (!$(\".verify-group-combo[data-option_group_index='\" + index_list[x] + \"']\").length) {\n              missing = true;\n              break;\n            }\n          }\n        }\n        if (!missing) {\n          final2_temp_option_group_combinations[combo_ids2[i]] = document.temp_option_group_combinations[combo_ids2[i]];\n        }\n      }\n      document.temp_option_group_combinations = final2_temp_option_group_combinations;\n\n      // Start check to wait for combos to finish loading\n      $(\"#adv-editor-container-div\").addClass(\"blur-element\");\n      setTimeout(checkComboLoadingStatus, 500);\n    }\n  }\n\n  window.checkComboLoadingStatus = function() {\n    if (!document.option_group_objects) {\n      document.option_group_objects = {};\n      $(\".verify-group-combo\").each(function () {\n        var $thisObj = $(this);\n        var group_index = parseInt($thisObj.data(\"option_group_index\"));\n        document.option_group_objects[group_index] = $thisObj;\n      });\n    }\n    // Finish this check all and then hide loader once complete\n    var combo_ids = Object.keys(document.loading_combo_list);\n    var still_loading = false;\n    var load_new = false;\n    if (!document.current_loading_combo || document.loading_combo_list[document.current_loading_combo] != \"loading\") {\n      load_new = true;\n    }\n\n    var p_total_combos = combo_ids.length;\n    var p_completed_combos = 0;\n    for (var zz = 0; zz < combo_ids.length; zz++) {\n      if (document.loading_combo_list[combo_ids[zz]] != \"loading\") {\n        p_completed_combos++;\n      } else {\n        still_loading = true;\n      }\n    }\n    var percent_done = ((p_completed_combos / p_total_combos) * 100).toFixed(0);\n    $(\"#adv_report_percent_loaded\").html(percent_done + \"%\");\n\n    if (load_new) {\n      //for (var i = 0; i < combo_ids.length; i++) {\n      var num_loaded_this_round = 0;\n      for (; document.loading_combo_list_index < combo_ids.length; document.loading_combo_list_index++) {\n        var i = document.loading_combo_list_index;\n        if (document.loading_combo_list[combo_ids[i]] == \"loading\") {\n          document.current_loading_combo = combo_ids[i];\n          // Do loading\n          // $(\".verify-group-combo\").prop(\"checked\", false);\n          var index_list = document.temp_option_group_combinations[document.current_loading_combo];\n          var combo_option_names = [];\n          var num_option_groups_checked = 0;\n          if (index_list) {\n            for (var x = 0; x < index_list.length; x++) {\n              var $el = document.option_group_objects[index_list[x]];//$(\".verify-group-combo[data-option_group_index='\" + index_list[x] + \"']\");\n              if ($el != undefined && $el.length) {\n                // $(\".verify-group-combo[data-option_group_index='\" + index_list[x] + \"']\").prop(\"checked\", true).change();\n                var option_group_name = $el.data(\"option_group_name\");\n                combo_option_names.push('<span class=\"display_option_name_' + index_list[x] + '\">' + escapeHtml(option_group_name) + '</span>');\n\n                num_option_groups_checked++;\n              }\n\n            }\n          }\n          if (num_option_groups_checked > 0) {\n            // $(\"#add-combo-btn\").click();\n\n            var index_list_for_id = index_list.slice().sort();\n            var combo_id = \"c\" + index_list_for_id.join(\"-\");\n            if (!document.option_group_combinations[combo_id]) {\n              document.option_group_combinations[combo_id] = index_list;\n              // addComboWithoutSampleData(combo_id, combo_option_names, index_list);\n              var load_text = i18n_string(\"advanced_reports.load\", \"(load)\");\n              var ret_data_no_sample = {\n                sample_size: '<span class=\"data-content-not-loaded-sample\" id=\"data-content-not-loaded-sample-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>',\n                sample_too_small: '<span class=\"data-content-not-loaded-score\" id=\"data-content-not-loaded-score-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>'\n              };\n              // var row_html = createComboRowHTML(combo_id, combo_option_names, index_list, ret_data_no_sample);\n              // $(\"#group_combo_table_body\").append(row_html);\n              var row_dom = createComboRowDOM(combo_id, combo_option_names, index_list, ret_data_no_sample);\n              document.getElementById(\"group_combo_table_body\").appendChild(row_dom);\n              document.loading_combo_list[combo_id] = \"completed\";\n            }\n            // Make sure not to load anymore until this one finishes\n            num_loaded_this_round++;\n            if (num_loaded_this_round > 50) {\n              load_new = false;\n              break; // No need to keep looping here\n            }\n          } else {\n            document.loading_combo_list[combo_ids[i]] = \"removed\";\n          }\n\n        }\n      }\n    }\n\n    if (!still_loading) {\n      if ($(\"#adv_report_loader\").data(\"has_load_error\") != \"yes\") {\n        doPostComboLoadingInit();\n        $(\"#adv-editor-container-div\").removeClass(\"blur-element\");\n        $(\"#adv_report_loader\").hide();\n      }\n    } else {\n      var timeout_ms = 5;\n      // var timeout_ms = 200;\n      // if(document.addComboNetworkCheck && document.addComboNetworkCheck.length >= 40) {\n      //   timeout_ms = 10;\n      // }\n      setTimeout(checkComboLoadingStatus, timeout_ms);\n    }\n  }\n\n  $(document).off(\"click\", \".edit-group-name-btn\").on(\"click\", \".edit-group-name-btn\", function (e) {\n    e.preventDefault();\n    var $parent = $(this).closest(\".list-group-item\");\n    var current_name = $parent.find(\".verify-group-combo\").data(\"option_group_name\");\n    $parent.find(\".group-name-edit-input\").val(current_name);\n    $parent.find(\".group-name-display\").hide();\n    $parent.find(\".group-name-edit\").show();\n  });\n  $(document).off(\"click\", \".group-name-edit-cancel-btn\").on(\"click\", \".group-name-edit-cancel-btn\", function (e) {\n    e.preventDefault();\n    var $parent = $(this).closest(\".list-group-item\");\n    $parent.find(\".group-name-edit\").hide();\n    $parent.find(\".group-name-display\").show();\n  });\n  $(document).off(\"click\", \".group-name-edit-confirm-btn\").on(\"click\", \".group-name-edit-confirm-btn\", function (e) {\n    e.preventDefault();\n    var $parent = $(this).closest(\".list-group-item\");\n    // Change Name\n    var new_val = $parent.find(\".group-name-edit-input\").val();\n\n    var checkboxObj = $parent.find(\".verify-group-combo\");\n    var option_index = checkboxObj.data(\"option_group_index\");\n\n    if (new_val != \"\" && option_index != undefined) {\n      document.selected_option_groups[option_index].group_name = new_val;\n      checkboxObj.data(\"option_group_name\", new_val);\n      $parent.find(\".group-name-display-text\").html(escapeHtml(new_val));\n    }\n    $parent.find(\".group-name-edit\").hide();\n    $parent.find(\".group-name-display\").show();\n  });\n  $(document).off(\"click\", \".adv-report-delete-button\").on(\"click\", \".adv-report-delete-button\", function (e) {\n    if (!confirm(i18n_string(\"advanced_reports.confirm_advanced_report_delete\", \"Are you sure you want to delete this report? It will be removed from all folders assigned as well.\"))) {\n      e.preventDefault();\n    }\n  });\n  $(document).off(\"click\", \".advanced-report-demo-btn\").on(\"click\", \".advanced-report-demo-btn\", function (e) {\n    e.preventDefault();\n    $(\"#advanced_report_upgrade_modal\").modal(\"show\");\n  });\n  $(\"#additional_schools_select2\").select2();\n  $(document).off(\"click\", \".edit-option-group\").on(\"click\", \".edit-option-group\", function (e) {\n    e.preventDefault();\n    var option_group_index = $(this).data(\"option_group_index\");\n    var option_type = $(this).data(\"option_type\");\n    if (option_group_index >= 0) {\n      $(\"#edit_option_group_type_group\").hide();\n      $(\"#edit_option_group_type_range\").hide();\n      $(\"#edit_option_group_type_single\").hide();\n      $(\"#edit_option_group_modal_option_group_index\").val(option_group_index);\n      $(\"#edit_option_group_modal_option_group_type\").val(option_type);\n      $(\"#edit_option_group_type_\" + option_type).show();\n      var option_data = document.selected_option_groups[option_group_index];\n      if (option_data) {\n        var quest_object;\n        if (option_data.is_custom) {\n          quest_object = $(\"#custom_question_options_\" + option_data.quest_id);\n        } else {\n          quest_object = $(\"#question_options_\" + option_data.quest_id);\n        }\n        var quest_name = quest_object.data(\"quest_name_short\");\n        $(\"#edit_option_group_field_label\").html(quest_name);\n        $(\"#edit_option_group_type_group_name\").val(option_data.group_name);\n        if (option_type == \"group\") {\n          var modal_select_object = $(\"#edit_option_group_type_group_select\");\n          modal_select_object.empty().change();\n          quest_object.find(\"option\").each(function () {\n            var is_selected = false;\n            var this_value = $(this).val();\n            if (option_data && option_data.options && option_data.options.indexOf(this_value) > -1) {\n              is_selected = true;\n            }\n            modal_select_object.append($('<option>', {\n              value: this_value,\n              text: $(this).text(),\n              selected: is_selected\n            }));\n          });\n        } else if (option_type == \"range\") {\n          $(\"#edit_option_group_type_range_start\").val(option_data.options.start);\n          $(\"#edit_option_group_type_range_end\").val(option_data.options.end);\n        } else {\n\n        }\n\n        $(\"#edit_option_group_modal\").modal(\"show\");\n      }\n    }\n  });\n  $(\"#edit_option_group_modal\").off(\"shown.bs.modal\").on(\"shown.bs.modal\", function (e) {\n    init_select2(\"#edit_option_group_type_group_select\", {});\n  });\n  $(\"#edit_option_group_modal_save_btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    var option_group_index = $(\"#edit_option_group_modal_option_group_index\").val();\n    var option_type = $(\"#edit_option_group_modal_option_group_type\").val();\n    if (option_group_index != \"\" && option_group_index != -1) {\n      var option_data = document.selected_option_groups[option_group_index];\n      if (option_data) {\n\n        if (option_type == \"group\") {\n          var modal_select_object = $(\"#edit_option_group_type_group_select\");\n          var group_name = $(\"#edit_option_group_type_group_name\").val();\n          var error_msg = \"\";\n          if (modal_select_object.find(\"option:selected\").length < 2) {\n            error_msg = i18n_string('advanced_reports.you_must_select_at_least_two_options_for_a_group', \"You must select at least two options for a group.\");\n          } else if (group_name == \"\") {\n            error_msg = i18n_string('advanced_reports.the_group_name_can_not_be_blank', \"The group name can not be blank.\");\n          }\n          if (error_msg == \"\") {\n            $(\"#edit_option_group_modal_msg\").html(\"\");\n            // Save changes\n            document.selected_option_groups[option_group_index].group_name = group_name;\n            document.selected_option_groups[option_group_index].options = modal_select_object.val();\n            // Update Displayed Name\n            updateDisplayedNameForOptionGrouop(option_group_index);\n            // Update sample data and close modal\n            updateSampleDataForAnyComboUsingOption(option_group_index);\n            $(\"#edit_option_group_modal_option_group_index\").val(-1);\n            $(\"#edit_option_group_modal\").modal(\"hide\");\n          } else {\n            $(\"#edit_option_group_modal_msg\").html('<div class=\"alert alert-danger\">' + error_msg + '</div>');\n          }\n        } else if (option_type == \"range\") {\n          var range_start = $(\"#edit_option_group_type_range_start\").val();\n          var range_end = $(\"#edit_option_group_type_range_end\").val();\n          var error_msg = \"\";\n          if (range_start > range_end) {\n            error_msg = i18n_string('advanced_reports.the_range_start_can_not_be_larger_then_thd_the_end', \"The range start can not be larger then thd the end value.\");\n          }\n          if (error_msg == \"\") {\n            $(\"#edit_option_group_modal_msg\").html(\"\");\n            // Save changes\n            document.selected_option_groups[option_group_index].options.start = range_start;\n            document.selected_option_groups[option_group_index].options.end = range_end;\n            // Update Displayed Name\n            // <input type=\"checkbox\" data-option_group_index=\"2\" data-option_group_name=\"Years range 1 - 20\" class=\"verify-group-combo mr-1\">\n            var display_name = $(\".verify-group-combo[data-option_group_index='\" + option_group_index + \"']\").data(\"option_group_name\");\n            display_name_parts = display_name.split(\" range \");\n            display_name = display_name_parts[0] + \" range \" + range_start + \" - \" + range_end;\n            $(\".display_option_name_\" + option_group_index).html(escapeHtml(display_name));\n            $(\".verify-group-combo[data-option_group_index='\" + option_group_index + \"']\").data(\"option_group_name\", display_name);\n            // Update sample data and close modal\n            updateSampleDataForAnyComboUsingOption(option_group_index);\n            $(\"#edit_option_group_modal\").modal(\"hide\");\n          } else {\n            $(\"#edit_option_group_modal_msg\").html('<div class=\"alert alert-danger\">' + error_msg + '</div>');\n          }\n        } else {\n\n        }\n      }\n    }\n  });\n  document.last_click_increment = 0;\n  $(document).off(\"change\", \"[type=checkbox]\").on(\"change\", \"[type=checkbox]\", function () { // always use change event\n    if (this.checked) {\n      document.last_click_increment++;\n      $(this).data(\"last_click\", document.last_click_increment);\n    } else {\n      $(this).data(\"last_click\", -1);\n    }\n  });\n  $(\".multi-combiner-signup-question\").off(\"click\").on(\"click\", function (e) {\n    var order_wrapper_obj = $(this).closest(\"div\").find(\".order-input-wrapper\");\n    if (this.checked) {\n      var max_val = 0;\n      $(\".multi-combiner-order-box:visible\").each(function () {\n        if ($(this).val() > max_val) {\n          max_val = $(this).val();\n        }\n      });\n      max_val++;\n      order_wrapper_obj.find(\".multi-combiner-order-box\").val(max_val).change();\n      order_wrapper_obj.show();\n    } else {\n      order_wrapper_obj.hide();\n    }\n  });\n  $(\".multi-combiner-order-box\").off(\"change\").on(\"change\", function (e) {\n    var checkbox_id = $(this).data(\"checkbox_id\");\n    $(\"#\" + checkbox_id).data(\"order\", $(this).val());\n  });\n  $(document).off(\"click\", \".change-display-order-options-single\").on(\"click\", \".change-display-order-options-single\", function (e) {\n    e.preventDefault();\n    var combo_id = $(this).data(\"combo_id\");\n    if (document.option_group_combinations[combo_id]) {\n      $(\"#edit_option_display_order_single_combo_id\").val(combo_id);\n      var order_item_html = \"\";\n      for (var i = 0; i < document.option_group_combinations[combo_id].length; i++) {\n        var option_id = document.option_group_combinations[combo_id][i];\n        if (document.selected_option_groups[option_id]) {\n          var display_name = $(\".verify-group-combo[data-option_group_index='\" + option_id + \"']\").data(\"option_group_name\");\n\n          order_item_html += '<li data-option_id=\"' + option_id + '\" class=\"sortable list-group-item\"><span class=\"text-muted mr-2\"><em class=\"fa fa-arrows\"></em></span> ' + escapeHtml(display_name) + '</li>';\n        }\n      }\n      $(\"#edit_option_display_order_single_sortable_area\").html(order_item_html);\n      $(\"#edit_option_display_order_single_sortable_area\").sortable({\n        // update: function (event, ui) {\n        //   var option_id_order = [];\n        //   $('#group_combo_table_body tr.allow-sort').each(function(idx) {\n        //     var item_id= $(this).attr(\"id\");\n        //     item_id = item_id.replace(\"combo-row-\",\"\");\n        //     combo_id_order.push(item_id);\n        //   });\n        //   var new_option_group_combinations = {};\n        //   for(var i=0;i<combo_id_order.length;i++)\n        //   {\n        //     new_option_group_combinations[combo_id_order[i]] = document.option_group_combinations[combo_id_order[i]];\n        //   }\n        //   document.option_group_combinations = new_option_group_combinations;\n        //\n        // },\n        items: '.sortable'\n      });\n      $(\"#edit_option_display_order_single_modal\").modal(\"show\");\n    }\n  });\n  $(\"#edit_option_display_order_single_modal_save_btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    var combo_id = $(\"#edit_option_display_order_single_combo_id\").val();\n    if (document.option_group_combinations[combo_id]) {\n      var index_list = [];\n      var combo_option_names = [];\n      $('#edit_option_display_order_single_modal .sortable').each(function (idx) {\n        var option_id = $(this).data(\"option_id\");\n        var display_name = $(\".verify-group-combo[data-option_group_index='\" + option_id + \"']\").data(\"option_group_name\");\n        index_list.push(option_id);\n        combo_option_names.push('<span class=\"display_option_name_' + option_id + '\">' + escapeHtml(display_name) + '</span>');\n      });\n      document.option_group_combinations[combo_id] = index_list;\n      $(\"#display_combo_text_all_\" + combo_id).html(combo_option_names.join(\", \"));\n      $(\"#edit_option_display_order_single_modal\").modal(\"hide\");\n    }\n  });\n\n  window.addQuestionOption = function(quest_id, is_custom, options, is_multi, is_group, group_name) {\n    var quest_name = \"\";\n    var display_option_name = \"\";\n    var display_option_name_text = \"\";\n    var remove_class = \"\";\n    var custom = is_custom ? \"custom_\" : \"\";\n    var option_type = \"\";\n    if (is_custom) {\n      quest_name = $(\"#\" + custom + \"question_options_\" + quest_id).data(\"quest_name_short\");\n      remove_class = \"list-item-custom-\" + quest_id;\n    } else {\n      quest_name = $(\"#question_options_\" + quest_id).data(\"quest_name_short\");\n      remove_class = \"list-item-signup-\" + quest_id;\n    }\n    var option_name_for_uid = \"\";\n    if (is_group) {\n      // display_option_name = '<span class=\"group-name-display ml-1\"><span class=\"group-name-display-text\">'+escapeHtml(group_name)+'</span>';\n      // display_option_name += ' <a href=\"\" class=\"edit-group-name-btn\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Edit group name\"><em class=\"fa fa-pencil-square-o text-success\" style=\"\"></em></a>';\n      // display_option_name += '</span>';\n      // // Add rename widgets\n      // display_option_name += '<span class=\"group-name-edit\" style=\"display:none;\">';\n      // display_option_name += '<input type=\"text\" value=\"'+escapeHtml(group_name)+'\" class=\"group-name-edit-input form-control form-control-sm mr-1 ml-1\" style=\"width:100px;\" />';\n      // display_option_name += ' <a href=\"\" class=\"group-name-edit-confirm-btn mr-1\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Save name change\"><em class=\"fa fa-check-square-o text-success\" style=\"\"></em></a>';\n      // display_option_name += ' <a href=\"\" class=\"group-name-edit-cancel-btn mr-1\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Cancel\"><em class=\"fa fa-times text-danger\" style=\"\"></em></a>';\n      // display_option_name += '</span>';\n      // display_option_name_text = escapeHtml(group_name);\n      // // In tooltip have number and list them (X)\n      // var option_tooltip_array = [];\n      // for(var z=0;z<options.length;z++)\n      // {\n      //   option_tooltip_array.push($(\"#\"+custom+\"question_options_\"+quest_id).find(\"option[value='\"+options[z]+\"']\").text());\n      // }\n      // var option_str = option_tooltip_array.join(\", \");\n      // option_str = escapeHtml(option_str); //option_str.replace('\"','&quot;');\n      //\n      // display_option_name += ' <a href=\"javascript:;\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"'+option_str+'\">('+option_tooltip_array.length+')</a>';\n      display_option_name = group_name;\n      display_option_name_text = escapeHtml(group_name);\n      option_type = \"group\";\n      option_name_for_uid = options[0];\n    } else if (options && options.range) {\n      display_option_name = options.range_text + \" range \" + options.start + \" - \" + options.end;\n      display_option_name_text = display_option_name;\n      option_type = \"range\";\n      option_name_for_uid = \"range:\" + options.start + \":\" + options.end;\n    } else {\n      display_option_name = escapeHtml($(\"#\" + custom + \"question_options_\" + quest_id).find(\"option[value='\" + options + \"']\").text());\n      display_option_name_text = display_option_name;\n      options = [options];\n      option_type = \"single\";\n      option_name_for_uid = options[0];\n    }\n    // First value is either quest_id for signup_question or custom_question\n    // Add to javascript data array\n    var new_length = document.selected_option_groups.push({\n      uid: (is_custom ? \"custom\" : \"signup\") + \"!\" + quest_id + \"!\" + option_name_for_uid,\n      is_multi: is_multi,\n      is_custom: is_custom,\n      is_group: is_group,\n      quest_id: quest_id,\n      options: options,\n      group_name: group_name\n    });\n    var last_index = new_length - 1;\n    var map_id = (is_custom ? \"custom-\" : \"signup-\") + quest_id;\n    if (!document.question_id_to_option_group_map[map_id]) {\n      document.question_id_to_option_group_map[map_id] = []; // Make sure it is not undefined\n    }\n    document.question_id_to_option_group_map[map_id].push(last_index);\n\n    display_option_name_text = display_option_name_text.replace('\"', '&quot;');\n\n    // Add HTML element to list\n    var html_elem = '<li class=\"list-group-item justify-content-between ' + remove_class + '\">';\n    // display_option_name is already escaped for HTML\n    html_elem += '  <span class=\"form-inline\"><label><input type=\"checkbox\" data-option_group_index=\"' + last_index + '\" data-option_group_name=\"' + display_option_name_text + '\" class=\"verify-group-combo mr-1\" /> ' + escapeHtml(quest_name) + '&nbsp;<strong class=\"text-info\">&gt;</strong>&nbsp;<span class=\"display_option_name_' + last_index + '\">' + (display_option_name) + '</span></label></span>';\n    html_elem += '  <span class=\"pull-right\">';\n    if (option_type == \"group\" || option_type == \"range\") {\n      html_elem += '    <a href=\"\" data-option_group_index=\"' + last_index + '\" data-option_type=\"' + option_type + '\" class=\"btn btn-sm btn-success edit-option-group\"><span class=\"fa fa-pencil\" aria-hidden=\"true\"></span><span class=\"sr-only\">Edit Option</span></a>';\n    }\n    html_elem += '    <a href=\"\" data-option_group_index=\"' + last_index + '\" class=\"btn btn-sm btn-danger remove-option-group\"><span class=\"fa fa-times\" aria-hidden=\"true\"></span><span class=\"sr-only\">Remove Option</span></a></span>';\n    html_elem += '</li>';\n    $(\"#selected_question_options_list\").append(html_elem);\n    initTooltips();\n\n    // See if the auto-combine if possible\n    setTimeout(function () {\n      checkIfAutoCombineCanRun();\n    }, 50);\n  }\n\n  window.updateForSampleData = function() {\n    if ($(\"#adv_report_disabled\").length) {\n      var validcombo = 0;\n      if (document.option_group_combinations) {\n        var combo_ids = Object.keys(document.option_group_combinations);\n        for (var i = 0; i < combo_ids.length; i++) {\n          var index_list = document.option_group_combinations[combo_ids[i]];\n          if (index_list) {\n            validcombo++;\n          }\n        }\n      }\n      if (validcombo > 0) {\n        $(\"#group_combo_table\").addClass(\"promoter-dash-sample-chart\");\n      } else {\n        $(\"#group_combo_table\").removeClass(\"promoter-dash-sample-chart\");\n      }\n    }\n  }\n\n//////////// ADV TOOLS\n  $(\"#adv-multi-combiner-tool-start\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    $(\"#adv-multi-combiner-tool\").blur();\n    var sizeNeeded = $(\"#multi_combiner_size\").val();\n    if ($(\".multi-combiner-signup-question:checked\").length == sizeNeeded || (sizeNeeded == \"23\" && $(\".multi-combiner-signup-question:checked\").length == 3)) {\n      $(\"#adv-multi-combiner-tool-modal-error-msg\").hide();\n      var multi_combiner_size = $(\"#multi_combiner_size\").val();\n      $(\"#adv-multi-combiner-tool-start\").prop(\"disabled\", \"disabled\");\n      $(\"#adv-multi-combiner-tool-modal #adv-multi-combiner-tool-checkboxes\").hide();\n      $(\"#adv-multi-combiner-tool-modal #adv-multi-combiner-tool-running\").show();\n      $(\".multi-combiner-signup-question:checked\").sort(sort_option_order_data).each(function () {\n        var quest_id = $(this).data(\"quest_id\");\n        var custom_prefix = $(this).data(\"custom\");\n        if (!custom_prefix) {\n          custom_prefix = \"\";\n        }\n\n        // Check question boxes\n        if (!$(\"#\" + custom_prefix + \"signup_question_check_\" + quest_id).is(\":checked\")) {\n          $(\"#\" + custom_prefix + \"signup_question_check_\" + quest_id).trigger(\"click\");\n        }\n\n        // Select all options that are not already disabled\n        $(\"#\" + custom_prefix + \"question_options_\" + quest_id + \" > option:enabled\").prop(\"selected\", \"selected\");\n        init_select2(\"#\" + custom_prefix + \"question_options_\" + quest_id, {});\n        $(\"#\" + custom_prefix + \"question_options_\" + quest_id).change();\n\n        // Click on Add button for each thing\n        $(\"#\" + custom_prefix + \"question_add_btn_\" + quest_id).click();\n      });\n\n      // Do the combing fun\n      var groups_temp = [];\n      var index_list = [];\n      var index_list2 = [];\n      var index_list3 = [];\n      var index_list_for_question = {};\n      var last_index_number_for_question = 0;\n      var combos_done_temp = {};\n      $(\".verify-group-combo\").each(function () {\n        var group_index = parseInt($(this).data(\"option_group_index\"));\n        var my_uid = document.selected_option_groups[group_index].uid;\n        var unique_question_part = my_uid.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n        var indexListNumber = 0;\n        if (index_list_for_question[unique_question_part]) {\n          indexListNumber = index_list_for_question[unique_question_part];\n        } else {\n          last_index_number_for_question++;\n          indexListNumber = last_index_number_for_question;\n          index_list_for_question[unique_question_part] = last_index_number_for_question;\n        }\n        if (indexListNumber == 1) {\n          index_list.push(group_index);\n        } else if (indexListNumber == 2) {\n          index_list2.push(group_index);\n        } else if (indexListNumber == 3) {\n          index_list3.push(group_index);\n        }\n        groups_temp[group_index] = this;\n      });\n\n      document.bg_multicombine_z1 = 0;\n      document.bg_multicombine_z2 = 0;\n      document.bg_multicombine_z3 = 0;\n      document.bg_index_list = index_list;\n      document.bg_index_list2 = index_list2;\n      document.bg_index_list3 = index_list3;\n      document.bg_groups_temp = groups_temp;\n      document.bg_combos_done_temp = combos_done_temp;\n      document.bg_multi_combiner_size = multi_combiner_size;\n      document.bg_multi_combiner_running = true;\n\n      setTimeout(doMultiCombinerInBackground, 20);\n\n      $(\"#adv-multi-combiner-tool-modal\").modal(\"hide\");\n      $(\"#adv-editor-container-div\").addClass(\"blur-element\");\n      $(\"#adv_report_multi_tool_inprogress\").show();\n      $(\"#adv-multi-combiner-tool\").addClass(\"disabled\");\n      setTimeout(waitForCombosToFinishForMultiCombiner, 1000);\n    } else {\n      var error_string = i18n_string(\"advanced_reports.you_must_select_x_questions\", \"You must select 99 questions\")\n      var errorMsg = error_string.replace(\"99\", \"<strong>\" + sizeNeeded + \"</strong>\");\n      if (sizeNeeded == \"23\") {\n        errorMsg = error_string.replace(\"99\", \"<strong>3</strong>\");\n      }\n      $(\"#adv-multi-combiner-tool-modal-error-msg\").html(errorMsg).fadeIn();\n    }\n  });\n  // $(\"#advanced-creation-tools-btn\").off(\"click\").on(\"click\", function (e) {\n  //   e.preventDefault();\n  //   $(\"#advanced-creation-tools-btn\").blur();\n  //   $(\"#advanced-creation-tools-div\").slideToggle();\n  // });\n\n  window.waitForCombosToFinishForMultiCombiner = function() {\n    if (document.addComboNetworkCheck) {\n      var still_waiting = false;\n      var currentTime = (new Date()).getTime();\n      for (var i = 0; i < document.addComboNetworkCheckIndex; i++) {\n        if (document.addComboNetworkCheck[i] > 0) {\n          if (currentTime - document.addComboNetworkCheck[i] < 120000) // 2 minute timeout\n          {\n            still_waiting = true;\n            break;\n          }\n        }\n      }\n      if (document.bg_multi_combiner_running) {\n        still_waiting = true;\n      }\n\n      if (!still_waiting) {\n        $(\"#adv-editor-container-div\").removeClass(\"blur-element\");\n        $(\"#adv_report_multi_tool_inprogress\").hide();\n      } else {\n        setTimeout(waitForCombosToFinishForMultiCombiner, 500);\n      }\n    }\n  }\n\n  window.updateDisplayedNameForOptionGrouop = function(option_group_index) {\n    var option_data = document.selected_option_groups[option_group_index];\n    $(\".display_option_name_\" + option_group_index).html(escapeHtml(option_data.group_name));\n    $(\".verify-group-combo[data-option_group_index='\" + option_group_index + \"']\").data(\"option_group_name\", option_data.group_name);\n  }\n\n  window.updateSampleDataForCombo = function(combo_id) {\n    if (document.option_group_combinations[combo_id]) {\n      var index_list = document.option_group_combinations[combo_id];\n      var combo_json = JSON.stringify(index_list);\n      var option_group_json = JSON.stringify(document.selected_option_groups);\n      $.ajax({\n        headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n        type: \"POST\",\n        url: document.advanced_report_data_combo_url,\n        data: {\n          combo_array: combo_json,\n          option_groups: option_group_json\n        },\n        success: function (ret_data) {\n          console.dir(ret_data);\n          // var ret_data = JSON.parse(data);\n          // Add row to table\n          if (ret_data && ret_data.sample_size !== undefined) {\n            var sampleCell = ret_data.sample_size;\n            var meanCell = parseFloat(ret_data.average_total).toFixed(2);\n            if (ret_data.sample_too_small) {\n              meanCell = ret_data.sample_too_small;\n            }\n            $(\"#combo-row-\" + combo_id + \" td:nth-child(3)\").html(sampleCell);\n            $(\"#combo-row-\" + combo_id + \" td:nth-child(4)\").html(meanCell);\n          } else {\n            var error_string = i18n_string('advanced_reports.unable_to_load', 'Unable to load');\n            $(\"#combo-row-\" + combo_id + \" td:nth-child(3)\").html(error_string);\n            $(\"#combo-row-\" + combo_id + \" td:nth-child(4)\").html(error_string);\n          }\n\n        }\n      });\n    }\n  }\n\n  window.updateSampleDataForAnyComboUsingOption = function(option_group_index) {\n    if (document.option_group_combinations) {\n      var combo_ids = Object.keys(document.option_group_combinations);\n      for (var i = 0; i < combo_ids.length; i++) {\n        var index_list = document.option_group_combinations[combo_ids[i]];\n        if (index_list) {\n          var updateCombo = false;\n          for (var x = 0; x < index_list.length; x++) {\n            if (parseInt(index_list[x]) === parseInt(option_group_index)) {\n              updateCombo = true;\n              break;\n            }\n          }\n          if (updateCombo) {\n            updateSampleDataForCombo(combo_ids[i]);\n          }\n        }\n      }\n    }\n  }\n\n  window.addComboWithoutSampleData = function(combo_id, combo_option_names, index_list) {\n    var load_text = i18n_string(\"advanced_reports.load\", \"(load)\");\n    var ret_data_no_sample = {\n      sample_size: '<span class=\"data-content-not-loaded-sample\" id=\"data-content-not-loaded-sample-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>',\n      sample_too_small: '<span class=\"data-content-not-loaded-score\" id=\"data-content-not-loaded-score-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>'\n    };\n    processNewComboSetup(combo_id, combo_option_names, index_list, ret_data_no_sample, undefined);\n  }\n\n  window.processNewComboSetup = function(combo_id, combo_option_names, index_list, ret_data, myNetworkCheckIndex) {\n    var row_html = createComboRowHTML(combo_id, combo_option_names, index_list, ret_data);\n\n    var total_rows = $('#group_combo_table_body tr.combo-table-row').length;\n    var combo_ids = Object.keys(document.option_group_combinations);\n    var myIndex = combo_ids.indexOf(combo_id);\n    if (total_rows == 0) {\n      $(\"#group_combo_table_body\").append(row_html);\n    } else {\n      var combo_before = combo_ids[myIndex - 1];\n      if ($(\"#group_combo_table_body #combo-row-\" + combo_before).length) {\n        $(\"#group_combo_table_body #combo-row-\" + combo_before).after(row_html);\n      } else {\n        var found_row_loc = false;\n        for (z = myIndex - 2; z >= 0; z--) {\n          combo_before = combo_ids[z];\n          if ($(\"#group_combo_table_body #combo-row-\" + combo_before).length) {\n            $(\"#group_combo_table_body #combo-row-\" + combo_before).after(row_html);\n            found_row_loc = true;\n            break;\n          }\n        }\n        if (!found_row_loc) {\n          $(\"#group_combo_table_body\").append(row_html);\n        }\n      }\n    }\n    // if(myIndex < total_rows) {\n    //   if(myIndex == 0){ myIndex = 1; }\n    //   $(\"#group_combo_table_body tr.combo-table-row\").eq(myIndex-1).after(row_html);\n    // } else {\n    //   $(\"#group_combo_table_body\").append(row_html);\n    // }\n    if (!document.bg_multi_combiner_running) {\n      doPostComboLoadingInit();\n    }\n\n    document.loading_combo_list[combo_id] = \"completed\";\n    if (myNetworkCheckIndex !== undefined && document.addComboNetworkCheck[myNetworkCheckIndex]) {\n      document.addComboNetworkCheck[myNetworkCheckIndex] = -1;\n    }\n  }\n\n  window.createComboRowHTML = function(combo_id, combo_option_names, index_list, ret_data) {\n    var row_html = '<tr class=\"combo-table-row allow-sort\" id=\"combo-row-' + combo_id + '\">';\n    row_html += createComboRowHTMLCells(combo_id, combo_option_names, index_list, ret_data);\n    row_html += '</tr>';\n    return row_html;\n  }\n\n  window.createComboRowDOM = function(combo_id, combo_option_names, index_list, ret_data) {\n    var cell_html = createComboRowHTMLCells(combo_id, combo_option_names, index_list, ret_data);\n    // var row_html = '<tr class=\"combo-table-row allow-sort\" id=\"combo-row-' + combo_id + '\">';\n    var row_dom = document.createElement(\"tr\");\n    row_dom.className = \"combo-table-row allow-sort\";\n    row_dom.id = 'combo-row-' + combo_id + '';\n    row_dom.innerHTML = cell_html;\n    return row_dom;\n  }\n\n  window.createComboRowHTMLCells = function(combo_id, combo_option_names, index_list, ret_data) {\n    var row_html = '<td align=\"center\" valign=\"center\" style=\"vertical-align: inherit;\">';\n    row_html += '  <em class=\"fa fa-arrows\" style=\"font-size:20px;color:#cccccc;\"></em>';\n    row_html += '</td>';\n    row_html += '<td>';\n    row_html += '<span id=\"display_combo_text_all_' + combo_id + '\">' + combo_option_names.join(\", \") + '</span>';\n    if (index_list.length > 1) {\n      row_html += ' <a href=\"\" class=\"change-display-order-options-single btn btn-sm btn-success\" style=\"padding: 0px 4px;\" data-combo_id=\"' + combo_id + '\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Change display order of options\"><em class=\"fa fa-arrows-h text-white\" style=\"\"></em></a>';\n    }\n    row_html += '</td>';\n    row_html += '<td align=\"center\">';\n    row_html += ret_data.sample_size;\n    row_html += '</td>';\n    row_html += '<td align=\"center\">';\n    if (ret_data.sample_too_small) {\n      row_html += ret_data.sample_too_small;\n    } else {\n      row_html += parseFloat(ret_data.average_total).toFixed(2);\n    }\n    row_html += '</td>';\n    row_html += '<td align=\"center\" width=\"35\">';\n    row_html += '<a href=\"\" data-combo_id=\"' + combo_id + '\" class=\"btn btn-sm btn-danger remove-combo-btn\"><span class=\"fa fa-times\" aria-hidden=\"true\"></span><span class=\"sr-only\">Remove Combination</span></a>';\n    row_html += '</td>';\n    return row_html;\n  }\n\n  window.doPostComboLoadingInit = function() {\n    // Enable sort on table rows\n    // console.log(\"doPostComboLoadingInit:1\");\n    // Do not allow sorting if there are 1500 or more rows -- will lock up most browsers\n    if ($(\"#group_combo_table_body tr\").length < 1500) {\n      $(\"#group_combo_table_body\").sortable({\n        update: function (event, ui) {\n          var combo_id_order = [];\n          $('#group_combo_table_body tr.allow-sort').each(function (idx) {\n            var item_id = $(this).attr(\"id\");\n            item_id = item_id.replace(\"combo-row-\", \"\");\n            combo_id_order.push(item_id);\n          });\n          var new_option_group_combinations = {};\n          for (var i = 0; i < combo_id_order.length; i++) {\n            new_option_group_combinations[combo_id_order[i]] = document.option_group_combinations[combo_id_order[i]];\n          }\n          document.option_group_combinations = new_option_group_combinations;\n        },\n        items: 'tr.allow-sort'\n      });\n      // console.log(\"doPostComboLoadingInit:2\");\n      // Do not do the drag and drop cell size fix if there are 500 or more rows\n      if ($(\"#group_combo_table_body tr\").length < 500) {\n        $(\"#group_combo_table_body td\").each(function () {\n          $(this).css(\"width\", $(this).width() + 24); // Width + padding\n        });\n      }\n    } else {\n      // Disable Sorting Icon\n      $(\"#group_combo_table_body .fa-arrows\").hide();\n    }\n    // console.log(\"doPostComboLoadingInit:3\");\n    initTooltips();\n    // console.log(\"doPostComboLoadingInit:4\");\n    if ($(\"#group_combo_table_body tr\").length > 1) {\n      $(\"#data-cleanup-btn\").show();\n    } else {\n      $(\"#data-cleanup-btn\").hide();\n    }\n  }\n\n  window.doMultiCombinerInBackground = function() {\n    var this_interation_count = 0;\n    var this_interation_max = 15;\n    var this_interation_count_nomatch = 0;\n    var this_interation_max_nomatch = 100;\n    var this_timeout_ms = 40;\n    var index_list = document.bg_index_list;\n    var index_list2 = document.bg_index_list2;\n    var index_list3 = document.bg_index_list3;\n    var groups_temp = document.bg_groups_temp;\n    // var document.bg_combos_done_temp = document.bg_document.bg_combos_done_temp;\n    var multi_combiner_size = document.bg_multi_combiner_size;\n\n    if (multi_combiner_size == \"2\" || multi_combiner_size == \"23\") {\n      this_interation_max = this_interation_max * 2;\n      this_timeout_ms = 4;\n    }\n    if (!index_list) {\n      index_list = [];\n    }\n    if (!index_list2) {\n      index_list2 = [];\n    }\n    if (!index_list3) {\n      index_list3 = [];\n    }\n\n    var percent = 0;\n    if (multi_combiner_size == \"2\") {\n      var z1_progress = document.bg_multicombine_z1 / index_list.length;\n      var z2_progress = document.bg_multicombine_z2 / (index_list.length * index_list2.length);\n      percent = ((z1_progress + z2_progress) * 100).toFixed(0);\n    } else if (multi_combiner_size == \"3\") {\n      var z1_progress = document.bg_multicombine_z1 / index_list.length;\n      var z2_progress = document.bg_multicombine_z2 / (index_list.length * index_list2.length);\n      var z3_progress = document.bg_multicombine_z3 / (index_list.length * index_list2.length * index_list3.length);\n      percent = ((z1_progress + z2_progress + z3_progress) * 100).toFixed(0);\n    }\n    if (percent > 0) {\n      $(\"#adv_report_multi_tool_inprogress_percent_loaded\").html(percent + \"%\");\n    }\n\n    var z2_start = document.bg_multicombine_z2;\n    var z3_start = document.bg_multicombine_z3;\n\n    for (var z = document.bg_multicombine_z1; z < index_list.length; z++) {\n      var i = index_list[z];\n      var my_uid = document.selected_option_groups[i].uid;\n      var unique_question_part = my_uid.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n      for (var z2 = z2_start; z2 < index_list2.length; z2++) {\n        var i2 = index_list2[z2];\n        var my_uid2 = document.selected_option_groups[i2].uid;\n        var unique_question_part2 = my_uid2.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n        if (multi_combiner_size == \"2\" || multi_combiner_size == \"23\") {\n          //console.log(\"unique_question_part=\"+unique_question_part+\" != \"+unique_question_part2); //\n\n          if (unique_question_part != unique_question_part2 || (unique_question_part == unique_question_part2 && document.selected_option_groups[i].is_multi && my_uid != my_uid2)) {\n            if (!document.bg_combos_done_temp[my_uid + \":\" + my_uid2] && !document.bg_combos_done_temp[my_uid2 + \":\" + my_uid]) {\n              document.bg_combos_done_temp[my_uid + \":\" + my_uid2] = 1;\n              document.bg_combos_done_temp[my_uid2 + \":\" + my_uid] = 1;\n\n              // $(\".verify-group-combo\").each(function(){\n              //   this.checked = false;\n              // });\n              // $(groups_temp[i]).click();\n              // $(groups_temp[i2]).click();\n              // $(\"#add-combo-btn\").click();\n              // BEGIN -- INSERT WITHOUT EVENTS\n              var index_list_temp = [];\n              var combo_option_names = [];\n\n              var option_group_index = $(groups_temp[i]).data(\"option_group_index\");\n              var option_group_name = $(groups_temp[i]).data(\"option_group_name\");\n              index_list_temp.push(option_group_index);\n              combo_option_names.push('<span class=\"display_option_name_' + option_group_index + '\">' + escapeHtml(option_group_name) + '</span>');\n\n              option_group_index = $(groups_temp[i2]).data(\"option_group_index\");\n              option_group_name = $(groups_temp[i2]).data(\"option_group_name\");\n              index_list_temp.push(option_group_index);\n              combo_option_names.push('<span class=\"display_option_name_' + option_group_index + '\">' + escapeHtml(option_group_name) + '</span>');\n\n              var index_list_for_id = index_list_temp.slice().sort();\n              var combo_id = \"c\" + index_list_for_id.join(\"-\");\n              if (!document.option_group_combinations[combo_id]) {\n                document.option_group_combinations[combo_id] = index_list_temp;\n                // addComboWithoutSampleData(combo_id, combo_option_names, index_list_temp);\n                var load_text = i18n_string(\"advanced_reports.load\", \"(load)\");\n                var ret_data_no_sample = {\n                  sample_size: '<span class=\"data-content-not-loaded-sample\" id=\"data-content-not-loaded-sample-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>',\n                  sample_too_small: '<span class=\"data-content-not-loaded-score\" id=\"data-content-not-loaded-score-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>'\n                };\n                var row_html = createComboRowHTML(combo_id, combo_option_names, index_list_temp, ret_data_no_sample);\n                $(\"#group_combo_table_body\").append(row_html);\n              }\n              // END -- INSERT WITHOUT EVENTS\n\n              this_interation_count++;\n              if (this_interation_count > this_interation_max) {\n                document.bg_multicombine_z3 = 0;\n                document.bg_multicombine_z2 = z2 + 1;\n                document.bg_multicombine_z1 = z;\n                if (document.bg_multicombine_z2 >= index_list2.length) {\n                  document.bg_multicombine_z2 = 0;\n                  document.bg_multicombine_z1 = z + 1;\n                }\n                setTimeout(doMultiCombinerInBackground, this_timeout_ms);\n                return 0;\n              }\n            }\n          }\n        }\n        if (multi_combiner_size == \"3\" || multi_combiner_size == \"23\") {\n          for (var z3 = z3_start; z3 < index_list3.length; z3++) {\n            var i3 = index_list3[z3];\n            var my_uid3 = document.selected_option_groups[i3].uid;\n            var unique_question_part3 = my_uid3.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n            if (multi_combiner_size == \"3\" || multi_combiner_size == \"23\") {\n              // console.log(\"UIDS=\"+my_uid+\":\"+my_uid2+\":\"+my_uid3);\n              if ((unique_question_part != unique_question_part2 && unique_question_part != unique_question_part3 && unique_question_part2 != unique_question_part3)\n                  || (unique_question_part == unique_question_part2 && document.selected_option_groups[i].is_multi && my_uid != my_uid2 && unique_question_part != unique_question_part3 && unique_question_part2 != unique_question_part3)\n                  || (unique_question_part == unique_question_part3 && document.selected_option_groups[i].is_multi && my_uid != my_uid3 && unique_question_part != unique_question_part2 && unique_question_part2 != unique_question_part3)\n                  || (unique_question_part2 == unique_question_part3 && document.selected_option_groups[i2].is_multi && my_uid2 != my_uid3 && unique_question_part != unique_question_part2 && unique_question_part != unique_question_part3)\n              ) {\n                if (!document.bg_combos_done_temp[my_uid + \":\" + my_uid2 + \":\" + my_uid3] &&\n                    !document.bg_combos_done_temp[my_uid + \":\" + my_uid3 + \":\" + my_uid2] &&\n                    !document.bg_combos_done_temp[my_uid2 + \":\" + my_uid + \":\" + my_uid3] &&\n                    !document.bg_combos_done_temp[my_uid2 + \":\" + my_uid3 + \":\" + my_uid] &&\n                    !document.bg_combos_done_temp[my_uid3 + \":\" + my_uid + \":\" + my_uid2] &&\n                    !document.bg_combos_done_temp[my_uid3 + \":\" + my_uid2 + \":\" + my_uid]\n                ) {\n                  document.bg_combos_done_temp[my_uid + \":\" + my_uid2 + \":\" + my_uid3] = 1;\n                  document.bg_combos_done_temp[my_uid + \":\" + my_uid3 + \":\" + my_uid2] = 1;\n                  document.bg_combos_done_temp[my_uid2 + \":\" + my_uid + \":\" + my_uid3] = 1;\n                  document.bg_combos_done_temp[my_uid2 + \":\" + my_uid3 + \":\" + my_uid] = 1;\n                  document.bg_combos_done_temp[my_uid3 + \":\" + my_uid + \":\" + my_uid2] = 1;\n                  document.bg_combos_done_temp[my_uid3 + \":\" + my_uid2 + \":\" + my_uid] = 1;\n\n                  // $(\".verify-group-combo\").each(function(){\n                  //   this.checked = false;\n                  // });\n                  // $(groups_temp[i]).click();\n                  // $(groups_temp[i2]).click();\n                  // $(groups_temp[i3]).click();\n                  // $(\"#add-combo-btn\").click();\n\n                  // BEGIN -- INSERT WITHOUT EVENTS\n                  var index_list_temp = [];\n                  var combo_option_names = [];\n\n                  var option_group_index = $(groups_temp[i]).data(\"option_group_index\");\n                  var option_group_name = $(groups_temp[i]).data(\"option_group_name\");\n                  index_list_temp.push(option_group_index);\n                  combo_option_names.push('<span class=\"display_option_name_' + option_group_index + '\">' + escapeHtml(option_group_name) + '</span>');\n\n                  option_group_index = $(groups_temp[i2]).data(\"option_group_index\");\n                  option_group_name = $(groups_temp[i2]).data(\"option_group_name\");\n                  index_list_temp.push(option_group_index);\n                  combo_option_names.push('<span class=\"display_option_name_' + option_group_index + '\">' + escapeHtml(option_group_name) + '</span>');\n\n                  option_group_index = $(groups_temp[i3]).data(\"option_group_index\");\n                  option_group_name = $(groups_temp[i3]).data(\"option_group_name\");\n                  index_list_temp.push(option_group_index);\n                  combo_option_names.push('<span class=\"display_option_name_' + option_group_index + '\">' + escapeHtml(option_group_name) + '</span>');\n\n                  var index_list_for_id = index_list_temp.slice().sort();\n                  var combo_id = \"c\" + index_list_for_id.join(\"-\");\n                  if (!document.option_group_combinations[combo_id]) {\n                    document.option_group_combinations[combo_id] = index_list_temp;\n                    // addComboWithoutSampleData(combo_id, combo_option_names, index_list_temp);\n                    var load_text = i18n_string(\"advanced_reports.load\", \"(load)\");\n                    var ret_data_no_sample = {\n                      sample_size: '<span class=\"data-content-not-loaded-sample\" id=\"data-content-not-loaded-sample-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>',\n                      sample_too_small: '<span class=\"data-content-not-loaded-score\" id=\"data-content-not-loaded-score-' + combo_id + '\" data-combo_id=\"' + combo_id + '\">Not loaded <a href=\"#\" class=\"data-content-not-loaded-btn\" data-combo_id=\"' + combo_id + '\">'+load_text+'</a></span>'\n                    };\n                    var row_html = createComboRowHTML(combo_id, combo_option_names, index_list_temp, ret_data_no_sample);\n                    $(\"#group_combo_table_body\").append(row_html);\n                  }\n                  // END -- INSERT WITHOUT EVENTS\n\n                  this_interation_count++;\n                  if (this_interation_count > this_interation_max) {\n                    // document.bg_multicombine_z3 = z3+1;\n                    // if(document.bg_multicombine_z3 >= index_list.length){\n                    //   document.bg_multicombine_z3 = 0;\n                    //   z2++;\n                    // }\n                    // document.bg_multicombine_z2 = z2;\n                    // if(document.bg_multicombine_z2 >= index_list.length){\n                    //   document.bg_multicombine_z2 = 0;\n                    //   z++;\n                    // }\n                    // document.bg_multicombine_z1 = z;\n                    document.bg_multicombine_z3 = z3 + 1;\n                    document.bg_multicombine_z2 = z2;\n                    document.bg_multicombine_z1 = z;\n                    if (document.bg_multicombine_z3 >= index_list3.length) {\n                      document.bg_multicombine_z3 = 0;\n                      document.bg_multicombine_z2 = z2 + 1;\n                    }\n                    if (document.bg_multicombine_z2 >= index_list2.length) {\n                      document.bg_multicombine_z2 = 0;\n                      document.bg_multicombine_z1 = z + 1;\n                    }\n                    // console.log(\"z1=\"+document.bg_multicombine_z1+\",z2=\"+document.bg_multicombine_z2+\",z3=\"+document.bg_multicombine_z3+\" / \"+index_list.length);\n\n                    setTimeout(doMultiCombinerInBackground, this_timeout_ms);\n                    return 0;\n                  }\n                }\n              }\n            }\n            this_interation_count_nomatch++;\n            if (this_interation_count_nomatch > this_interation_max_nomatch) {\n              document.bg_multicombine_z3 = z3 + 1;\n              document.bg_multicombine_z2 = z2;\n              document.bg_multicombine_z1 = z;\n              if (document.bg_multicombine_z3 >= index_list3.length) {\n                document.bg_multicombine_z3 = 0;\n                document.bg_multicombine_z2 = z2 + 1;\n              }\n              if (document.bg_multicombine_z2 >= index_list2.length) {\n                document.bg_multicombine_z2 = 0;\n                document.bg_multicombine_z1 = z + 1;\n              }\n              // console.log(\"z1=\"+document.bg_multicombine_z1+\",z2=\"+document.bg_multicombine_z2+\",z3=\"+document.bg_multicombine_z3+\" / \"+index_list.length);\n\n              setTimeout(doMultiCombinerInBackground, this_timeout_ms);\n              return 0;\n            }\n\n          }\n          z3_start = 0;\n        }\n      }\n      z2_start = 0;\n    }\n    // console.log(\"What are the z=\"+z+\",z2=\"+z2+\",z3=\"+z3);\n\n    document.bg_multi_combiner_running = false;\n    doPostComboLoadingInit();\n    return 1;\n  }\n\n  $(document).off(\"click\", \".data-content-not-loaded-btn\").on(\"click\", \".data-content-not-loaded-btn\", function (e) {\n    e.preventDefault();\n    var combo_id = $(this).data(\"combo_id\");\n    updateSampleDataForCombo(combo_id);\n  });\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n//// Combine existing options\n  $(\"#adv-multi-combine-existing-options-confirm\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    $(\"#confirm-auto-combine-modal\").modal(\"hide\");\n    setTimeout(function () {\n      combine_existing_options();\n    }, 20);\n  });\n\n  window.combine_existing_options = function() {\n    var multi_combiner_size = 0;\n    $(\"#adv-multi-combiner-tool-modal #adv-multi-combiner-tool-checkboxes\").hide();\n    $(\"#adv-multi-combiner-tool-modal #adv-multi-combiner-tool-running\").show();\n\n    // Do the combing fun\n    var groups_temp = [];\n    var index_list = [];\n    var index_list2 = [];\n    var index_list3 = [];\n    var index_list_for_question = {};\n    var last_index_number_for_question = 0;\n    var combos_done_temp = {};\n    $(\".verify-group-combo\").each(function () {\n      var group_index = parseInt($(this).data(\"option_group_index\"));\n      if (document.selected_option_groups[group_index] && document.selected_option_groups[group_index].uid) {\n        var my_uid = document.selected_option_groups[group_index].uid;\n        var unique_question_part = my_uid.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n        var indexListNumber = 0;\n        if (index_list_for_question[unique_question_part]) {\n          indexListNumber = index_list_for_question[unique_question_part];\n        } else {\n          last_index_number_for_question++;\n          indexListNumber = last_index_number_for_question;\n          index_list_for_question[unique_question_part] = last_index_number_for_question;\n        }\n        if (indexListNumber == 1) {\n          index_list.push(group_index);\n          multi_combiner_size = \"\"+Math.max(Number(multi_combiner_size), 1);\n        } else if (indexListNumber == 2) {\n          index_list2.push(group_index);\n          multi_combiner_size = \"\"+Math.max(Number(multi_combiner_size), 2);\n        } else if (indexListNumber == 3) {\n          index_list3.push(group_index);\n          multi_combiner_size = \"\"+Math.max(Number(multi_combiner_size), 23);\n        }\n        groups_temp[group_index] = this;\n      }\n    });\n\n    // index_list.get(0) is multi check\n    if (multi_combiner_size == \"1\") {\n      if (document.selected_option_groups[index_list[0]].is_multi) {\n        index_list2 = index_list;\n        multi_combiner_size = 2;\n        //console.log(\"combine_existing_options::1\");\n      }\n    } else if (multi_combiner_size == \"2\") {\n      if (document.selected_option_groups[index_list[0]].is_multi) {\n        index_list3 = index_list2;\n        index_list2 = index_list;\n        multi_combiner_size = \"23\";\n        //console.log(\"combine_existing_options::2\");\n      } else if (document.selected_option_groups[index_list2[0]].is_multi) {\n        index_list3 = index_list2;\n        multi_combiner_size = \"23\";\n        //console.log(\"combine_existing_options::3\");\n      }\n    }\n\n    if (parseInt(multi_combiner_size) < 2) {\n      return;\n    }\n\n    document.bg_multicombine_z1 = 0;\n    document.bg_multicombine_z2 = 0;\n    document.bg_multicombine_z3 = 0;\n    document.bg_index_list = index_list;\n    document.bg_index_list2 = index_list2;\n    document.bg_index_list3 = index_list3;\n    document.bg_groups_temp = groups_temp;\n    document.bg_combos_done_temp = combos_done_temp;\n    document.bg_multi_combiner_size = multi_combiner_size;\n    document.bg_multi_combiner_running = true;\n\n    setTimeout(doMultiCombinerInBackground, 20);\n\n    if ($('#adv-multi-combiner-tool-modal').hasClass('in')) {\n      $(\"#adv-multi-combiner-tool-modal\").modal(\"hide\");\n    }\n    $(\"#adv-editor-container-div\").addClass(\"blur-element\");\n    $(\"#adv_report_multi_tool_inprogress\").show();\n    $(\"#adv-multi-combiner-tool\").addClass(\"disabled\");\n    setTimeout(waitForCombosToFinishForMultiCombiner, 1000);\n  }\n\n  window.checkIfAutoCombineCanRun = function() {\n    var have_multi_question = false;\n    var quest_list = [];\n    $(\".verify-group-combo\").each(function () {\n      var option_group_index = $(this).data(\"option_group_index\");\n      if (document.selected_option_groups[option_group_index] && document.selected_option_groups[option_group_index].uid) {\n        var my_uid = document.selected_option_groups[option_group_index].uid;\n        var unique_question_part = my_uid.split(\"!\").slice(0, -1).join(\"!\") + \"!\";\n        if (quest_list.indexOf(unique_question_part) == -1) {\n          quest_list.push(unique_question_part);\n        }\n        if (document.selected_option_groups[option_group_index].is_multi) {\n          have_multi_question = true;\n        }\n      }\n    });\n    // Can at-most have 3 questions -- if a question is a multi-select it counts as two :)\n    var can_autocombine = false;\n    if (quest_list.length == 1 && have_multi_question) {\n      can_autocombine = true;\n    } else if (quest_list.length == 2) {\n      can_autocombine = true;\n    } else if (quest_list.length == 3 && !have_multi_question) {\n      can_autocombine = true;\n    }\n\n    if (can_autocombine) {\n      $(\"#adv-multi-combine-existing-options\").removeClass(\"disabled\");\n    } else {\n      $(\"#adv-multi-combine-existing-options\").addClass(\"disabled\");\n    }\n  }\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Combination cleanup code ////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n  document.nextCleanupRow = 0;\n  document.cleanupSizeRequirement = 0;\n  document.cleanRowCount = 0;\n  document.processCombinationCleanupTimeout = undefined;\n  $(\"#data-cleanup-start-btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n    document.cleanupSizeRequirement = parseInt($(\"#combination-size-requirement\").val());\n    document.nextCleanupRow = $('#group_combo_table_body tr.combo-table-row:visible').length;\n    document.cleanRowCount = document.nextCleanupRow;\n    // close modal\n    $(\"#data-cleanup-modal\").modal(\"hide\");\n    // show processing overlay\n    $(\"#adv-editor-container-div\").addClass(\"blur-element\");\n    $(\"#adv_report_multi_tool_inprogress\").show();\n    $(\"#adv_report_multi_tool_cancel_btn\").show();\n    // setTimeout - runs in the background\n    document.processCombinationCleanupTimeout = setTimeout(processCombinationCleanup, 50);\n    setTimeout(centerInProgressLoader, 100);\n  });\n  $(\"#adv_report_multi_tool_cancel_btn\").off(\"click\").on(\"click\", function (e) {\n    e.preventDefault();\n\n    if (document.processCombinationCleanupTimeout) {\n      clearTimeout(document.processCombinationCleanupTimeout);\n      document.nextCleanupRow = 0;\n      document.cleanRowCount = 0;\n      $(\"#adv-editor-container-div\").removeClass(\"blur-element\");\n      $(\"#adv_report_multi_tool_inprogress\").hide();\n      $(\"#adv_report_multi_tool_cancel_btn\").hide();\n    }\n  });\n\n  window.processCombinationCleanup = function() {\n    if (document.nextCleanupRow > 0) {\n\n      // Update progress display - div id= adv_report_multi_tool_inprogress_percent_loaded\n      var progressString = \"Checking \" + (document.cleanRowCount - document.nextCleanupRow + 1) + \"/\" + document.cleanRowCount;\n      $(\"#adv_report_multi_tool_inprogress_percent_loaded\").html(progressString);\n\n      $row = $('#group_combo_table_body tr.combo-table-row:visible').eq(document.nextCleanupRow - 1); // :nth-child('+document.nextCleanupRow+')\n      if ($row.length) {\n        var $buttonCheck = $row.find(\".data-content-not-loaded-btn\");\n        if ($buttonCheck.length) {\n          if (!$buttonCheck.data(\"cleanup_sample_lookup\")) {\n            $buttonCheck.data(\"cleanup_sample_lookup\", \"yes\");\n            $buttonCheck.click();\n            document.processCombinationCleanupTimeout = setTimeout(processCombinationCleanup, 1000);\n          } else {\n            // Still waiting for the processing\n            document.processCombinationCleanupTimeout = setTimeout(processCombinationCleanup, 700);\n          }\n        } else {\n          // Get value from cell and filter\n          var rowSampleSize = parseInt($row.find(\"td:nth-child(3)\").html());\n          if (rowSampleSize < document.cleanupSizeRequirement) {\n            $row.find(\".remove-combo-btn\").click();\n          }\n          document.nextCleanupRow--;\n          document.processCombinationCleanupTimeout = setTimeout(processCombinationCleanup, 200);\n        }\n\n      }\n    } else {\n      // Cleanup -- done processing\n      $(\"#adv-editor-container-div\").removeClass(\"blur-element\");\n      $(\"#adv_report_multi_tool_inprogress\").hide();\n      $(\"#adv_report_multi_tool_cancel_btn\").hide();\n    }\n  }\n\n// To recenter the progress bar on the page.  The progress animation would not be visible otherwise when doing combine-all or cleanup\n  window.centerInProgressLoader = function() {\n    if ($(\"#adv_report_multi_tool_inprogress:visible\").length) {\n      var parent = window;//$(\"#adv_report_multi_tool_inprogress\");\n\n      var loaderObj = $(\"#adv_report_multi_tool_inprogress\").find(\".loader\");\n      var topOffset = $(\"#adv_report_multi_tool_inprogress\").offset().top;\n      var newPostion = $(parent).height() / 2 + $(parent).scrollTop() - topOffset - 90 - 50; // 90 is half the width of the circle thing - 50 is to bump it up a little\n\n      newPostion = Math.max(newPostion, 100);\n      loaderObj.css({\n        \"margin-top\": (newPostion + \"px\")\n      });\n    }\n  }\n\n  $(window).scroll(function () {\n    clearTimeout($.data(this, 'scrollTimer'));\n    $.data(this, 'scrollTimer', setTimeout(function () {\n      centerInProgressLoader();\n    }, 250));\n  });\n\n  // Load saved report\n  loadReportFromHiddenInputs();\n}", "/**\n * \n * Modified by ereynolds@cws.net Nov/Dec 2023\n *      Changed settings to have a \"select none\" option (allows for partial de-selecting of options)\n *      Added \"done\" option to right of dropdown to close the panel\n *      Added _toggleQuestionOptions function to change options that get selected.\n *      Added clearing of search when closing out of the panel\n * Modified by nbittner@cs.net Oct 2024\n *      Added callback to onControlClose function (if defined in options) when the \"done\" button is pressed\n *      \n * \n * Display a nice easy to use multiselect list\n * @Version: 2.4.22\n * @Author: Patrick Springstubbe\n * @Contact: @JediNobleclem\n * @Website: springstubbe.us\n * @Source: https://github.com/nobleclem/jQuery-MultiSelect\n *\n * Usage:\n *     $('select[multiple]').multiselect();\n *     $('select[multiple]').multiselect({ texts: { placeholder: 'Select options' } });\n *     $('select[multiple]').multiselect('reload');\n *     $('select[multiple]').multiselect( 'loadOptions', [{\n *         name   : 'Option Name 1',\n *         value  : 'option-value-1',\n *         checked: false,\n *         attributes : {\n *             custom1: 'value1',\n *             custom2: 'value2'\n *         }\n *     },{\n *         name   : 'Option Name 2',\n *         value  : 'option-value-2',\n *         checked: false,\n *         attributes : {\n *             custom1: 'value1',\n *             custom2: 'value2'\n *         }\n *     }]);\n *\n **/\n(function($){\n    var defaults = {\n        columns: 1,     // how many columns should be use to show options\n        search : false, // include option search box\n\n        // search filter options\n        searchOptions : {\n            delay        : 250,                  // time (in ms) between keystrokes until search happens\n            showOptGroups: false,                // show option group titles if no options remaining\n            searchText   : true,                 // search within the text\n            searchValue  : false,                // search within the value\n            onSearch     : function( element ){} // fires on keyup before search on options happens\n        },\n\n        // plugin texts\n        texts: {\n            placeholder    : 'Select options', // text to use in dummy input\n            search         : 'Search',         // search input placeholder text\n            searchNoResult : 'No results',     // search results not found text\n            selectedOptions: ' selected',      // selected suffix text\n            selectAll      : 'Select all',     // select all text\n            unselectAll    : 'Unselect all',   // unselect all text\n            selectNone     : 'Select none',    // select none text\n            noneSelected   : 'None Selected',  // None selected text\n            done           : 'Done',            // Done button text\n            allSelected    : 'All Options Selected',\n            noOptionsSelected : 'No Options Selected'\n        },\n\n        // general options\n        selectAll              : false, // add select all option\n        selectNone             : false, // add select none option\n        selectGroup            : false, // select entire optgroup\n        minHeight              : 200,   // minimum height of option overlay\n        maxHeight              : null,  // maximum height of option overlay\n        maxWidth               : null,  // maximum width of option overlay (or selector)\n        maxPlaceholderWidth    : null,  // maximum width of placeholder button\n        maxPlaceholderOpts     : 10,    // maximum number of placeholder options to show until \"# selected\" shown instead\n        showCheckbox           : true,  // display the checkbox to the user\n        checkboxAutoFit        : false,  // auto calc checkbox padding\n        optionAttributes       : [],    // attributes to copy to the checkbox from the option element\n        replacePlaceholderText : true, // replace text of placeholder if button is too small\n\n        // Callbacks\n        onLoad        : function( element ){},           // fires at end of list initialization\n        onOptionClick : function( element, option ){},   // fires when an option is clicked\n        onControlOpen : function( element ){},           // fires when the options list is opened\n        onControlClose: function( element ){},           // fires when the options list is closed\n        onSelectAll   : function( element, selected ){}, // fires when (un)select all is clicked\n        onSelectNone  : function( element, selected ){}, // fires when select none is clicked\n        onPlaceholder : function( element, placeholder, selectedOpts ){}, // fires when the placeholder txt is updated\n    };\n\n    var msCounter    = 1; // counter for each select list\n    var msOptCounter = 1; // counter for each option on page\n\n    // FOR LEGACY BROWSERS (talking to you IE8)\n    if( typeof Array.prototype.map !== 'function' ) {\n        Array.prototype.map = function( callback, thisArg ) {\n            if( typeof thisArg === 'undefined' ) {\n                thisArg = this;\n            }\n\n            return $.isArray( thisArg ) ? $.map( thisArg, callback ) : [];\n        };\n    }\n    if( typeof String.prototype.trim !== 'function' ) {\n        String.prototype.trim = function() {\n            return this.replace(/^\\s+|\\s+$/g, '');\n        };\n    }\n\n    function MultiSelect( element, options )\n    {\n        this.element           = element;\n        this.options           = $.extend( true, {}, defaults, options );\n        this.updateSelectAll   = true;\n        this.updatePlaceholder = true;\n        this.listNumber        = msCounter;\n\n        msCounter = msCounter + 1; // increment counter\n\n        /* Make sure its a multiselect list */\n        if( !$(this.element).attr('multiple') ) {\n            throw new Error( '[jQuery-MultiSelect] Select list must be a multiselect list in order to use this plugin' );\n        }\n\n        /* Options validation checks */\n        if( this.options.search ){\n            if( !this.options.searchOptions.searchText && !this.options.searchOptions.searchValue ){\n                throw new Error( '[jQuery-MultiSelect] Either searchText or searchValue should be true.' );\n            }\n        }\n\n        /** BACKWARDS COMPATIBILITY **/\n        if( 'placeholder' in this.options ) {\n            this.options.texts.placeholder = this.options.placeholder;\n            delete this.options.placeholder;\n        }\n        if( 'default' in this.options.searchOptions ) {\n            this.options.texts.search = this.options.searchOptions['default'];\n            delete this.options.searchOptions['default'];\n        }\n        /** END BACKWARDS COMPATIBILITY **/\n\n        // load this instance\n        this.load();\n    }\n\n    MultiSelect.prototype = {\n        /* LOAD CUSTOM MULTISELECT DOM/ACTIONS */\n        load: function() {\n            var instance = this;\n\n            // make sure this is a select list and not loaded\n            if( (instance.element.nodeName != 'SELECT') || $(instance.element).hasClass('jqmsLoaded') ) {\n                return true;\n            }\n\n            // sanity check so we don't double load on a select element\n            $(instance.element).addClass('jqmsLoaded ms-list-'+ instance.listNumber ).data( 'plugin_multiselect-instance', instance );\n\n            // add option container\n            $(instance.element).after('<div id=\"ms-list-'+ instance.listNumber +'\" class=\"ms-options-wrap\"><button type=\"button\"><span>None Selected</span></button><div class=\"ms-options\"><ul></ul></div></div>');\n\n            var placeholder = $(instance.element).siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> button:first-child');\n            var optionsWrap = $(instance.element).siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n            var optionsList = optionsWrap.find('> ul');\n\n            // don't show checkbox (add class for css to hide checkboxes)\n            if( !instance.options.showCheckbox ) {\n                optionsWrap.addClass('hide-checkbox');\n            }\n            else if( instance.options.checkboxAutoFit ) {\n                optionsWrap.addClass('checkbox-autofit');\n            }\n\n            // check if list is disabled\n            if( $(instance.element).prop( 'disabled' ) ) {\n                placeholder.prop( 'disabled', true );\n            }\n\n            // set placeholder maxWidth\n            if( instance.options.maxPlaceholderWidth ) {\n                placeholder.css( 'maxWidth', instance.options.maxPlaceholderWidth );\n            }\n\n            // override with user defined maxHeight\n            if( instance.options.maxHeight ) {\n                var maxHeight = instance.options.maxHeight;\n            }\n            else {\n                // cacl default maxHeight\n                var maxHeight = ($(window).height() - optionsWrap.offset().top + $(window).scrollTop() - 20);\n            }\n\n            // maxHeight cannot be less than options.minHeight\n            maxHeight = maxHeight < instance.options.minHeight ? instance.options.minHeight : maxHeight;\n\n            optionsWrap.css({\n                maxWidth : instance.options.maxWidth,\n                minHeight: instance.options.minHeight,\n                maxHeight: maxHeight,\n            });\n\n            // isolate options scroll\n            // @source: https://github.com/nobleclem/jQuery-IsolatedScroll\n            optionsWrap.on( 'touchmove mousewheel DOMMouseScroll', function ( e ) {\n                if( ($(this).outerHeight() < $(this)[0].scrollHeight) ) {\n                    var e0 = e.originalEvent,\n                        delta = e0.wheelDelta || -e0.detail;\n\n                    if( ($(this).outerHeight() + $(this)[0].scrollTop) > $(this)[0].scrollHeight ) {\n                        e.preventDefault();\n                        this.scrollTop += ( delta < 0 ? 1 : -1 );\n                    }\n                }\n            });\n\n            // hide options menus if click happens off of the list placeholder button\n            $(document).off('click.ms-hideopts').on('click.ms-hideopts', function( event ){\n                if( !$(event.target).closest('.ms-options-wrap').length ) {\n                    $('.ms-options-wrap.ms-active > .ms-options').each(function(){\n\n                        $(this).closest('.ms-options-wrap').removeClass('ms-active');\n                        $(this).children('.ms-search').children('input').val('')\n                        $('.ms-hidden').removeClass('ms-hidden'); // removes hidden from all dropdown options when clicked off the dropdown.\n\n                        var listID = $(this).closest('.ms-options-wrap').attr('id');\n\n                        var thisInst = $(this).parent().siblings('.'+ listID +'.jqmsLoaded').data('plugin_multiselect-instance');\n\n                        // USER CALLBACK\n                        if( typeof thisInst.options.onControlClose == 'function' ) {\n                            thisInst.options.onControlClose( thisInst.element );\n                        }\n                    });\n                }\n            // hide open option lists if escape key pressed\n            }).on('keydown', function( event ){\n                if( (event.keyCode || event.which) == 27 ) { // esc key\n                    $(this).trigger('click.ms-hideopts');\n                }\n            });\n\n            // handle pressing enter|space while tabbing through\n            placeholder.on('keydown', function( event ){\n                var code = (event.keyCode || event.which);\n                if( (code == 13) || (code == 32) ) { // enter OR space\n                    placeholder.trigger( 'mousedown' );\n                }\n            });\n\n            // disable button action\n            placeholder.on( 'mousedown', function( event ){\n                // ignore if its not a left click\n                if( event.which && (event.which != 1) ) {\n                    return true;\n                }\n\n                // hide other menus before showing this one\n                $('.ms-options-wrap.ms-active').each(function(){\n                    if( $(this).siblings( '.'+ $(this).attr('id') +'.jqmsLoaded')[0] != optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded')[0] ) {\n                        $(this).removeClass('ms-active');\n\n                        var thisInst = $(this).siblings( '.'+ $(this).attr('id') +'.jqmsLoaded').data('plugin_multiselect-instance');\n\n                        // USER CALLBACK\n                        if( typeof thisInst.options.onControlClose == 'function' ) {\n                            thisInst.options.onControlClose( thisInst.element );\n                        }\n                    }\n                });\n\n                // show/hide options\n                optionsWrap.closest('.ms-options-wrap').toggleClass('ms-active');\n\n                // recalculate height\n                if( optionsWrap.closest('.ms-options-wrap').hasClass('ms-active') ) {\n                    // USER CALLBACK\n                    if( typeof instance.options.onControlOpen == 'function' ) {\n                        instance.options.onControlOpen( instance.element );\n                    }\n\n                    optionsWrap.css( 'maxHeight', '' );\n\n                    // override with user defined maxHeight\n                    if( instance.options.maxHeight ) {\n                        var maxHeight = instance.options.maxHeight;\n                    }\n                    else {\n                        // cacl default maxHeight\n                        var maxHeight = ($(window).height() - optionsWrap.offset().top + $(window).scrollTop() - 20);\n                    }\n\n                    if( maxHeight ) {\n                        // maxHeight cannot be less than options.minHeight\n                        maxHeight = maxHeight < instance.options.minHeight ? instance.options.minHeight : maxHeight;\n\n                        optionsWrap.css( 'maxHeight', maxHeight );\n                    }\n                }\n                else if( typeof instance.options.onControlClose == 'function' ) {\n                    instance.options.onControlClose( instance.element );\n                }\n            }).click(function( event ){ event.preventDefault(); });\n\n            // add placeholder copy\n            if( instance.options.texts.placeholder ) {\n                placeholder.find('span').text( instance.options.texts.placeholder );\n            }\n\n            // add search box\n            if( instance.options.search ) {\n                optionsList.before('<div class=\"ms-search mb-2\"><input type=\"text\" value=\"\" placeholder=\"'+ instance.options.texts.search +'\" /></div>');\n                optionsList.after('<div class=\"no-result-message\">' + instance.options.texts.searchNoResult + '</div>');\n\n                var search = optionsWrap.find('.ms-search input');\n\n                search.on('keyup', function(){\n                    // ignore keystrokes that don't make a difference\n                    if( $(this).data('lastsearch') == $(this).val() ) {\n                        return true;\n                    }\n\n                    // pause timeout\n                    if( $(this).data('searchTimeout') ) {\n                        clearTimeout( $(this).data('searchTimeout') );\n                    }\n\n                    var thisSearchElem = $(this);\n\n                    $(this).data('searchTimeout', setTimeout(function(){\n                        thisSearchElem.data('lastsearch', thisSearchElem.val() );\n\n                        // USER CALLBACK\n                        if( typeof instance.options.searchOptions.onSearch == 'function' ) {\n                            instance.options.searchOptions.onSearch( instance.element );\n                        }\n\n                        // search non optgroup li's\n                        var searchString = $.trim( search.val().toLowerCase() );\n                        if( searchString ) {\n                            optionsList.find('li[data-search-term*=\"'+ searchString +'\"]:not(.optgroup)').removeClass('ms-hidden');\n                            optionsList.find('li:not([data-search-term*=\"'+ searchString +'\"], .optgroup)').addClass('ms-hidden');\n                        }\n                        else {\n                            optionsList.find('.ms-hidden').removeClass('ms-hidden');\n                        }\n\n                        // show/hide optgroups based on if there are items visible within\n                        if( !instance.options.searchOptions.showOptGroups ) {\n                            optionsList.find('.optgroup').each(function(){\n                                if( $(this).find('li:not(.ms-hidden)').length ) {\n                                    $(this).show();\n                                }\n                                else {\n                                    $(this).hide();\n                                }\n                            });\n                        }\n\n                        // instance._updateSelectAllText();\n                    }, instance.options.searchOptions.delay ));\n                });\n            }\n\n            // add global select all options\n            if( instance.options.selectAll ) {\n                optionsList.before('<a href=\"#\" class=\"ms-selectall global\">' + instance.options.texts.selectAll + '</a>');\n                optionsList.before('<a href=\"#\" class=\"ms-selectnone global\">' + instance.options.texts.selectNone + '</a>');\n                optionsList.before('<a href=\"#\" class=\"ms-done global float-end btn btn-primary btn-sm me-2\">' + instance.options.texts.done + '</a>');\n                optionsList.before('<div class=\"mt-2 d-block\"></div>');\n            }\n\n            // handle select all option\n            optionsWrap.on('click', '.ms-selectall', function( event ){\n                event.preventDefault();\n\n                console.log(event.originalEvent)\n\n                instance.updateSelectAll   = false;\n                instance.updatePlaceholder = false;\n\n                var select = optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded');\n\n                if( $(this).hasClass('global') ) {\n                    // check if any options are not selected if so then select them\n                    optionsList.find('li:not(.optgroup, .selected, .ms-hidden) input[type=\"checkbox\"]:not(:disabled)').closest('li').addClass('selected');\n                    optionsList.find('li.selected input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', true );\n                }\n                else if( $(this).closest('li').hasClass('optgroup') ) {\n                    var optgroup = $(this).closest('li.optgroup');\n\n                    // check if any selected if so then select them\n                    optgroup.find('li:not(.selected, .ms-hidden) input[type=\"checkbox\"]:not(:disabled)').closest('li').addClass('selected');\n                    optgroup.find('li.selected input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', true );\n                }\n\n                var vals = [];\n                optionsList.find('li.selected input[type=\"checkbox\"]').each(function(){\n                    vals.push( $(this).val() );\n                });\n                select.val( vals ).trigger('change');\n\n                // instance.updateSelectAll   = true;\n                instance.updatePlaceholder = true;\n\n                // USER CALLBACK\n                if( typeof instance.options.onSelectAll == 'function' ) {\n                    instance.options.onSelectAll( instance.element, vals.length );\n                }\n\n                // instance._updateSelectAllText();\n                instance._updatePlaceholderText();\n\n                if( event.originalEvent !== undefined ){ \n                    instance._toggleQuestionOptions( instance.element, 'selectAll' )\n                }\n            });\n\n\n            // handle select none options\n            optionsWrap.on('click', '.ms-selectnone', function( event ){\n                event.preventDefault();\n\n                instance.updateSelectAll   = false;\n                instance.updatePlaceholder = false;\n\n                var select = optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded');\n\n                if( $(this).hasClass('global') ) {\n                    optionsList.find('li:not(.optgroup, .ms-hidden).selected input[type=\"checkbox\"]:not(:disabled)').closest('li').removeClass('selected');\n                    optionsList.find('li:not(.optgroup, .ms-hidden, .selected) input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', false );\n                }\n                else if( $(this).closest('li').hasClass('optgroup') ) {\n                    var optgroup = $(this).closest('li.optgroup');\n\n                    optgroup.find('li:not(.ms-hidden).selected input[type=\"checkbox\"]:not(:disabled)').closest('li').removeClass('selected');\n                    optgroup.find('li:not(.ms-hidden, .selected) input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', false );\n                }\n\n                var vals = [];\n                optionsList.find('li.selected input[type=\"checkbox\"]').each(function(){\n                    vals.push( $(this).val() );\n                });\n                select.val( vals ).trigger('change');\n\n                // instance.updateSelectAll   = true;\n                instance.updatePlaceholder = true;\n\n                // USER CALLBACK\n                if( typeof instance.options.onSelectNone == 'function' ) {\n                    instance.options.onSelectNone( instance.element, vals.length );\n                }\n\n                // instance._updateSelectAllText();\n                instance._updatePlaceholderText();\n\n                if( event.originalEvent !== undefined ){ \n                    instance._toggleQuestionOptions( instance.element, 'selectNone' )\n                }\n            });\n\n\n\n            // handle clicking \"done\" button\n            optionsWrap.on('click', '.ms-done', function( event ){\n                event.preventDefault();\n                $(this).closest('.ms-options-wrap').removeClass('ms-active')\n                $(this).siblings('.ms-search').children('input').val('')\n                optionsList.find('.ms-hidden').removeClass('ms-hidden');\n\n                // USER CALLBACK\n                if( typeof instance.options.onControlClose == 'function' ) {\n                    instance.options.onControlClose( instance.element );\n                }\n            });\n\n\n            // add options to wrapper\n            var options = [];\n            $(instance.element).children().each(function(){\n                if( this.nodeName == 'OPTGROUP' ) {\n                    var groupOptions = [];\n\n                    $(this).children('option').each(function(){\n                        var thisOptionAtts = {};\n                        for( var i = 0; i < instance.options.optionAttributes.length; i++ ) {\n                            var thisOptAttr = instance.options.optionAttributes[ i ];\n\n                            if( $(this).attr( thisOptAttr ) !== undefined ) {\n                                thisOptionAtts[ thisOptAttr ] = $(this).attr( thisOptAttr );\n                            }\n                        }\n\n                        groupOptions.push({\n                            name   : $(this).text(),\n                            value  : $(this).val(),\n                            checked: $(this).prop( 'selected' ),\n                            attributes: thisOptionAtts\n                        });\n                    });\n\n                    options.push({\n                        label  : $(this).attr('label'),\n                        options: groupOptions\n                    });\n                }\n                else if( this.nodeName == 'OPTION' ) {\n                    var thisOptionAtts = {};\n                    for( var i = 0; i < instance.options.optionAttributes.length; i++ ) {\n                        var thisOptAttr = instance.options.optionAttributes[ i ];\n\n                        if( $(this).attr( thisOptAttr ) !== undefined ) {\n                            thisOptionAtts[ thisOptAttr ] = $(this).attr( thisOptAttr );\n                        }\n                    }\n\n                    options.push({\n                        name      : $(this).text(),\n                        value     : $(this).val(),\n                        checked   : $(this).prop( 'selected' ),\n                        attributes: thisOptionAtts\n                    });\n                }\n                else {\n                    // bad option\n                    return true;\n                }\n            });\n            instance.loadOptions( options, true, false );\n\n            // BIND SELECT ACTION\n            optionsWrap.on( 'click', 'input[type=\"checkbox\"]', function(){\n                $(this).closest( 'li' ).toggleClass( 'selected' );\n\n                var select = optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded');\n\n                // toggle clicked option\n                select.find('option[value=\"'+ instance._escapeSelector( $(this).val() ) +'\"]').prop(\n                    'selected', $(this).is(':checked')\n                ).closest('select').trigger('change');\n\n                // USER CALLBACK\n                if( typeof instance.options.onOptionClick == 'function' ) {\n                    instance.options.onOptionClick(instance.element, this);\n                }\n\n                // instance._updateSelectAllText();\n                instance._updatePlaceholderText();\n            });\n\n            // BIND FOCUS EVENT\n            optionsWrap.on('focusin', 'input[type=\"checkbox\"]', function(){\n                $(this).closest('label').addClass('focused');\n            }).on('focusout', 'input[type=\"checkbox\"]', function(){\n                $(this).closest('label').removeClass('focused');\n            });\n\n            // USER CALLBACK\n            if( typeof instance.options.onLoad === 'function' ) {\n                instance.options.onLoad( instance.element );\n            }\n\n            // hide native select list\n            $(instance.element).hide();\n        },\n\n        /* LOAD SELECT OPTIONS */\n        loadOptions: function( options, overwrite, updateSelect ) {\n            // console.log( options );\n            overwrite    = (typeof overwrite == 'boolean') ? overwrite : true;\n            updateSelect = (typeof updateSelect == 'boolean') ? updateSelect : true;\n\n            var instance    = this;\n            var select      = $(instance.element);\n            var optionsList = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options > ul');\n            var optionsWrap = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n\n            if( overwrite ) {\n                optionsList.find('> li').remove();\n\n                if( updateSelect ) {\n                    select.find('> *').remove();\n                }\n            }\n\n            var containers = [];\n            for( var key in options ) {\n                // Prevent prototype methods injected into options from being iterated over.\n                if( !options.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                var thisOption      = options[ key ];\n                var container       = $('<li/>');\n                var appendContainer = true;\n\n                // OPTION\n                if( thisOption.hasOwnProperty('value') ) {\n                    if( instance.options.showCheckbox && instance.options.checkboxAutoFit ) {\n                        container.addClass('ms-reflow');\n                    }\n\n                    // add option to ms dropdown\n                    instance._addOption( container, thisOption );\n\n                    if( updateSelect ) {\n                        var selOption = $('<option/>', {\n                            value: thisOption.value,\n                            text : thisOption.name\n                        });\n\n                        // add custom user attributes\n                        if( thisOption.hasOwnProperty('attributes') && Object.keys( thisOption.attributes ).length ) {\n                            selOption.attr( thisOption.attributes );\n                        }\n\n                        // mark option as selected\n                        if( thisOption.checked ) {\n                            selOption.prop( 'selected', true );\n                        }\n\n                        select.append( selOption );\n                    }\n                }\n                // OPTGROUP\n                else if( thisOption.hasOwnProperty('options') ) {\n                    var optGroup = $('<optgroup/>', {\n                        label: thisOption.label\n                    });\n\n                    optionsList.find('> li.optgroup > span.label').each(function(){\n                        if( $(this).text() == thisOption.label ) {\n                            container       = $(this).closest('.optgroup');\n                            appendContainer = false;\n                        }\n                    });\n\n                    // prepare to append optgroup to select element\n                    if( updateSelect ) {\n                        if( select.find('optgroup[label=\"'+ thisOption.label +'\"]').length ) {\n                            optGroup = select.find('optgroup[label=\"'+ thisOption.label +'\"]');\n                        }\n                        else {\n                            select.append( optGroup );\n                        }\n                    }\n\n                    // setup container\n                    if( appendContainer ) {\n                        container.addClass('optgroup');\n                        container.append('<span class=\"label\">'+ thisOption.label +'</span>');\n                        container.find('> .label').css({\n                            clear: 'both'\n                        });\n\n                        // add select all link\n                        if( instance.options.selectGroup ) {\n                            container.append('<a href=\"#\" class=\"ms-selectall\">' + instance.options.texts.selectAll + '</a>');\n                        }\n\n                        container.append('<ul/>');\n                    }\n\n                    for( var gKey in thisOption.options ) {\n                        // Prevent prototype methods injected into options from\n                        // being iterated over.\n                        if( !thisOption.options.hasOwnProperty( gKey ) ) {\n                            continue;\n                        }\n\n                        var thisGOption = thisOption.options[ gKey ];\n                        var gContainer  = $('<li/>');\n                        if( instance.options.showCheckbox && instance.options.checkboxAutoFit ) {\n                            gContainer.addClass('ms-reflow');\n                        }\n\n                        // no clue what this is we hit (skip)\n                        if( !thisGOption.hasOwnProperty('value') ) {\n                            continue;\n                        }\n\n                        instance._addOption( gContainer, thisGOption );\n\n                        container.find('> ul').append( gContainer );\n\n                        // add option to optgroup in select element\n                        if( updateSelect ) {\n                            var selOption = $('<option/>', {\n                                value: thisGOption.value,\n                                text : thisGOption.name\n                            });\n\n                            // add custom user attributes\n                            if( thisGOption.hasOwnProperty('attributes') && Object.keys( thisGOption.attributes ).length ) {\n                                selOption.attr( thisGOption.attributes );\n                            }\n\n                            // mark option as selected\n                            if( thisGOption.checked ) {\n                                selOption.prop( 'selected', true );\n                            }\n\n                            optGroup.append( selOption );\n                        }\n                    }\n                }\n                else {\n                    // no clue what this is we hit (skip)\n                    continue;\n                }\n\n                if( appendContainer ) {\n                    containers.push( container );\n                }\n            }\n            optionsList.append( containers );\n\n            // pad out label for room for the checkbox\n            if( instance.options.checkboxAutoFit && instance.options.showCheckbox && !optionsWrap.hasClass('hide-checkbox') ) {\n                var chkbx = optionsList.find('.ms-reflow:eq(0) input[type=\"checkbox\"]');\n                if( chkbx.length ) {\n                    var checkboxWidth = chkbx.outerWidth();\n                        checkboxWidth = checkboxWidth ? checkboxWidth : 15;\n\n                    optionsList.find('.ms-reflow label').css(\n                        'padding-left',\n                        (parseInt( chkbx.closest('label').css('padding-left') ) * 2) + checkboxWidth\n                    );\n\n                    optionsList.find('.ms-reflow').removeClass('ms-reflow');\n                }\n            }\n\n            // update placeholder text\n            instance._updatePlaceholderText();\n\n            // RESET COLUMN STYLES\n            optionsWrap.find('ul').css({\n                'column-count'        : '',\n                'column-gap'          : '',\n                '-webkit-column-count': '',\n                '-webkit-column-gap'  : '',\n                '-moz-column-count'   : '',\n                '-moz-column-gap'     : ''\n            });\n\n            // COLUMNIZE\n            if( select.find('optgroup').length ) {\n                // float non grouped options\n                optionsList.find('> li:not(.optgroup)').css({\n                    'float': 'left',\n                    width: (100 / instance.options.columns) +'%'\n                });\n\n                // add CSS3 column styles\n                optionsList.find('li.optgroup').css({\n                    clear: 'both'\n                }).find('> ul').css({\n                    'column-count'        : instance.options.columns,\n                    'column-gap'          : 0,\n                    '-webkit-column-count': instance.options.columns,\n                    '-webkit-column-gap'  : 0,\n                    '-moz-column-count'   : instance.options.columns,\n                    '-moz-column-gap'     : 0\n                });\n\n                // for crappy IE versions float grouped options\n                if( this._ieVersion() && (this._ieVersion() < 10) ) {\n                    optionsList.find('li.optgroup > ul > li').css({\n                        'float': 'left',\n                        width: (100 / instance.options.columns) +'%'\n                    });\n                }\n            }\n            else {\n                // add CSS3 column styles\n                optionsList.css({\n                    'column-count'        : instance.options.columns,\n                    'column-gap'          : 0,\n                    '-webkit-column-count': instance.options.columns,\n                    '-webkit-column-gap'  : 0,\n                    '-moz-column-count'   : instance.options.columns,\n                    '-moz-column-gap'     : 0\n                });\n\n                // for crappy IE versions float grouped options\n                if( this._ieVersion() && (this._ieVersion() < 10) ) {\n                    optionsList.find('> li').css({\n                        'float': 'left',\n                        width: (100 / instance.options.columns) +'%'\n                    });\n                }\n            }\n\n            // update un/select all logic\n            // instance._updateSelectAllText();\n        },\n\n        /* UPDATE MULTISELECT CONFIG OPTIONS */\n        settings: function( options ) {\n            this.options = $.extend( true, {}, this.options, options );\n            this.reload();\n        },\n\n        /* RESET THE DOM */\n        unload: function() {\n            $(this.element).siblings('#ms-list-'+ this.listNumber +'.ms-options-wrap').remove();\n            $(this.element).show(function(){\n                $(this).css('display','').removeClass('jqmsLoaded');\n            });\n        },\n\n        /* RELOAD JQ MULTISELECT LIST */\n        reload: function() {\n            // remove existing options\n            $(this.element).siblings('#ms-list-'+ this.listNumber +'.ms-options-wrap').remove();\n            $(this.element).removeClass('jqmsLoaded');\n\n            // load element\n            this.load();\n        },\n\n        // RESET BACK TO DEFAULT VALUES & RELOAD\n        reset: function() {\n            var defaultVals = [];\n            $(this.element).find('option').each(function(){\n                if( $(this).prop('defaultSelected') ) {\n                    defaultVals.push( $(this).val() );\n                }\n            });\n\n            $(this.element).val( defaultVals );\n\n            this.reload();\n        },\n\n        disable: function( status ) {\n            status = (typeof status === 'boolean') ? status : true;\n            $(this.element).prop( 'disabled', status );\n            $(this.element).siblings('#ms-list-'+ this.listNumber +'.ms-options-wrap').find('button:first-child')\n                .prop( 'disabled', status );\n        },\n\n        /** PRIVATE FUNCTIONS **/\n        // update the un/select all texts based on selected options and visibility\n        _updateSelectAllText: function(){\n            if( !this.updateSelectAll ) {\n                return;\n            }\n\n            var instance = this;\n\n            // select all not used at all so just do nothing\n            if( !instance.options.selectAll && !instance.options.selectGroup ) {\n                return;\n            }\n\n            var optionsWrap = $(instance.element).siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n\n            // update un/select all text\n            optionsWrap.find('.ms-selectall').each(function(){\n                var unselected = $(this).parent().find('li:not(.optgroup,.selected,.ms-hidden)');\n\n                $(this).text(\n                    unselected.length ? instance.options.texts.selectAll : instance.options.texts.unselectAll\n                );\n            });\n\n            var shownOptionsCount = optionsWrap.find('> ul li:not(.optgroup,.ms-hidden)').length;\n\n            // show/hide no-results message\n            optionsWrap.find('.no-result-message').toggle( shownOptionsCount ? false : true );\n\n            // show/hide (un)select all element as necessary\n            optionsWrap.find('.ms-selectall.global').toggle( shownOptionsCount ? true : false );\n        },\n\n        // update selected placeholder text\n        _updatePlaceholderText: function(){\n            if( !this.updatePlaceholder ) {\n                return;\n            }\n\n            var instance       = this;\n            var select         = $(instance.element);\n            var selectVals     = select.val() ? select.val() : [];\n            var placeholder    = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> button:first-child');\n            var placeholderTxt = placeholder.find('span');\n            var optionsWrap    = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n            var totalOptions   = select.find('option').length\n\n            // if there are disabled options get those values as well\n            if( select.find('option:selected:disabled').length ) {\n                selectVals = [];\n                select.find('option:selected').each(function(){\n                    selectVals.push( $(this).val() );\n                });\n            }\n\n            \n\n            // get selected options\n            var selOpts = [];\n            for( var key in selectVals ) {\n                // Prevent prototype methods injected into options from being iterated over.\n                if( !selectVals.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                selOpts.push(\n                    $.trim( select.find('option[value=\"'+ instance._escapeSelector( selectVals[ key ] ) +'\"]').text() )\n                );\n\n                if( selOpts.length >= instance.options.maxPlaceholderOpts ) {\n                    break;\n                }\n            }\n\n            // UPDATE PLACEHOLDER TEXT WITH OPTIONS SELECTED\n            placeholderTxt.text( selOpts.join( ', ' ) );\n\n            if( selOpts.length ) {\n                optionsWrap.closest('.ms-options-wrap').addClass('ms-has-selections');\n\n                // USER CALLBACK\n                if( typeof instance.options.onPlaceholder == 'function' ) {\n                    instance.options.onPlaceholder( instance.element, placeholderTxt, selOpts );\n                }\n            }\n            else {\n                optionsWrap.closest('.ms-options-wrap').removeClass('ms-has-selections');\n            }\n\n            // replace placeholder text\n            if( !selOpts.length ) {\n                placeholderTxt.text( instance.options.texts.noOptionsSelected );\n            }\n\n            // if all options are selected\n            else if( selectVals.length == totalOptions ) {\n                placeholderTxt.text( instance.options.texts.allSelected );\n            }\n\n            // if copy is larger than button width use \"# selected\"\n            else if( instance.options.replacePlaceholderText && ((placeholderTxt.width() > placeholder.width()) || (selOpts.length != selectVals.length)) ) {\n                placeholderTxt.text( selectVals.length + instance.options.texts.selectedOptions );\n            }\n        },\n\n        // Add option to the custom dom list\n        _addOption: function( container, option ) {\n            var instance = this;\n            var optionNameText = $('<div/>').html( option.name ).text();\n\n            var thisOption = $('<label/>', {\n                for : 'ms-opt-'+ msOptCounter\n            }).text( optionNameText );\n\n            var thisCheckbox = $('<input>', {\n                type : 'checkbox',\n                title: optionNameText,\n                id   : 'ms-opt-'+ msOptCounter,\n                value: option.value\n            });\n\n            // add user defined attributes\n            if( option.hasOwnProperty('attributes') && Object.keys( option.attributes ).length ) {\n                thisCheckbox.attr( option.attributes );\n            }\n\n            if( option.checked ) {\n                container.addClass('default selected');\n                thisCheckbox.prop( 'checked', true );\n            }\n\n            thisOption.prepend( thisCheckbox );\n\n            var searchTerm = '';\n            if( instance.options.searchOptions.searchText ) {\n                searchTerm += ' ' + optionNameText.toLowerCase();\n            }\n            if( instance.options.searchOptions.searchValue ) {\n                searchTerm += ' ' + option.value.toLowerCase();\n            }\n\n            container.attr( 'data-search-term', $.trim( searchTerm ) ).prepend( thisOption );\n\n            msOptCounter = msOptCounter + 1;\n        },\n\n        // check ie version\n        _ieVersion: function() {\n            var myNav = navigator.userAgent.toLowerCase();\n            return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;\n        },\n\n        // escape selector\n        _escapeSelector: function( string ) {\n            if( typeof $.escapeSelector == 'function' ) {\n                return $.escapeSelector( string );\n            }\n            else {\n                return string.replace(/[!\"#$%&'()*+,.\\/:;<=>?@[\\\\\\]^`{|}~]/g, \"\\\\$&\");\n            }\n        },\n\n        // toggle question options (specifically for campaign manager)\n        _toggleQuestionOptions: function( element, selectOptions ) {\n            if( $('#campaign_id').length){\n                \n                var toggle_id = ''\n                \n                if(element.id == 'option_list_primary') {\n                    toggle_id = '#option_list_secondary'\n                } else if(element.id == 'option_list_secondary' ){\n                    toggle_id = '#option_list_primary'\n                }\n\n            \n                if(selectOptions == 'selectAll') {\n                    $(toggle_id).siblings('.ms-options-wrap').find('.ms-selectnone').click()\n                } \n                else if(selectOptions == 'selectNone') {\n                    $(toggle_id).siblings('.ms-options-wrap').find('.ms-selectall').click()\n                }\n            }\n        }\n    };\n\n    // ENABLE JQUERY PLUGIN FUNCTION\n    $.fn.multiselect = function( options ){\n        if( !this.length ) {\n            return;\n        }\n\n        var args = arguments;\n        var ret;\n\n        // menuize each list\n        if( (options === undefined) || (typeof options === 'object') ) {\n            return this.each(function(){\n                if( !$.data( this, 'plugin_multiselect' ) ) {\n                    $.data( this, 'plugin_multiselect', new MultiSelect( this, options ) );\n                }\n            });\n        } else if( (typeof options === 'string') && (options[0] !== '_') && (options !== 'init') ) {\n            this.each(function(){\n                var instance = $.data( this, 'plugin_multiselect' );\n\n                if( instance instanceof MultiSelect && typeof instance[ options ] === 'function' ) {\n                    ret = instance[ options ].apply( instance, Array.prototype.slice.call( args, 1 ) );\n                }\n\n                // special destruct handler\n                if( options === 'unload' ) {\n                    $.data( this, 'plugin_multiselect', null );\n                }\n            });\n\n            return ret;\n        }\n    };\n}(jQuery));\n", "/**\n * jquery.multisortable.js - v0.2\n * https://github.com/shvetsgroup/jquery.multisortable\n *\n * Author: Ethan Atlakson, Jay Hayes, Gabriel Such, Alexander Shvets\n * Last Revision 3/16/2012\n * multi-selectable, multi-sortable jQuery plugin\n */\n\n!function($) {\n\n\t$.fn.multiselectable = function(options) {\n\t\tif (!options) {\n\t\t\toptions = {}\n\t\t}\n\t\toptions = $.extend({}, $.fn.multiselectable.defaults, options);\n\n\t\tfunction mouseDown(e) {\n\t\t\tvar item = $(this),\n\t\t\t\tparent = item.parent(),\n\t\t\t\tmyIndex = item.index();\n\n\t\t\tvar prev = parent.find('.multiselectable-previous');\n\t\t\t// If no previous selection found, start selecting from first selected item.\n\t\t\tprev = prev.length ? prev : $(parent.find('.' + options.selectedClass)[0]).addClass('multiselectable-previous');\n\t\t\tvar prevIndex = prev.index();\n\n\t\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t\tif (item.hasClass(options.selectedClass)) {\n\t\t\t\t\titem.removeClass(options.selectedClass).removeClass('multiselectable-previous')\n\t\t\t\t\tif (item.not('.child').length) {\n\t\t\t\t\t\titem.nextUntil(':not(.child)').removeClass(options.selectedClass);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tparent.find('.multiselectable-previous').removeClass('multiselectable-previous');\n\t\t\t\t\titem.addClass(options.selectedClass).addClass('multiselectable-previous')\n\t\t\t\t\tif (item.not('.child').length) {\n\t\t\t\t\t\titem.nextUntil(':not(.child)').addClass(options.selectedClass);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (e.shiftKey) {\n\t\t\t\tvar last_shift_range = parent.find('.multiselectable-shift');\n\t\t\t\tlast_shift_range.removeClass(options.selectedClass).removeClass('multiselectable-shift');\n\n\t\t\t\tvar shift_range;\n\t\t\t\tif (prevIndex < myIndex) {\n\t\t\t\t\tshift_range = item.prevUntil('.multiselectable-previous').add(prev).add(item);\n\t\t\t\t}\n\t\t\t\telse if (prevIndex > myIndex) {\n\t\t\t\t\tshift_range = item.nextUntil('.multiselectable-previous').add(prev).add(item);\n\t\t\t\t}\n\t\t\t\tshift_range.addClass(options.selectedClass).addClass('multiselectable-shift');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparent.find('.multiselectable-shift').removeClass('multiselectable-shift');\n\t\t\t}\n\n\t\t\tif (!e.ctrlKey && !e.metaKey && !e.shiftKey) {\n\t\t\t\tparent.find('.multiselectable-previous').removeClass('multiselectable-previous');\n\t\t\t\tif (!item.hasClass(options.selectedClass)) {\n\t\t\t\t\tparent.find('.' + options.selectedClass).removeClass(options.selectedClass);\n\t\t\t\t\titem.addClass(options.selectedClass).addClass('multiselectable-previous');\n\t\t\t\t\tif (item.not('.child').length) {\n\t\t\t\t\t\titem.nextUntil(':not(.child)').addClass(options.selectedClass);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toptions.mousedown(e, item);\n\t\t}\n\n\t\tfunction click(e) {\n\t\t\tif ( $(this).is('.ui-draggable-dragging') ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = $(this),\tparent = item.parent();\n\n\t\t\t// If item wasn't draged and is not multiselected, it should reset selection for other items.\n\t\t\tif (!e.ctrlKey && !e.metaKey && !e.shiftKey) {\n\t\t\t\tparent.find('.multiselectable-previous').removeClass('multiselectable-previous');\n\t\t\t\tparent.find('.' + options.selectedClass).removeClass(options.selectedClass);\n\t\t\t\titem.addClass(options.selectedClass).addClass('multiselectable-previous');\n\t\t\t\tif (item.not('.child').length) {\n\t\t\t\t\titem.nextUntil(':not(.child)').addClass(options.selectedClass);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toptions.click(e, item);\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar list = $(this);\n\n\t\t\tif (!list.data('multiselectable')) {\n\t\t\t\tlist.data('multiselectable', true)\n\t\t\t\t\t.delegate(options.items, 'mousedown', mouseDown)\n\t\t\t\t\t.delegate(options.items, 'click', click)\n\t\t\t\t\t.disableSelection();\n\t\t\t}\n\t\t})\n\t};\n\n\t$.fn.multiselectable.defaults = {\n\t\tclick: function(event, elem) {},\n\t\tmousedown: function(event, elem) {},\n\t\tselectedClass: 'selected',\n\t\titems: 'li'\n\t};\n\n\n\t$.fn.multisortable = function(options) {\n\t\tif (!options) {\n\t\t\toptions = {}\n\t\t}\n\t\tvar settings = $.extend({}, $.fn.multisortable.defaults, options);\n\n\t\tfunction regroup(item, list) {\n\t\t\tif (list.find('.' + settings.selectedClass).length > 0) {\n\t\t\t\tvar myIndex = item.data('i');\n\n\t\t\t\tvar itemsBefore = list.find('.' + settings.selectedClass).filter(function() {\n\t\t\t\t\treturn $(this).data('i') < myIndex\n\t\t\t\t}).css({\n\t\t\t\t\t\tposition: '',\n\t\t\t\t\t\twidth: '',\n\t\t\t\t\t\tleft: '',\n\t\t\t\t\t\ttop: '',\n\t\t\t\t\t\tzIndex: ''\n\t\t\t\t\t});\n\n\t\t\t\titem.before(itemsBefore);\n\n\t\t\t\tvar itemsAfter = list.find('.' + settings.selectedClass).filter(function() {\n\t\t\t\t\treturn $(this).data('i') > myIndex\n\t\t\t\t}).css({\n\t\t\t\t\t\tposition: '',\n\t\t\t\t\t\twidth: '',\n\t\t\t\t\t\tleft: '',\n\t\t\t\t\t\ttop: '',\n\t\t\t\t\t\tzIndex: ''\n\t\t\t\t\t});\n\n\t\t\t\titem.after(itemsAfter);\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\titemsAfter.add(itemsBefore).addClass(settings.selectedClass);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar list = $(this);\n\n\t\t\t//enable multi-selection\n\t\t\tlist.multiselectable({\n\t\t\t\tselectedClass: settings.selectedClass,\n\t\t\t\tclick: settings.click,\n\t\t\t\titems: settings.items,\n\t\t\t\tmousedown: settings.mousedown\n\t\t\t});\n\n\t\t\t//enable sorting\n\t\t\toptions.cancel = settings.items + ':not(.' + settings.selectedClass + ')';\n\t\t\toptions.placeholder = settings.placeholder;\n\t\t\toptions.start = function(event, ui) {\n\t\t\t\tif (ui.item.hasClass(settings.selectedClass)) {\n\t\t\t\t\tvar parent = ui.item.parent();\n\n\t\t\t\t\t//assign indexes to all selected items\n\t\t\t\t\tparent.find('.' + settings.selectedClass).each(function(i) {\n\t\t\t\t\t\t$(this).data('i', i);\n\t\t\t\t\t});\n\n\t\t\t\t\t// adjust placeholder size to be size of items\n\t\t\t\t\tvar height = parent.find('.' + settings.selectedClass).length * ui.item.outerHeight();\n\t\t\t\t\tui.placeholder.height(height);\n\t\t\t\t}\n\n\t\t\t\tsettings.start(event, ui);\n\t\t\t};\n\n\t\t\toptions.stop = function(event, ui) {\n\t\t\t\tregroup(ui.item, ui.item.parent());\n\t\t\t\tsettings.stop(event, ui);\n\t\t\t};\n\n\t\t\toptions.sort = function(event, ui) {\n\t\t\t\tvar parent = ui.item.parent(),\n\t\t\t\t\tmyIndex = ui.item.data('i'),\n\t\t\t\t\ttop = parseInt(ui.item.css('top').replace('px', '')),\n\t\t\t\t\tleft = parseInt(ui.item.css('left').replace('px', ''));\n\n\t\t\t\t// fix to keep compatibility using prototype.js and jquery together\n\t\t\t\t$.fn.reverse = Array.prototype._reverse || Array.prototype.reverse\n\n\t\t\t\tvar height = 0;\n\t\t\t\t$('.' + settings.selectedClass, parent).filter(function() {\n\t\t\t\t\treturn $(this).data('i') < myIndex;\n\t\t\t\t}).reverse().each(function() {\n\t\t\t\t\t\theight += $(this).outerHeight();\n\t\t\t\t\t\t$(this).css({\n\t\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\t\ttop: top - height,\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\tzIndex: 1000,\n\t\t\t\t\t\t\twidth: ui.item.width()\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\n\t\t\t\theight = ui.item.outerHeight();\n\t\t\t\t$('.' + settings.selectedClass, parent).filter(function() {\n\t\t\t\t\treturn $(this).data('i') > myIndex;\n\t\t\t\t}).each(function() {\n\t\t\t\t\t\tvar item = $(this);\n\t\t\t\t\t\titem.css({\n\t\t\t\t\t\t\tleft: left,\n\t\t\t\t\t\t\ttop: top + height,\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\tzIndex: 1000,\n\t\t\t\t\t\t\twidth: ui.item.width()\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\theight += item.outerHeight();\n\t\t\t\t\t});\n\n\t\t\t\tsettings.sort(event, ui);\n\t\t\t};\n\n\t\t\toptions.receive = function(event, ui) {\n\t\t\t\tregroup(ui.item, ui.sender);\n\t\t\t\tsettings.receive(event, ui);\n\t\t\t};\n\n\t\t\tlist.sortable(options).disableSelection();\n\t\t})\n\t};\n\n\t$.fn.multisortable.defaults = {\n\t\tstart: function(event, ui) {},\n\t\tstop: function(event, ui) {},\n\t\tsort: function(event, ui) {},\n\t\treceive: function(event, ui) {},\n\t\tclick: function(event, elem) {},\n\t\tmousedown: function(event, elem) {},\n\t\tselectedClass: 'selected',\n\t\tplaceholder: 'placeholder',\n\t\titems: 'li'\n\t};\n\n}(jQuery);"],
  "mappings": "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G,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,UAChC,WAAW,KA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I,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC3D,IAAI,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC3D,IAAI,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC3D,IAAI,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC3D,IAAI,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC3D,IAAI,QAAQ,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC3D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAAG;AAAA,cAC5D,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,GAA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,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA;AAKtB,qBAAa,iBAAiB,WAAW,KAAK;AAAA,UAC1C;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC7G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAC9G;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAC5G;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAC1G;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAG;AAAA,UAAG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;A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AI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,UACxC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,UACzC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,UACzC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,UACzC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,UACzC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,UACzC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK;AAAA,UACzC,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK;AAAA;AAG9C,mBAAW,wBAAwB,MAAM,KAAK;AAAA,UAC1C,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA,UACpB,WAAW,KAAK,CAAC,GAAG;AAAA;AAGxB,mBAAW,oBAAoB;AAE/B,mBAAW,iBAAiB;AAC5B,mBAAW,yBAAyB;AAGpC,wBAAgB;AAAA,UACZ,YAAY,WAAW,sBAAsB;AACzC,iBAAK,YAAY;AACjB,iBAAK,uBAAuB;AAAA;AAAA,UAEhC,eAAe;AACX,mBAAO,KAAK;AAAA;AAAA,UAEhB,0BAA0B;AACtB,mBAAO,KAAK;AAAA;AAAA;AAYpB,sBAAc;AAAA,UAEV,cAAc;AAAA;AAAA,iBAGP,qBAAqB,QAAQ;AAChC,mBAAO,SAAS,sBAAsB,UAChC,SAAS,sBAAsB,UAC/B,SAAS,sBAAsB,UAC/B,SAAS,sBAAsB;AAAA;AAAA,iBAYlC,OAAO,SAAS,SAAS,QAAQ,MAAM;AAE1C,gBAAI,WAAW,QAAQ;AACvB,kBAAM,kBAAkB,UAAU,QAAQ,AAAc,MAAM,IAAI,iBAAiB,mBAAzC;AAC1C,gBAAI,iBAAiB;AACjB,yBAAW,MAAM,IAAI,iBAAiB,eAAe;AAAA;AAIzD,kBAAM,OAAO,KAAK,WAAW,SAAS;AAGtC,kBAAM,aAAa,IAAI;AAEvB,gBAAI,SAAS,OAAO,QAAS,oBAAmB,QAAQ,+BAA+B,WAAW;AAC9F,oBAAM,MAAM,gBAAgB,yBAAyB;AACrD,kBAAI,QAAQ,QAAW;AACnB,qBAAK,UAAU,KAAK;AAAA;AAAA;AAI5B,iBAAK,eAAe,MAAM;AAG1B,kBAAM,WAAW,IAAI;AACrB,iBAAK,YAAY,SAAS,MAAM,UAAU;AAC1C,gBAAI;AACJ,gBAAI,UAAU,QAAQ,AAAc,MAAM,IAAI,iBAAiB,gBAAzC,QAAsD;AACxE,oBAAM,gBAAgB,OAAO,SAAS,MAAM,IAAI,iBAAiB,YAAY,YAAY;AACzF,wBAAU,UAAU,oBAAoB;AACxC,oBAAM,aAAa,KAAK,oBAAoB,MAAM,YAAY,UAAU;AACxE,kBAAI,CAAC,KAAK,QAAQ,YAAY,SAAS,UAAU;AAC7C,sBAAM,IAAI,gBAAgB;AAAA;AAAA,mBAG7B;AACD,wBAAU,KAAK,iBAAiB,SAAS,MAAM,YAAY;AAAA;AAE/D,kBAAM,oBAAoB,IAAI;AAC9B,8BAAkB,eAAe;AAEjC,kBAAM,aAAa,SAAS,OAAO,OAAO,SAAS,mBAAmB,QAAQ;AAC9E,iBAAK,iBAAiB,YAAY,SAAS,MAAM;AAEjD,8BAAkB,eAAe;AACjC,kBAAM,WAAW,QAAQ,oBAAoB;AAC7C,kBAAM,eAAe,QAAQ,sBAAsB,SAAS;AAE5D,iBAAK,cAAc,cAAc;AAEjC,kBAAM,YAAY,KAAK,sBAAsB,mBAAmB,QAAQ,qBAAqB,cAAc,SAAS;AACpH,kBAAM,SAAS,IAAI;AACnB,mBAAO,WAAW;AAClB,mBAAO,QAAQ;AACf,mBAAO,WAAW;AAElB,kBAAM,YAAY,QAAQ;AAC1B,kBAAM,SAAS,IAAI,WAAW,WAAW;AACzC,kBAAM,cAAc,KAAK,kBAAkB,WAAW,SAAS,SAAS;AACxE,mBAAO,eAAe;AAEtB,uBAAW,YAAY,WAAW,SAAS,SAAS,aAAa;AACjE,mBAAO,UAAU;AACjB,mBAAO;AAAA;AAAA,iBAOJ,iBAAiB,SAAS,MAAM,YAAY,UAAU;AAIzD,kBAAM,wBAAwB,KAAK,oBAAoB,MAAM,YAAY,UAAU,UAAU,oBAAoB;AACjH,kBAAM,qBAAqB,KAAK,cAAc,uBAAuB;AAErE,kBAAM,aAAa,KAAK,oBAAoB,MAAM,YAAY,UAAU;AACxE,mBAAO,KAAK,cAAc,YAAY;AAAA;AAAA,iBAEnC,oBAAoB,MAAM,YAAY,UAAU,SAAS;AAC5D,mBAAO,WAAW,YAAY,KAAK,sBAAsB,WAAW,SAAS;AAAA;AAAA,iBAM1E,oBAAoB,MAAc;AACrC,gBAAI,OAAO,QAAQ,mBAAmB,QAAQ;AAC1C,qBAAO,QAAQ,mBAAmB;AAAA;AAEtC,mBAAO;AAAA;AAAA,iBASJ,WAAW,SAAS,WAAW,MAAM;AACxC,gBAAI,gBAAgB,KAAK,cAAc,YAAY,KAAK,sBAAsB,UAAU;AAEpF,qBAAO,OAAO;AAAA;AAElB,gBAAI,aAAa;AACjB,gBAAI,kBAAkB;AACtB,qBAAS,IAAI,GAAG,SAAS,QAAQ,QAAQ,IAAI,QAAQ,EAAE,GAAG;AACtD,oBAAM,IAAI,QAAQ,OAAO;AACzB,kBAAI,QAAQ,QAAQ,IAAI;AACpB,6BAAa;AAAA,yBAER,KAAK,oBAAoB,EAAE,WAAW,QAAQ,IAAI;AACvD,kCAAkB;AAAA,qBAEjB;AACD,uBAAO,OAAO;AAAA;AAAA;AAGtB,gBAAI,iBAAiB;AACjB,qBAAO,OAAO;AAAA;AAElB,gBAAI,YAAY;AACZ,qBAAO,OAAO;AAAA;AAElB,mBAAO,OAAO;AAAA;AAAA,iBAEX,sBAAsB,SAAS;AAClC,gBAAI;AACJ,gBAAI;AACA,sBAAQ,eAAe,OAAO,SAAS,gBAAgB;AAAA,qBAEpD,SAAP;AACI,qBAAO;AAAA;AAEX,kBAAM,SAAS,MAAM;AACrB,gBAAI,SAAS,MAAM,GAAG;AAClB,qBAAO;AAAA;AAEX,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAChC,oBAAM,QAAQ,MAAM,KAAK;AACzB,kBAAK,SAAQ,OAAQ,QAAQ,QAAU,SAAQ,OAAQ,QAAQ,MAAO;AAClE,uBAAO;AAAA;AAAA;AAGf,mBAAO;AAAA;AAAA,iBAEJ,kBAAkB,MAAM,SAAS,SAAS,QAAQ;AACrD,gBAAI,aAAa,OAAO;AACxB,gBAAI,kBAAkB;AAEtB,qBAAS,cAAc,GAAG,cAAc,OAAO,mBAAmB,eAAe;AAC7E,yBAAW,YAAY,MAAM,SAAS,SAAS,aAAa;AAC5D,kBAAI,UAAU,KAAK,qBAAqB;AACxC,kBAAI,UAAU,YAAY;AACtB,6BAAa;AACb,kCAAkB;AAAA;AAAA;AAG1B,mBAAO;AAAA;AAAA,iBAEJ,cAAc,cAAsB,SAAS;AAChD,qBAAS,aAAa,GAAG,cAAc,IAAI,cAAc;AACrD,oBAAM,UAAU,UAAU,oBAAoB;AAC9C,kBAAI,QAAQ,QAAQ,cAAc,SAAS,UAAU;AACjD,uBAAO;AAAA;AAAA;AAGf,kBAAM,IAAI,gBAAgB;AAAA;AAAA,iBAMvB,QAAQ,cAAsB,SAAS,SAAS;AAGnD,kBAAM,WAAW,QAAQ;AAEzB,kBAAM,WAAW,QAAQ,oBAAoB;AAC7C,kBAAM,aAAa,SAAS;AAE5B,kBAAM,eAAe,WAAW;AAChC,kBAAM,kBAAmB,gBAAe,KAAK;AAC7C,mBAAO,gBAAgB;AAAA;AAAA,iBAKpB,cAAc,cAAsB,MAAM;AAC7C,kBAAM,WAAW,eAAe;AAChC,gBAAI,KAAK,YAAY,UAAU;AAC3B,oBAAM,IAAI,gBAAgB,wCAAwC,KAAK,YAAY,QAC/E;AAAA;AAER,qBAAS,IAAI,GAAG,IAAI,KAAK,KAAK,YAAY,UAAU,EAAE,GAAG;AACrD,mBAAK,UAAU;AAAA;AAInB,kBAAM,oBAAoB,KAAK,YAAY;AAC3C,gBAAI,oBAAoB,GAAG;AACvB,uBAAS,IAAI,mBAAmB,IAAI,GAAG,KAAK;AACxC,qBAAK,UAAU;AAAA;AAAA;AAIvB,kBAAM,kBAAkB,eAAe,KAAK;AAC5C,qBAAS,IAAI,GAAG,IAAI,iBAAiB,EAAE,GAAG;AACtC,mBAAK,WAAY,KAAI,OAAU,IAAI,MAAO,IAAM;AAAA;AAEpD,gBAAI,KAAK,cAAc,UAAU;AAC7B,oBAAM,IAAI,gBAAgB;AAAA;AAAA;AAAA,iBAQ3B,uCAAuC,eAAuB,cAAsB,aAAqB,SAAiB,qBAAqB,mBAAmB;AACrK,gBAAI,WAAW,aAAa;AACxB,oBAAM,IAAI,gBAAgB;AAAA;AAG9B,kBAAM,sBAAsB,gBAAgB;AAE5C,kBAAM,sBAAsB,cAAc;AAE1C,kBAAM,wBAAwB,KAAK,MAAM,gBAAgB;AAEzD,kBAAM,wBAAwB,wBAAwB;AAEtD,kBAAM,uBAAuB,KAAK,MAAM,eAAe;AAEvD,kBAAM,uBAAuB,uBAAuB;AAEpD,kBAAM,qBAAqB,wBAAwB;AAEnD,kBAAM,qBAAqB,wBAAwB;AAGnD,gBAAI,uBAAuB,oBAAoB;AAC3C,oBAAM,IAAI,gBAAgB;AAAA;AAG9B,gBAAI,gBAAgB,sBAAsB,qBAAqB;AAC3D,oBAAM,IAAI,gBAAgB;AAAA;AAG9B,gBAAI,kBACE,wBAAuB,sBACrB,sBACE,wBAAuB,sBACrB,qBAAsB;AAC9B,oBAAM,IAAI,gBAAgB;AAAA;AAE9B,gBAAI,UAAU,qBAAqB;AAC/B,kCAAoB,KAAK;AACzB,gCAAkB,KAAK;AAAA,mBAEtB;AACD,kCAAoB,KAAK;AACzB,gCAAkB,KAAK;AAAA;AAAA;AAAA,iBAOxB,sBAAsB,MAAM,eAAuB,cAAsB,aAAqB;AAEjG,gBAAI,KAAK,qBAAqB,cAAc;AACxC,oBAAM,IAAI,gBAAgB;AAAA;AAI9B,gBAAI,kBAAkB;AACtB,gBAAI,kBAAkB;AACtB,gBAAI,gBAAgB;AAEpB,kBAAM,SAAS,IAAI;AACnB,qBAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AAClC,oBAAM,sBAAsB,IAAI,WAAW;AAC3C,oBAAM,oBAAoB,IAAI,WAAW;AACzC,sBAAQ,uCAAuC,eAAe,cAAc,aAAa,GAAG,qBAAqB;AACjH,oBAAM,OAAO,oBAAoB;AACjC,oBAAM,YAAY,IAAI,WAAW;AACjC,mBAAK,QAAQ,IAAI,iBAAiB,WAAW,GAAG;AAChD,oBAAM,UAAU,QAAQ,gBAAgB,WAAW,kBAAkB;AACrE,qBAAO,KAAK,IAAI,UAAU,WAAW;AACrC,gCAAkB,KAAK,IAAI,iBAAiB;AAC5C,8BAAgB,KAAK,IAAI,eAAe,QAAQ;AAChD,iCAAmB,oBAAoB;AAAA;AAE3C,gBAAI,iBAAiB,iBAAiB;AAClC,oBAAM,IAAI,gBAAgB;AAAA;AAE9B,kBAAM,SAAS,IAAI;AAEnB,qBAAS,IAAI,GAAG,IAAI,iBAAiB,EAAE,GAAG;AACtC,yBAAW,SAAS,QAAQ;AACxB,sBAAM,YAAY,MAAM;AACxB,oBAAI,IAAI,UAAU,QAAQ;AACtB,yBAAO,WAAW,UAAU,IAAI;AAAA;AAAA;AAAA;AAK5C,qBAAS,IAAI,GAAG,IAAI,eAAe,EAAE,GAAG;AACpC,yBAAW,SAAS,QAAQ;AACxB,sBAAM,UAAU,MAAM;AACtB,oBAAI,IAAI,QAAQ,QAAQ;AACpB,yBAAO,WAAW,QAAQ,IAAI;AAAA;AAAA;AAAA;AAI1C,gBAAI,kBAAkB,OAAO,kBAAkB;AAC3C,oBAAM,IAAI,gBAAgB,yBAAyB,gBAAgB,UAC/D,OAAO,mBAAmB;AAAA;AAElC,mBAAO;AAAA;AAAA,iBAEJ,gBAAgB,WAAW,mBAA2B;AACzD,kBAAM,eAAe,UAAU;AAC/B,kBAAM,WAAW,IAAI,WAAW,eAAe;AAC/C,qBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACnC,uBAAS,KAAK,UAAU,KAAK;AAAA;AAEjC,gBAAI,mBAAmB,UAAU,mBAAmB,OAAO,UAAU;AACrE,kBAAM,UAAU,IAAI,WAAW;AAC/B,qBAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AACxC,sBAAQ,KAAiB,SAAS,eAAe;AAAA;AAErD,mBAAO;AAAA;AAAA,iBAKJ,eAAe,MAAM,MAAM;AAC9B,iBAAK,WAAW,KAAK,WAAW;AAAA;AAAA,iBAK7B,iBAAiB,YAAoB,SAAS,MAAM,MAAM;AAC7D,kBAAM,UAAU,KAAK,sBAAsB;AAC3C,gBAAI,cAAe,KAAK,SAAU;AAC9B,oBAAM,IAAI,gBAAgB,aAAa,qBAAuB,OAAK,WAAW;AAAA;AAElF,iBAAK,WAAW,YAAY;AAAA;AAAA,iBAKzB,YAAY,SAAS,MAAM,MAAM,UAAU;AAC9C,oBAAQ;AAAA,mBACC,OAAO;AACR,wBAAQ,mBAAmB,SAAS;AACpC;AAAA,mBACC,OAAO;AACR,wBAAQ,wBAAwB,SAAS;AACzC;AAAA,mBACC,OAAO;AACR,wBAAQ,gBAAgB,SAAS,MAAM;AACvC;AAAA,mBACC,OAAO;AACR,wBAAQ,iBAAiB,SAAS;AAClC;AAAA;AAEA,sBAAM,IAAI,gBAAgB,mBAAmB;AAAA;AAAA;AAAA,iBAGlD,SAAS,iBAAiB;AAC7B,mBAAO,gBAAgB,WAAW,KAAK;AAAA;AAAA,iBAEpC,QAAQ,iBAAiB;AAC5B,kBAAM,KAAK,QAAQ,SAAS;AAC5B,mBAAO,MAAM,KAAK,MAAM;AAAA;AAAA,iBAErB,mBAAmB,SAAS,MAAM;AACrC,kBAAM,SAAS,QAAQ;AACvB,gBAAI,IAAI;AACR,mBAAO,IAAI,QAAQ;AACf,oBAAM,OAAO,QAAQ,SAAS,QAAQ,OAAO;AAC7C,kBAAI,IAAI,IAAI,QAAQ;AAEhB,sBAAM,OAAO,QAAQ,SAAS,QAAQ,OAAO,IAAI;AACjD,sBAAM,OAAO,QAAQ,SAAS,QAAQ,OAAO,IAAI;AACjD,qBAAK,WAAW,OAAO,MAAM,OAAO,KAAK,MAAM;AAC/C,qBAAK;AAAA,yBAEA,IAAI,IAAI,QAAQ;AAErB,sBAAM,OAAO,QAAQ,SAAS,QAAQ,OAAO,IAAI;AACjD,qBAAK,WAAW,OAAO,KAAK,MAAM;AAClC,qBAAK;AAAA,qBAEJ;AAED,qBAAK,WAAW,MAAM;AACtB;AAAA;AAAA;AAAA;AAAA,iBAIL,wBAAwB,SAAS,MAAM;AAC1C,kBAAM,SAAS,QAAQ;AACvB,gBAAI,IAAI;AACR,mBAAO,IAAI,QAAQ;AACf,oBAAM,QAAQ,QAAQ,oBAAoB,QAAQ,WAAW;AAC7D,kBAAI,UAAU,IAAI;AACd,sBAAM,IAAI;AAAA;AAEd,kBAAI,IAAI,IAAI,QAAQ;AAChB,sBAAM,QAAQ,QAAQ,oBAAoB,QAAQ,WAAW,IAAI;AACjE,oBAAI,UAAU,IAAI;AACd,wBAAM,IAAI;AAAA;AAGd,qBAAK,WAAW,QAAQ,KAAK,OAAO;AACpC,qBAAK;AAAA,qBAEJ;AAED,qBAAK,WAAW,OAAO;AACvB;AAAA;AAAA;AAAA;AAAA,iBAIL,gBAAgB,SAAS,MAAM,UAAU;AAC5C,gBAAI;AACJ,gBAAI;AACA,sBAAQ,eAAe,OAAO,SAAS;AAAA,qBAEpC,KAAP;AACI,oBAAM,IAAI,gBAAgB;AAAA;AAE9B,qBAAS,IAAI,GAAG,SAAS,MAAM,QAAQ,MAAM,QAAQ,KAAK;AACtD,oBAAM,IAAI,MAAM;AAChB,mBAAK,WAAW,GAAG;AAAA;AAAA;AAAA,iBAMpB,iBAAiB,SAAS,MAAM;AACnC,gBAAI;AACJ,gBAAI;AACA,sBAAQ,eAAe,OAAO,SAAS,gBAAgB;AAAA,qBAEpD,KAAP;AACI,oBAAM,IAAI,gBAAgB;AAAA;AAE9B,kBAAM,SAAS,MAAM;AACrB,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAChC,oBAAM,QAAQ,MAAM,KAAK;AACzB,oBAAM,QAAQ,MAAM,IAAI,KAAK;AAC7B,oBAAM,OAAS,SAAS,IAAK,aAAc;AAC3C,kBAAI,aAAa;AACjB,kBAAI,QAAQ,SAAU,QAAQ,OAAQ;AAClC,6BAAa,OAAO;AAAA,yBAEf,QAAQ,SAAU,QAAQ,OAAQ;AACvC,6BAAa,OAAO;AAAA;AAExB,kBAAI,eAAe,IAAI;AACnB,sBAAM,IAAI,gBAAgB;AAAA;AAE9B,oBAAM,UAAY,eAAc,KAAK,MAAS,cAAa;AAC3D,mBAAK,WAAW,SAAS;AAAA;AAAA;AAAA,iBAG1B,UAAU,KAAK,MAAM;AACxB,iBAAK,WAAW,OAAO,IAAI,WAAW;AAEtC,iBAAK,WAAW,IAAI,YAAY;AAAA;AAAA;AAIxC,gBAAQ,qBAAqB,WAAW,KAAK;AAAA,UACzC;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAClD;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA;AAEhE,gBAAQ,6BAA6B,gBAAgB,KAAK;AAK1D,qCAA6B;AAAA,UASzB,MAAM,UAAU,OAAO,QAAQ,QAAQ,MAAM;AACzC,gBAAI,SAAS,WAAW,GAAG;AACvB,oBAAM,IAAI,yBAAyB;AAAA;AAKvC,gBAAI,QAAQ,KAAK,SAAS,GAAG;AACzB,oBAAM,IAAI,yBAAyB,yCAAyC,QAAQ,MAAM;AAAA;AAE9F,gBAAI,uBAAuB,qBAAqB;AAChD,gBAAI,YAAY,uBAAuB;AACvC,gBAAI,UAAU,MAAM;AAChB,kBAAI,AAAc,MAAM,IAAI,iBAAiB,sBAAzC,QAA4D;AAC5D,uCAAuB,qBAAqB,WAAW,MAAM,IAAI,iBAAiB,kBAAkB;AAAA;AAExG,kBAAI,AAAc,MAAM,IAAI,iBAAiB,YAAzC,QAAkD;AAClD,4BAAY,OAAO,SAAS,MAAM,IAAI,iBAAiB,QAAQ,YAAY;AAAA;AAAA;AAGnF,kBAAM,OAAO,QAAQ,OAAO,UAAU,sBAAsB;AAC5D,mBAAO,KAAK,aAAa,MAAM,OAAO,QAAQ;AAAA;AAAA,UAKlD,WAAW,kBAAkB,UAAU,OAAO,QAAQ,QAAQ,MAAM;AAChE,gBAAI,OAAO,qBAAqB,UAAU;AACtC,iCAAmB,SAAS,cAAc;AAAA;AAE9C,kBAAM,aAAa,KAAK,MAAM,UAAU,OAAO,QAAQ;AACvD,gBAAI;AACA,+BAAiB,YAAY;AAAA;AAAA,UAMrC,aAAa,MAAM,OAAe,QAAgB,WAAmB;AACjE,kBAAM,QAAQ,KAAK;AACnB,gBAAI,UAAU,MAAM;AAChB,oBAAM,IAAI;AAAA;AAEd,kBAAM,aAAa,MAAM;AACzB,kBAAM,cAAc,MAAM;AAC1B,kBAAM,UAAU,aAAc,YAAY;AAC1C,kBAAM,WAAW,cAAe,YAAY;AAC5C,kBAAM,cAAc,KAAK,IAAI,OAAO;AACpC,kBAAM,eAAe,KAAK,IAAI,QAAQ;AACtC,kBAAM,WAAW,KAAK,IAAI,KAAK,MAAM,cAAc,UAAU,KAAK,MAAM,eAAe;AAKvF,kBAAM,cAAc,KAAK,MAAO,eAAe,aAAa,YAAa;AACzE,kBAAM,aAAa,KAAK,MAAO,gBAAgB,cAAc,YAAa;AAC1E,kBAAM,aAAa,KAAK,iBAAiB,aAAa;AACtD,qBAAS,SAAS,GAAG,UAAU,YAAY,SAAS,aAAa,UAAU,WAAW,UAAU;AAE5F,uBAAS,SAAS,GAAG,UAAU,aAAa,SAAS,YAAY,UAAU,WAAW,UAAU;AAC5F,oBAAI,MAAM,IAAI,QAAQ,YAAY,GAAG;AACjC,wBAAM,iBAAiB,KAAK,qBAAqB,SAAS,SAAS,UAAU;AAC7E,6BAAW,YAAY;AAAA;AAAA;AAAA;AAInC,mBAAO;AAAA;AAAA,UAQX,iBAAiB,GAAG,GAAG;AACnB,kBAAM,aAAa,SAAS,gBAAgB,uBAAuB,QAAQ;AAC3E,uBAAW,eAAe,MAAM,UAAU,EAAE;AAC5C,uBAAW,eAAe,MAAM,SAAS,EAAE;AAC3C,mBAAO;AAAA;AAAA,UAUX,qBAAqB,GAAG,GAAG,GAAG,GAAG;AAC7B,kBAAM,OAAO,SAAS,gBAAgB,uBAAuB,QAAQ;AACrE,iBAAK,eAAe,MAAM,KAAK,EAAE;AACjC,iBAAK,eAAe,MAAM,KAAK,EAAE;AACjC,iBAAK,eAAe,MAAM,UAAU,EAAE;AACtC,iBAAK,eAAe,MAAM,SAAS,EAAE;AACrC,iBAAK,eAAe,MAAM,QAAQ;AAClC,mBAAO;AAAA;AAAA;AAGf,+BAAuB,kBAAkB;AAIzC,+BAAuB,SAAS;AAQhC,2BAAmB;AAAA,UAOf,OAAO,UAAU,SAAQ,OAAe,QAAgB,OAAO;AAC3D,gBAAI,SAAS,WAAW,GAAG;AACvB,oBAAM,IAAI,yBAAyB;AAAA;AAEvC,gBAAI,YAAW,gBAAgB,SAAS;AACpC,oBAAM,IAAI,yBAAyB,sCAAsC;AAAA;AAE7E,gBAAI,QAAQ,KAAK,SAAS,GAAG;AACzB,oBAAM,IAAI,yBAAyB,uCAAuC,SAAS;AAAA;AAEvF,gBAAI,uBAAuB,qBAAqB;AAChD,gBAAI,YAAY,aAAa;AAC7B,gBAAI,UAAU,MAAM;AAChB,kBAAI,AAAc,MAAM,IAAI,iBAAiB,sBAAzC,QAA4D;AAC5D,uCAAuB,qBAAqB,WAAW,MAAM,IAAI,iBAAiB,kBAAkB;AAAA;AAExG,kBAAI,AAAc,MAAM,IAAI,iBAAiB,YAAzC,QAAkD;AAClD,4BAAY,OAAO,SAAS,MAAM,IAAI,iBAAiB,QAAQ,YAAY;AAAA;AAAA;AAGnF,kBAAM,OAAO,QAAQ,OAAO,UAAU,sBAAsB;AAC5D,mBAAO,aAAa,aAAa,MAAM,OAAO,QAAQ;AAAA;AAAA,iBAInD,aAAa,MAAM,OAAe,QAAgB,WAAmB;AACxE,kBAAM,QAAQ,KAAK;AACnB,gBAAI,UAAU,MAAM;AAChB,oBAAM,IAAI;AAAA;AAEd,kBAAM,aAAa,MAAM;AACzB,kBAAM,cAAc,MAAM;AAC1B,kBAAM,UAAU,aAAc,YAAY;AAC1C,kBAAM,WAAW,cAAe,YAAY;AAC5C,kBAAM,cAAc,KAAK,IAAI,OAAO;AACpC,kBAAM,eAAe,KAAK,IAAI,QAAQ;AACtC,kBAAM,WAAW,KAAK,IAAI,KAAK,MAAM,cAAc,UAAU,KAAK,MAAM,eAAe;AAKvF,kBAAM,cAAc,KAAK,MAAO,eAAe,aAAa,YAAa;AACzE,kBAAM,aAAa,KAAK,MAAO,gBAAgB,cAAc,YAAa;AAC1E,kBAAM,SAAS,IAAI,UAAU,aAAa;AAC1C,qBAAS,SAAS,GAAG,UAAU,YAAY,SAAS,aAAa,UAAU,WAAW,UAAU;AAE5F,uBAAS,SAAS,GAAG,UAAU,aAAa,SAAS,YAAY,UAAU,WAAW,UAAU;AAC5F,oBAAI,MAAM,IAAI,QAAQ,YAAY,GAAG;AACjC,yBAAO,UAAU,SAAS,SAAS,UAAU;AAAA;AAAA;AAAA;AAIzD,mBAAO;AAAA;AAAA;AAGf,qBAAa,kBAAkB;AAS/B,gCAAwB;AAAA,UASpB,OAAO,UAAU,SAAQ,OAAe,QAAgB,OAAO;AAC3D,gBAAI;AACJ,oBAAQ;AAAA,mBAaC,gBAAgB;AACjB,yBAAS,IAAI;AACb;AAAA;AA0BA,sBAAM,IAAI,yBAAyB,qCAAqC;AAAA;AAEhF,mBAAO,OAAO,OAAO,UAAU,SAAQ,OAAO,QAAQ;AAAA;AAAA;AA6B9D,+CAAuC,gBAAgB;AAAA,UACnD,YAAY,SAAS,WAAmB,YAAoB,OAAc,MAAa,OAAe,QAAgB,mBAAmB;AACrI,kBAAM,OAAO;AACb,iBAAK,UAAU;AACf,iBAAK,YAAY;AACjB,iBAAK,aAAa;AAClB,iBAAK,OAAO;AACZ,iBAAK,MAAM;AACX,gBAAI,QAAO,QAAQ,aAAa,OAAM,SAAS,YAAY;AACvD,oBAAM,IAAI,yBAAyB;AAAA;AAEvC,gBAAI,mBAAmB;AACnB,mBAAK,kBAAkB,OAAO;AAAA;AAAA;AAAA,UAItC,OAAO,GAAW,KAAK;AACnB,gBAAI,IAAI,KAAK,KAAK,KAAK,aAAa;AAChC,oBAAM,IAAI,yBAAyB,yCAAyC;AAAA;AAEhF,kBAAM,QAAQ,KAAK;AACnB,gBAAI,QAAQ,QAAQ,QAAQ,UAAa,IAAI,SAAS,OAAO;AACzD,oBAAM,IAAI,kBAAkB;AAAA;AAEhC,kBAAM,UAAU,KAAI,KAAK,OAAO,KAAK,YAAY,KAAK;AACtD,mBAAO,UAAU,KAAK,SAAS,SAAQ,KAAK,GAAG;AAC/C,mBAAO;AAAA;AAAA,UAGX,YAAY;AACR,kBAAM,QAAQ,KAAK;AACnB,kBAAM,SAAS,KAAK;AAGpB,gBAAI,UAAU,KAAK,aAAa,WAAW,KAAK,YAAY;AACxD,qBAAO,KAAK;AAAA;AAEhB,kBAAM,OAAO,QAAQ;AACrB,kBAAM,SAAS,IAAI,kBAAkB;AACrC,gBAAI,cAAc,KAAK,MAAM,KAAK,YAAY,KAAK;AAEnD,gBAAI,UAAU,KAAK,WAAW;AAC1B,qBAAO,UAAU,KAAK,SAAS,aAAa,QAAQ,GAAG;AACvD,qBAAO;AAAA;AAGX,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,oBAAM,eAAe,IAAI;AACzB,qBAAO,UAAU,KAAK,SAAS,aAAa,QAAQ,cAAc;AAClE,6BAAe,KAAK;AAAA;AAExB,mBAAO;AAAA;AAAA,UAGX,kBAAkB;AACd,mBAAO;AAAA;AAAA,UAGX,KAAK,OAAc,MAAa,OAAe,QAAgB;AAC3D,mBAAO,IAAI,yBAAyB,KAAK,SAAS,KAAK,WAAW,KAAK,YAAY,KAAK,OAAO,OAAM,KAAK,MAAM,MAAK,OAAO,QAAQ;AAAA;AAAA,UAExI,kBAAkB;AACd,kBAAM,QAAQ,KAAK,aAAa,yBAAyB;AACzD,kBAAM,SAAS,KAAK,cAAc,yBAAyB;AAC3D,kBAAM,SAAS,IAAI,WAAW,QAAQ;AACtC,kBAAM,MAAM,KAAK;AACjB,gBAAI,cAAc,KAAK,MAAM,KAAK,YAAY,KAAK;AACnD,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,oBAAM,eAAe,IAAI;AACzB,uBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,sBAAM,OAAO,IAAI,cAAc,IAAI,yBAAyB,0BAA0B;AACtF,uBAAO,eAAe,KAAK,aAAc,OAAO;AAAA;AAEpD,6BAAe,KAAK,YAAY,yBAAyB;AAAA;AAE7D,mBAAO;AAAA;AAAA,UAKX,oBAAoB;AAChB,mBAAO,KAAK,aAAa,yBAAyB;AAAA;AAAA,UAKtD,qBAAqB;AACjB,mBAAO,KAAK,cAAc,yBAAyB;AAAA;AAAA,UAEvD,kBAAkB,OAAe,QAAgB;AAC7C,kBAAM,UAAU,KAAK;AACrB,qBAAS,IAAI,GAAG,WAAW,KAAK,MAAM,KAAK,YAAY,KAAK,MAAM,IAAI,QAAQ,KAAK,YAAY,KAAK,WAAW;AAC3G,oBAAM,SAAS,WAAW,QAAQ;AAClC,uBAAS,KAAK,UAAU,KAAK,WAAW,QAAQ,GAAG,KAAK,QAAQ,MAAM,MAAM;AACxE,sBAAM,OAAO,QAAQ;AACrB,wBAAQ,MAAM,QAAQ;AACtB,wBAAQ,MAAM;AAAA;AAAA;AAAA;AAAA,UAI1B,SAAS;AACL,mBAAO,IAAI,wBAAwB;AAAA;AAAA;AAG3C,iCAAyB,yBAAyB;AAwBlD,yCAAiC,gBAAgB;AAAA,UAC7C,YAAY,YAAY,OAAe,QAAgB,WAAmB,YAAoB,OAAc,MAAa;AACrH,kBAAM,OAAO;AACb,iBAAK,YAAY;AACjB,iBAAK,aAAa;AAClB,iBAAK,OAAO;AACZ,iBAAK,MAAM;AACX,gBAAI,WAAW,sBAAsB,GAAG;AACpC,oBAAM,OAAO,QAAQ;AACrB,oBAAM,uBAAuB,IAAI,kBAAkB;AACnD,uBAAS,UAAS,GAAG,UAAS,MAAM,WAAU;AAC1C,sBAAM,QAAQ,WAAW;AACzB,sBAAM,IAAK,SAAS,KAAM;AAC1B,sBAAM,KAAM,SAAS,IAAK;AAC1B,sBAAM,IAAI,QAAQ;AAElB,qCAAqB,WAAwB,KAAI,KAAK,KAAK,IAAK;AAAA;AAEpE,mBAAK,aAAa;AAAA,mBAEjB;AACD,mBAAK,aAAa;AAAA;AAEtB,gBAAI,AAAc,cAAd,QAAyB;AACzB,mBAAK,YAAY;AAAA;AAErB,gBAAI,AAAc,eAAd,QAA0B;AAC1B,mBAAK,aAAa;AAAA;AAEtB,gBAAI,AAAc,UAAd,QAAoB;AACpB,mBAAK,OAAO;AAAA;AAEhB,gBAAI,AAAc,SAAd,QAAmB;AACnB,mBAAK,MAAM;AAAA;AAEf,gBAAI,KAAK,OAAO,QAAQ,KAAK,aAAa,KAAK,MAAM,SAAS,KAAK,YAAY;AAC3E,oBAAM,IAAI,yBAAyB;AAAA;AAAA;AAAA,UAI3C,OAAO,GAAW,KAAK;AACnB,gBAAI,IAAI,KAAK,KAAK,KAAK,aAAa;AAChC,oBAAM,IAAI,yBAAyB,yCAAyC;AAAA;AAEhF,kBAAM,QAAQ,KAAK;AACnB,gBAAI,QAAQ,QAAQ,QAAQ,UAAa,IAAI,SAAS,OAAO;AACzD,oBAAM,IAAI,kBAAkB;AAAA;AAEhC,kBAAM,UAAU,KAAI,KAAK,OAAO,KAAK,YAAY,KAAK;AACtD,mBAAO,UAAU,KAAK,YAAY,SAAQ,KAAK,GAAG;AAClD,mBAAO;AAAA;AAAA,UAGX,YAAY;AACR,kBAAM,QAAQ,KAAK;AACnB,kBAAM,SAAS,KAAK;AAGpB,gBAAI,UAAU,KAAK,aAAa,WAAW,KAAK,YAAY;AACxD,qBAAO,KAAK;AAAA;AAEhB,kBAAM,OAAO,QAAQ;AACrB,kBAAM,SAAS,IAAI,kBAAkB;AACrC,gBAAI,cAAc,KAAK,MAAM,KAAK,YAAY,KAAK;AAEnD,gBAAI,UAAU,KAAK,WAAW;AAC1B,qBAAO,UAAU,KAAK,YAAY,aAAa,QAAQ,GAAG;AAC1D,qBAAO;AAAA;AAGX,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,oBAAM,eAAe,IAAI;AACzB,qBAAO,UAAU,KAAK,YAAY,aAAa,QAAQ,cAAc;AACrE,6BAAe,KAAK;AAAA;AAExB,mBAAO;AAAA;AAAA,UAGX,kBAAkB;AACd,mBAAO;AAAA;AAAA,UAGX,KAAK,OAAc,MAAa,OAAe,QAAgB;AAC3D,mBAAO,IAAI,mBAAmB,KAAK,YAAY,OAAO,QAAQ,KAAK,WAAW,KAAK,YAAY,KAAK,OAAO,OAAM,KAAK,MAAM;AAAA;AAAA,UAEhI,SAAS;AACL,mBAAO,IAAI,wBAAwB;AAAA;AAAA;AAO3C,8BAAsB,gBAAgB;AAAA,iBAC3B,QAAQ,MAAM;AACjB,mBAAO,KAAK,yBAAyB;AAAA;AAAA;AAO7C,+BAAuB;AAAA;AAEvB,yBAAiB,aAAa,gBAAgB;AAsB7B,wBAAgB;AAAA,UAI7B,YAAY;AACR,mBAAO,KAAK;AAAA;AAAA,UAEhB,WAAW,UAAS;AAChB,iBAAK,UAAU;AAAA;AAAA,UAKnB,UAAU;AACN,mBAAO,KAAK;AAAA;AAAA,UAEhB,QAAQ,MAAM;AACV,iBAAK,OAAO;AAAA;AAAA,UAKhB,YAAY;AACR,mBAAO,KAAK;AAAA;AAAA,UAEhB,UAAU,QAAQ;AACd,iBAAK,SAAS;AAAA;AAAA,UAKlB,eAAe;AACX,mBAAO,KAAK;AAAA;AAAA,UAEhB,aAAa,WAAW;AACpB,iBAAK,YAAY;AAAA;AAAA,UAKrB,YAAY;AACR,mBAAO,KAAK;AAAA;AAAA,UAEhB,UAAU,QAAQ;AACd,iBAAK,SAAS;AAAA;AAAA;AAItB,0BAAkB;AAAA,iBAIP,cAAc,MAAM;AACvB,mBAAO,CAAC;AAAA;AAAA,iBAKL,IAAI,YAAY,YAAY;AAC/B,mBAAO,WAAW,KAAK,YAAY;AAAA;AAAA;AAmB3C,oBAAY;AAAA,UACR,YAAY,UAAU;AAClB,iBAAK,WAAW;AAAA;AAAA,UAEpB,cAAc;AACV,mBAAO,KAAK;AAAA;AAAA;AAmBV,kCAA0B,MAAM;AAAA,UACtC,YAAY,UAAU,OAAO,UAAU;AACnC,kBAAM;AACN,iBAAK,QAAQ;AACb,iBAAK,WAAW;AAAA;AAAA,UAKpB,SAAS,UAAU,MAAM;AACrB,qBAAS,WAAW,KAAK,OAAO,KAAK;AAAA;AAAA,UAEzC,IAAI,OAAO,UAAU;AACjB,mBAAO,IAAI,YAAY,MAAM,OAAO;AAAA;AAAA,UAExC,eAAe,QAAO,WAAW;AAE7B,oBAAQ,KAAK;AACb,mBAAO,IAAI,YAAY,MAAM,QAAO;AAAA;AAAA,UAKxC,WAAW;AACP,gBAAI,QAAQ,KAAK,QAAU,MAAK,KAAK,YAAY;AACjD,qBAAS,KAAK,KAAK;AACnB,mBAAO,MAAM,QAAQ,eAAe,QAAS,KAAK,KAAK,UAAW,UAAU,KAAK;AAAA;AAAA;AAmB/E,uCAA+B,YAAY;AAAA,UACjD,YAAY,UAAU,kBAAkB,sBAAsB;AAC1D,kBAAM,UAAU,GAAG;AACnB,iBAAK,mBAAmB;AACxB,iBAAK,uBAAuB;AAAA;AAAA,UAKhC,SAAS,UAAU,MAAM;AACrB,qBAAS,IAAI,GAAG,IAAI,KAAK,sBAAsB,KAAK;AAChD,kBAAI,MAAM,KAAM,MAAM,MAAM,KAAK,wBAAwB,IAAK;AAG1D,yBAAS,WAAW,IAAI;AACxB,oBAAI,KAAK,uBAAuB,IAAI;AAChC,2BAAS,WAAW,KAAK,uBAAuB,IAAI;AAAA,2BAE/C,MAAM,GAAG;AAEd,2BAAS,WAAW,KAAK,IAAI,KAAK,sBAAsB,KAAK;AAAA,uBAE5D;AAED,2BAAS,WAAW,KAAK,uBAAuB,IAAI;AAAA;AAAA;AAG5D,uBAAS,WAAW,KAAK,KAAK,mBAAmB,IAAI;AAAA;AAAA;AAAA,UAG7D,eAAe,QAAO,WAAW;AAE7B,mBAAO,IAAI,iBAAiB,MAAM,QAAO;AAAA;AAAA,UAK7C,WAAW;AACP,mBAAO,MAAM,KAAK,mBAAmB,OAAQ,MAAK,mBAAmB,KAAK,uBAAuB,KAAK;AAAA;AAAA;AAI9G,gCAAwB,OAAO,QAAO,WAAW;AAE7C,iBAAO,IAAI,iBAAiB,OAAO,QAAO;AAAA;AAE9C,sBAAa,OAAO,OAAO,UAAU;AACjC,iBAAO,IAAI,YAAY,OAAO,OAAO;AAAA;AAGzC,cAAgB,aAAa;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAEJ,cAAgB,aAAa;AAC7B,cAAgB,aAAa;AAC7B,cAAgB,aAAa;AAC7B,cAAgB,aAAa;AAC7B,cAAgB,aAAa;AAC7B,cAAM,cAAc,IAAI,YAAY,MAAM,GAAG;AAO7C,cAAM,cAAc;AAAA,UAChB,WAAW,KAAK;AAAA,YACZ;AAAA,YACC,MAAK,MAAM;AAAA,YACX,MAAK,MAAM;AAAA,YACX,MAAK,MAAM;AAAA,YACX,OAAM,MAAO,OAAM,KAAK;AAAA;AAAA,UAE7B,WAAW,KAAK;AAAA,YACX,MAAK,MAAO,OAAM,KAAK;AAAA,YACxB;AAAA,YACC,MAAK,MAAM;AAAA,YACX,MAAK,MAAM;AAAA,YACX,OAAM,MAAO,OAAM,KAAK;AAAA;AAAA,UAE7B,WAAW,KAAK;AAAA,YACX,MAAK,MAAM;AAAA,YACX,MAAK,MAAO,OAAM,KAAK;AAAA,YACxB;AAAA,YACC,MAAK,MAAO,OAAM,KAAK;AAAA,YACvB,OAAM,MAAO,OAAM,MAAO,OAAM,KAAK;AAAA;AAAA,UAG1C,WAAW,KAAK;AAAA,YACX,MAAK,MAAM;AAAA,YACX,MAAK,MAAM;AAAA,YACX,OAAM,MAAO,OAAM,KAAK;AAAA,YACzB;AAAA,YACC,MAAK,MAAM;AAAA;AAAA,UAEhB,WAAW,KAAK;AAAA,YACX,MAAK,MAAM;AAAA,YACX,OAAM,MAAO,OAAM,KAAK;AAAA,YACxB,OAAM,MAAO,OAAM,KAAK;AAAA,YACxB,OAAM,MAAO,OAAM,KAAK;AAAA,YACzB;AAAA;AAAA;AAIR,oCAA4B,cAAa;AACrC,mBAAS,SAAwB,cAAa;AAC1C,mBAAO,KAAK,OAAO;AAAA;AAEvB,uBAAY,YAAY,cAAc;AACtC,uBAAY,YAAY,cAAc;AACtC,uBAAY,YAAY,cAAc;AACtC,uBAAY,YAAY,cAAc;AACtC,uBAAY,YAAY,cAAc;AACtC,uBAAY,YAAY,cAAc;AACtC,iBAAO;AAAA;AAEX,cAAgB,cAAc,mBAAmB,OAAO,iBAAiB,GAAG;AAqBlE,oBAAY;AAAA,UAClB,YAAY,OAAO,MAAM,aAAa,UAAU;AAC5C,iBAAK,QAAQ;AACb,iBAAK,OAAO;AACZ,iBAAK,uBAAuB;AAC5B,iBAAK,WAAW;AAAA;AAAA,UAQpB,UAAU;AACN,mBAAO,KAAK;AAAA;AAAA,UAEhB,WAAW;AACP,mBAAO,KAAK;AAAA;AAAA,UAEhB,0BAA0B;AACtB,mBAAO,KAAK;AAAA;AAAA,UAEhB,cAAc;AACV,mBAAO,KAAK;AAAA;AAAA,UAIhB,eAAe,MAAM,OAAO;AAExB,gBAAI,WAAW,KAAK;AACpB,gBAAI,QAAQ,KAAK;AACjB,gBAAI,SAAS,KAAK,MAAM;AACpB,kBAAI,QAAQ,YAAY,KAAK,MAAM;AACnC,sBAAQ,KAAI,OAAO,QAAQ,OAAQ,SAAS;AAC5C,0BAAY,SAAS;AAAA;AAEzB,gBAAI,oBAAoB,SAAS,aAAa,IAAI;AAClD,oBAAQ,KAAI,OAAO,OAAO;AAC1B,mBAAO,IAAI,MAAM,OAAO,MAAM,GAAG,WAAW;AAAA;AAAA,UAIhD,eAAe,MAAM,OAAO;AAExB,gBAAI,QAAQ,KAAK;AACjB,gBAAI,mBAAmB,KAAK,SAAS,aAAa,IAAI;AAEtD,oBAAQ,KAAI,OAAO,YAAY,KAAK,MAAM,OAAO;AACjD,oBAAQ,KAAI,OAAO,OAAO;AAC1B,mBAAO,IAAI,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK,WAAW,mBAAmB;AAAA;AAAA,UAI7E,mBAAmB,OAAO;AACtB,gBAAI,QAAQ,KAAK;AACjB,gBAAI,OAAO,KAAK;AAChB,gBAAI,WAAW,KAAK;AACpB,gBAAI,KAAK,SAAS,cAAc,KAAK,SAAS,YAAY;AAEtD,kBAAI,QAAQ,YAAY,MAAM;AAC9B,sBAAQ,KAAI,OAAO,QAAQ,OAAQ,SAAS;AAC5C,0BAAY,SAAS;AACrB,qBAAO;AAAA;AAEX,gBAAI,gBAAgB,KAAK,yBAAyB,KAAK,KAAK,yBAAyB,KAC/E,KACA,KAAK,yBAAyB,KAC1B,IACA;AACV,gBAAI,SAAS,IAAI,MAAM,OAAO,MAAM,KAAK,uBAAuB,GAAG,WAAW;AAC9E,gBAAI,OAAO,yBAAyB,OAAO,IAAI;AAE3C,uBAAS,OAAO,eAAe,QAAQ;AAAA;AAE3C,mBAAO;AAAA;AAAA,UAIX,eAAe,OAAO;AAClB,gBAAI,KAAK,yBAAyB,GAAG;AACjC,qBAAO;AAAA;AAEX,gBAAI,QAAQ,KAAK;AACjB,oBAAQ,eAAe,OAAO,QAAQ,KAAK,sBAAsB,KAAK;AAEtE,mBAAO,IAAI,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK;AAAA;AAAA,UAI/C,sBAAsB,OAAO;AACzB,gBAAI,kBAAkB,KAAK,WAAY,aAAY,KAAK,MAAM,MAAM,SAAS;AAC7E,gBAAI,KAAK,uBAAuB,MAAM,sBAAsB;AAExD,iCACI,MAAM,yBAAyB,SAC3B,MAAM,yBAAyB;AAAA,uBAElC,KAAK,uBAAuB,MAAM,wBACvC,MAAM,uBAAuB,GAAG;AAEhC,iCAAmB;AAAA;AAEvB,mBAAO,mBAAmB,MAAM;AAAA;AAAA,UAEpC,WAAW,MAAM;AAGb,gBAAI,UAAU;AACd,qBAAS,QAAQ,KAAK,eAAe,KAAK,QAAQ,OAAO,UAAU,MAAM,QAAQ,MAAM,eAAe;AAClG,sBAAQ,QAAQ;AAAA;AAEpB,gBAAI,WAAW,IAAI;AAEnB,uBAAW,UAAU,SAAS;AAC1B,qBAAO,SAAS,UAAU;AAAA;AAG9B,mBAAO;AAAA;AAAA,UAKX,WAAW;AACP,mBAAO,YAAY,OAAO,uBAAuB,WAAW,KAAK,OAAO,KAAK,UAAU,KAAK;AAAA;AAAA,iBAEzF,yBAAyB,OAAO;AACnC,gBAAI,MAAM,uBAAuB,IAAI;AACjC,qBAAO;AAAA;AAEX,gBAAI,MAAM,uBAAuB,IAAI;AACjC,qBAAO;AAAA;AAEX,gBAAI,MAAM,uBAAuB,GAAG;AAChC,qBAAO;AAAA;AAEX,mBAAO;AAAA;AAAA;AAGf,cAAM,gBAAgB,IAAI,MAAM,aAAa,YAAY,GAAG;AAE5D,iCAAyB,WAAU;AAC/B,gBAAM,gBAAgB,YAAY,YAAY;AAC9C,gBAAM,gBAAgB,YAAY,YAAY;AAC9C,gBAAM,gBAAgB,YAAY,YAAY;AAC9C,oBAAS,YAAY,iBAAiB;AACtC,gBAAM,iBAAiB,YAAY,YAAY;AAC/C,gBAAM,iBAAiB,YAAY,YAAY;AAC/C,mBAAS,IAAI,gBAAgB,KAAK,gBAAgB,KAAK;AACnD,sBAAS,YAAY,KAAK,IAAI,iBAAiB;AAAA;AAEnD,oBAAS,YAAY,iBAAiB;AACtC,gBAAM,iBAAiB,YAAY,YAAY;AAC/C,gBAAM,iBAAiB,YAAY,YAAY;AAC/C,mBAAS,IAAI,gBAAgB,KAAK,gBAAgB,KAAK;AACnD,sBAAS,YAAY,KAAK,IAAI,iBAAiB;AAAA;AAEnD,oBAAS,YAAY,iBAAiB;AACtC,gBAAM,eAAe,YAAY,YAAY;AAC7C,gBAAM,eAAe,YAAY,YAAY;AAC7C,mBAAS,IAAI,cAAc,KAAK,cAAc,KAAK;AAC/C,sBAAS,YAAY,KAAK,IAAI,eAAe;AAAA;AAEjD,oBAAS,YAAY,iBAAiB;AACtC,oBAAS,YAAY,iBAAiB;AACtC,gBAAM,aAAa;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAEJ,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,sBAAS,YAAY,YAAY,YAAY,WAAW,OAAO;AAAA;AAEnE,gBAAM,aAAa;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAEJ,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,gBAAI,YAAY,YAAY,WAAW,MAAM,GAAG;AAC5C,wBAAS,YAAY,YAAY,YAAY,WAAW,OAAO;AAAA;AAAA;AAGvE,iBAAO;AAAA;AAEX,cAAM,WAAW,gBAAgB,OAAO,iBAAiB,GAAG;AA6B3C,+BAAuB;AAAA,UACpC,YAAY,MAAM;AACd,iBAAK,OAAO;AAAA;AAAA,UAKhB,SAAS;AACL,kBAAM,gBAAgB,YAAY,YAAY;AAC9C,kBAAM,oBAAoB,YAAY,YAAY;AAClD,gBAAI,SAAS,YAAY,cAAc,MAAM;AAC7C,qBAAS,QAAQ,GAAG,QAAQ,KAAK,KAAK,QAAQ,SAAS;AACnD,kBAAI;AACJ,kBAAI,WAAW,QAAQ,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,QAAQ,KAAK;AACrE,sBAAQ,KAAK,KAAK;AAAA,qBACT,YAAY,YAAY;AACzB,6BAAW,aAAa,oBAAoB,IAAI;AAChD;AAAA,qBACC,YAAY,YAAY;AACzB,6BAAW,aAAa,gBAAgB,IAAI;AAC5C;AAAA,qBACC,YAAY,YAAY;AACzB,6BAAW,aAAa,gBAAgB,IAAI;AAC5C;AAAA,qBACC,YAAY,YAAY;AACzB,6BAAW,aAAa,gBAAgB,IAAI;AAC5C;AAAA;AAEA,6BAAW;AAAA;AAEnB,kBAAI,WAAW,GAAG;AAGd,yBAAS,iBAAiB,uBAAuB,QAAQ,OAAO;AAChE;AAAA,qBAEC;AAED,yBAAS,KAAK,uBAAuB,QAAQ;AAAA;AAAA;AAIrD,kBAAM,WAAW,YAAY,IAAI,QAAQ,CAAC,GAAG,MAAM;AAC/C,qBAAO,EAAE,gBAAgB,EAAE;AAAA;AAG/B,mBAAO,SAAS,WAAW,KAAK;AAAA;AAAA,UAKpC,uBAAuB,QAAQ,OAAO;AAClC,kBAAM,SAAS;AACf,qBAAS,SAAmB,QAAQ;AAChC,mBAAK,mBAAmB,OAAO,OAAO;AAAA;AAE1C,mBAAO,iBAAiB,eAAe;AAAA;AAAA,UAK3C,mBAAmB,OAAO,OAAO,QAAQ;AACrC,gBAAI,KAAM,KAAK,KAAK,SAAS;AAC7B,gBAAI,qBAAqB,SAAS,MAAM,WAAW,MAAM;AACzD,gBAAI,gBAAgB;AACpB,qBAAS,OAAe,GAAG,QAAQ,YAAY,QAAQ;AACnD,kBAAI,aAAa,SAAS,MAAM;AAChC,kBAAI,aAAa,GAAG;AAChB,oBAAI,iBAAiB,MAAM;AAEvB,kCAAgB,MAAM,eAAe;AAAA;AAGzC,oBAAI,CAAC,sBACD,SAAS,MAAM,aACf,SAAS,YAAY;AAKrB,wBAAM,aAAa,cAAc,eAAe,MAAM;AACtD,yBAAO,KAAK;AAAA;AAGhB,oBAAI,CAAC,sBACD,YAAY,MAAM,WAAW,SAAS,GAAG;AAGzC,wBAAM,aAAa,cAAc,eAAe,MAAM;AACtD,yBAAO,KAAK;AAAA;AAAA;AAAA;AAIxB,gBAAI,MAAM,4BAA4B,KAClC,SAAS,MAAM,WAAW,QAAQ,GAAG;AAIrC,kBAAI,cAAc,MAAM,mBAAmB;AAC3C,qBAAO,KAAK;AAAA;AAAA;AAAA,iBAGb,uBAAuB,QAAQ,OAAO,UAAU;AACnD,kBAAM,SAAS;AACf,qBAAS,SAAmB,QAAQ;AAChC,mBAAK,mBAAmB,OAAO,OAAO,UAAU;AAAA;AAEpD,mBAAO,KAAK,eAAe;AAAA;AAAA,iBAExB,mBAAmB,OAAO,OAAO,UAAU,QAAQ;AACtD,gBAAI,gBAAgB,MAAM,eAAe;AAEzC,mBAAO,KAAK,cAAc,eAAe,YAAY;AACrD,gBAAI,MAAM,cAAc,YAAY;AAGhC,qBAAO,KAAK,cAAc,eAAe,YAAY;AAAA;AAEzD,gBAAI,aAAa,KAAK,aAAa,GAAG;AAElC,kBAAI,aAAa,cACZ,eAAe,YAAY,KAAK,UAChC,eAAe,YAAY;AAChC,qBAAO,KAAK;AAAA;AAEhB,gBAAI,MAAM,4BAA4B,GAAG;AAGrC,kBAAI,cAAc,MACb,mBAAmB,OACnB,mBAAmB,QAAQ;AAChC,qBAAO,KAAK;AAAA;AAAA;AAAA,iBAGb,eAAe,QAAQ;AAC1B,gBAAI,SAAS;AACb,uBAAW,YAAY,QAAQ;AAC3B,kBAAI,OAAM;AACV,yBAAW,YAAY,QAAQ;AAC3B,oBAAI,SAAS,sBAAsB,WAAW;AAC1C,yBAAM;AACN;AAAA;AAEJ,oBAAI,SAAS,sBAAsB,WAAW;AAE1C,2BAAS,OAAO,OAAO,OAAK,MAAM;AAAA;AAAA;AAG1C,kBAAI,MAAK;AACL,uBAAO,KAAK;AAAA;AAAA;AAGpB,mBAAO;AAAA;AAAA;AA6BE,wBAAgB;AAAA,UAC7B,cAAc;AAAA;AAAA,iBAQP,YAAY,MAAM;AACrB,mBAAO,UAAU,OAAO,MAAM,UAAU,oBAAoB,UAAU;AAAA;AAAA,iBAWnE,OAAO,MAAM,eAAe,qBAAqB;AAEpD,gBAAI,OAAO,IAAI,iBAAiB,MAAM;AAEtC,gBAAI,UAAU,QAAQ,cAAe,KAAK,YAAY,eAAgB,OAAO;AAC7E,gBAAI,gBAAgB,KAAK,YAAY;AACrC,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACJ,gBAAI,wBAAwB,UAAU,sBAAsB;AACxD,yBAAU,sBAAsB;AAChC,uBAAS,KAAK,IAAI;AAClB,kBAAI,SAAU,YAAU,UAAU,sBAAsB,UAAU,cAAc;AAC5E,sBAAM,IAAI,yBAAyB,YAAY,OAAO,+BAA+B;AAAA;AAEzF,iCAAmB,UAAU,iBAAiB,QAAQ;AACtD,yBAAW,UAAU,UAAU;AAC/B,kBAAI,qBAAqB,mBAAoB,mBAAmB;AAChE,4BAAc,UAAU,UAAU,MAAM;AACxC,kBAAI,YAAY,YAAY,UAAU,oBAAoB;AACtD,sBAAM,IAAI,yBAAyB;AAAA;AAEvC,kBAAI,YAAW,YAAY,YAAY,WAAW,IAAI;AAElD,sBAAM,IAAI,yBAAyB;AAAA;AAAA,mBAGtC;AACD,yBAAW;AACX,4BAAc;AAId,uBAAS,IAAY,KAAI,KAAK;AAC1B,oBAAI,IAAI,UAAU,aAAa;AAC3B,wBAAM,IAAI,yBAAyB;AAAA;AAEvC,2BAAU,KAAK;AACf,yBAAS,WAAU,IAAI,IAAI;AAC3B,mCAAmB,UAAU,iBAAiB,QAAQ;AACtD,oBAAI,gBAAgB,kBAAkB;AAClC;AAAA;AAIJ,oBAAI,eAAe,QAAQ,aAAa,UAAU,UAAU,SAAS;AACjE,6BAAW,UAAU,UAAU;AAC/B,gCAAc,UAAU,UAAU,MAAM;AAAA;AAE5C,oBAAI,qBAAqB,mBAAoB,mBAAmB;AAChE,oBAAI,YAAW,YAAY,YAAY,WAAW,IAAI;AAElD;AAAA;AAEJ,oBAAI,YAAY,YAAY,WAAW,oBAAoB;AACvD;AAAA;AAAA;AAAA;AAIZ,gBAAI,cAAc,UAAU,mBAAmB,aAAa,kBAAkB;AAE9E,gBAAI,qBAAqB,YAAY,YAAY;AACjD,gBAAI,cAAc,UAAU,oBAAoB,UAAS,QAAQ;AAEjE,gBAAI,iBAAkB,YAAU,KAAK,MAAM,SAAS;AACpD,gBAAI,eAAe,IAAI,WAAW;AAClC,gBAAI;AACJ,gBAAI,UAAS;AAET,2BAAa;AACb,uBAAS,IAAY,GAAG,IAAI,aAAa,QAAQ,KAAK;AAClD,6BAAa,KAAK;AAAA;AAAA,mBAGrB;AACD,2BAAa,iBAAiB,IAAI,IAAI,QAAQ,cAAe,QAAQ,cAAc,gBAAgB,KAAK,GAAI;AAC5G,kBAAI,aAAa,QAAQ,cAAc,gBAAgB;AACvD,kBAAI,SAAS,QAAQ,cAAc,YAAY;AAC/C,uBAAS,IAAY,GAAG,IAAI,YAAY,KAAK;AACzC,oBAAI,YAAY,IAAI,QAAQ,cAAc,GAAG;AAC7C,6BAAa,aAAa,IAAI,KAAK,SAAS,YAAY;AACxD,6BAAa,aAAa,KAAK,SAAS,YAAY;AAAA;AAAA;AAG5D,gBAAI,SAAS,IAAI,UAAU;AAE3B,qBAAS,IAAY,GAAG,YAAY,GAAG,IAAI,QAAQ,KAAK;AACpD,kBAAI,UAAW,UAAS,KAAK,IAAK,YAAU,IAAI;AAChD,uBAAS,IAAY,GAAG,IAAI,SAAS,KAAK;AACtC,oBAAI,eAAe,IAAI;AACvB,yBAAS,IAAY,GAAG,IAAI,GAAG,KAAK;AAChC,sBAAI,YAAY,IAAI,YAAY,eAAe,IAAI;AAC/C,2BAAO,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI;AAAA;AAE7D,sBAAI,YAAY,IAAI,YAAY,UAAU,IAAI,eAAe,IAAI;AAC7D,2BAAO,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,iBAAiB,IAAI,IAAI,IAAI;AAAA;AAElF,sBAAI,YAAY,IAAI,YAAY,UAAU,IAAI,eAAe,IAAI;AAC7D,2BAAO,IAAI,aAAa,iBAAiB,IAAI,IAAI,IAAI,IAAI,aAAa,iBAAiB,IAAI,IAAI,IAAI;AAAA;AAEvG,sBAAI,YAAY,IAAI,YAAY,UAAU,IAAI,eAAe,IAAI;AAC7D,2BAAO,IAAI,aAAa,iBAAiB,IAAI,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI;AAAA;AAAA;AAAA;AAI1F,2BAAa,UAAU;AAAA;AAG3B,sBAAU,gBAAgB,QAAQ,UAAS,YAAY;AAEvD,gBAAI,UAAS;AACT,wBAAU,aAAa,QAAQ,QAAQ,cAAc,YAAY,IAAI;AAAA,mBAEpE;AACD,wBAAU,aAAa,QAAQ,QAAQ,cAAc,YAAY,IAAI;AACrE,uBAAS,IAAY,GAAG,IAAI,GAAG,IAAI,QAAQ,cAAc,gBAAgB,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI;AAC/F,yBAAS,IAAY,QAAQ,cAAc,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,GAAG;AACnF,yBAAO,IAAI,QAAQ,cAAc,YAAY,KAAK,GAAG;AACrD,yBAAO,IAAI,QAAQ,cAAc,YAAY,KAAK,GAAG;AACrD,yBAAO,IAAI,GAAG,QAAQ,cAAc,YAAY,KAAK;AACrD,yBAAO,IAAI,GAAG,QAAQ,cAAc,YAAY,KAAK;AAAA;AAAA;AAAA;AAIjE,gBAAI,QAAQ,IAAI;AAChB,kBAAM,WAAW;AACjB,kBAAM,QAAQ;AACd,kBAAM,UAAU;AAChB,kBAAM,aAAa;AACnB,kBAAM,UAAU;AAChB,mBAAO;AAAA;AAAA,iBAEJ,aAAa,QAAQ,QAAQ,MAAM;AACtC,qBAAS,IAAY,GAAG,IAAI,MAAM,KAAK,GAAG;AACtC,uBAAS,IAAY,SAAS,GAAG,KAAK,SAAS,GAAG,KAAK;AACnD,uBAAO,IAAI,GAAG,SAAS;AACvB,uBAAO,IAAI,GAAG,SAAS;AACvB,uBAAO,IAAI,SAAS,GAAG;AACvB,uBAAO,IAAI,SAAS,GAAG;AAAA;AAAA;AAG/B,mBAAO,IAAI,SAAS,MAAM,SAAS;AACnC,mBAAO,IAAI,SAAS,OAAO,GAAG,SAAS;AACvC,mBAAO,IAAI,SAAS,MAAM,SAAS,OAAO;AAC1C,mBAAO,IAAI,SAAS,MAAM,SAAS;AACnC,mBAAO,IAAI,SAAS,MAAM,SAAS,OAAO;AAC1C,mBAAO,IAAI,SAAS,MAAM,SAAS,OAAO;AAAA;AAAA,iBAEvC,oBAAoB,UAAS,QAAQ,oBAAoB;AAC5D,gBAAI,cAAc,IAAI;AACtB,gBAAI,UAAS;AACT,0BAAY,WAAW,SAAS,GAAG;AACnC,0BAAY,WAAW,qBAAqB,GAAG;AAC/C,4BAAc,UAAU,mBAAmB,aAAa,IAAI;AAAA,mBAE3D;AACD,0BAAY,WAAW,SAAS,GAAG;AACnC,0BAAY,WAAW,qBAAqB,GAAG;AAC/C,4BAAc,UAAU,mBAAmB,aAAa,IAAI;AAAA;AAEhE,mBAAO;AAAA;AAAA,iBAEJ,gBAAgB,QAAQ,UAAS,YAAY,aAAa;AAC7D,gBAAI,SAAS,QAAQ,cAAc,YAAY;AAC/C,gBAAI,UAAS;AACT,uBAAS,IAAY,GAAG,IAAI,GAAG,KAAK;AAChC,oBAAI,UAAS,SAAS,IAAI;AAC1B,oBAAI,YAAY,IAAI,IAAI;AACpB,yBAAO,IAAI,SAAQ,SAAS;AAAA;AAEhC,oBAAI,YAAY,IAAI,IAAI,IAAI;AACxB,yBAAO,IAAI,SAAS,GAAG;AAAA;AAE3B,oBAAI,YAAY,IAAI,KAAK,IAAI;AACzB,yBAAO,IAAI,SAAQ,SAAS;AAAA;AAEhC,oBAAI,YAAY,IAAI,KAAK,IAAI;AACzB,yBAAO,IAAI,SAAS,GAAG;AAAA;AAAA;AAAA,mBAI9B;AACD,uBAAS,IAAY,GAAG,IAAI,IAAI,KAAK;AACjC,oBAAI,UAAS,SAAS,IAAI,IAAI,QAAQ,cAAc,GAAG;AACvD,oBAAI,YAAY,IAAI,IAAI;AACpB,yBAAO,IAAI,SAAQ,SAAS;AAAA;AAEhC,oBAAI,YAAY,IAAI,IAAI,KAAK;AACzB,yBAAO,IAAI,SAAS,GAAG;AAAA;AAE3B,oBAAI,YAAY,IAAI,KAAK,IAAI;AACzB,yBAAO,IAAI,SAAQ,SAAS;AAAA;AAEhC,oBAAI,YAAY,IAAI,KAAK,IAAI;AACzB,yBAAO,IAAI,SAAS,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,iBAKhC,mBAAmB,UAAU,WAAW,UAAU;AAErD,gBAAI,qBAAqB,SAAS,YAAY;AAC9C,gBAAI,KAAK,IAAI,mBAAmB,UAAU,MAAM;AAChD,gBAAI,aAAa,QAAQ,cAAc,WAAW;AAClD,gBAAI,eAAe,UAAU,YAAY,UAAU,UAAU;AAC7D,eAAG,OAAO,cAAc,aAAa;AACrC,gBAAI,WAAW,YAAY;AAC3B,gBAAI,cAAc,IAAI;AACtB,wBAAY,WAAW,GAAG;AAC1B,uBAAW,eAAyB,MAAM,KAAK,eAAe;AAC1D,0BAAY,WAAW,aAAa;AAAA;AAExC,mBAAO;AAAA;AAAA,iBAEJ,YAAY,aAAa,UAAU,YAAY;AAClD,gBAAI,UAAU,IAAI,WAAW;AAC7B,gBAAI;AACJ,gBAAI;AACJ,iBAAK,IAAI,GAAG,IAAI,YAAY,YAAY,UAAU,IAAI,GAAG,KAAK;AAC1D,kBAAI,QAAQ;AACZ,uBAAS,IAAY,GAAG,IAAI,UAAU,KAAK;AACvC,yBAAS,YAAY,IAAI,IAAI,WAAW,KAAM,KAAK,WAAW,IAAI,IAAK;AAAA;AAE3E,sBAAQ,KAAK;AAAA;AAEjB,mBAAO;AAAA;AAAA,iBAEJ,MAAM,UAAU;AACnB,oBAAQ;AAAA,mBACC;AACD,uBAAO,UAAU;AAAA,mBAChB;AACD,uBAAO,UAAU;AAAA,mBAChB;AACD,uBAAO,UAAU;AAAA,mBAChB;AACD,uBAAO,UAAU;AAAA,mBAChB;AACD,uBAAO,UAAU;AAAA;AAEjB,sBAAM,IAAI,yBAAyB,2BAA2B;AAAA;AAAA;AAAA,iBAGnE,UAAU,MAAM,UAAU;AAC7B,gBAAI,MAAM,IAAI;AACd,gBAAI,IAAI,KAAK;AACb,gBAAI,OAAQ,MAAK,YAAY;AAC7B,qBAAS,IAAY,GAAG,IAAI,GAAG,KAAK,UAAU;AAC1C,kBAAI,OAAO;AACX,uBAAS,IAAY,GAAG,IAAI,UAAU,KAAK;AACvC,oBAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI;AAC/B,0BAAQ,KAAM,WAAW,IAAI;AAAA;AAAA;AAGrC,kBAAK,QAAO,UAAU,MAAM;AACxB,oBAAI,WAAW,OAAO,MAAM;AAC5B;AAAA,yBAEM,QAAO,UAAU,GAAG;AAC1B,oBAAI,WAAW,OAAO,GAAG;AACzB;AAAA,qBAEC;AACD,oBAAI,WAAW,MAAM;AAAA;AAAA;AAG7B,mBAAO;AAAA;AAAA,iBAEJ,iBAAiB,QAAQ,UAAS;AACrC,mBAAS,aAAU,KAAK,OAAO,KAAK,UAAU;AAAA;AAAA;AAGtD,kBAAU,qBAAqB;AAC/B,kBAAU,uBAAuB;AACjC,kBAAU,cAAc;AACxB,kBAAU,sBAAsB;AAChC,kBAAU,YAAY,WAAW,KAAK;AAAA,UAClC;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC/E;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA;AAqBvB,0BAAkB;AAAA,UAE/B,OAAO,UAAU,SAAQ,OAAO,QAAQ;AACpC,mBAAO,KAAK,gBAAgB,UAAU,SAAQ,OAAO,QAAQ;AAAA;AAAA,UAGjE,gBAAgB,UAAU,SAAQ,OAAO,QAAQ,OAAO;AACpD,gBAAI,UAAU,iBAAiB;AAC/B,gBAAI,aAAa,UAAU;AAC3B,gBAAI,SAAS,UAAU;AACvB,gBAAI,SAAS,MAAM;AACf,kBAAI,MAAM,IAAI,iBAAiB,gBAAgB;AAC3C,0BAAU,QAAQ,QAAQ,MAAM,IAAI,iBAAiB,eAAe;AAAA;AAExE,kBAAI,MAAM,IAAI,iBAAiB,mBAAmB;AAC9C,6BAAa,QAAQ,SAAS,MAAM,IAAI,iBAAiB,kBAAkB;AAAA;AAE/E,kBAAI,MAAM,IAAI,iBAAiB,eAAe;AAC1C,yBAAS,QAAQ,SAAS,MAAM,IAAI,iBAAiB,cAAc;AAAA;AAAA;AAG3E,mBAAO,YAAY,aAAa,UAAU,SAAQ,OAAO,QAAQ,SAAS,YAAY;AAAA;AAAA,iBAEnF,aAAa,UAAU,SAAQ,OAAO,QAAQ,SAAS,YAAY,QAAQ;AAC9E,gBAAI,YAAW,gBAAgB,OAAO;AAClC,oBAAM,IAAI,yBAAyB,oCAAoC;AAAA;AAE3E,gBAAI,QAAQ,UAAU,OAAO,YAAY,SAAS,UAAU,UAAU,YAAY;AAClF,mBAAO,YAAY,aAAa,OAAO,OAAO;AAAA;AAAA,iBAE3C,aAAa,MAAM,OAAO,QAAQ;AACrC,gBAAI,QAAQ,KAAK;AACjB,gBAAI,SAAS,MAAM;AACf,oBAAM,IAAI;AAAA;AAEd,gBAAI,aAAa,MAAM;AACvB,gBAAI,cAAc,MAAM;AACxB,gBAAI,cAAc,KAAK,IAAI,OAAO;AAClC,gBAAI,eAAe,KAAK,IAAI,QAAQ;AACpC,gBAAI,WAAW,KAAK,IAAI,cAAc,YAAY,eAAe;AACjE,gBAAI,cAAe,eAAe,aAAa,YAAa;AAC5D,gBAAI,aAAc,gBAAgB,cAAc,YAAa;AAC7D,gBAAI,SAAS,IAAI,UAAU,aAAa;AACxC,qBAAS,SAAiB,GAAG,UAAU,YAAY,SAAS,aAAa,UAAU,WAAW,UAAU;AAEpG,uBAAS,SAAiB,GAAG,UAAU,aAAa,SAAS,YAAY,UAAU,WAAW,UAAU;AACpG,oBAAI,MAAM,IAAI,QAAQ,SAAS;AAC3B,yBAAO,UAAU,SAAS,SAAS,UAAU;AAAA;AAAA;AAAA;AAIzD,mBAAO;AAAA;AAAA;AAIf,iBAAQ,0BAA0B;AAClC,iBAAQ,oBAAoB;AAC5B,iBAAQ,sBAAsB;AAC9B,iBAAQ,YAAY;AACpB,iBAAQ,kBAAkB;AAC1B,iBAAQ,kBAAkB;AAC1B,iBAAQ,eAAe;AACvB,iBAAQ,gBAAgB;AACxB,iBAAQ,sBAAsB;AAC9B,iBAAQ,eAAe;AACvB,iBAAQ,wBAAwB;AAChC,iBAAQ,aAAa;AACrB,iBAAQ,gBAAgB;AACxB,iBAAQ,YAAY;AACpB,iBAAQ,eAAe;AACvB,iBAAQ,WAAW;AACnB,iBAAQ,YAAY;AACpB,iBAAQ,YAAY;AACpB,iBAAQ,yBAAyB;AACjC,iBAAQ,uBAAuB;AAC/B,iBAAQ,oBAAoB;AAC5B,iBAAQ,8BAA8B;AACtC,iBAAQ,2BAA2B;AACnC,iBAAQ,sBAAsB;AAC9B,iBAAQ,sBAAsB;AAC9B,iBAAQ,yBAAyB;AACjC,iBAAQ,kBAAkB;AAC1B,iBAAQ,oBAAoB;AAC5B,iBAAQ,gBAAgB;AACxB,iBAAQ,eAAe;AACvB,iBAAQ,mCAAmC;AAC3C,iBAAQ,mBAAmB;AAC3B,iBAAQ,iBAAiB;AACzB,iBAAQ,gBAAgB;AACxB,iBAAQ,qBAAqB;AAC7B,iBAAQ,iBAAiB;AACzB,iBAAQ,cAAc;AACtB,iBAAQ,iBAAiB;AACzB,iBAAQ,YAAY;AACpB,iBAAQ,kBAAkB;AAC1B,iBAAQ,YAAY;AACpB,iBAAQ,gBAAgB;AACxB,iBAAQ,2BAA2B;AACnC,iBAAQ,cAAc;AACtB,iBAAQ,sBAAsB;AAC9B,iBAAQ,mCAAmC;AAC3C,iBAAQ,kBAAkB;AAC1B,iBAAQ,YAAY;AACpB,iBAAQ,2BAA2B;AACnC,iBAAQ,wBAAwB;AAChC,iBAAQ,0BAA0B;AAClC,iBAAQ,kBAAkB;AAC1B,iBAAQ,YAAY;AACpB,iBAAQ,wBAAwB;AAChC,iBAAQ,oBAAoB;AAC5B,iBAAQ,oBAAoB;AAC5B,iBAAQ,oBAAoB;AAC5B,iBAAQ,aAAa;AACrB,iBAAQ,+BAA+B;AACvC,iBAAQ,+BAA+B;AACvC,iBAAQ,eAAe;AACvB,iBAAQ,uBAAuB;AAC/B,iBAAQ,uBAAuB;AAC/B,iBAAQ,2BAA2B;AACnC,iBAAQ,mBAAmB;AAC3B,iBAAQ,iBAAiB;AACzB,iBAAQ,+BAA+B;AACvC,iBAAQ,oCAAoC;AAC5C,iBAAQ,iCAAiC;AACzC,iBAAQ,gBAAgB;AACxB,iBAAQ,sBAAsB;AAC9B,iBAAQ,iBAAiB;AACzB,iBAAQ,mBAAmB;AAC3B,iBAAQ,aAAa;AACrB,iBAAQ,eAAe;AACvB,iBAAQ,gBAAgB;AACxB,iBAAQ,eAAe;AACvB,iBAAQ,qBAAqB;AAC7B,iBAAQ,cAAc;AACtB,iBAAQ,oBAAoB;AAC5B,iBAAQ,kBAAkB;AAC1B,iBAAQ,qBAAqB;AAC7B,iBAAQ,qBAAqB;AAC7B,iBAAQ,uBAAuB;AAC/B,iBAAQ,SAAS;AACjB,iBAAQ,qBAAqB;AAC7B,iBAAQ,cAAc;AACtB,iBAAQ,cAAc;AACtB,iBAAQ,gCAAgC;AACxC,iBAAQ,mBAAmB;AAC3B,iBAAQ,yBAAyB;AACjC,iBAAQ,kBAAkB;AAC1B,iBAAQ,cAAc;AACtB,iBAAQ,eAAe;AACvB,iBAAQ,eAAe;AACvB,iBAAQ,wBAAwB;AAChC,iBAAQ,qBAAqB;AAC7B,iBAAQ,sBAAsB;AAC9B,iBAAQ,cAAc;AACtB,iBAAQ,gCAAgC;AAExC,eAAO,eAAe,UAAS,cAAc,EAAE,OAAO;AAAA;AAAA;AAAA;;;AC3zuB1D;AAAA;AACA,MAAC,YAAW;AACV,YAAI,cAAc,qBAAqB,KAAK,WAAW,WAAW,OAAO,QAAO,cAAc,cAAc,cAAc,WAAW,QAAQ,cAAc,cAAc,iBACvK,QAAQ,GAAG,OACX,UAAU,GAAG,gBACb,UAAS,SAAS,OAAO,QAAQ;AAAE,mBAAS,OAAO,QAAQ;AAAE,gBAAI,QAAQ,KAAK,QAAQ;AAAM,oBAAM,OAAO,OAAO;AAAA;AAAQ,0BAAgB;AAAE,iBAAK,cAAc;AAAA;AAAS,eAAK,YAAY,OAAO;AAAW,gBAAM,YAAY,IAAI;AAAQ,gBAAM,YAAY,OAAO;AAAW,iBAAO;AAAA;AAEpR,QAAC,YAAW;AACV,cAAI,8BAA8B,aAAa,GAAG,QAAQ,KAAK,QAAQ;AACvE,oBAAU,CAAC,MAAM,OAAO,UAAU;AAClC,eAAK,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAC9C,qBAAS,QAAQ;AACjB,gBAAI,OAAO,uBAAuB;AAChC;AAAA;AAEF,mBAAO,wBAAwB,OAAO,SAAS;AAC/C,mBAAO,uBAAuB,OAAO,SAAS,2BAA2B,OAAO,SAAS;AAAA;AAE3F,yCAA+B;AAC/B,mBAAS;AACT,wBAAc;AACd,cAAI,CAAC,uBAAuB;AAC1B,mBAAO,wBAAwB,SAAS,UAAU,SAAS;AACzD,kBAAI,UAAU,IAAI,UAAU;AAC5B,yBAAW,IAAI,OAAO;AACtB,2BAAa,KAAK,IAAI,GAAG,KAAM,YAAW;AAC1C,mBAAK,OAAO,WAAW,WAAW;AAChC,uBAAO,SAAS,WAAW;AAAA,iBAC1B;AACH,yBAAW,WAAW;AACtB,qBAAO;AAAA;AAET,mBAAO,OAAO,uBAAuB,SAAS,IAAI;AAChD,qBAAO,aAAa;AAAA;AAAA,qBAEb,CAAC,OAAO,sBAAsB;AACvC,2CAA+B,OAAO;AACtC,mBAAO,wBAAwB,SAAS,UAAU,SAAS;AACzD,kBAAI;AACJ,qBAAO,EAAE;AACT,2CAA6B,WAAW;AACtC,oBAAI,CAAC,YAAY,OAAO;AACtB,yBAAO;AAAA;AAAA,iBAER;AACH,qBAAO;AAAA;AAET,mBAAO,OAAO,uBAAuB,SAAS,IAAI;AAChD,qBAAO,YAAY,MAAM;AAAA;AAAA;AAAA;AAK/B,eAAO,UAAU,WAAW,WAAW;AACrC,cAAI,MAAM,OAAM,GAAG,GAAG;AACtB,kBAAO;AACP,cAAI,KAAK,WAAW,GAAG;AACrB,mBAAO;AAAA;AAET,eAAK,IAAI,IAAI,GAAG,MAAM,KAAK,QAAQ,KAAK,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG;AACzF,mBAAO,KAAK,WAAW;AACvB,oBAAS,UAAQ,KAAK,QAAQ;AAC9B,oBAAO,QAAO;AAAA;AAEhB,iBAAO;AAAA;AAGT,0BAAkB,SAAS,KAAK;AAC9B,cAAI,IAAI;AACR,eAAK,KAAK,MAAM,MAAM;AACtB,iBAAM,KAAK,MAAO,OAAO,KAAK,QAAS;AACvC,iBAAQ,KAAK,OAAS,OAAM;AAC5B,iBAAO;AACP,kBAAO;AACP,iBAAO,KAAI,SAAS,GAAG;AACrB,mBAAM,MAAM;AAAA;AAEd,iBAAO,IAAI,SAAS,GAAG;AACrB,kBAAM,MAAM;AAAA;AAEd,eAAK,KAAK,KAAK,MAAM;AACrB,iBAAO,KAAK,OAAM,MAAM;AAAA;AAG1B,uBAAe,WAAW;AACxB,cAAI,QAAQ,KAAK;AACjB,gBAAM,KAAK,UAAU,SAAS,MAAM,KAAK,WAAW,KAAK;AACzD,kBAAQ,IAAI;AACZ,mBAAc,IAAI;AAClB,iBAAO,UAAU,MAAM,QAAQ;AAAA;AAGjC,uBAAe,SAAS,MAAM,MAAM;AAClC,cAAI,KAAK,KAAK;AACd,gBAAM;AACN,eAAK,OAAO,MAAM;AAChB,gBAAI,CAAC,QAAQ,KAAK,MAAM;AAAM;AAC9B,kBAAM,KAAK;AACX,gBAAI,OAAO;AAAA;AAEb,eAAK,OAAO,MAAM;AAChB,gBAAI,CAAC,QAAQ,KAAK,MAAM;AAAM;AAC9B,kBAAM,KAAK;AACX,gBAAI,OAAO;AAAA;AAEb,iBAAO;AAAA;AAGT,oBAAY,SAAS,MAAM;AACzB,cAAI,KAAK,GAAG,IAAI;AAChB,kBAAQ;AACR,cAAI,KAAK,MAAM;AACf,eAAK,EAAE;AACP,eAAK;AACL,cAAI,EAAE,SAAS,GAAG;AAChB,iBAAK,MAAM,EAAE;AAAA;AAEf,gBAAM;AACN,iBAAO,IAAI,KAAK,KAAK;AACnB,iBAAK,GAAG,QAAQ,KAAK;AAAA;AAEvB,iBAAO,KAAK;AAAA;AAGd,iBAAS,SAAS,MAAM;AACtB,cAAI,KAAK,OAAO,OAAO,KAAK;AAC1B,mBAAO,KAAK,UAAU,GAAG;AAAA;AAE3B,iBAAO;AAAA;AAGT,uBAAgB,WAAW;AACzB,wBAAa,UAAU,iBAAiB;AAExC,iCAAsB,qBAAqB,OAAO;AAChD,gBAAI,uBAAuB,MAAM;AAC/B,oCAAsB;AAAA;AAExB,iBAAK,QAAQ,SAAS,OAAO,QAAQ;AACrC,gBAAI,qBAAqB;AACvB,+BAAiB,IAAI;AAAA;AAAA;AAIzB,wBAAa,UAAU,SAAS,SAAS,OAAO;AAC9C,gBAAI;AACJ,gBAAI,SAAS,MAAM;AACjB,sBAAQ;AAAA;AAEV,gBAAI,SAAS,KAAK,mBAAmB,KAAK,OAAO;AAC/C,kBAAI,KAAK,OAAO,KAAK,OAAO;AAC1B,qBAAK,IAAI,UAAU,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO;AAAA;AAE1D,qBAAO,KAAK,QAAQ,KAAK;AACzB,kBAAI,KAAK,IAAI,OAAO,KAAK,mBAAmB,MAAO;AACjD,qBAAK,iBAAiB,KAAK;AAAA,qBACtB;AACL,qBAAK,iBAAiB,KAAK,iBAAiB,OAAO,KAAK;AAAA;AAE1D,mBAAK;AACL,qBAAO;AAAA;AAET,mBAAO;AAAA;AAGT,iBAAO;AAAA;AAIT,oBAAa,SAAS,YAAY;AAChC,kBAAO,YAAW;AAElB,gCAAqB;AACnB,mBAAO,WAAU,UAAU,YAAY,MAAM,MAAM;AAAA;AAGrD,qBAAU,UAAU,eAAe;AAEnC,qBAAU,UAAU,mBAAmB;AAEvC,qBAAU,UAAU,YAAY;AAEhC,qBAAU,UAAU,eAAe,SAAS,WAAW,gBAAgB;AACrE,mBAAO,KAAK,YAAY,qBAAqB,eAAe,YAAY,IAAI,aAAa,WAAW;AAAA;AAGtG,qBAAU,UAAU,cAAc,SAAS,UAAU,kBAAkB;AACrE,gBAAI,OAAO,GAAG,KAAK,KAAK;AACxB,iBAAK,WAAW;AAChB,gBAAI,oBAAoB,MAAM;AAC5B,iCAAmB;AAAA;AAErB,gBAAI,kBAAkB;AACpB,mBAAK,iBAAiB,KAAK;AAC3B,oBAAM,KAAK,MAAM;AACjB,wBAAU;AACV,mBAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC1C,wBAAQ,IAAI;AACZ,wBAAQ,KAAK,MAAM,iBAAiB,KAAK;AAAA;AAE3C,qBAAO;AAAA;AAAA;AAIX,qBAAU,UAAU,aAAa,SAAS,SAAS;AACjD,gBAAI,WAAW,MAAM;AACnB,wBAAU;AAAA;AAEZ,iBAAK,UAAU,aAAa,KAAK,SAAS;AAC1C,gBAAI,KAAK,WAAW;AAClB,mBAAK,UAAU,GAAG,MAAM,WAAW,QAAQ,WAAW;AAAA;AAExD,gBAAI,KAAK,QAAQ,QAAQ,KAAI;AAC3B,mBAAK,QAAQ,QAAQ;AAAA;AAEvB,iBAAK;AACL,gBAAI,KAAK,QAAQ,YAAY;AAC3B,mBAAK,WAAW,WAAW;AACzB,qBAAK;AACL,uBAAO,KAAK,OAAO;AAAA;AAErB,qBAAO,iBAAiB,UAAW,SAAS,OAAO;AACjD,uBAAO,SAAS,GAAG;AACjB,yBAAO,MAAM,SAAS;AAAA;AAAA,gBAEvB;AAAA;AAEL,mBAAO;AAAA;AAGT,qBAAU,UAAU,qBAAqB,WAAW;AAClD,gBAAI,wBAAwB,kBAAkB,QAAQ,kBAAkB;AACxE,+BAAmB,KAAK;AACxB,gBAAI,KAAK,QAAQ,uBAAuB,GAAG;AACzC,mBAAK,eAAe,KAAK,QAAQ;AAAA,uBACxB,KAAK,QAAQ,mBAAmB,OAAO;AAChD,qBAAO,KAAK;AAAA,mBACP;AACL,iCAAmB,OAAO,oBAAoB;AAC9C,uCAAyB,KAAK,IAAI,gCAAgC,KAAK,IAAI,8BAA8B,KAAK,IAAI,4BAA4B,KAAK,IAAI,2BAA2B,KAAK,IAAI,0BAA0B;AACrN,mBAAK,eAAe,mBAAmB;AAAA;AAEzC,gBAAI,KAAK,QAAQ,cAAc,KAAK,iBAAiB,kBAAkB;AACrE,sBAAQ,KAAK,OAAO,YAAY,KAAK,OAAO;AAC5C,uBAAS,KAAK,OAAO,aAAa,KAAK,OAAO;AAC9C,kBAAI,CAAC,KAAK,WAAW;AACnB,oBAAI,KAAK,OAAO,WAAW,gBAAgB,OAAO;AAChD,0BAAQ,KAAK,OAAO,WAAW;AAAA;AAAA;AAGnC,kBAAI,KAAK,QAAQ,wBAAwB;AACvC,yBAAS,KAAK,QAAQ,yBAAyB;AAAA;AAEjD,mBAAK,OAAO,QAAQ,QAAQ,KAAK;AACjC,mBAAK,OAAO,SAAS,SAAS,KAAK;AACnC,mBAAK,OAAO,MAAM,QAAQ,QAAQ;AAClC,mBAAK,OAAO,MAAM,SAAS,SAAS;AACpC,mBAAK,OAAO,WAAW;AACvB,mBAAK,OAAO,YAAY;AACxB,kBAAI,KAAK,QAAQ,YAAY;AAC3B,qBAAK,mBAAmB,QAAQ;AAAA;AAElC,mBAAK,YAAY;AAAA;AAEnB,mBAAO;AAAA;AAGT,qBAAU,UAAU,aAAa,SAAS,OAAO;AAC/C,oBAAQ,WAAW,UAAU,OAAO;AACpC,gBAAI,SAAS,QAAQ;AACnB,qBAAO;AAAA,mBACF;AACL,qBAAO;AAAA;AAAA;AAIX,iBAAO;AAAA,UAEN;AAEH,uBAAgB,WAAW;AACzB,iCAAsB,IAAI,iBAAiB;AACzC,iBAAK,KAAK;AACV,iBAAK,iBAAiB;AAAA;AAGxB,wBAAa,UAAU,SAAS,SAAS,OAAO;AAC9C,mBAAO,KAAK,GAAG,YAAY,aAAa,MAAM,gBAAgB,KAAK;AAAA;AAGrE,iBAAO;AAAA;AAIT,uBAAgB,SAAS,YAAY;AACnC,kBAAO,eAAc;AAErB,wBAAa,UAAU,iBAAiB;AAExC,wBAAa,UAAU,QAAQ;AAE/B,wBAAa,UAAU,SAAS,SAAS,OAAO;AAC9C,mBAAO,KAAK,QAAQ,IAAI;AAAA;AAG1B,iCAAsB,OAAO,MAAM;AACjC,iBAAK,OAAO;AACZ,iBAAK,OAAO,QAAQ,OAAO,OAAO;AAClC,iBAAK,QAAQ,IAAI,KAAK,KAAK;AAC3B,gBAAI,KAAK,MAAM;AACb,mBAAK,QAAQ;AAAA;AAAA;AAIjB,wBAAa,UAAU,SAAS,WAAW;AACzC,gBAAI;AACJ,gBAAI,KAAK,MAAM;AACb,wBAAU,gBAAgB,KAAK,eAAe,QAAQ;AAAA,mBACjD;AACL,wBAAU,UAAU,aAAa,KAAK;AAAA;AAExC,mBAAO,KAAK,KAAK,YAAY;AAAA;AAG/B,iBAAO;AAAA,UAEN;AAEH,8BAAsB;AAAA,UACpB,QAAQ,SAAS,SAAS;AACxB,gBAAI,MAAM,GAAG,KAAK;AAClB,kBAAM;AACN,iBAAK,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAC9C,qBAAO,QAAQ;AACf,kBAAI,KAAK,IAAI,aAAa;AAAA;AAE5B,mBAAO;AAAA;AAAA;AAIX,uBAAgB,SAAS,YAAY;AACnC,kBAAO,eAAc;AAErB,wBAAa,UAAU,iBAAiB;AAExC,wBAAa,UAAU,QAAQ;AAE/B,wBAAa,UAAU,UAAU;AAAA,YAC/B,aAAa;AAAA,YACb,QAAQ;AAAA,YACR,OAAO;AAAA;AAGT,iCAAsB,QAAQ;AAC5B,iBAAK,QAAQ;AACb,iBAAK,MAAM,KAAK,MAAM;AACtB,iBAAK,SAAS,KAAK,MAAM;AACzB,0BAAa,UAAU,YAAY,KAAK,MAAM,OAAO;AACrD,iBAAK;AAAA;AAGP,wBAAa,UAAU,aAAa,SAAS,SAAS;AACpD,gBAAI,WAAW,MAAM;AACnB,wBAAU;AAAA;AAEZ,iBAAK,UAAU,aAAa,KAAK,SAAS;AAC1C,iBAAK,SAAS,IAAI,KAAK,MAAM,SAAS,KAAK,MAAM,QAAQ,cAAc,KAAK,QAAQ;AACpF,iBAAK,cAAc,KAAK,OAAO,SAAS,KAAK,QAAQ;AACrD,iBAAK,WAAW,KAAK,MAAM;AAC3B,iBAAK,WAAW,KAAK,MAAM;AAC3B,iBAAK,iBAAiB,KAAK,MAAM;AACjC,mBAAO,KAAK,QAAQ,QAAQ,KAAK,MAAM,QAAQ;AAAA;AAGjD,wBAAa,UAAU,SAAS,WAAW;AACzC,gBAAI,OAAO,MAAM,MAAM,KAAK,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAC3D,gBAAI,KAAK,MAAM,QAAQ,YAAY;AACjC,mBAAK,SAAS,IAAI,KAAK,MAAM,SAAS,KAAK,MAAM,QAAQ,cAAc,KAAK,QAAQ;AACpF,mBAAK,cAAc,KAAK,OAAO,SAAS,KAAK,QAAQ;AAAA;AAEvD,oBAAQ,KAAK,MAAM,SAAS,KAAK,MAAM,KAAK;AAC5C,gBAAI,KAAK,MAAM,KAAK,SAAS,KAAK,IAAI;AACtC,gBAAI,KAAK,MAAM,KAAK,SAAS,KAAK,IAAI;AACtC,qBAAS,KAAK,MAAM,KAAK,cAAc,KAAK,IAAI,QAAQ,KAAK,KAAK;AAClE,qBAAS,KAAK,MAAM,KAAK,cAAc,KAAK,IAAI,QAAQ,KAAK,KAAK;AAClE,mBAAO,KAAK,MAAM,KAAK,cAAc,KAAK,IAAI,QAAQ,KAAK,KAAK;AAChE,mBAAO,KAAK,MAAM,KAAK,cAAc,KAAK,IAAI,QAAQ,KAAK,KAAK;AAChE,iBAAK,IAAI,YAAY,KAAK,QAAQ;AAClC,iBAAK,IAAI;AACT,iBAAK,IAAI,IAAI,GAAG,GAAG,KAAK,aAAa,GAAG,KAAK,KAAK,GAAG;AACrD,iBAAK,IAAI;AACT,iBAAK,IAAI;AACT,iBAAK,IAAI,OAAO,QAAQ;AACxB,iBAAK,IAAI,OAAO,GAAG;AACnB,iBAAK,IAAI,OAAO,MAAM;AACtB,iBAAK,IAAI;AACT,gBAAI,KAAK,QAAQ,UAAU;AACzB,oBAAM,IAAI;AACV,kBAAI,MAAM,KAAK,QAAQ;AACvB,qBAAO,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ;AAC3C,qBAAO,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ;AAC5C,mBAAK,IAAI;AACT,mBAAK,IAAI,UAAU,GAAG;AACtB,mBAAK,IAAI,OAAO;AAChB,mBAAK,IAAI,UAAU,KAAK,CAAC,OAAO,GAAG,CAAC,OAAO,GAAG,MAAM;AACpD,qBAAO,KAAK,IAAI;AAAA;AAAA;AAIpB,iBAAO;AAAA,UAEN;AAEH,cAAO,WAAW;AAChB,wBAAa,OAAO;AAClB,iBAAK,OAAO;AAAA;AAGd,eAAI,UAAU,eAAe,SAAS,WAAW;AAC/C,iBAAK,QAAQ,UAAU;AACvB,iBAAK,WAAW,UAAU;AAC1B,iBAAK,WAAW,UAAU;AAC1B,mBAAO,KAAK;AAAA;AAGd,eAAI,UAAU,SAAS,WAAW;AAChC,gBAAI,YAAY;AAChB,gBAAI,KAAK,WAAW;AAClB,mBAAK,UAAU,KAAK,aAAa,KAAK;AAAA;AAExC,gBAAI,KAAK,aAAa,GAAG;AACvB,mBAAK,WAAW,KAAK,WAAW;AAAA;AAElC,yBAAc,KAAK,QAAQ,KAAK,WAAY;AAC5C,yBAAc,KAAK,WAAW,KAAK,WAAY;AAC/C,cAAE,cAAc,KAAK,MAAM,IAAI;AAAA,cAC7B,SAAS,aAAa;AAAA;AAExB,mBAAO,EAAE,kBAAkB,KAAK,MAAM,IAAI;AAAA,cACxC,SAAS,aAAa;AAAA;AAAA;AAI1B,iBAAO;AAAA;AAIT,iBAAS,SAAS,YAAY;AAC5B,kBAAO,QAAO;AAEd,iBAAM,UAAU,OAAO;AAEvB,iBAAM,UAAU,QAAQ,CAAC;AAEzB,iBAAM,UAAU,WAAW;AAE3B,iBAAM,UAAU,WAAW;AAE3B,iBAAM,UAAU,iBAAiB;AAEjC,iBAAM,UAAU,iBAAiB;AAEjC,iBAAM,UAAU,YAAY;AAE5B,iBAAM,UAAU,gBAAgB;AAEhC,iBAAM,UAAU,UAAU;AAAA,YACxB,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,cAAc;AAAA,YACd,aAAa;AAAA,YACb,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,WAAW;AAAA;AAAA,YAEb,OAAO;AAAA,YACP,WAAW;AAAA,YACX,aAAa;AAAA,YACb,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,eAAe;AAAA;AAGjB,0BAAe,QAAQ;AACrB,gBAAI,GAAG;AACP,iBAAK,SAAS;AACd,mBAAM,UAAU,YAAY,KAAK;AACjC,iBAAK,gBAAgB;AACrB,iBAAK,cAAc;AACnB,gBAAI,OAAO,uBAAuB,aAAa;AAC7C,mBAAK,SAAS,OAAO,mBAAmB,YAAY,KAAK;AAAA;AAE3D,iBAAK,MAAM,KAAK,OAAO,WAAW;AAClC,iBAAK,IAAI,wBAAwB;AACjC,gBAAI,KAAK,OAAO;AAChB,gBAAI,KAAK,OAAO;AAChB,iBAAK,OAAO,SAAS;AACrB,iBAAK,OAAO,QAAQ;AACpB,iBAAK,KAAK,CAAC,IAAI,aAAa;AAC5B,iBAAK;AACL,iBAAK;AAAA;AAGP,iBAAM,UAAU,aAAa,SAAS,SAAS;AAC7C,gBAAI,OAAO,GAAG,KAAK,KAAK;AACxB,gBAAI,WAAW,MAAM;AACnB,wBAAU;AAAA;AAEZ,gBAAI,WAAW,QAAQ,YAAY;AACjC,mBAAK,OAAO,WAAW,KAAK,OAAO,WAAW;AAC9C,mBAAK,OAAO,YAAY,KAAK,IAAI,KAAK,OAAO,WAAW,cAAc,KAAK,OAAO,WAAW;AAAA;AAE/F,mBAAM,UAAU,WAAW,KAAK,MAAM;AACtC,iBAAK;AACL,iBAAK,eAAe;AACpB,gBAAI,KAAK,QAAQ,QAAQ,GAAG;AAC1B,oBAAM,KAAK,KAAM,KAAI,KAAK,QAAQ;AAClC,mBAAK,eAAe,KAAK,IAAI;AAAA;AAE/B,iBAAK,kBAAkB,KAAK,OAAO,SAAU,KAAI,KAAK,QAAQ,aAAa,KAAK,QAAQ;AACxF,iBAAK,YAAY,KAAK,kBAAkB,KAAK,QAAQ;AACrD,iBAAK,SAAU,MAAK,kBAAkB,KAAK,YAAY,KAAM,KAAM,KAAK;AACxE,iBAAK,IAAI,UAAU,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO;AACxD,kBAAM,KAAK;AACX,iBAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC1C,sBAAQ,IAAI;AACZ,oBAAM,WAAW,KAAK,QAAQ;AAC9B,oBAAM;AAAA;AAER,mBAAO;AAAA;AAGT,iBAAM,UAAU,sBAAsB,WAAW;AAC/C,gBAAI,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS;AACpC,iBAAK,gBAAgB;AACrB,gBAAI,KAAK,QAAQ,kBAAkB,QAAQ;AACzC,mBAAK,gBAAgB,IAAI;AACzB,wBAAU;AACV,mBAAK,IAAI,IAAI,GAAG,MAAM,KAAK,QAAQ,cAAc,SAAS,GAAG,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG;AACrH,uBAAO,SAAU,OAAO,KAAK,QAAQ,cAAc,GAAG,IAAK,UAAU,GAAG,IAAI;AAC5E,uBAAO,SAAU,OAAO,KAAK,QAAQ,cAAc,GAAG,IAAK,UAAU,GAAG,IAAI;AAC5E,uBAAO,SAAU,OAAO,KAAK,QAAQ,cAAc,GAAG,IAAK,UAAU,GAAG,IAAI;AAC5E,wBAAQ,KAAK,KAAK,cAAc,KAAK;AAAA,kBACnC,KAAK,KAAK,QAAQ,cAAc,GAAG;AAAA,kBACnC,OAAO;AAAA,oBACL,GAAG;AAAA,oBACH,GAAG;AAAA,oBACH,GAAG;AAAA;AAAA;AAAA;AAIT,qBAAO;AAAA;AAAA;AAIX,iBAAM,UAAU,MAAM,SAAS,OAAO;AACpC,gBAAI,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,MAAM;AACpC,gBAAI,CAAE,kBAAiB,QAAQ;AAC7B,sBAAQ,CAAC;AAAA;AAEX,iBAAK,IAAI,IAAI,GAAG,MAAM,MAAM,SAAS,GAAG,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG;AAChG,oBAAM,KAAK,KAAK,WAAW,MAAM;AAAA;AAEnC,gBAAI,MAAM,SAAS,KAAK,GAAG,QAAQ;AACjC,mBAAK,IAAI,IAAI,GAAG,OAAO,MAAM,SAAS,KAAK,GAAG,QAAQ,KAAK,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,OAAO,EAAE,IAAI,EAAE,GAAG;AAChH,qBAAK,IAAI,aAAa;AACtB,mBAAG,WAAW,KAAK,QAAQ;AAC3B,qBAAK,GAAG,KAAK;AAAA;AAAA,uBAEN,MAAM,SAAS,KAAK,GAAG,QAAQ;AACxC,mBAAK,KAAK,KAAK,GAAG,MAAM,KAAK,GAAG,SAAS,MAAM;AAAA;AAEjD,gBAAI;AACJ,iBAAK,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAC5C,oBAAM,MAAM;AACZ,kBAAI,MAAM,KAAK,UAAU;AACvB,oBAAI,KAAK,QAAQ,UAAU;AACzB,wBAAM,KAAK;AAAA,uBACN;AACL,uBAAK,WAAW,MAAM;AAAA;AAAA,yBAEf,MAAM,KAAK,UAAU;AAC9B,oBAAI,KAAK,QAAQ,UAAU;AACzB,wBAAM,KAAK;AAAA,uBACN;AACL,uBAAK,WAAW,MAAM;AAAA;AAAA;AAG1B,mBAAK,GAAG,GAAG,QAAQ;AACnB,mBAAK,GAAG,KAAK,WAAW;AAAA,gBACtB,UAAU,KAAK;AAAA,gBACf,UAAU,KAAK;AAAA,gBACf,OAAO,KAAK,QAAQ;AAAA;AAAA;AAGxB,iBAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,MAAM,MAAM,SAAS,IAAI,KAAK,WAAW,KAAK;AAC7E,6BAAiB,IAAI,KAAK;AAC1B,mBAAO,KAAK,cAAc;AAAA;AAG5B,iBAAM,UAAU,WAAW,SAAS,OAAO;AACzC,mBAAQ,KAAI,KAAK,QAAQ,SAAS,KAAK,KAAO,SAAQ,KAAK,YAAa,MAAK,WAAW,KAAK,YAAc,KAAI,KAAK,QAAQ,QAAQ,KAAK,KAAK;AAAA;AAGhJ,iBAAM,UAAU,wBAAwB,SAAS,KAAK,MAAM;AAC1D,gBAAI,OAAO,UAAU,GAAG,GAAG,UAAU,KAAK;AAC1C,gBAAI,QAAQ,GAAG;AACb,sBAAQ,KAAK,cAAc,GAAG;AAAA,mBACzB;AACL,sBAAQ,KAAK,cAAc,KAAK,cAAc,SAAS,GAAG;AAC1D,mBAAK,IAAI,IAAI,GAAG,MAAM,KAAK,cAAc,SAAS,GAAG,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG;AAC7G,oBAAI,OAAO,KAAK,cAAc,GAAG,KAAK;AACpC,sBAAI,SAAS,MAAM;AACjB,iCAAa,KAAK,cAAc,IAAI,MAAM,KAAK,cAAc;AAC7D,+BAAW,KAAK,cAAc;AAC9B,+BAAY,OAAM,WAAW,OAAQ,UAAS,MAAM,WAAW;AAC/D,4BAAQ;AAAA,sBACN,GAAG,KAAK,MAAM,WAAW,MAAM,IAAK,KAAI,YAAY,SAAS,MAAM,IAAI;AAAA,sBACvE,GAAG,KAAK,MAAM,WAAW,MAAM,IAAK,KAAI,YAAY,SAAS,MAAM,IAAI;AAAA,sBACvE,GAAG,KAAK,MAAM,WAAW,MAAM,IAAK,KAAI,YAAY,SAAS,MAAM,IAAI;AAAA;AAAA,yBAEpE;AACL,4BAAQ,KAAK,cAAc,GAAG;AAAA;AAEhC;AAAA;AAAA;AAAA;AAIN,mBAAO,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,OAAO;AAAA;AAG1D,iBAAM,UAAU,mBAAmB,SAAS,KAAK,MAAM;AACrD,gBAAI;AACJ,kBAAO,OAAM,KAAK,YAAa,MAAK,WAAW,KAAK;AACpD,mBAAO,KAAK,sBAAsB,KAAK;AAAA;AAGzC,iBAAM,UAAU,qBAAqB,SAAS,cAAc,GAAG,GAAG,QAAQ;AACxE,gBAAI,gBAAgB,OAAO,aAAa,MAAM,UAAU,OAAO,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,eAAe,gBAAgB,iBAAiB,OAAO,MAAM;AAC1J,iBAAK,IAAI;AACT,iBAAK,IAAI,UAAU,GAAG;AACtB,mBAAO,aAAa,QAAQ;AAC5B,iBAAK;AACL,oBAAQ,KAAK,MAAM,IAAI;AACvB,mBAAO,KAAK,MAAM,MAAM;AACxB,uBAAW,WAAW,SAAS,KAAK,eAAe,KAAK;AACxD,iBAAK,IAAI,OAAO,WAAW;AAC3B,iBAAK,IAAI,YAAY,aAAa,SAAS;AAC3C,6BAAiB,aAAa,kBAAkB;AAChD,iBAAK,IAAI,eAAe;AACxB,iBAAK,IAAI,YAAY;AACrB,kBAAM,aAAa;AACnB,iBAAK,QAAQ,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,QAAQ,EAAE,GAAG;AAC1D,sBAAQ,IAAI;AACZ,4BAAc,aAAa,cAAc,UAAU,aAAa,OAAO,aAAa;AACpF,kBAAK,EAAC,KAAK,QAAQ,YAAY,SAAS,KAAK,aAAc,EAAC,KAAK,QAAQ,YAAY,SAAS,KAAK,WAAW;AAC5G,oBAAI,gBAAgB;AAClB,uBAAK,IAAI,eAAe;AACxB,0BAAQ,KAAK,SAAS;AACtB,oCAAkB,KAAK,IAAI,YAAY;AACvC,mCAAkB,KAAK,YAAY,IAAK,SAAS,gBAAgB,QAAQ;AACzE,yBAAO,IAAK,iBAAiB,KAAK,IAAI;AACtC,yBAAO,IAAK,iBAAiB,KAAK,IAAI;AACtC,uBAAK,IAAI,SAAS,aAAa,MAAM;AAAA,uBAChC;AACL,kCAAgB,KAAK,SAAS,SAAS,IAAI,KAAK,KAAK;AACrD,uBAAK,IAAI,OAAO;AAChB,uBAAK,IAAI,SAAS,aAAa,GAAG,CAAC,SAAS,KAAK,YAAY;AAC7D,uBAAK,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAIvB,mBAAO,KAAK,IAAI;AAAA;AAGlB,iBAAM,UAAU,SAAS,WAAW;AAClC,gBAAI,sBAAsB,gBAAgB,WAAW,OAAO,MAAM,GAAG,UAAU,OAAO,MAAM,GAAG,GAAG,GAAG,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,GAAG,MAAK,MAAK,GAAG,GAAG,QAAQ,eAAe,KAAK,MAAM,MAAM,MAAM,MAAM,GAAG;AAClN,gBAAI,KAAK,QAAQ,YAAY;AAC3B,qCAAuB,KAAK,OAAO,SAAU,KAAI,KAAK,QAAQ,aAAa,KAAK,QAAQ;AACxF,kBAAI,yBAAyB,KAAK,iBAAiB;AACjD,qBAAK,kBAAkB,KAAK,OAAO,SAAU,KAAI,KAAK,QAAQ,aAAa,KAAK,QAAQ;AACxF,qBAAK,YAAY,KAAK,kBAAkB,KAAK,QAAQ;AACrD,qBAAK,SAAU,MAAK,kBAAkB,KAAK,YAAY,KAAM,KAAM,KAAK;AAAA;AAAA;AAG5E,gBAAI,KAAK,QAAQ,cAAc;AAC7B,mBAAK,QAAQ,aAAa,KAAK;AAAA;AAEjC,gBAAI,KAAK,OAAO,QAAQ;AACxB,gBAAI,KAAK,OAAO,SAAS,KAAK,QAAQ,aAAa,KAAK,kBAAmB,MAAK,SAAS,KAAK,YAAY,KAAK,KAAK;AACpH,6BAAiB,KAAK,SAAS,KAAK;AACpC,gBAAI,KAAK,WAAW;AAClB,mBAAK,UAAU,OAAO;AAAA;AAExB,iBAAK,IAAI,UAAU;AACnB,qBAAS,KAAK,SAAS,KAAK,QAAQ;AACpC,gBAAI,KAAK,QAAQ,cAAc;AAC7B,mBAAK,mBAAmB,KAAK,QAAQ,cAAc,GAAG,GAAG;AAAA;AAE3D,iBAAK,IAAI;AACT,iBAAK,IAAI,UAAU,GAAG;AACtB,iBAAK,IAAI,YAAY,KAAK,YAAY;AACtC,iBAAK,IAAI,cAAc;AACvB,iBAAK,IAAI;AACT,iBAAK,IAAI,IAAI,GAAG,GAAG,QAAQ,KAAK,SAAS,KAAK,WAAW,KAAK,SAAS,KAAK,WAAW;AACvF,iBAAK,IAAI;AACT,iBAAK,IAAI;AACT,gBAAI,KAAK,QAAQ,aAAa;AAC5B,mBAAK,IAAI;AACT,mBAAK,IAAI,UAAU,GAAG;AACtB,mBAAK,IAAI,YAAY,KAAK;AAC1B,oBAAM,KAAK,QAAQ;AACnB,mBAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC1C,uBAAO,IAAI;AACX,uBAAM,KAAK;AACX,oBAAI,KAAK,QAAQ,YAAY,OAAM,KAAK,UAAU;AAChD,yBAAM,KAAK;AAAA;AAEb,uBAAM,KAAK;AACX,oBAAI,KAAK,QAAQ,YAAY,OAAM,KAAK,UAAU;AAChD,yBAAM,KAAK;AAAA;AAEb,qBAAK,IAAI,cAAc,KAAK;AAC5B,qBAAK,IAAI;AACT,qBAAK,IAAI,IAAI,GAAG,GAAG,QAAQ,KAAK,SAAS,OAAM,KAAK,SAAS,OAAM;AACnE,qBAAK,IAAI;AAAA;AAEX,mBAAK,IAAI;AAAA,uBACA,KAAK,QAAQ,gBAAgB;AACtC,mBAAK,IAAI;AACT,mBAAK,IAAI,UAAU,GAAG;AACtB,mBAAK,IAAI,YAAY,KAAK;AAC1B,qBAAO,KAAK,QAAQ;AACpB,mBAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC7C,uBAAO,KAAK;AACZ,uBAAM,KAAK;AACX,oBAAI,KAAK,QAAQ,YAAY,OAAM,KAAK,UAAU;AAChD,yBAAM,KAAK;AAAA;AAEb,uBAAM,KAAK;AACX,oBAAI,KAAK,QAAQ,YAAY,OAAM,KAAK,UAAU;AAChD,yBAAM,KAAK;AAAA;AAEb,qBAAK,IAAI,cAAc,KAAK;AAC5B,qBAAK,IAAI;AACT,qBAAK,IAAI,IAAI,GAAG,GAAG,QAAQ,KAAK,SAAS,OAAM,KAAK,SAAS,OAAM;AACnE,qBAAK,IAAI;AAAA;AAEX,yBAAW,KAAK,YAAY;AAC5B,qBAAO,KAAK,QAAQ;AACpB,mBAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC7C,uBAAO,KAAK;AACZ,gCAAgB,SAAS;AACzB,4BAAY,KAAK,IAAI,qBAAqB,gBAAgB,KAAK,IAAI,KAAK,SAAS,KAAK,GAAG,OAAO,gBAAgB,KAAK,IAAI,KAAK,SAAS,KAAK,GAAG,OAAO,gBAAgB,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG,OAAO,gBAAgB,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG;AACvR,qBAAK,QAAQ,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,QAAQ,EAAE,GAAG;AAC7D,yBAAO,KAAK;AACZ,yBAAO,QAAQ,KAAK;AACpB,4BAAU,aAAa,MAAM,KAAK;AAAA;AAEpC,qBAAK,IAAI,cAAc;AACvB,qBAAK,IAAI;AACT,qBAAK,QAAQ,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,QAAQ,EAAE,GAAG;AAC7D,yBAAO,KAAK;AACZ,sBAAI,UAAU,GAAG;AACf;AAAA;AAEF,uBAAK,IAAI,IAAI,GAAG,GAAG,QAAQ,KAAK,SAAS,KAAK,QAAQ,GAAG,MAAM,KAAK,SAAS,KAAK,MAAM;AAAA;AAE1F,qBAAK,IAAI,YAAY,KAAK;AAC1B,qBAAK,IAAI;AAAA;AAEX,mBAAK,IAAI;AAAA,mBACJ;AACL,kBAAI,KAAK,QAAQ,oBAAoB,QAAQ;AAC3C,4BAAY,KAAK,QAAQ,gBAAgB;AAAA,yBAChC,KAAK,kBAAkB,MAAM;AACtC,4BAAY,KAAK,iBAAiB,KAAK,gBAAgB;AAAA,yBAC9C,KAAK,QAAQ,cAAc,QAAQ;AAC5C,oBAAI,KAAK,QAAQ,iBAAiB,GAAG;AACnC,8BAAY,KAAK,IAAI,qBAAqB,GAAG,GAAG,GAAG,GAAG,GAAG;AAAA,uBACpD;AACL,8BAAY,KAAK,IAAI,qBAAqB,GAAG,GAAG,GAAG;AAAA;AAErD,0BAAU,aAAa,GAAG,KAAK,QAAQ;AACvC,0BAAU,aAAa,GAAG,KAAK,QAAQ;AAAA,qBAClC;AACL,4BAAY,KAAK,QAAQ;AAAA;AAE3B,mBAAK,IAAI,cAAc;AACvB,mBAAK,IAAI;AACT,mBAAK,IAAI,IAAI,GAAG,GAAG,QAAS,KAAI,KAAK,QAAQ,SAAS,KAAK,IAAI,gBAAgB;AAC/E,mBAAK,IAAI,YAAY,KAAK;AAC1B,mBAAK,IAAI;AACT,mBAAK,IAAI,cAAc,KAAK,QAAQ;AACpC,mBAAK,IAAI;AACT,mBAAK,IAAI,IAAI,GAAG,GAAG,QAAQ,gBAAiB,KAAI,KAAK,QAAQ,SAAS,KAAK,IAAI;AAC/E,mBAAK,IAAI;AAAA;AAEX,iBAAK,IAAI,UAAU,GAAG;AACtB,mBAAO,KAAK;AACZ,iBAAK,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AAC7C,sBAAQ,KAAK;AACb,oBAAM,OAAO;AAAA;AAEf,mBAAO,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC;AAAA;AAGjC,iBAAO;AAAA,UAEN;AAEH,oBAAa,SAAS,YAAY;AAChC,kBAAO,YAAW;AAElB,qBAAU,UAAU,YAAY;AAEhC,qBAAU,UAAU,iBAAiB;AAErC,qBAAU,UAAU,QAAQ;AAE5B,qBAAU,UAAU,WAAW;AAE/B,qBAAU,UAAU,WAAW;AAE/B,qBAAU,UAAU,UAAU;AAAA,YAC5B,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,aAAa;AAAA,YACb,aAAa;AAAA,YACb,OAAO;AAAA,YACP,aAAa;AAAA;AAGf,8BAAmB,QAAQ;AACzB,iBAAK,SAAS;AACd,uBAAU,UAAU,YAAY,KAAK;AACrC,gBAAI,OAAO,uBAAuB,aAAa;AAC7C,mBAAK,SAAS,OAAO,mBAAmB,YAAY,KAAK;AAAA;AAE3D,iBAAK,MAAM,KAAK,OAAO,WAAW;AAClC,iBAAK;AACL,iBAAK;AAAA;AAGP,qBAAU,UAAU,WAAW,SAAS,OAAO;AAC7C,mBAAQ,KAAI,KAAK,QAAQ,SAAS,KAAK,KAAO,SAAQ,KAAK,YAAa,MAAK,WAAW,KAAK,YAAe,KAAI,KAAK,QAAQ,QAAU,KAAI,KAAK,QAAQ,UAAU,KAAK;AAAA;AAGzK,qBAAU,UAAU,aAAa,SAAS,SAAS;AACjD,gBAAI,WAAW,MAAM;AACnB,wBAAU;AAAA;AAEZ,gBAAI,WAAW,QAAQ,YAAY;AACjC,mBAAK,OAAO,WAAW,KAAK,IAAI,KAAK,OAAO,WAAW,aAAa,KAAK,OAAO,WAAW;AAC3F,mBAAK,OAAO,YAAY,KAAK,OAAO;AAAA;AAEtC,uBAAU,UAAU,WAAW,KAAK,MAAM;AAC1C,iBAAK,YAAY,KAAK,OAAO,SAAS,KAAK,QAAQ;AACnD,iBAAK,SAAS,KAAK,QAAQ,cAAe,MAAK,OAAO,SAAS,IAAI,KAAK,YAAY;AACpF,mBAAO;AAAA;AAGT,qBAAU,UAAU,MAAM,SAAS,OAAO;AACxC,iBAAK,QAAQ,KAAK,WAAW;AAC7B,gBAAI,KAAK,QAAQ,KAAK,UAAU;AAC9B,mBAAK,WAAW,KAAK,QAAQ;AAAA;AAE/B,mBAAO,iBAAiB;AAAA;AAG1B,qBAAU,UAAU,SAAS,WAAW;AACtC,gBAAI,gBAAgB,SAAS,GAAG,QAAO,MAAM;AAC7C,6BAAiB,KAAK,SAAS,KAAK;AACpC,gBAAI,KAAK,OAAO,QAAQ;AACxB,gBAAI,KAAK,OAAO,SAAS;AACzB,gBAAI,KAAK,WAAW;AAClB,mBAAK,UAAU,OAAO;AAAA;AAExB,sBAAU,KAAK,IAAI,qBAAqB,GAAG,GAAG,IAAI,GAAG,GAAG;AACxD,oBAAQ,aAAa,GAAG,KAAK,QAAQ;AACrC,oBAAQ,aAAa,GAAG,KAAK,QAAQ;AACrC,qBAAQ,KAAK,SAAS,KAAK,YAAY;AACvC,mBAAO,KAAK,SAAS,KAAK,YAAY;AACtC,iBAAK,IAAI,cAAc,KAAK,QAAQ;AACpC,iBAAK,IAAI;AACT,iBAAK,IAAI,IAAI,GAAG,GAAG,KAAK,QAAS,KAAI,KAAK,QAAQ,SAAS,KAAK,IAAK,KAAI,KAAK,QAAQ,SAAS,KAAK,IAAI;AACxG,iBAAK,IAAI,YAAY,KAAK;AAC1B,iBAAK,IAAI,UAAU;AACnB,iBAAK,IAAI;AACT,iBAAK,IAAI,cAAc;AACvB,iBAAK,IAAI;AACT,iBAAK,IAAI,IAAI,GAAG,GAAG,KAAK,QAAS,KAAI,KAAK,QAAQ,SAAS,KAAK,IAAI,gBAAgB;AACpF,mBAAO,KAAK,IAAI;AAAA;AAGlB,iBAAO;AAAA,UAEN;AAEH,gBAAS,SAAS,YAAY;AAC5B,kBAAO,QAAO;AAEd,4BAAiB;AACf,mBAAO,OAAM,UAAU,YAAY,MAAM,MAAM;AAAA;AAGjD,iBAAM,UAAU,iBAAiB,SAAS,GAAG,GAAG,QAAO,MAAM;AAC3D,gBAAI;AACJ,kBAAM,KAAK,IAAI,qBAAqB,GAAG,GAAG,QAAO,GAAG,GAAG;AACvD,gBAAI,aAAa,GAAG,KAAK,QAAQ;AACjC,gBAAI,aAAa,MAAM,KAAK,QAAQ;AACpC,gBAAI,aAAa,MAAM,KAAK,QAAQ;AACpC,gBAAI,aAAa,GAAG,KAAK,QAAQ;AACjC,mBAAO;AAAA;AAGT,iBAAM,UAAU,aAAa,SAAS,SAAS;AAC7C,gBAAI,GAAG,QAAO,MAAM;AACpB,gBAAI,WAAW,MAAM;AACnB,wBAAU;AAAA;AAEZ,mBAAM,UAAU,WAAW,KAAK,MAAM;AACtC,gBAAI,KAAK,OAAO,QAAQ;AACxB,gBAAI,KAAK,OAAO,SAAS;AACzB,qBAAQ,KAAK,SAAS,KAAK,YAAY;AACvC,mBAAO,KAAK,SAAS,KAAK,YAAY;AACtC,iBAAK,QAAQ,kBAAkB,KAAK,QAAQ;AAC5C,iBAAK,QAAQ,cAAc,KAAK,eAAe,GAAG,GAAG,QAAO;AAC5D,mBAAO;AAAA;AAGT,iBAAO;AAAA,UAEN;AAEH,eAAO,mBAAmB;AAAA,UACxB,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ,SAAS,MAAM;AACrB,gBAAI,MAAM,GAAG,KAAK;AAClB,sBAAU;AACV,iBAAK,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC3C,qBAAO,KAAK;AACZ,sBAAQ,KAAK,iBAAiB,SAAS,KAAK;AAAA;AAE9C,mBAAO;AAAA;AAAA,UAET,KAAK,SAAS,QAAQ;AACpB,mBAAO,iBAAiB,SAAS,KAAK;AAAA;AAAA,UAExC,KAAK,SAAS,OAAO;AACnB,gBAAI,mBAAmB,MAAM,GAAG,KAAK;AACrC,gBAAI,SAAS,MAAM;AACjB,sBAAQ;AAAA;AAEV,gCAAoB;AACpB,kBAAM,iBAAiB;AACvB,iBAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC1C,qBAAO,IAAI;AACX,kBAAI,KAAK,OAAO,UAAU,OAAO;AAC/B,oCAAoB;AAAA;AAAA;AAGxB,gBAAI,CAAC,mBAAmB;AACtB,qBAAO,iBAAiB,SAAS,sBAAsB,iBAAiB;AAAA,mBACnE;AACL,qBAAO,qBAAqB,iBAAiB;AAAA;AAAA;AAAA;AAKnD,YAAI,OAAO,OAAO,WAAW,cAAe,OAAO,OAAO,OAAO,MAAO;AACtE,iBAAO,WAAW;AAChB,mBAAO;AAAA,cACL,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA;AAAA;AAAA,mBAGK,OAAO,WAAW,eAAgB,OAAO,WAAW,MAAO;AACpE,iBAAO,UAAU;AAAA,YACf,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA;AAAA,eAEG;AACL,iBAAO,QAAQ;AACf,iBAAO,QAAQ;AACf,iBAAO,YAAY;AACnB,iBAAO,eAAe;AAAA;AAAA,SAGvB,KAAK;AAAA;AAAA;;;ACt+BR;AAAA;AAMA,OAAC,SAAS,GAAE;AAAC,QAAY,OAAO,UAAnB,cAA2B,OAAO,MAAI,OAAO,CAAC,WAAU,SAAS,GAAE;AAAC,YAAE,GAAE,QAAO;AAAA,aAAY,AAAU,OAAO,UAAjB,YAAyB,OAAO,UAAQ,OAAO,UAAQ,EAAE,kBAAkB,QAAO,YAAU,EAAE,QAAO,QAAO;AAAA,QAAW,SAAS,GAAE,GAAE,GAAE,GAAE;AAAC;AAAa,mBAAW,IAAE,IAAE;AAAC,eAAK,IAAE,EAAE,KAAG,KAAK,IAAE,EAAE,OAAO,IAAG,GAAE,KAAG,KAAK,KAAG,MAAI,IAAE,KAAI,KAAK,IAAE,QAAQ,GAAE,oBAAmB,KAAK,IAAE,QAAQ,EAAE,IAAG,KAAK;AAAA;AAAgB,YAAI,IAAE,gBAAe,IAAE,GAAE,IAAE,EAAC,eAAc,MAAG,kBAAiB,MAAG,iBAAgB,UAAS,mBAAkB,MAAK,mBAAkB,IAAG,kBAAiB,IAAG,iBAAgB,MAAG,aAAY,MAAK,aAAY,IAAG,gBAAe,IAAG,cAAa,MAAG,eAAc,IAAG,uBAAsB,UAAS,oBAAmB,CAAC,MAAK,OAAM,kBAAiB,OAAG,aAAY,MAAI,IAAE,EAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,KAAG,IAAE,CAAC,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM;AAAO,UAAE,GAAG,GAAG,QAAO,WAAU;AAAC,YAAE,GAAG,GAAG,eAAa;AAAA,YAAK,EAAE,YAAU,EAAC,IAAG,WAAU;AAAC,iBAAO,KAAK,EAAE,gBAAe,MAAK,EAAE,mBAAiB,QAAI,KAAK,EAAE,oBAAmB,MAAK,EAAE,mBAAiB,KAAK,EAAE,eAAa,QAAI,KAAK,IAAE,oEAAoE,KAAK,UAAU,YAAW,KAAK,KAAI,GAAE,QAAQ,SAAS,eAAc,KAAK,EAAE,qBAAoB,MAAK,EAAE,oBAAkB,UAAS,KAAK,IAAE,IAAI,EAAE,YAAS,KAAK,IAAE,IAAI,EAAE,YAAS,KAAK,IAAE,IAAG,KAAK,MAAK,KAAK,MAAK,KAAK,MAAK,KAAK,MAAK,KAAK,OAAM,CAAC,KAAK,GAAE,KAAK;AAAA,WAAI,IAAG,WAAU;AAAC,eAAK,MAAK,KAAK,OAAM,KAAK;AAAA,WAAM,IAAG,SAAS,IAAE,IAAE,IAAE;AAAC,gBAAK,KAAK,KAAI,MAAK,EAAE,MAAG;AAAI,cAAI,KAAE,MAAG;AAAE,eAAK,EAAE,IAAG,MAAG;AAAA,WAAG,IAAG,WAAU;AAAC,cAAG,KAAK,EAAE,cAAc,QAAO;AAAC,gBAAI,KAAE,KAAK,EAAE,cAAc,IAAI,SAAS,IAAE;AAAC,qBAAO,GAAE;AAAA;AAAgB,iBAAK,IAAE,EAAE,OAAO,SAAS,IAAE;AAAC,qBAAO,GAAE,QAAQ,GAAE,QAAM;AAAA;AAAA,qBAAa,KAAK,EAAE,iBAAiB,QAAO;AAAC,gBAAI,KAAE,KAAK,EAAE,iBAAiB,IAAI,SAAS,IAAE;AAAC,qBAAO,GAAE;AAAA;AAAgB,iBAAK,IAAE,EAAE,OAAO,SAAS,IAAE;AAAC,qBAAM,AAAK,GAAE,QAAQ,GAAE,UAAjB;AAAA;AAAA;AAA8B,iBAAK,IAAE;AAAA,WAAG,KAAI,WAAU;AAAC,eAAK,IAAE;AAAG,mBAAQ,KAAE,GAAE,KAAE,KAAK,EAAE,QAAO,MAAI;AAAC,gBAAI,KAAE,KAAK,EAAE;AAAG,gBAAG,KAAK,GAAG,GAAE,MAAK,GAAE,UAAS,GAAE,WAAU,GAAE;AAAU,uBAAQ,KAAE,GAAE,KAAE,GAAE,UAAU,QAAO;AAAI,qBAAK,GAAG,GAAE,MAAK,GAAE,WAAS,GAAE,UAAU;AAAA;AAAA,WAAM,IAAG,WAAU;AAAC,eAAK,qBAAmB;AAAG,mBAAQ,KAAE,GAAE,KAAE,KAAK,EAAE,mBAAmB,QAAO,MAAI;AAAC,gBAAI,KAAE,KAAK,EAAE,mBAAmB,IAAG,eAAc,KAAE,KAAK,GAAG,IAAE,OAAG;AAAI,kBAAG,KAAK,mBAAmB,KAAK;AAAA;AAAA,WAAK,IAAG,WAAU;AAAC,eAAK,EAAE,KAAK,gBAAe;AAAO,cAAI,KAAE;AAAiB,eAAK,EAAE,iBAAgB,OAAG,oBAAmB,KAAK,EAAE,oBAAmB,OAAG,wBAAuB,KAAK,EAAE,KAAK,EAAE,SAAQ,EAAC,SAAQ,QAAK,KAAK,IAAE,EAAE,SAAQ,EAAC,SAAQ,oBAAmB,aAAa,KAAK;AAAG,cAAI,KAAE,EAAE,SAAQ,EAAC,SAAQ;AAAkB,aAAE,SAAS,KAAK,IAAG,KAAK,IAAE,EAAE,SAAQ,EAAC,SAAQ,cAAa,SAAS,KAAG,KAAK,EAAE,oBAAmB,MAAK,IAAE,EAAE,SAAQ,EAAC,SAAQ,wBAAuB,SAAS,MAAI,KAAK,EAAE,gBAAe,IAAE,KAAK,YAAW,MAAK,EAAE,SAAQ,EAAC,SAAQ,eAAc,SAAS,KAAG,KAAK,IAAE,EAAE,QAAO,EAAC,SAAQ,wBAAsB,KAAK,mBAAmB,UAAS,MAAK,GAAG,KAAK,oBAAmB,cAAa,EAAE,QAAO,EAAC,SAAQ,aAAY,SAAS,KAAK,KAAI,KAAK,GAAG,KAAK,GAAE,KAAI,KAAK,IAAE,KAAK,EAAE,SAAS,aAAY,KAAK,EAAE,oBAAkB,KAAK,WAAS,EAAE,SAAQ,EAAC,SAAQ,kCAAiC,OAAO,KAAK,KAAG,KAAK,EAAE,SAAS,KAAK,MAAI,KAAK,IAAE,KAAI,KAAK,EAAE,eAAc,MAAK,cAAY,EAAE,WAAU,EAAC,MAAK,UAAS,MAAK,KAAK,EAAE,eAAc,aAAa,KAAK;AAAA,WAAK,IAAG,SAAS,IAAE,IAAE;AAAC,mBAAQ,KAAE,IAAG,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,gBAAI,KAAE,GAAE;AAAG,kBAAG,wBAAsB,KAAE,uBAAqB,GAAE,WAAS,0BAAwB,GAAE,OAAK,MAAK,MAAG,gDAA8C,GAAE,OAAK,kBAAiB,MAAG,gCAA8B,GAAE,OAAK,WAAU,MAAG,8BAA4B,GAAE,WAAS,WAAU,MAAG;AAAA;AAAQ,eAAK,EAAE,OAAO;AAAA,WAAI,IAAG,WAAU;AAAC,cAAI,KAAE,KAAK,EAAE;AAAM,eAAK,IAAI,OAAK,EAAC,KAAK,kBAAkB,OAAI,KAAK,EAAE,gBAAc,CAAC,KAAK,EAAE,kBAAgB,KAAK,GAAG,MAAG,AAAS,KAAK,EAAE,mBAAhB,UAAiC,MAAK,EAAE,iBAAe,KAAK,GAAG,KAAK,EAAE,eAAe,iBAAgB,MAAK,IAAE,KAAK,mBAAmB,SAAO,KAAK,mBAAmB,GAAG,OAAK,KAAK,EAAE,GAAG,MAAK,MAAG,KAAK,GAAG,KAAK,KAAI,MAAG,KAAK,EAAE,gBAAc,KAAK,EAAE,oBAAkB,KAAK,EAAE,oBAAkB,KAAK,EAAE,IAAI,MAAI,KAAK,EAAE,YAAW,MAAG,KAAK,GAAG;AAAA,WAAI,IAAG,WAAU;AAAC,eAAK,MAAK,KAAK,EAAE,oBAAkB,KAAK,MAAK,KAAK,EAAE,iBAAe,KAAK,OAAM,KAAK,eAAa,KAAK;AAAA,WAA4B,0BAAyB,WAAU;AAAC,cAAI,KAAE,MAAK,KAAE,KAAK,EAAE,QAAQ;AAAQ,aAAE,UAAQ,GAAE,OAAO,WAAU;AAAC,eAAE,YAAY,IAAI,GAAE;AAAA;AAAA,WAAgB,KAAI,WAAU;AAAC,cAAI,KAAE,MAAK,KAAE,KAAK,EAAE,QAAQ;AAAS,aAAE,UAAQ,GAAE,GAAG,UAAQ,KAAK,IAAG,SAAS,IAAE;AAAC,eAAE,EAAE,SAAS,UAAQ,GAAE,EAAE,UAAQ,GAAE;AAAA,cAAmB,KAAK,EAAE,SAAS,GAAG,UAAQ,KAAK,IAAG,SAAS,IAAE;AAAC,aAAC,GAAE,EAAE,SAAS,WAAS,GAAE,EAAE,KAAK,eAAa,GAAE,EAAE,KAAK,eAAa,GAAE;AAAA,cAAO,KAAK,EAAE,GAAG,YAAU,GAAE,IAAG,SAAS,IAAE;AAAC,aAAC,GAAE,EAAE,SAAS,WAAS,GAAE,SAAO,EAAE,KAAG,GAAE,SAAO,EAAE,KAAG,GAAE,SAAO,EAAE,KAAG,GAAE,SAAO,EAAE,KAAI,IAAE,kBAAiB,GAAE,mBAAkB,GAAE,OAAM,GAAE,SAAO,EAAE,KAAG,GAAE;AAAA;AAAA,WAAS,KAAI,WAAU;AAAC,cAAI,KAAE;AAAK,eAAK,EAAE,cAAY,EAAE,GAAG,GAAG,eAAa,EAAE,GAAG,GAAG,UAAU,KAAK,EAAE,aAAY,KAAK,KAAG,EAAE,GAAG,GAAG,QAAO,WAAU;AAAC,cAAE,GAAG,GAAG,UAAU,GAAE,EAAE,aAAY,GAAE;AAAA,eAAK,KAAK,EAAE,WAAU,AAAS,KAAK,EAAE,mBAAhB,SAA+B,KAAK,QAAM,KAAK,EAAE;AAAA,WAAW,KAAI,WAAU;AAAC,YAAE,GAAG,GAAG,cAAY,KAAK,sBAAoB,EAAE,GAAG,GAAG,6BAA4B,GAAE,GAAG,GAAG,4BAA0B,MAAG,AAAY,OAAO,KAAK,EAAE,eAA1B,cAAuC,KAAK,EAAE,YAAY,SAAS,IAAE;AAAC,cAAE,GAAG,GAAG,cAAY,GAAE,eAAc,WAAW,WAAU;AAAC,gBAAE,yBAAyB,aAAa;AAAA;AAAA;AAAA,WAA2B,IAAG,WAAU;AAAC,cAAI,KAAE;AAAK,eAAK,EAAE,GAAG,UAAQ,KAAK,IAAG,WAAU;AAAC,eAAE,GAAG,GAAE,EAAE,UAAQ,GAAE;AAAA,cAA0B,KAAK,EAAE,GAAG,QAAM,KAAK,KAAG,WAAS,KAAK,IAAG,WAAU;AAAC,uBAAW,WAAU;AAAC,iBAAE,GAAG,GAAE,EAAE,UAAQ,GAAE;AAAA;AAAA;AAAA,WAA6B,KAAI,SAAS,IAAE;AAAC,cAAI,KAAE,KAAK,EAAE,KAAK;AAAa,iBAAO,MAAG,GAAE,SAAO,KAAE,GAAE,OAAO,GAAE,MAAG;AAAA,WAAG,IAAG,WAAU;AAAC,cAAI,KAAE;AAAK,eAAK,EAAE,GAAG,cAAY,KAAK,IAAG,SAAS,IAAE;AAAC,eAAE,EAAE,GAAG,aAAW,GAAE,EAAE,SAAQ,IAAE,kBAAiB,GAAE,EAAE;AAAA,cAAW,KAAK,EAAE,GAAG,UAAQ,KAAK,IAAG,SAAS,IAAE;AAAC,eAAE,EAAE,SAAO,GAAE,EAAE,KAAK,eAAa,CAAC,GAAE,EAAE,YAAW,IAAE,EAAE,IAAI,MAAI,GAAE,EAAE,WAAU,GAAE,EAAE,IAAI,kBAAgB,GAAE,IAAG,SAAS,IAAE;AAAC,iBAAE,SAAO,EAAE,KAAG,GAAE,EAAE,IAAI;AAAA,gBAAM,WAAW,WAAU;AAAC,kBAAI,KAAE,GAAE,EAAE;AAAG,kBAAG,GAAE,GAAE;AAAC,oBAAI,KAAE,GAAE,EAAE,MAAM;AAAO,mBAAE,kBAAkB,IAAE;AAAA;AAAA;AAAA;AAAS,cAAI,KAAE,KAAK,EAAE,KAAK;AAAQ,gBAAG,EAAE,IAAG,GAAG,WAAS,KAAK,IAAG,WAAU;AAAC,eAAE;AAAA,cAAyB,KAAK,EAAE,GAAG,SAAO,KAAK,IAAG,WAAU;AAAC,eAAE;AAAA;AAAA,WAA0B,sBAAqB,WAAU;AAAC,cAAI,KAAE,KAAK,EAAE;AAAM,cAAG,AAAK,GAAE,OAAO,MAAd,KAAiB;AAAC,gBAAI,KAAE,KAAK,GAAG;AAAG,kBAAG,KAAK,EAAE,YAAU,MAAG,KAAK,EAAE,IAAI;AAAA;AAAI,eAAK,EAAE,IAAI,kBAAgB,KAAK;AAAA,WAAK,IAAG,SAAS,IAAE;AAAC,iBAAO,GAAE,QAAQ,OAAM;AAAA,WAAK,IAAG,WAAU;AAAC,eAAK;AAAK,cAAI,KAAE,KAAK,EAAE,SAAS;AAAW,aAAE,UAAS,MAAK,GAAG,KAAG,KAAK,IAAI,MAAI,KAAK,MAAK,KAAK,EAAE,SAAS,cAAc,SAAS,OAAM,KAAK,EAAE,QAAQ;AAAA,WAAyB,IAAG,WAAU;AAAC,cAAI,KAAE;AAAK,cAAG,KAAK,EAAE,qBAAmB,KAAK,SAAS,SAAS,KAAK,EAAE,oBAAmB,KAAK,IAAE,KAAK,EAAE,YAAY,QAAQ,eAAc,CAAC,KAAK,GAAE;AAAC,gBAAI,KAAE,KAAK,EAAE,UAAS,KAAE,GAAE,KAAI,KAAE,EAAE,GAAG,aAAY,KAAE,KAAE,KAAK,EAAE,gBAAc,KAAK,IAAE,KAAE,EAAE,GAAG,UAAS,KAAE,KAAE,KAAK,IAAE;AAAE,gBAAG,KAAK,EAAE,YAAY,UAAS,CAAC,MAAG,KAAG,KAAK,EAAE,mBAAkB;AAAC,kBAAI,KAAE,CAAC,MAAG,KAAE,IAAE,KAAK,EAAE;AAAc,mBAAK,SAAS,IAAI,EAAC,KAAI,KAAE,IAAE,MAAK,GAAE,SAAO,EAAE,GAAG,GAAG,WAAS,KAAK,IAAG,WAAU;AAAC,mBAAE;AAAA;AAAA;AAAA;AAAA,WAAW,IAAG,WAAU;AAAC,cAAI,KAAE;AAAK,eAAK,EAAE,GAAG,cAAY,KAAK,IAAG,YAAW,SAAS,IAAE;AAAC,eAAE,GAAG,EAAE;AAAA,cAAS,KAAK,EAAE,GAAG,UAAQ,KAAK,IAAG,YAAW,SAAS,IAAE;AAAC,eAAE,IAAI,EAAE;AAAA;AAAS,cAAI,KAAE;AAAG,YAAE,QAAQ,GAAG,UAAQ,KAAK,IAAG,SAAS,IAAE;AAAC,kBAAG,GAAE,OAAM,KAAE;AAAA;AAAK,cAAI,KAAE,IAAG,KAAE;AAAK,YAAE,GAAG,GAAG,YAAU,KAAK,IAAG,SAAS,IAAE;AAAC,eAAE,kBAAiB,GAAE,SAAO,EAAE,KAAG,GAAE,SAAO,EAAE,IAAE,GAAE,GAAG,GAAE,SAAO,GAAE,SAAO,EAAE,IAAE,GAAE,OAAK,GAAE,SAAO,EAAE,IAAE,GAAE,QAAO,IAAE,SAAO,EAAE,KAAG,GAAE,SAAO,EAAE,KAAG,GAAE,SAAO,EAAE,MAAK,OAAG,aAAa,KAAG,MAAG,OAAO,aAAa,GAAE,QAAO,GAAE,GAAG,KAAG,KAAE,WAAW,WAAU;AAAC,mBAAE;AAAA,eAAI;AAAA;AAAA,WAAS,IAAG,SAAS,IAAE;AAAC,cAAI,KAAE,KAAK,EAAE,SAAS,cAAc,SAAQ,KAAE,MAAG,EAAE,IAAE,GAAE,SAAO,GAAE;AAAO,aAAE,UAAS,IAAE,SAAS,cAAa,MAAE,MAAG,EAAE,IAAE,GAAE,SAAO,GAAE,SAAQ,KAAK,GAAG,KAAG,KAAK,IAAI;AAAA,WAAK,IAAG,WAAU;AAAC,cAAI,KAAE,KAAK,EAAE,SAAS,cAAc;AAAQ,aAAE,UAAQ,KAAK,IAAI;AAAA,WAAI,IAAG,SAAS,IAAE;AAAC,mBAAQ,KAAE,GAAE,KAAE,KAAK,EAAE,QAAO;AAAI,gBAAG,KAAK,GAAG,KAAK,EAAE,IAAG,MAAK,KAAG;AAAC,kBAAI,KAAE,KAAK,EAAE,SAAS,wBAAsB,KAAK,EAAE,IAAG,OAAK,KAAK,IAAI;AAAc,mBAAK,GAAG,KAAG,KAAK,IAAI,IAAE;AAAI;AAAA;AAAA,WAAQ,IAAG,SAAS,IAAE,IAAE;AAAC,iBAAO,GAAE,OAAO,GAAE,GAAE,QAAQ,iBAAe;AAAA,WAAG,IAAG,SAAS,IAAE;AAAC,cAAG,KAAK,EAAE,mBAAiB,EAAE,qBAAmB,KAAK,GAAE;AAAC,gBAAI,KAAE,KAAK,EAAE,oBAAkB,CAAC,KAAK,EAAE,gBAAc,AAAK,GAAE,OAAO,MAAd,MAAiB,kBAAkB,aAAa,gBAAc,kBAAkB,aAAa;AAAS,iBAAE,kBAAkB,aAAa,IAAE,KAAK,EAAE,MAAK;AAAA;AAAG,eAAE,KAAK,IAAI,KAAG,KAAK,EAAE,IAAI;AAAA,WAAI,IAAG,SAAS,IAAE;AAAC,gBAAG,KAAK,EAAE,gBAAc,AAAK,KAAK,EAAE,YAAZ,OAAsB,AAAK,GAAE,OAAO,MAAd,OAAmB,CAAK,GAAE,OAAO,MAAd,OAAmB,MAAE,MAAI,KAAG,KAAE,MAAI;AAAG,cAAI,KAAE,KAAK,IAAI,KAAG,KAAE,MAAK,KAAE,KAAK,GAAG;AAAG,cAAG,IAAE;AAAC,gBAAI,KAAE,KAAK,EAAE,KAAK,GAAG,MAAI,KAAE,EAAE,QAAQ,KAAK,EAAE,MAAK,MAAG,IAAG,KAAE,AAAM,MAAN,QAAS,GAAE,UAAQ;AAAE,gBAAI,EAAE,CAAK,KAAK,EAAE,YAAZ,QAAuB,CAAC,KAAK,kBAAkB,QAAM,EAAC,MAAG;AAAG,uBAAQ,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,oBAAG,GAAE,KAAG;AAAC,uBAAE,GAAE;AAAG;AAAA;AAAA;AAAA;AAAW,YAAK,GAAE,OAAO,MAAd,OAAkB,GAAE,SAAO,KAAE,KAAG,MAAG,AAAK,MAAL,OAAS,MAAE,KAAK;AAAG,iBAAO,AAAO,OAAP,QAAU,KAAK,GAAG;AAAA,WAAI,mBAAkB,SAAS,IAAE;AAAC,cAAI,KAAE,KAAK,GAAG;AAAG,cAAG,AAAK,GAAE,OAAO,MAAd,KAAiB;AAAC,gBAAI,KAAE,GAAE,OAAO,GAAE;AAAG,mBAAO,EAAE,QAAQ,IAAE,KAAG;AAAA;AAAG,iBAAM;AAAA,WAAI,IAAG,SAAS,IAAE;AAAC,eAAK,EAAE,YAAY,cAAa,GAAE,SAAS;AAAA,WAAc,IAAG,SAAS,IAAE,IAAE,IAAE;AAAC,mBAAQ,KAAE,KAAE,IAAE,KAAK,GAAE,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,gBAAG,GAAE,IAAG,QAAM;AAAE,qBAAO,GAAE;AAAG,cAAG;AAAE,mBAAO;AAAK,gBAAM,IAAI,MAAM,0BAAwB,KAAE;AAAA,WAAM,IAAG,SAAS,IAAE;AAAC,cAAI,KAAE,KAAK,EAAE,OAAK,KAAK,IAAE;AAAG,eAAK,IAAE,KAAE,KAAK,GAAG,IAAE,OAAG,SAAI,IAAG,KAAK,EAAE,QAAO,MAAK,IAAE,KAAK,EAAE,OAAM,KAAK,EAAE,KAAK,SAAQ,cAAY;AAAG,cAAI,KAAE,KAAE,KAAK,EAAE,OAAK,QAAM,KAAK,EAAE,WAAS;AAAU,cAAG,KAAK,EAAE,SAAS,KAAK,SAAQ,KAAG,KAAK,EAAE,kBAAiB;AAAC,gBAAI,KAAE,KAAK,EAAE,WAAS,MAAI,KAAK,EAAE,WAAS,IAAG,KAAE,KAAK,EAAE;AAAS,eAAE,YAAU,GAAE,YAAY,aAAY,IAAE,SAAS,SAAO,KAAI,MAAG,GAAE,SAAS,aAAW,GAAE,SAAQ,KAAK,EAAE,KAAK;AAAA;AAAG,iBAAO,KAAK,OAAM,KAAK,EAAE,YAAY,WAAU,MAAG,KAAK,EAAE,KAAK,eAAa,IAAG,QAAQ,QAAQ,YAAY,SAAS,WAAU,GAAE,SAAO;AAAA,WAAG,KAAI,WAAU;AAAC,cAAI,KAAE,AAAe,KAAK,EAAE,oBAAtB,gBAAuC,CAAC,KAAK,KAAI,CAAK,KAAK,EAAE,oBAAZ,QAA6B,AAAW,KAAK,EAAE,oBAAlB;AAAmC,cAAG,EAAE,qBAAmB,IAAE;AAAC,gBAAI,KAAE,kBAAkB,WAAW,KAAK,EAAE,wBAAuB,KAAE,KAAK,EAAE,OAAK,kBAAkB,iBAAiB,KAAK,EAAE,MAAK,KAAK,EAAE,cAAa,MAAG;AAAG,iBAAE,KAAK,IAAI,KAAG,AAAY,OAAO,KAAK,EAAE,qBAA1B,cAA8C,MAAE,KAAK,EAAE,kBAAkB,IAAE,KAAK,KAAI,KAAK,EAAE,KAAK,eAAc;AAAA;AAAA,WAAK,KAAI,SAAS,IAAE;AAAC,cAAI,KAAE,KAAK,GAAG,GAAE,KAAK;AAAsB,cAAG,KAAK,OAAM,KAAK,IAAI,GAAE,KAAK,mBAAkB,OAAI,KAAK,EAAE,SAAQ,KAAK,GAAE;AAAC,gBAAI,KAAE,KAAK,EAAE,MAAM;AAAO,iBAAK,EAAE,GAAG,kBAAkB,IAAE;AAAA;AAAG,gBAAG,KAAK;AAAA,WAAyB,KAAI,WAAU;AAAC,eAAK,EAAE,SAAS,SAAQ,KAAK,EAAE,SAAS,cAAc,YAAY,OAAM,EAAE,GAAG,IAAI,KAAK,KAAI,EAAE,QAAQ,IAAI,KAAK,KAAI,KAAK,EAAE,IAAI,KAAK,KAAI,KAAK,EAAE,qBAAoB,MAAK,KAAG,EAAE,GAAG,IAAI,WAAS,KAAK,KAAI,KAAK,SAAS,WAAU,KAAK,EAAE,QAAQ;AAAA,WAA0B,KAAI,SAAS,IAAE,IAAE;AAAC,cAAI,KAAE,KAAK,GAAE,KAAE,GAAE,UAAS,KAAE,GAAE,SAAS,KAAI,KAAE,KAAE,IAAE,KAAE,GAAE,eAAc,KAAE,GAAE,SAAS,KAAI,KAAE,KAAE,IAAE,KAAE,KAAE,KAAE,GAAE,aAAY,KAAE,KAAE,IAAE,KAAE;AAAE,cAAG,KAAE;AAAE,kBAAI,OAAG,KAAG,GAAE,UAAU;AAAA,mBAAW,KAAE,IAAE;AAAC,kBAAI,OAAG;AAAG,gBAAI,KAAE,KAAE;AAAE,eAAE,UAAU,KAAE;AAAA;AAAA,WAAK,KAAI,SAAS,IAAE,IAAE;AAAC,cAAI,IAAE,KAAE,KAAK,EAAE;AAAM,cAAG,KAAE,MAAI,IAAE,AAAK,GAAE,OAAO,MAAd,KAAiB;AAAC,gBAAI,KAAE,KAAK,IAAI;AAAG,iBAAE,KAAE,GAAE,QAAQ,IAAE,MAAG;AAAA,iBAAM;AAAC,gBAAG,KAAK,EAAE,gBAAc,KAAK,EAAE;AAAiB;AAAO,gBAAG;AAAE,mBAAE,KAAE;AAAA,iBAAM;AAAC,kBAAG,CAAC,MAAG,KAAK,EAAE;AAAiB;AAAO,mBAAE;AAAA;AAAA;AAAG,eAAK,EAAE,IAAI;AAAA,WAAI,KAAI,SAAS,IAAE;AAAC,cAAI,KAAE;AAAG,cAAG,AAAK,GAAE,OAAO,MAAd;AAAiB,qBAAQ,KAAE,IAAG,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,kBAAI,KAAE,GAAE,OAAO;AAAG,kBAAG,EAAE,UAAU,OAAK,OAAG,IAAE,KAAK,EAAE,OAAK,MAAE,GAAE,OAAO,GAAE,KAAE,KAAI,AAAG,GAAE,UAAL;AAAa;AAAA;AAAM,iBAAO;AAAA,WAAG,KAAI,WAAU;AAAC,cAAI,KAAE,EAAE,KAAK,KAAK,EAAE,QAAO,KAAE,KAAK,EAAE,UAAS,KAAE,KAAK,GAAG,KAAG,KAAE,AAAK,GAAE,OAAO,MAAd,MAAiB,KAAE,MAAI;AAAE,iBAAO,MAAK,EAAE,mBAAiB,MAAI,KAAE,AAAK,GAAE,OAAO,MAAd,OAAkB,AAAK,GAAE,OAAO,MAAd,OAAkB,MAAG,AAAK,GAAE,OAAO,MAAd,OAAkB,AAAG,GAAE,UAAL,KAAa,MAAG,GAAE,OAAO,GAAE,KAAG,GAAE,OAAO,KAAG,MAAI;AAAA,WAAG,KAAI,SAAS,IAAE;AAAC,cAAG,KAAK,EAAE,kBAAiB;AAAC,gBAAI,KAAE,KAAK,IAAI;AAAG,gBAAG,IAAE;AAAC,cAAO,KAAK,EAAE,cAAd,QAA0B,MAAE,MAAI,KAAK,EAAE;AAAU,kBAAI,KAAE,AAAM,GAAE,GAAE,YAAV,OAAmB,AAAM,GAAE,GAAE,YAAV,MAAkB,GAAE,SAAO,IAAE,GAAE;AAAO,mBAAE,GAAE,OAAO;AAAA;AAAA;AAAI,iBAAO,KAAK,IAAI;AAAA,WAAI,uBAAsB,WAAU;AAAC,eAAK,EAAE,QAAQ,iBAAgB,KAAK;AAAA,WAAI,mBAAkB,WAAU;AAAC,UAAS,KAAK,EAAE,mBAAhB,UAAiC,MAAK,IAAE,EAAE,GAAG,GAAG,aAAY,KAAK,EAAE,SAAO,KAAK,WAAW,KAAK,IAAG,KAAK,EAAE;AAAA,WAAY,aAAY,WAAU;AAAC,YAAE,qBAAoB,MAAK,EAAE,SAAO,KAAK,GAAG,KAAK,EAAE,QAAO,KAAK,QAAO,KAAK,EAAE;AAAA,WAAW,SAAQ,WAAU;AAAC,cAAG,KAAK,iBAAgB,MAAK,OAAM,KAAK,EAAE,SAAS,IAAI,KAAK,KAAI,KAAK,EAAE,QAAQ,SAAS,IAAI,KAAK,MAAK,KAAK,EAAE,kBAAiB;AAAC,gBAAI,KAAE,KAAK,EAAE,KAAK;AAAQ,kBAAG,EAAE,IAAG,IAAI,KAAK;AAAA;AAAI,eAAK,EAAE,IAAI,KAAK,KAAI,KAAK,EAAE,SAAS,OAAO,KAAK,GAAG;AAAA,WAAU,cAAa,WAAU;AAAC,iBAAO,EAAE,oBAAkB,kBAAkB,aAAa,KAAK,OAAM,KAAK,EAAE,QAAM;AAAA,WAAI,WAAU,SAAS,IAAE;AAAC,iBAAO,EAAE,oBAAkB,kBAAkB,aAAa,KAAK,OAAM,KAAK,EAAE,MAAK,MAAG;AAAA,WAAI,eAAc,WAAU;AAAC,iBAAO,EAAE,oBAAkB,kBAAkB,cAAc,KAAK,OAAM,KAAK,EAAE,QAAM;AAAA,WAAK,wBAAuB,WAAU;AAAC,iBAAO,KAAK;AAAA,WAAG,oBAAmB,WAAU;AAAC,iBAAO,EAAE,oBAAkB,kBAAkB,mBAAmB,KAAK,OAAM,KAAK,EAAE,QAAM;AAAA,WAAK,eAAc,WAAU;AAAC,cAAI,KAAE,EAAE,KAAK,KAAK,QAAO,KAAE,KAAK,EAAE,eAAa,KAAK,EAAE,OAAK;AAAG,iBAAO,EAAE,oBAAkB,kBAAkB,cAAc,IAAE,MAAG;AAAA,WAAM,YAAW,SAAS,IAAE;AAAC,eAAE,GAAE,eAAc,KAAK,EAAE,SAAS,OAAK,MAAK,GAAG,KAAG,KAAK,IAAI,KAAK,EAAE,UAAS,QAAI,KAAK;AAAA,WAA0B,WAAU,SAAS,IAAE;AAAC,cAAI,KAAE,KAAK,GAAG;AAAG,eAAK,GAAG,KAAG,MAAG,KAAK;AAAA,WAAyB,0BAAyB,SAAS,IAAE;AAAC,eAAK,EAAE,wBAAsB,IAAE,KAAK;AAAA,aAAQ,EAAE,GAAG,KAAG,SAAS,IAAE;AAAC,cAAI,KAAE;AAAU,cAAG,OAAI,KAAG,AAAU,OAAO,MAAjB,UAAmB;AAAC,gBAAI,KAAE;AAAG,mBAAO,KAAK,KAAK,WAAU;AAAC,kBAAG,CAAC,EAAE,KAAK,MAAK,YAAU,IAAG;AAAC,oBAAI,KAAE,IAAI,EAAE,MAAK,KAAG,KAAE,GAAE;AAAK,mBAAE,KAAK,GAAE,KAAI,GAAE,KAAK,GAAE,KAAI,EAAE,KAAK,MAAK,YAAU,GAAE;AAAA;AAAA,gBAAM,EAAE,KAAK,MAAM,MAAK;AAAA;AAAG,cAAG,AAAU,OAAO,MAAjB,YAAoB,AAAM,GAAE,OAAR,KAAW;AAAC,gBAAI;AAAE,mBAAO,KAAK,KAAK,WAAU;AAAC,kBAAI,KAAE,EAAE,KAAK,MAAK,YAAU;AAAG,4BAAa,KAAG,AAAY,OAAO,GAAE,OAArB,cAA0B,MAAE,GAAE,IAAG,MAAM,IAAE,MAAM,UAAU,MAAM,KAAK,IAAE,MAAK,AAAY,OAAZ,aAAe,EAAE,KAAK,MAAK,YAAU,GAAE;AAAA,gBAAQ,OAAI,IAAE,KAAE;AAAA;AAAA,WAAO,EAAE,GAAG,GAAG,iBAAe,WAAU;AAAC,iBAAO;AAAA,WAAG,EAAE,GAAG,GAAG,YAAU,SAAS,IAAE,IAAE;AAAC,YAAE,GAAG,GAAG,oBAAkB,MAAG,GAAE,YAAW,GAAE,GAAG,GAAG,oBAAkB,MAAG,EAAE,KAAK,EAAC,MAAK,OAAM,KAAI,IAAE,UAAS,WAAU;AAAC,cAAE,yBAAyB,aAAa;AAAA,aAAgB,UAAS,UAAS,OAAM;AAAA,WAAO,EAAE,GAAG,GAAG,WAAS,GAAE,EAAE,GAAG,GAAG,UAAQ;AAAS,iBAAQ,IAAE,CAAC,CAAC,0FAA6B,MAAK,OAAM,CAAC,yBAAqB,MAAK,QAAO,CAAC,0EAAuB,MAAK,QAAO,CAAC,kBAAiB,MAAK,SAAQ,CAAC,WAAU,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,YAAW,MAAK,SAAQ,CAAC,uBAAsB,MAAK,SAAQ,CAAC,aAAY,MAAK,OAAM,CAAC,8DAAqB,MAAK,QAAO,CAAC,SAAQ,MAAK,QAAO,CAAC,aAAY,MAAK,MAAK,IAAG,CAAC,2BAAuB,MAAK,OAAM,CAAC,gCAA0B,MAAK,QAAO,CAAC,WAAU,MAAK,SAAQ,CAAC,0EAAuB,MAAK,QAAO,CAAC,iEAAwB,MAAK,QAAO,CAAC,YAAW,MAAK,SAAQ,CAAC,8DAAqB,MAAK,QAAO,CAAC,uBAAmB,MAAK,OAAM,CAAC,UAAS,MAAK,QAAO,CAAC,oBAAgB,MAAK,QAAO,CAAC,WAAU,MAAK,SAAQ,CAAC,2CAAiB,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,qIAA+C,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,mBAAkB,MAAK,OAAM,CAAC,kCAAiC,MAAK,QAAO,CAAC,0BAAyB,MAAK,SAAQ,CAAC,UAAS,MAAK,QAAO,CAAC,+DAAsB,MAAK,QAAO,CAAC,gBAAe,MAAK,QAAO,CAAC,sBAAqB,MAAK,QAAO,CAAC,yDAAqB,MAAK,QAAO,CAAC,uBAAsB,MAAK,QAAO,CAAC,UAAS,MAAK,KAAI,GAAE,CAAC,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,SAAQ,CAAC,2BAA0B,MAAK,QAAO,CAAC,yBAAwB,MAAK,OAAM,IAAG,CAAC,kBAAiB,MAAK,SAAQ,CAAC,2DAAuD,MAAK,QAAO,CAAC,gBAAe,MAAK,QAAO,CAAC,SAAQ,MAAK,OAAM,CAAC,wBAAa,MAAK,OAAM,CAAC,oBAAmB,MAAK,MAAK,IAAG,CAAC,2BAA0B,MAAK,MAAK,IAAG,CAAC,YAAW,MAAK,OAAM,CAAC,iFAAyB,MAAK,QAAO,CAAC,kDAAiD,MAAK,QAAO,CAAC,wCAAuC,MAAK,QAAO,CAAC,gBAAe,MAAK,QAAO,CAAC,cAAa,MAAK,QAAO,CAAC,yBAAgB,MAAK,QAAO,CAAC,sBAAqB,MAAK,QAAO,CAAC,QAAO,MAAK,OAAM,CAAC,cAAU,MAAK,OAAM,IAAG,CAAC,iDAAkB,MAAK,QAAO,CAAC,4CAAmC,MAAK,QAAO,CAAC,qBAAoB,MAAK,OAAM,CAAC,YAAW,MAAK,QAAO,CAAC,YAAW,MAAK,SAAQ,CAAC,gDAA4C,MAAK,KAAI,GAAE,CAAC,OAAM,OAAM,SAAQ,CAAC,WAAU,MAAK,QAAO,CAAC,gDAAiB,MAAK,OAAM,CAAC,eAAc,MAAK,QAAO,CAAC,yCAAwC,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,mBAAkB,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,qCAAoC,MAAK,QAAO,CAAC,8BAA0B,MAAK,QAAO,CAAC,QAAO,MAAK,QAAO,CAAC,mBAAkB,MAAK,OAAM,IAAG,CAAC,UAAS,MAAK,OAAM,CAAC,uCAAmC,MAAK,QAAO,CAAC,gDAAyC,MAAK,QAAO,CAAC,SAAQ,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,0EAAuB,MAAK,QAAO,CAAC,yBAAwB,MAAK,OAAM,CAAC,iBAAgB,MAAK,QAAO,CAAC,aAAY,MAAK,QAAO,CAAC,iDAAkB,MAAK,OAAM,CAAC,gCAA+B,MAAK,QAAO,CAAC,WAAU,MAAK,SAAQ,CAAC,cAAa,MAAK,OAAM,IAAG,CAAC,QAAO,MAAK,SAAQ,CAAC,aAAY,MAAK,QAAO,CAAC,YAAW,MAAK,MAAK,IAAG,CAAC,sBAAkB,MAAK,QAAO,CAAC,mCAA+B,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,SAAQ,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,4BAAiB,MAAK,QAAO,CAAC,6BAAyB,MAAK,OAAM,CAAC,uBAAmB,MAAK,QAAO,CAAC,oCAAe,MAAK,OAAM,CAAC,aAAY,MAAK,OAAM,CAAC,2DAAkB,MAAK,OAAM,CAAC,iEAAmB,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,eAAc,MAAK,MAAK,IAAG,CAAC,6DAAoB,MAAK,QAAO,CAAC,kBAAiB,MAAK,MAAK,IAAG,CAAC,WAAU,MAAK,SAAQ,CAAC,wBAAa,MAAK,OAAM,CAAC,UAAS,MAAK,MAAK,IAAG,CAAC,mEAAqB,MAAK,QAAO,CAAC,uEAAyB,MAAK,KAAI,IAAG,CAAC,SAAQ,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,mEAAqB,MAAK,QAAO,CAAC,6EAA0B,MAAK,QAAO,CAAC,6BAAa,MAAK,QAAO,CAAC,oBAAmB,MAAK,QAAO,CAAC,8DAAqB,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,4DAAmB,MAAK,QAAO,CAAC,iBAAgB,MAAK,QAAO,CAAC,uBAAsB,MAAK,QAAO,CAAC,cAAa,MAAK,QAAO,CAAC,wBAAa,MAAK,QAAO,CAAC,oFAAiC,MAAK,QAAO,CAAC,6BAA4B,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,YAAW,MAAK,OAAM,CAAC,YAAW,MAAK,QAAO,CAAC,QAAO,MAAK,QAAO,CAAC,SAAQ,MAAK,QAAO,CAAC,oBAAmB,MAAK,QAAO,CAAC,cAAa,MAAK,QAAO,CAAC,yFAA4B,MAAK,QAAO,CAAC,qBAAoB,MAAK,QAAO,CAAC,WAAU,MAAK,OAAM,IAAG,CAAC,sBAAkB,MAAK,OAAM,CAAC,cAAa,MAAK,QAAO,CAAC,+BAA8B,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,mDAAoB,MAAK,QAAO,CAAC,0BAAyB,MAAK,QAAO,CAAC,cAAa,MAAK,SAAQ,CAAC,oEAAsB,MAAK,OAAM,IAAG,CAAC,8BAA0B,MAAK,QAAO,CAAC,0DAA2B,MAAK,OAAM,CAAC,wBAAoB,MAAK,QAAO,CAAC,SAAQ,MAAK,QAAO,CAAC,0CAAgB,MAAK,QAAO,CAAC,2BAA0B,MAAK,OAAM,CAAC,yCAAqC,MAAK,QAAO,CAAC,eAAc,MAAK,OAAM,CAAC,aAAY,MAAK,QAAO,CAAC,iBAAgB,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,QAAO,MAAK,QAAO,CAAC,kBAAiB,MAAK,QAAO,CAAC,uFAA+B,MAAK,QAAO,CAAC,4BAA2B,MAAK,SAAQ,CAAC,kBAAiB,MAAK,MAAK,IAAG,CAAC,2DAAkB,MAAK,QAAO,CAAC,2EAAwB,MAAK,OAAM,CAAC,SAAQ,MAAK,QAAO,CAAC,sEAAwB,MAAK,QAAO,CAAC,sBAAkB,MAAK,QAAO,CAAC,oBAAmB,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,kBAAc,MAAK,OAAM,CAAC,eAAc,MAAK,OAAM,CAAC,mBAAkB,MAAK,OAAM,CAAC,YAAW,MAAK,QAAO,CAAC,eAAc,MAAK,KAAI,GAAE,CAAC,OAAM,SAAQ,CAAC,gDAAiB,MAAK,QAAO,CAAC,8BAAuB,MAAK,OAAM,IAAG,CAAC,wBAAoB,MAAK,OAAM,CAAC,iDAAkB,MAAK,KAAI,IAAG,CAAC,UAAS,MAAK,QAAO,CAAC,uBAAmB,MAAK,OAAM,IAAG,CAAC,gBAAe,MAAK,QAAO,CAAC,yBAAwB,MAAK,SAAQ,CAAC,eAAc,MAAK,SAAQ,CAAC,qDAAiD,MAAK,OAAM,IAAG,CAAC,wDAAuD,MAAK,QAAO,CAAC,oCAAmC,MAAK,SAAQ,CAAC,SAAQ,MAAK,QAAO,CAAC,cAAa,MAAK,QAAO,CAAC,iEAA8C,MAAK,QAAO,CAAC,2KAA6C,MAAK,QAAO,CAAC,2BAAoB,MAAK,QAAO,CAAC,iDAAkB,MAAK,QAAO,CAAC,cAAa,MAAK,QAAO,CAAC,gBAAe,MAAK,QAAO,CAAC,aAAY,MAAK,OAAM,CAAC,gBAAe,MAAK,SAAQ,CAAC,wBAAuB,MAAK,QAAO,CAAC,wBAAuB,MAAK,QAAO,CAAC,mBAAkB,MAAK,QAAO,CAAC,wBAAuB,MAAK,QAAO,CAAC,gBAAe,MAAK,OAAM,CAAC,0CAAqB,MAAK,OAAM,CAAC,uGAAgC,MAAK,QAAO,CAAC,qBAAiB,MAAK,OAAM,CAAC,6EAA0B,MAAK,OAAM,CAAC,wEAAqB,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,0BAAyB,MAAK,MAAK,IAAG,CAAC,aAAY,MAAK,QAAO,CAAC,oBAAmB,MAAK,OAAM,CAAC,yBAAwB,MAAK,OAAM,CAAC,4DAAmB,MAAK,QAAO,CAAC,yBAAc,MAAK,QAAO,CAAC,cAAa,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,iCAAiB,MAAK,OAAM,CAAC,eAAc,MAAK,QAAO,CAAC,QAAO,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,SAAQ,MAAK,QAAO,CAAC,uBAAsB,MAAK,SAAQ,CAAC,wDAAoB,MAAK,QAAO,CAAC,uBAAmB,MAAK,OAAM,CAAC,gBAAe,MAAK,QAAO,CAAC,4BAA2B,MAAK,SAAQ,CAAC,UAAS,MAAK,QAAO,CAAC,uBAAsB,MAAK,SAAQ,CAAC,UAAS,MAAK,QAAO,CAAC,wDAAoB,MAAK,QAAO,CAAC,mLAAqD,MAAK,QAAO,CAAC,kBAAiB,MAAK,MAAK,IAAG,CAAC,iBAAgB,MAAK,KAAI,IAAG,CAAC,WAAU,MAAK,QAAO,CAAC,iCAA2B,MAAK,QAAO,CAAC,WAAU,MAAK,QAAO,CAAC,wCAAoC,MAAK,MAAK,IAAG,CAAC,aAAY,MAAK,OAAM,CAAC,2BAAqB,MAAK,OAAM,CAAC,wCAAuC,MAAK,QAAO,CAAC,4HAAsC,MAAK,OAAM,IAAG,CAAC,4DAAmB,MAAK,QAAO,CAAC,UAAS,MAAK,QAAO,CAAC,YAAW,MAAK,QAAO,CAAC,oBAAgB,MAAK,OAAM,KAAI,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,cAAI,IAAE,EAAE;AAAG,YAAE,KAAG,EAAC,MAAK,EAAE,IAAG,MAAK,EAAE,IAAG,UAAS,EAAE,IAAG,UAAS,EAAE,MAAI,GAAE,WAAU,EAAE,MAAI;AAAA;AAAA;AAAA;AAAA;;;ACNt8rB;AAAA;AAYA,OAAC,SAAS,GAAE,GAAE;AAAC,QAAY,OAAO,UAAnB,cAA2B,OAAO,MAAI,OAAO,CAAC,WAAU,SAAS,GAAE;AAAC,iBAAO,EAAE,GAAE,EAAE,UAAS,QAAU;AAAA,aAAK,AAAU,OAAO,UAAjB,YAAyB,AAAU,OAAO,OAAO,WAAxB,WAAgC,OAAO,UAAQ,EAAE,GAAE,EAAE,UAAS,QAAU,oBAAmB,EAAE,GAAE,EAAE,UAAS,QAAU,EAAE;AAAA,QAAS,AAAa,OAAO,UAApB,cAA2B,SAAO,SAAK,SAAS,GAAE,GAAE,GAAE,GAAE;AAAC;AAAa,YAAI,GAAE,GAAE,IAAE,qBAAoB,IAAE,EAAC,GAAE,UAAS,GAAE,YAAW,GAAE,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,GAAE,aAAY,GAAE,UAAQ,IAAE,EAAC,GAAE,SAAQ,GAAE,SAAQ,GAAE,MAAK,GAAE,UAAS,GAAE,aAAY,IAAG,gBAAe,IAAG,gBAAe,IAAG,gBAAe,IAAG,eAAc,IAAG,eAAc,IAAG,iBAAe,IAAE,EAAC,IAAG,WAAU;AAAC,iBAAO,EAAE,cAAY,EAAE,gBAAgB,EAAE,OAAK,EAAE,KAAK,EAAE;AAAA,WAAK,IAAG,WAAU;AAAC,iBAAO,EAAE,eAAa,EAAE,gBAAgB,EAAE,OAAK,EAAE,KAAK,EAAE;AAAA,WAAK,IAAG,WAAU;AAAC,iBAAO,EAAE,oBAAkB,EAAE,0BAAwB,EAAE,0BAAwB,EAAE,uBAAqB;AAAA,WAAG,IAAG,WAAU;AAAC,iBAAO,EAAE,kBAAgB,EAAE,wBAAsB,EAAE,wBAAsB,EAAE,qBAAmB;AAAA,WAAG,KAAI,WAAU;AAAC,iBAAO,EAAE,yBAAuB,EAAE,+BAA6B,EAAE,4BAA0B,EAAE,0BAAwB,EAAE,2BAAyB,SAAS,IAAE;AAAC,mBAAO,EAAE,WAAW,IAAE,MAAI;AAAA;AAAA,WAAM,KAAI,WAAU;AAAC,iBAAO,EAAE,wBAAsB,EAAE,8BAA4B,EAAE,2BAAyB,EAAE,yBAAuB,EAAE,0BAAwB,SAAS,IAAE;AAAC,mBAAO,EAAE,aAAa;AAAA;AAAA,WAAK,KAAI,WAAU;AAAC,iBAAO,KAAK,OAAK,KAAK,SAAQ,IAAI,OAAM;AAAA,WAAW,MAAK,SAAS,IAAE;AAAC,aAAE,kBAAgB,GAAE,oBAAkB,GAAE,eAAa;AAAA,WAAI,MAAK,SAAS,IAAE;AAAC,aAAE,kBAAgB,GAAE,aAAW,GAAE,mBAAiB,GAAE,cAAY;AAAA,WAAI,MAAK,SAAS,IAAE;AAAC,cAAI,KAAE,QAAO,KAAE,UAAS,KAAE,KAAI,KAAE,KAAI,KAAI,OAAE,GAAE,iBAAe,IAAG,UAAQ,GAAE,cAAY,GAAG,iBAAe,GAAE,KAAE,GAAE,iBAAgB,KAAE,GAAE;AAAK,cAAG,GAAE,YAAU,GAAE;AAAC,gBAAI,KAAE,GAAE,QAAQ;AAAG,mBAAM,EAAC,GAAE,GAAE,KAAE,KAAG,GAAE,GAAE,KAAE;AAAA;AAAI,iBAAM,CAAC,GAAE,KAAE,OAAI,GAAE,KAAE,OAAI,AAAM,GAAE,KAAE,OAAV,OAAa,EAAC,GAAE,GAAE,KAAE,MAAI,OAAG,GAAE,cAAY,MAAG,GAAE,cAAY,KAAI,OAAG,GAAE,cAAY,MAAG,GAAE,cAAY,IAAG,GAAE,GAAE,KAAE,MAAI,OAAG,GAAE,aAAW,MAAG,GAAE,aAAW,KAAI,OAAG,GAAE,aAAW,MAAG,GAAE,aAAW,OAAI,EAAC,GAAE,GAAE,KAAE,KAAG,GAAE,GAAE,KAAE;AAAA,WAAK,MAAK,SAAS,IAAE;AAAC,cAAI,KAAE,GAAE;AAAO,iBAAO,GAAE,SAAO,OAAI,IAAE,GAAE,QAAM,IAAE,KAAE,IAAE,IAAE,KAAE,IAAE,IAAE,KAAE,IAAE;AAAA,WAAG,KAAI,SAAS,IAAE,IAAE;AAAC,mBAAQ,KAAE,GAAE,KAAE,GAAE,EAAE,IAAG;AAAI,gBAAG;AAAC,kBAAG,GAAE,QAAK;AAAE,uBAAO;AAAA,qBAAQ,IAAN;AAAA;AAAU,iBAAM;AAAA,WAAI,KAAI,SAAS,IAAE;AAAC,cAAI,KAAE,MAAM;AAAQ,iBAAO,KAAE,GAAE,MAAG,KAAK,KAAK,OAAI,EAAE;AAAA,WAAG,MAAK,SAAS,IAAE;AAAC,iBAAO,OAAI,IAAE,KAAE,KAAG,AAAO,OAAP,OAAS,KAAE,KAAG,OAAO,EAAE,GAAG,SAAS,KAAK,IAAG,QAAQ,qBAAoB,MAAM;AAAA,WAAe,MAAK,SAAS,IAAE,IAAE;AAAC,cAAG,OAAO,MAAG,EAAE;AAAE,kBAAK;AAAuB,cAAI,KAAE,EAAE,GAAE,KAAE,MAAM,IAAG,MAAM,KAAK,WAAU,IAAG,KAAE,WAAU;AAAA,aAAG,KAAE,WAAU;AAAC,mBAAO,GAAE,MAAM,gBAAgB,KAAE,OAAK,IAAE,GAAE,OAAO,MAAM,IAAG,MAAM,KAAK;AAAA;AAAc,iBAAO,GAAE,OAAK,IAAE,MAAG,GAAE,MAAI,GAAE,MAAG,IAAI,MAAE;AAAA,aAAI,IAAE,MAAK,IAAE,GAAE,IAAG,GAAE,QAAO,IAAG,IAAG,KAAE,IAAG,IAAE,yBAAwB,SAAS,IAAE,IAAE;AAAC,cAAI,KAAE,UAAU,EAAE;AAAG,cAAG,KAAE;AAAE,mBAAO;AAAE,cAAG;AAAE,eAAE,KAAG,IAAE,EAAE,KAAK;AAAA,eAAO;AAAC,gBAAI,KAAE,EAAE,IAAI,IAAE;AAAG,gBAAG,KAAE,IAAG;AAAC,kBAAG,CAAE,MAAE;AAAG,uBAAO,EAAE,IAAG;AAAG,qBAAO,GAAE,IAAG,EAAE,OAAO,IAAE;AAAA;AAAA;AAAA,YAAO,IAAE,WAAU;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,IAAG,IAAG,MAAE,CAAC,EAAE,GAAE,EAAE,GAAE,EAAE,GAAE,EAAE,GAAE,EAAE,GAAE,EAAE,GAAE,EAAE,IAAG,KAAE,KAAI,IAAE,KAAI,IAAE,CAAC,EAAE,GAAE,EAAE,IAAG,IAAE,EAAE,GAAE,IAAE,CAAC,EAAE,GAAE,EAAE,IAAG,IAAE,CAAC,MAAG,EAAE,IAAG,IAAE,CAAC,OAAG,EAAE,IAAG,IAAE,CAAC,MAAK,CAAC,EAAE,GAAE,EAAE,KAAI,IAAE,EAAC,WAAU,CAAC,iBAAgB,IAAG,QAAO,CAAC,QAAO,0CAAyC,iBAAgB,GAAE,YAAW,GAAE,cAAa,GAAE,iBAAgB,GAAE,YAAW,CAAC,MAAK,IAAG,oBAAmB,CAAC,IAAG,IAAG,0BAAyB,EAAC,sBAAqB,GAAE,YAAW,KAAG,kBAAiB,EAAC,GAAE,CAAC,UAAS,IAAE,4DAA2D,GAAE,CAAC,UAAS,MAAI,YAAW,EAAC,YAAW,CAAC,QAAO,8BAA6B,UAAS,CAAC,SAAQ,oCAAmC,eAAc,CAAC,KAAI,IAAG,eAAc,GAAE,gBAAe,GAAE,cAAa,KAAG,UAAS,EAAC,UAAS,GAAE,WAAU,GAAE,gBAAe,CAAC,CAAC,SAAQ,UAAS,CAAC,EAAE,GAAE,EAAE,GAAE,EAAE,OAAK,WAAU,EAAC,eAAc,GAAE,2BAA0B,GAAE,aAAY,GAAE,eAAc,GAAE,UAAS,GAAE,cAAa,GAAE,mBAAkB,GAAE,yBAAwB,GAAE,oBAAmB,GAAE,sBAAqB,GAAE,mBAAkB,GAAE,WAAU,OAAI,EAAC,GAAG,MAAE,SAAS,IAAE;AAAC,gBAAI,KAAE,SAAS,IAAE;AAAC,kBAAI,IAAE,IAAE;AAAE,mBAAI,MAAK;AAAE,mBAAE,eAAe,OAAK,MAAE,GAAE,KAAI,MAAE,EAAE,KAAK,QAAK,EAAE,IAAE,GAAE,MAAG,GAAE,KAAE,IAAE,KAAG,MAAG,EAAE,KAAI,IAAE,MAAG,GAAE;AAAK,qBAAO;AAAA;AAAG,mBAAO,GAAE,EAAE,OAAO,MAAG,IAAG;AAAA,gBAAQ,GAAE,GAAE,OAAI,GAAE,SAAS,IAAE,IAAE,IAAE,IAAE,IAAE;AAAC,gBAAI,KAAE,IAAG,KAAE,EAAE,OAAO,MAAG,IAAG,KAAG,KAAE,SAAS,IAAE,IAAE,IAAE,IAAE;AAAC,uBAAQ,MAAK;AAAE,oBAAG,GAAE,eAAe,OAAI,GAAE,eAAe,KAAG;AAAC,sBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAE,OAAG,KAAE,GAAE,KAAG,KAAE,EAAE,KAAK,KAAG,KAAE,EAAE,KAAK,OAAI,EAAE,IAAE,CAAC,MAAG,IAAE,KAAE,GAAE,KAAG,KAAE,EAAE,KAAK,KAAG,KAAE,KAAE,KAAE,MAAI,IAAG,KAAE,iBAAe,KAAE,KAAE,yBAAyB,KAAE,IAAG,IAAE;AAAG,sBAAG,MAAG,EAAE;AAAE,uBAAE,MAAG,IAAG,GAAE,IAAE,IAAE,GAAE,KAAG,KAAE,KAAG,EAAE,cAAc,OAAI,OAAO,GAAE;AAAA,uBAAO;AAAC,yBAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,0BAAG,KAAE,GAAE,KAAG,KAAG,MAAE,EAAE,KAAK,QAAK,EAAE,KAAG,AAAK,EAAE,QAAQ,IAAE,QAAjB;AAAoB,6BAAI,GAAE,KAAK,EAAE,IAAG,KAAE,GAAE,MAAM,KAAG,IAAE,EAAE,OAAO,KAAG,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,+BAAI,KAAG,MAAE,GAAE,IAAG,MAAM,IAAI,IAAG,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,gCAAG,OAAI,GAAE,KAAG;AAAC,mCAAE;AAAG;AAAA;AAAM,8BAAG;AAAE;AAAA;AAAA,+BAAc,GAAE,KAAK,KAAG,OAAI,IAAE;AAAC,6BAAE;AAAG;AAAA;AAAM,yBAAE,GAAE,MAAG,MAAG,KAAE,KAAE,KAAE,MAAG,QAAQ,KAAK,KAAE,mCAAiC,GAAE,gBAAc,2BAAyB,KAAE,iCAA+B,GAAE,KAAK,MAAM,gBAAc,QAAO,GAAE,SAAO,IAAE,8BAA4B,EAAE,KAAK,MAAM,MAAM,GAAG,KAAK,QAAM,QAAM,MAAK,OAAO,GAAE;AAAA;AAAA;AAAA;AAAM,mBAAO,GAAE,IAAE,IAAE,KAAG,KAAE,EAAE,OAAO,MAAG,IAAE,MAAG,CAAC,EAAE,cAAc,OAAI,MAAG,QAAQ,KAAK,+DAA6D,EAAE,KAAK,UAAU,IAAE,MAAK,KAAI;AAAA;AAAK,uBAAY;AAAC,kBAAI,MAAE,IAAI,EAAE,EAAE,KAAI,MAAI,MAAE,IAAI,EAAE;AAAA;AAAI,qBAAW,IAAE;AAAC,gBAAI,KAAE,MAAK,KAAE,YAAW,KAAE,UAAS,KAAE,UAAS,KAAE,EAAE,SAAQ,KAAE,EAAE,wDAAuD,KAAE,GAAE,IAAG,KAAE,EAAE,GAAE,SAAS,OAAO,GAAG;AAAI,eAAE,OAAO,KAAG,GAAE,OAAO;AAAO,gBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAE,GAAE,KAAG,KAAE,EAAC,GAAE,AAAI,GAAE,MAAN,GAAQ,GAAE,AAAI,GAAE,MAAN;AAAS,wBAAW,IAAE;AAAC,kBAAI,KAAE,OAAG,KAAE,kBAAkB,MAAM,MAAK,KAAE,EAAE,cAAc,QAAO,KAAE,MAAK,KAAE;AAAE,kBAAG,KAAE,GAAE,eAAc,GAAE,EAAE,GAAG,QAAK,KAAI,MAAE,OAAI,CAAC;AAAE,qBAAI,KAAE,GAAE,OAAO,GAAG,gBAAc,GAAE,OAAO,IAAG,KAAE,GAAE,QAAO;AAAI,sBAAG,GAAE,EAAE,GAAG,GAAE,MAAG,QAAK,GAAE;AAAC,yBAAE;AAAG;AAAA;AAAA;AAAM,qBAAO;AAAA;AAAE,wBAAW,IAAE;AAAC,qBAAM,EAAC,GAAE,GAAE,EAAE,MAAI,GAAE,EAAE,KAAI,GAAE,GAAE,EAAE,MAAI,GAAE,EAAE;AAAA;AAAK,cAAE,OAAO,IAAE,EAAC,gBAAe,IAAE,gBAAe,OAAG,uBAAsB,CAAC,EAAE,MAAK,qBAAoB,IAAE,2BAA0B,IAAE,wBAAwB,IAAE,SAAS,4CAA2C,GAAE,IAAI,IAAE,IAAG,OAAO,IAAI,IAAE,IAAG,QAAO,GAAE,EAAE,MAAI,GAAE,EAAE,OAAK,KAAG,GAAE,EAAE,MAAI,GAAE,EAAE,OAAK,IAAG,2BAA0B,EAAC,GAAE,IAAG,GAAE,MAAI,MAAM,MAAE,EAAE,UAAU,WAAU,KAAE,WAAU,KAAE,aAAY,KAAE,GAAE,IAAG,UAAS,KAAE,GAAE,IAAG,aAAY,KAAE,GAAE,IAAG,UAAS,KAAE,GAAE,IAAG,QAAO,KAAE,UAAS,KAAE,IAAE,KAAE,GAAE,GAAE,IAAG,KAAE,GAAE,GAAE,IAAG,KAAI,MAAI,MAAI,KAAE,IAAE,KAAE,GAAE,GAAE,IAAG,KAAE,GAAE,GAAE,IAAG,KAAI,MAAI,MAAI,KAAE,KAAI,MAAE,GAAE,GAAE,IAAG,KAAE,GAAE,GAAE,IAAG,KAAI,MAAI,MAAK,KAAG,SAAQ,WAAU;AAAC,kBAAI,IAAE,IAAE,KAAE,EAAE,cAAc,QAAO,KAAE,CAAC,QAAO,gBAAe,aAAY;AAAW,mBAAI,KAAE,GAAE,KAAE,GAAE,QAAO,EAAE;AAAE,oBAAG,KAAE,GAAE,KAAG,GAAE,EAAE,GAAG,UAAQ,WAAS,KAAE,UAAS,GAAE,EAAE,GAAG;AAAO,yBAAO;AAAE,qBAAO;AAAA,iBAAQ,qBAAoB,WAAU;AAAC,iBAAE,IAAI,IAAE;AAAG,kBAAI,KAAE,EAAC,GAAE,GAAE,EAAE,KAAI,GAAE,GAAE,EAAE;AAAK,iBAAE,IAAI,IAAE;AAAW,kBAAI,KAAE,EAAC,GAAE,GAAE,EAAE,KAAI,GAAE,GAAE,EAAE;AAAK,qBAAO,GAAE,IAAE,GAAE,KAAG,KAAG,GAAE,IAAE,GAAE,KAAG;AAAA,iBAAK,mBAAkB,WAAU;AAAC,iBAAE,IAAI,EAAC,cAAa,IAAE,cAAa,IAAE,WAAU,SAAQ,WAAW;AAAG,kBAAI,KAAE,GAAE,UAAS,KAAE,GAAE;AAAS,iBAAE,WAAW;AAAK,kBAAI,KAAE,GAAE;AAAS,qBAAM,EAAC,GAAE,GAAE,SAAO,GAAE,MAAK,GAAE,GAAE,OAAK,GAAE,QAAM;AAAA,iBAAM,kBAAiB,GAAE,cAAa,mBAAkB,GAAE,eAAc,sBAAqB,WAAU;AAAC,kBAAI,KAAE;AAAG,kBAAG;AAAC,kBAAE,iBAAiB,QAAO,MAAK,OAAO,eAAe,IAAG,WAAU,EAAC,KAAI,WAAU;AAAC,uBAAE;AAAA;AAAA,uBAAa,IAAN;AAAA;AAAU,qBAAO;AAAA,iBAAK,uBAAsB,CAAC,CAAC,EAAE,MAAK,yBAAwB,CAAC,CAAC,EAAE,SAAO,GAAE,WAAW,EAAE,GAAG,UAAS,WAAU;AAAC,kBAAG,CAAC,GAAE,KAAG,CAAC,GAAE,GAAE;AAAC,oBAAI,KAAE,EAAE,KAAI,KAAE,EAAE,MAAK,KAAE,EAAE,MAAK,KAAE,MAAI,KAAE,WAAU;AAAC,sBAAG,IAAI,SAAO,GAAE;AAAC,wBAAI,KAAE,EAAE,MAAK,KAAE,EAAE,MAAK,KAAE,KAAE,IAAE,KAAE,KAAE;AAAE,wBAAG,AAAI,OAAJ,KAAO,AAAI,OAAJ;AAAM;AAAO,wBAAI,IAAE,KAAE,EAAE,MAAM,KAAG,MAAE,OAAM,KAAE,EAAE,MAAM,KAAG,MAAE,OAAM,KAAE,GAAE,KAAG,KAAE,GAAE,KAAG,KAAE,GAAE,KAAG,KAAE,GAAE,KAAG,KAAE,MAAI,KAAE,KAAE,KAAG,KAAE,GAAE,KAAE,CAAC,GAAE,IAAE,KAAG,KAAE,MAAG,MAAI,QAAI,MAAG,KAAE,IAAG,KAAE,GAAE;AAAoB,0BAAI,IAAE,OAAO,KAAG,KAAE,GAAE,sBAAoB,GAAE,GAAE,KAAI,GAAE,UAAS,GAAE,MAAI,GAAE,KAAG,GAAE,MAAI,GAAE,KAAG,EAAE,KAAK,KAAI,WAAU;AAAC,wBAAE,SAAO,EAAE,MAAM,OAAO;AAAA,yBAAW,KAAE,IAAE,KAAE,IAAE,KAAE;AAAA;AAAA;AAAI,kBAAE,GAAG,GAAG,UAAS;AAAA;AAAG,0BAAW,IAAE,IAAE;AAAC,oBAAI,KAAE,GAAE,KAAG,KAAE,GAAE;AAAG,uBAAM,CAAE,QAAI,MAAG,KAAE,MAAI,MAAG,KAAE,MAAI;AAAA;AAAG,4BAAY;AAAC,oBAAI,KAAE,EAAE,OAAO,cAAY,GAAE,KAAE,EAAE,OAAO,eAAa;AAAE,uBAAO,EAAE,oBAAkB,KAAE;AAAA;AAAA;AAAA;AAAM,qBAAW,IAAE;AAAC,gBAAI,IAAE,KAAE,MAAK,KAAE,cAAa,KAAE,KAAE,YAAW,KAAE,EAAE,GAAE,KAAE,IAAG,KAAE,IAAG,KAAE,OAAG,KAAE,IAAG,KAAE,IAAE,KAAE,EAAE,OAAM,KAAE,WAAU;AAAC,kBAAG,GAAE,MAAG,KAAG,IAAE;AAAC,qBAAE,EAAE,MAAM,WAAU;AAAC;AAAA;AAAM,oBAAI,KAAE,EAAE,OAAM,KAAE,KAAE;AAAE,oBAAG,KAAE,IAAE;AAAC,uBAAE,KAAE,KAAE;AAAE,2BAAQ,KAAE,IAAE,KAAE,GAAE,KAAE,GAAE,KAAG,MAAI;AAAC,wBAAI,KAAE,GAAE;AAAG,wBAAG,OAAI,GAAE;AAAC,0BAAI,KAAE,GAAE,WAAU,KAAE,GAAE,KAAG,KAAE,EAAE,IAAI,GAAE,GAAE,MAAI,KAAE,EAAE;AAAM,sBAAC,CAAK,OAAL,QAAQ,AAAO,OAAP,SAAW,KAAE,GAAE,MAAG,MAAI,IAAE,OAAO,SAAQ,GAAE,MAAG,IAAI,KAAK,MAAG,MAAI,KAAE,EAAE,IAAI,GAAE,EAAE,IAAI,IAAE;AAAA;AAAA;AAAK,uBAAE;AAAA;AAAA;AAAQ,qBAAE;AAAA;AAAG,eAAE,MAAI,SAAS,IAAE;AAAC,cAAK,EAAE,QAAQ,IAAE,QAAjB,MAAsB,IAAE,KAAK,KAAG,GAAE,KAAK,EAAE,QAAO,GAAE,MAAG,KAAG,CAAC,MAAI,MAAE,MAAG,GAAE,iBAAe,IAAE;AAAA,eAAO,GAAE,SAAO,SAAS,IAAE;AAAC,kBAAI,KAAE,EAAE,QAAQ,IAAE;AAAG,mBAAE,MAAK,IAAE,OAAO,IAAE,IAAG,GAAE,OAAO,IAAE,IAAG,AAAI,GAAE,QAAN,KAAU,MAAI,MAAE,OAAG,GAAE,iBAAe,IAAE,OAAI,KAAI,GAAE,MAAM,KAAG,KAAE;AAAA;AAAA;AAAO,qBAAW,IAAE,IAAE,IAAE,IAAE,IAAE;AAAC,gBAAG,GAAG,KAAG;AAAC,kBAAG,EAAE,KAAG;AAAC,oBAAI,KAAE,EAAE;AAAG,uBAAO,GAAE,QAAQ,KAAG;AAAA;AAAE,kBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAG,IAAI,EAAE,MAAG,KAAG,EAAE,EAAE,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,WAAU,KAAG,WAAU,KAAG,YAAW,KAAG,WAAU,KAAG,OAAM,KAAG,SAAQ,KAAG,UAAS,KAAG,QAAO,KAAG,QAAO,KAAG,QAAO,KAAG,SAAQ,KAAG,UAAS,KAAG,SAAQ,KAAG,IAAG,KAAG,QAAO,KAAG,UAAS,KAAG,QAAO,KAAG,KAAI,KAAG,KAAI,KAAG,KAAI,KAAG,KAAI,KAAG,aAAY,KAAG,eAAc,KAAG,aAAY,KAAG,KAAG,QAAO,KAAG,KAAG,OAAM,MAAG,wBAAuB,KAAG,gCAA+B,KAAG,uBAAsB,KAAG,cAAa,KAAG,cAAa,KAAG,WAAU,KAAG,SAAQ,KAAG,eAAc,KAAG,oDAAmD,KAAG,2BAA0B,KAAG,OAAM,KAAG,KAAG,QAAO,KAAG,KAAG,QAAO,KAAG,KAAG,aAAY,KAAG,KAAG,MAAI,KAAG,KAAG,IAAG,KAAG,KAAG,MAAI,KAAG,KAAG,IAAG,KAAG,KAAG,eAAc,KAAG,KAAG,QAAO,KAAG,KAAG,oBAAmB,KAAG,KAAG,cAAa,KAAG,KAAG,aAAY,KAAG,KAAG,MAAK,KAAG,KAAG,MAAK,KAAG,KAAG,YAAW,KAAG,KAAG,UAAS,KAAG,KAAG,WAAU,KAAG,KAAG,YAAW,KAAG,KAAG,gCAA+B,KAAG,KAAG,+BAA8B,KAAG,KAAG,WAAU,KAAG,KAAG,mBAAkB,KAAG,KAAG,gBAAe,KAAG,KAAG,sBAAqB,KAAG,KAAG,mBAAkB,KAAG,KAAG,wBAAuB,KAAG,KAAG,UAAS,KAAG,KAAG,gBAAe,KAAG,KAAG,IAAG,KAAG,KAAG,UAAS,KAAG,KAAG,QAAO,KAAG,KAAG,WAAU,KAAG,KAAG,QAAO,KAAG,KAAG,aAAY,KAAG,KAAG,MAAI,KAAG,IAAG,KAAG,KAAG,WAAU,KAAG,KAAG,WAAU,KAAG,KAAG,SAAQ,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,YAAW,KAAG,KAAG,cAAa,KAAG,IAAG,KAAG,IAAG,KAAG,6BAA4B,KAAG,IAAG,KAAG,IAAG,KAAG;AAAG,kBAAG,GAAG,QAAM,WAAU;AAAC,oBAAE;AAAA,iBAAI,GAAG,SAAO,SAAS,IAAE;AAAC,oBAAI,IAAE,IAAE,KAAE,GAAG,OAAI,EAAE,GAAE,KAAE,OAAM,KAAE;AAAO,qBAAE,AAAI,GAAE,QAAQ,QAAd,IAAmB,MAAE,MAAK,KAAE,MAAM,OAAG,OAAI,GAAG,OAAG,IAAE,OAAG,AAAK,GAAE,MAAM,OAAb,QAAmB,AAAS,OAAT,UAAY,GAAG,MAAG,QAAK,MAAE,KAAG,IAAE,IAAE,OAAG,GAAG,OAAG,OAAG,IAAE,QAAK,KAAG,GAAG,KAAK,IAAG,KAAK,SAAS,IAAE,IAAE;AAAC,kBAAK,EAAE,IAAI,IAAE,QAAb,MAAkB,EAAE,IAAG,IAAI,IAAE,IAAI,GAAG,IAAE;AAAA;AAAA,iBAAO,GAAG,UAAQ,SAAS,IAAE,IAAE;AAAC,oBAAG,EAAE,cAAc,OAAI,CAAC,EAAE,cAAc,KAAG;AAAC,sBAAG,GAAG,OAAI,EAAE,GAAE;AAAC,wBAAG,UAAU,SAAO,GAAE;AAAC,0BAAI,KAAE;AAAG,6BAAO,GAAG,IAAE,IAAE,KAAG,GAAG,KAAG,KAAK;AAAA;AAAK,2BAAO,GAAG,GAAE;AAAA;AAAG,yBAAO;AAAA;AAAE,mBAAG;AAAG,oBAAI,KAAE,KAAG;AAAG,oBAAE,OAAG,MAAK,IAAE;AAAA,iBAAG,GAAG,UAAQ,WAAU;AAAC,yBAAQ,MAAK,IAAE,MAAG,GAAE,OAAO,KAAI,MAAK,GAAG,KAAI,KAAG,GAAG,KAAI;AAAG,qBAAG,UAAU;AAAG,mBAAG,OAAI,GAAG,OAAI,MAAI,GAAG,KAAI,MAAI,GAAG,KAAI,KAAG,GAAG,KAAI,GAAG,OAAI,GAAG,OAAI,GAAG;AAAI,yBAAQ,KAAE,GAAE,KAAE,GAAG,EAAE,IAAG;AAAI,oBAAE,GAAG,KAAI,IAAI,QAAO;AAAI,yBAAQ,MAAK,KAAG,GAAE,EAAE,IAAE,IAAG,GAAG,gBAAe;AAAG,yBAAO,GAAG;AAAG,qBAAG;AAAA,iBAAG,GAAG,SAAO,SAAS,IAAE,IAAE,IAAE,IAAE;AAAC,oBAAG,AAAI,UAAU,WAAd,KAAsB,OAAI,GAAE;AAAC,sBAAI,KAAE,IAAG,KAAE,IAAG,KAAE,MAAI,KAAG,GAAE,GAAE,KAAE,MAAI,KAAG,GAAE,GAAE,KAAE,GAAE,IAAG,KAAE,GAAE,KAAI,KAAE,GAAE;AAAG,yBAAO,KAAE,KAAE,KAAE,KAAE,IAAE,EAAC,GAAE,EAAC,UAAS,MAAG,KAAE,KAAG,GAAE,OAAM,KAAE,KAAE,IAAE,KAAE,IAAE,KAAI,MAAG,KAAE,KAAG,GAAE,cAAa,GAAE,IAAG,cAAa,GAAE,IAAG,mBAAkB,GAAE,KAAI,aAAY,GAAE,IAAG,OAAM,GAAE,iBAAgB,MAAI,GAAE,EAAC,UAAS,GAAE,IAAG,OAAM,GAAE,KAAI,KAAI,GAAE,IAAG,cAAa,GAAE,IAAG,cAAa,GAAE,IAAG,mBAAkB,GAAE,KAAI,aAAY,GAAE,MAAI,UAAS,EAAC,GAAE,IAAE,GAAE,GAAE,MAAI,OAAM,EAAC,GAAE,IAAE,GAAE,GAAE,OAAK,KAAI,EAAC,GAAE,IAAE,GAAE,GAAE,MAAI,cAAa,EAAC,GAAE,GAAE,IAAG,GAAE,GAAE,MAAI,cAAa,EAAC,GAAE,GAAE,IAAG,GAAE,GAAE,MAAI,mBAAkB,EAAC,GAAE,GAAE,KAAI,GAAE,GAAE,OAAK,aAAY,EAAC,GAAE,GAAE,IAAG,GAAE,GAAE,MAAI,OAAM,GAAE,iBAAgB;AAAA;AAAI,oBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAE,IAAG,KAAE,CAAC,IAAG,IAAG,MAAK,KAAE,CAAC,IAAG,IAAG,MAAK,KAAE,CAAC,MAAK,MAAK,MAAK,OAAM,KAAE,GAAG,OAAI,EAAE,GAAE,KAAE,KAAE,GAAE,WAAS,IAAE,KAAE,IAAG,KAAE,IAAG,KAAE,OAAM,KAAE,SAAQ,KAAE,UAAS,KAAE,WAAU,KAAE,UAAS,KAAE,SAAQ,KAAE,YAAW,KAAE,EAAE,GAAE,KAAE,CAAC,IAAG,IAAG,MAAK,OAAM,KAAE,CAAC,IAAE,IAAE,IAAE,KAAG,KAAE,CAAC,IAAE,IAAE,KAAG,KAAE,GAAE,eAAe,OAAM,KAAE,KAAE,GAAE,KAAG,IAAE,KAAE,CAAC,CAAE,eAAa,KAAG,MAAI,cAAa,GAAE,KAAE,CAAC,MAAG,GAAG,KAAG,KAAE,GAAG,OAAI,EAAE,IAAE,IAAE,WAAU;AAAC,wBAAG,GAAG,OAAI,MAAG,GAAG,QAAI;AAAA,mBAAK,KAAE,SAAS,IAAE,IAAE;AAAC,uBAAI,KAAE,GAAE,KAAE,GAAE,KAAG;AAAI,wBAAG,OAAI,GAAE;AAAG,6BAAM;AAAG,yBAAM;AAAA,mBAAI,MAAG,SAAS,IAAE,IAAE;AAAC,sBAAI,KAAE,KAAE,KAAE;AAAE,sBAAG,GAAG,KAAE,GAAG,OAAI,EAAE,KAAG,GAAG,OAAI,EAAE,IAAE,CAAC,IAAE,MAAG,OAAI,EAAE;AAAE,2BAAO,KAAE,GAAE,KAAG,GAAE;AAAG,sBAAG,GAAG,OAAI,EAAE;AAAE,yBAAI,KAAE,GAAG,GAAE,MAAI,EAAE,IAAE,GAAE,IAAE,IAAE,KAAE,GAAE,KAAE,GAAE,KAAG;AAAI,0BAAG,GAAE,OAAK;AAAE,+BAAO,GAAE,GAAE;AAAA;AAAA,mBAAK,MAAG,SAAS,IAAE,IAAE;AAAC,sBAAI,IAAE,IAAE,KAAE,GAAG,OAAI,EAAE;AAAE,wBAAG,GAAG,OAAO,KAAG;AAAK,sBAAI,IAAE,KAAE,KAAE,KAAG,IAAG,KAAE,GAAE,IAAG,KAAE,GAAE,IAAG,KAAE,OAAM,KAAE,KAAG,IAAE,KAAE,MAAG,GAAE,KAAG,CAAC,IAAE,KAAE,WAAU,KAAE;AAAK,sBAAG,IAAE;AAAC,wBAAG,GAAE,MAAG,GAAE;AAAC,0BAAI,KAAE,GAAE,OAAO,GAAE;AAAG,2BAAI,KAAE,GAAE,KAAE,GAAE,KAAG;AAAI,4BAAG,OAAI,GAAE,KAAG;AAAC,+BAAE,GAAE;AAAG;AAAA;AAAA;AAAO,yBAAE,GAAG,GAAG,GAAE,KAAG,MAAG,MAAG,MAAG,MAAG,MAAG,MAAG,MAAG,MAAE,OAAI,IAAE,GAAE,OAAO,KAAG,IAAG,IAAG,QAAO,IAAI,IAAG,MAAK,IAAI,IAAG,QAAQ,MAAE,MAAI,MAAI,KAAK,IAAG,MAAM,MAAE,MAAI,MAAI,KAAK,IAAG,OAAM,KAAK,IAAG,MAAK,KAAE,KAAG,OAAG,GAAE,IAAE,KAAG,KAAG,MAAM,IAAG,OAAM,KAAE,GAAG,IAAI,IAAG,OAAM,KAAE,GAAG,KAAI,MAAI;AAAA;AAAgB,yBAAE;AAAE,sBAAG,OAAI,KAAG,CAAC,MAAM,OAAI,GAAG,OAAI,EAAE,GAAE;AAAC,wBAAI,KAAE,MAAG,IAAE,KAAE,KAAG,OAAG,GAAE,IAAE,KAAG,IAAG,KAAE,MAAG,GAAE,GAAE,KAAE,MAAG,GAAE;AAAE,4BAAO,KAAE,KAAE,KAAE,KAAE,IAAE;AAAA,2BAAO;AAAK,6BAAE,KAAE;AAAE;AAAA,2BAAU;AAAK,6BAAE,KAAE;AAAE;AAAA,2BAAU;AAAK,6BAAE,KAAE;AAAE;AAAA,2BAAU;AAAK,6BAAE,KAAE;AAAE;AAAA;AAAc,6BAAE;AAAA;AAAE,yBAAE,KAAE,KAAE,KAAE,IAAE,MAAG,KAAE,KAAG,GAAE,KAAE,MAAG,GAAE,IAAE,EAAE,IAAI,GAAE,EAAE,IAAI,IAAE,OAAI,EAAE,IAAI,GAAE,EAAE,IAAI,IAAE;AAAA;AAAI,yBAAO,OAAI,KAAE,IAAE;AAAA,mBAAG,MAAG,SAAS,IAAE,IAAE,IAAE,IAAE;AAAC,sBAAI,IAAE,IAAE,KAAE,CAAC,IAAE,KAAG,KAAE,GAAG;AAAG,sBAAG,MAAG;AAAE,yBAAE,CAAC,IAAE;AAAA,2BAAW,MAAG,EAAE,GAAE;AAAC,wBAAI,MAAE,GAAE,OAAI,KAAG,KAAE;AAAE,2BAAE;AAAA;AAAO,2BAAI,AAAI,OAAJ,KAAQ,IAAE,KAAG,KAAG,KAAE,GAAE,KAAE,IAAE;AAAI,4BAAG,GAAG,KAAE,GAAE,QAAK,MAAG,CAAC,GAAE,IAAE,KAAG;AAAC,+BAAE;AAAE;AAAA;AAAA;AAAY,yBAAE,MAAG,EAAE,IAAE,CAAC,GAAE,OAAK,IAAE,GAAE,OAAK,MAAG;AAAE,yBAAM,EAAC,GAAE,GAAE,IAAG,GAAE,GAAE;AAAA,mBAAK,MAAG,SAAS,IAAE;AAAC,sBAAI,IAAE,IAAE,KAAE,IAAG,KAAE,CAAC,IAAG,IAAG,IAAG;AAAI,uBAAI,KAAE,GAAE,KAAE,GAAE,OAAI,OAAI,GAAE,KAAG;AAAI,oBAAC,MAAE,GAAG,KAAE,GAAE,SAAM,EAAE,IAAE,GAAE,KAAK,KAAE,GAAG,GAAE,IAAI,KAAG,GAAE,QAAK,KAAG,GAAE,KAAK,MAAG,EAAE,IAAE,KAAE;AAAG,yBAAO;AAAA;AAAG,oBAAG,MAAG,IAAE;AAAC,sBAAI,KAAG,MAAG,KAAE,GAAE,SAAO,GAAE,MAAG,KAAE,GAAE,OAAK,GAAE,MAAG,KAAE,GAAE,SAAO,GAAE,MAAG,KAAE,GAAE,QAAM,GAAE,MAAG,CAAC,GAAE,GAAE,GAAE,IAAG,MAAG,GAAG;AAAI,sBAAG,AAAK,MAAE,KAAE,KAAE,EAAE,KAAI,QAAjB;AAAoB;AAAO,qBAAG,OAAO,KAAG,MAAK,MAAG,OAAI,EAAE,KAAG,OAAI,EAAE,IAAE,IAAG,CAAC,KAAG,KAAG,KAAG,QAAK,OAAI,EAAE,IAAE,AAAK,OAAG,IAAG,SAAX,IAAe,IAAG,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,OAAK,OAAI,IAAE,IAAG,OAAI,MAAG,OAAI,EAAE,IAAE,IAAG,CAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,QAAM,KAAG,KAAE,GAAE,KAAG,MAAG,MAAG,MAAK,KAAE,IAAG,KAAG,EAAE,GAAE,IAAE,KAAG,KAAE,IAAG,KAAG,EAAE,GAAE,IAAE,KAAG,KAAE;AAAG,sBAAI,MAAG,EAAC,GAAE,GAAG,IAAG,GAAE,GAAG,MAAI,MAAG,GAAG,UAAS,MAAG,GAAE,UAAS,MAAG,EAAC,GAAE,GAAE,KAAG,MAAG,MAAG,IAAG,GAAE,GAAE,KAAG,MAAG,MAAG;AAAI,sBAAG,OAAK,GAAE,IAAG,IAAG,OAAK,GAAE;AAAG,sBAAI,MAAG,EAAC,GAAE,EAAE,MAAM,IAAG,MAAI,IAAG,MAAI,IAAG,IAAG,GAAE,EAAE,MAAM,IAAG,MAAI,IAAG,MAAI,IAAG;AAAI,sBAAG,KAAI,IAAE,KAAG,GAAE,KAAI,KAAG,IAAE,EAAE,MAAM,IAAG,MAAI,IAAG,MAAI,IAAG,KAAI,GAAE,KAAG,MAAI,KAAG,KAAG,KAAI,GAAE,KAAG,MAAI,KAAG,IAAE,EAAE,MAAM,IAAG,MAAI,IAAG,MAAK,IAAG,KAAG,IAAG,OAAM,GAAE,KAAG,MAAG,GAAE,KAAG,MAAG,GAAE,KAAG,MAAG,GAAE,KAAG,MAAG,GAAE;AAAC,wBAAI,MAAG,GAAE,IAAG,MAAG,KAAE,IAAG,0BAAwB,EAAC,OAAM,IAAG,EAAE,KAAI,QAAO,IAAG,EAAE,OAAK,MAAG,EAAC,GAAE,IAAG,MAAI,GAAE,KAAG,GAAE,IAAG,GAAE,IAAG,MAAI,GAAE,KAAG,GAAE,MAAI,MAAG,SAAS,IAAE;AAAC,0BAAI,KAAE,GAAG,KAAG,KAAE,GAAE,KAAI,KAAE,GAAE,IAAG,KAAE,GAAE,IAAG,KAAE,GAAE,OAAK,OAAG,IAAE,KAAE,KAAG,KAAE,GAAE,OAAI,IAAE,KAAE,GAAE,OAAI,IAAE,KAAE,GAAE,OAAI,IAAE,KAAE,GAAE,OAAI,IAAE,KAAE,GAAG,KAAG,KAAE,IAAG,KAAG,KAAE,IAAG,KAAG,KAAE,IAAG,KAAG,KAAE,KAAE,IAAE,GAAE,KAAE,KAAE,KAAE,GAAE,KAAE,KAAE,KAAE,GAAE,KAAE,MAAG,MAAG,MAAG,MAAG,KAAE,MAAG,KAAE;AAAE,2BAAE,IAAG,MAAG,OAAG,IAAG,OAAM,QAAG,OAAK,KAAG,MAAG,CAAC,CAAC,MAAG,IAAE,KAAE,KAAE,KAAE,KAAE,KAAE,KAAE,KAAG,IAAG,OAAI,MAAG,KAAG,MAAE,KAAE,KAAE,MAAI,OAAG,KAAG,KAAE,KAAG,KAAG;AAAA;AAAI,wBAAG,OAAI,IAAG;AAAA;AAAI,sBAAG,KAAG,OAAO,IAAG,GAAE,IAAG,KAAG,OAAO,IAAG,GAAE,KAAE;AAAA;AAAG,mBAAE,MAAI,IAAG,MAAG,IAAG,MAAG,MAAI,GAAE,MAAI,IAAG,OAAG,IAAG,OAAG,MAAI,KAAE,GAAE,QAAM,GAAE,KAAE,GAAE,QAAM,GAAG,OAAG,OAAK,MAAE,KAAG,MAAG,KAAG,IAAE,WAAS,IAAE,GAAG,QAAQ,IAAE,OAAK,MAAE,EAAC,UAAS,IAAE,UAAS,MAAG,GAAG,OAAI,EAAE,KAAG,EAAE,cAAc,MAAI,IAAE,MAAI,GAAE,MAAI,GAAE,GAAE,GAAE,MAAI,GAAE,MAAI,GAAE,GAAE,GAAE,gBAAc,MAAG,GAAE,SAAO,IAAE,GAAG,QAAQ,IAAE,OAAK,OAAG,GAAG,IAAI,GAAE,MAAK,MAAG,GAAG,IAAI,GAAE;AAAA,iBAAO,GAAG,aAAW,SAAS,IAAE,IAAE,IAAE;AAAC,uBAAO,GAAG,KAAK,IAAE,IAAE,KAAG;AAAA,iBAAI,GAAG,cAAY,SAAS,IAAE;AAAC,oBAAI,KAAE,EAAC,QAAO,GAAG,IAAG,MAAK,GAAG,IAAG,SAAQ,GAAG,IAAG,UAAS,GAAG,IAAG,SAAQ,GAAG,IAAG,qBAAoB,EAAC,WAAU,GAAG,IAAG,OAAM,GAAG,IAAG,QAAO,GAAG,MAAI,mBAAkB,EAAC,WAAU,GAAG,IAAG,OAAM,GAAG,IAAG,QAAO,GAAG,MAAI,iBAAgB,GAAG;AAAI,uBAAO,GAAG,OAAI,EAAE,IAAE,GAAG,IAAE,MAAG;AAAA,iBAAG,GAAG,WAAS,SAAS,IAAE;AAAC,oBAAI,KAAE,SAAS,IAAE;AAAC,sBAAG,CAAC,EAAE,cAAc;AAAG,2BAAO;AAAE,sBAAI,KAAE,GAAG,MAAG,IAAG,KAAG,KAAE,SAAS,IAAE,IAAE;AAAC,uBAAE,eAAe,OAAK,IAAE,MAAG,GAAE,KAAG,OAAO,GAAE;AAAA;AAAK,yBAAO,GAAE,KAAI,KAAI,GAAE,KAAI,KAAI,OAAO,GAAE,GAAE;AAAA,mBAAG,KAAE,EAAC,UAAS,GAAE,MAAI,OAAG,YAAW,GAAE,CAAC,KAAI,WAAU,GAAE,KAAI,YAAW,GAAE,KAAI,SAAQ,GAAE,KAAI,gBAAe,GAAE,KAAI,cAAa,GAAE,KAAI,aAAY,GAAE,KAAI,mBAAkB,GAAE,KAAI,cAAa,GAAE,KAAI,UAAS,GAAE,KAAI,eAAc,GAAE;AAAI,uBAAO,GAAG,OAAI,EAAE,IAAE,GAAG,IAAE,MAAG;AAAA,iBAAG,GAAG,MAAI,SAAS,IAAE;AAAC,oBAAI,IAAE,KAAE,GAAG,MAAM,MAAK,KAAE;AAAE,oBAAG,GAAG,OAAI,EAAE,GAAE;AAAC,sBAAG,GAAG,eAAe;AAAG,yBAAI,KAAE,GAAG,MAAG,IAAG,GAAG,MAAI,KAAE,GAAE,QAAO;AAAI,6BAAO,GAAE,GAAE;AAAA;AAAS,uBAAI,MAAK,KAAE,IAAG;AAAG,uBAAE,MAAG,GAAG,MAAG,IAAG,GAAG,IAAI;AAAI,uBAAO;AAAA,iBAAG,GAAG,SAAO,SAAS,IAAE,IAAE;AAAC,oBAAI,IAAE,IAAE,IAAE,IAAE,KAAE,EAAE,GAAG,UAAU,KAAG,KAAE;AAAG,oBAAG,IAAE;AAAC,sBAAG,GAAG,eAAe;AAAG,2BAAO,GAAG,IAAI;AAAG,sBAAI,MAAE,GAAE,iBAAiB,KAAK,IAAG,GAAG,MAAG,IAAG,GAAE,iBAAgB,GAAE,OAAM,IAAG,KAAE,GAAE,aAAW,EAAE,KAAI,MAAE,GAAG,KAAE,GAAE,OAAK,EAAE,IAAE,KAAE,KAAG;AAAG,2BAAO,GAAG,MAAG,IAAE,GAAG,KAAE,GAAE,UAAQ,EAAE,KAAG,GAAE,KAAG,GAAG,IAAI;AAAA;AAAQ,0BAAQ,KAAK,gCAA8B,KAAE;AAAA,iBAAyB,GAAG,YAAU,SAAS,IAAE;AAAC,oBAAI,IAAE,KAAE,GAAG;AAAG,uBAAM,CAAC,CAAC,MAAI,QAAO,GAAG,KAAG,GAAG,KAAE,GAAE,YAAU,EAAE,KAAG,MAAI;AAAA,iBAAK,GAAG,IAAE,IAAE;AAAG,uBAAO,EAAE,IAAE,KAAI;AAAG,mBAAG;AAAA;AAAE,wBAAY,IAAE,IAAE,IAAE;AAAC,uBAAQ,KAAE,GAAE,MAAM,KAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,mBAAE,GAAG,iBAAiB,GAAE,KAAG,IAAE,EAAC,SAAQ;AAAA;AAAK,wBAAY,IAAE,IAAE,IAAE;AAAC,uBAAQ,KAAE,GAAE,MAAM,KAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,mBAAE,GAAG,oBAAoB,GAAE,KAAG,IAAE,EAAC,SAAQ;AAAA;AAAK,wBAAY,IAAE,IAAE;AAAC,kBAAI,KAAE,SAAQ,KAAE,EAAE,MAAK,KAAE,0EAAyE,KAAE,cAAa,KAAE,WAAU;AAAC,mBAAE,IAAI,IAAG,IAAI,IAAE,GAAE,IAAE,CAAC,KAAE,GAAE,IAAE,IAAE,KAAE,KAAG;AAAA;AAAK,kBAAG,IAAE;AAAC,oBAAI,KAAE,GAAE,OAAO,GAAG,KAAG,cAAc,WAAW;AAAG,gBAAC,IAAE,MAAI,IAAI,GAAE,KAAI,QAAQ;AAAA,yBAAW,KAAE,KAAG,CAAC,IAAE;AAAC,mBAAE,QAAQ,GAAG,IAAG,GAAG,EAAC,WAAU,IAAG,KAAI,SAAO,GAAG,IAAG,GAAG,OAAK,GAAG,IAAG,GAAG,EAAC,WAAU,IAAG,OAAM;AAAkC,oBAAI,IAAE,IAAE,IAAE,IAAE,KAAE,GAAE,GAAG,IAAG,GAAG,IAAG,IAAG,KAAE,EAAE,GAAE,IAAG,KAAI,KAAE,EAAE,GAAE,IAAG,KAAI,KAAE,EAAE,GAAE,GAAG,IAAG,KAAI,KAAE,GAAE,EAAE,KAAI,KAAE,GAAE,EAAE,KAAI,KAAE,GAAE,KAAE,GAAE,qBAAoB,KAAE,WAAU;AAAC,qBAAE,IAAI,IAAG,IAAI,KAAG,GAAE,IAAI,IAAG,IAAI;AAAA,mBAAI,KAAE,WAAU;AAAC,uBAAE,GAAE,MAAI,MAAE,IAAE,KAAE,IAAE;AAAA,mBAAM,KAAE,SAAS,IAAE;AAAC,yBAAO,KAAE,GAAE,EAAE,KAAI,KAAE,GAAE,EAAE,KAAI,KAAE,MAAG,MAAG,MAAG,IAAE,MAAG,MAAG,CAAC,KAAG,GAAE,MAAM,KAAG,KAAE,EAAE,MAAM,OAAI,MAAG,MAAI,MAAI,MAAI,GAAE,KAAK,KAAG,EAAE,KAAK,MAAI;AAAA,mBAAI,KAAE,IAAG,KAAE;AAAG,mBAAE,MAAI,CAAE,IAAE,IAAE,KAAG,IAAE,GAAE,MAAI,GAAE,IAAE,CAAC,IAAE,GAAE,MAAI,GAAE,IAAE,CAAC,IAAE,GAAE,MAAI,CAAE,IAAE,IAAE,KAAG,IAAE,EAAE,IAAG,IAAI,KAAG,GAAE,GAAG,IAAG,KAAG,GAAE,GAAG,IAAG,KAAG,GAAE,GAAG,IAAE,WAAU;AAAC,qBAAE;AAAA,oBAAM,GAAE,MAAI,IAAE,GAAE,MAAI,IAAE,GAAE,IAAI,KAAG;AAAA,qBAAQ;AAAC,oBAAI,KAAE,EAAE,IAAG,KAAE,GAAE,aAAY,KAAE,OAAI;AAAE,oBAAG;AAAE,qBAAE,QAAQ,GAAG,MAAK,GAAG,IAAE,KAAG,IAAI,GAAG,YAAY,YAAW;AAAA,qBAAO;AAAC,sBAAI,KAAE,GAAE,cAAc,EAAE;AAAG,qBAAE,aAAa,YAAW,OAAM,GAAE,aAAa,EAAE,GAAE,KAAI,GAAE,SAAO,WAAU;AAAC,wBAAI,KAAE,KAAK,gBAAgB;AAAY,uBAAE,iBAAiB,UAAS,KAAG,GAAE,SAAS,gBAAgB,MAAM,UAAQ;AAAA,qBAAQ,GAAE,OAAK,aAAY,MAAG,GAAE,QAAQ,KAAG,GAAE,OAAK,eAAc,MAAG,GAAE,QAAQ,KAAG,GAAE,GAAG,IAAE;AAAA;AAAA;AAAI,kBAAG,GAAE,OAAK,GAAG,IAAG;AAAC,oBAAI,KAAE,WAAU;AAAC,sBAAI,KAAE,GAAG,IAAI,cAAa,KAAE,IAAG,KAAE,GAAE,KAAE;AAAG,yBAAO,OAAI,MAAK,CAAQ,OAAR,QAAW,IAAE,MAAI,GAAE,GAAE,MAAI,IAAG,KAAE,MAAI,IAAE,MAAI,IAAG,GAAE,MAAI,GAAE,KAAE,GAAE,IAAE,CAAC,KAAE,GAAE,IAAE,IAAE,KAAG,GAAG,WAAW,GAAG,GAAG,IAAI,KAAG,GAAE,IAAI,IAAG,IAAI,KAAG,KAAG,IAAE,KAAE,OAAI;AAAA;AAAG,sBAAI,GAAE,GAAG,IAAG,SAAS,IAAE;AAAC,yBAAO,QAAK,MAAK,EAAE,KAAK,KAAG,EAAE,KAAK,KAAG;AAAA;AAAA;AAAA;AAAM,wBAAY,IAAE;AAAC,kBAAG,IAAE;AAAC,oBAAI,KAAE,GAAE,WAAW;AAAG,mBAAE,IAAI,cAAa,OAAO,GAAE;AAAA;AAAS,mBAAG,GAAE,SAAS,KAAG,IAAI,GAAG;AAAA;AAAI,wBAAY,IAAE;AAAA;AAAE,wBAAY,IAAE;AAAA;AAAE,0BAAa;AAAC,kBAAG,IAAE;AAAC,oBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAE,IAAG,KAAE,EAAE,MAAK,KAAE,EAAE;AAAM,qBAAG,IAAI,GAAE,SAAS,IAAE;AAAC,sBAAG,KAAG,CAAC,GAAE;AAAC,wBAAI,IAAE,KAAE;AAAG,sBAAE,KAAK,IAAE,WAAU;AAAC,0BAAG,KAAG,MAAE,MAAM,QAAO,KAAE,GAAE,eAAc,KAAE,OAAI,EAAE,IAAE,GAAG,GAAE,UAAS,GAAE,aAAW,OAAI,EAAE,KAAG,GAAE,aAAW,GAAE,EAAE,GAAG;AAAQ,+BAAM;AAAA,wBAAK,MAAG,GAAG,OAAO;AAAA;AAAA,oBAAO,KAAG,IAAI,GAAE,SAAS,IAAE;AAAC,sBAAG,KAAG,CAAC,GAAE;AAAC,wBAAI,KAAE;AAAG,sBAAE,KAAK,IAAE,WAAU;AAAC,6BAAM,CAAE,MAAE,GAAG;AAAA,wBAAS,MAAI,MAAE,EAAE,OAAM,KAAE,MAAI,IAAG,KAAE,WAAU;AAAC,2BAAI,MAAE,IAAE,KAAG,MAAK,KAAE,OAAK,GAAG,OAAO;AAAA,uBAAM,aAAa,KAAG,MAAG,KAAG,KAAE,KAAE,MAAG,CAAC,KAAE,OAAI,KAAE,WAAW,IAAE;AAAA;AAAA;AAAA;AAAA;AAAQ,0BAAa;AAAC,oBAAG,CAAC,MAAK,IAAG,QAAQ,GAAG,IAAG,EAAC,YAAW,MAAG,mBAAkB,MAAG,iBAAgB,CAAC,EAAE,GAAE,EAAE,GAAE,EAAE,OAAK,GAAG,QAAQ,IAAE,GAAG,KAAG,GAAG,IAAG,EAAC,YAAW,MAAG,mBAAkB,MAAG,SAAQ,CAAC,GAAE,WAAU,CAAC,GAAE,eAAc,CAAC,GAAE,iBAAgB,IAAE,CAAC,QAAO,QAAO,UAAQ,CAAC,EAAE,GAAE,EAAE,GAAE,EAAE,OAAK,KAAG;AAAA;AAAI,0BAAa;AAAC,oBAAG,MAAK,IAAG,cAAa,GAAG,cAAa,KAAG;AAAA;AAAI,0BAAa;AAAC,kBAAG,CAAC,GAAE;AAAC,oBAAI,KAAE,GAAG,IAAG,KAAE,EAAC,GAAE,GAAE,EAAE,KAAI,GAAE,GAAE,EAAE;AAAK,oBAAG,GAAE;AAAC,sBAAI,KAAE,GAAG,IAAE;AAAI,uBAAG,IAAE,MAAG,GAAG,MAAG;AAAA;AAAS,uBAAG;AAAA;AAAA;AAAG,0BAAa;AAAC,oBAAI,GAAG;AAAA;AAAI,0BAAa;AAAC,oBAAI,CAAC,GAAG,SAAS,OAAK,GAAG;AAAA;AAAI,0BAAa;AAAC,oBAAK,IAAG,OAAI,aAAa,KAAI,KAAG,WAAW,WAAU;AAAC,sBAAI,CAAC,KAAG,GAAG;AAAA,iBAAK;AAAA;AAAM,wBAAY,IAAE;AAAC,kBAAI,KAAE,KAAE,KAAG,IAAG,KAAE,KAAE,QAAM,MAAK,KAAE,SAAS,IAAE,IAAE,IAAE;AAAC,qBAAE,GAAE,IAAE,IAAE,MAAG,GAAE,IAAG,IAAE;AAAA;AAAI,oBAAI,CAAC,KAAE,GAAE,IAAG,IAAG,MAAK,OAAG,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,KAAI,GAAE,IAAG,IAAG,MAAK,KAAG,MAAG,GAAG,IAAI,aAAY;AAAA;AAAI,wBAAY,IAAE;AAAC,qBAAO,EAAE,KAAK,KAAG;AAAA;AAAG,0BAAa;AAAC;AAAA;AAAK,0BAAa;AAAC,kBAAI,KAAE;AAAG,qBAAO,KAAG,MAAK,IAAE,IAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,IAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,IAAE,GAAG,IAAE,KAAI,GAAE,IAAE,OAAI,KAAG,IAAE,GAAE,KAAG;AAAA;AAAG,wBAAY,IAAE,IAAE;AAAC,kBAAI,KAAE,OAAI,KAAG,AAAO,OAAP,OAAS,GAAE,MAAM,MAAI,IAAG,KAAE,OAAI,KAAG,AAAO,OAAP,OAAS,GAAE,MAAM,MAAI;AAAG,kBAAG,OAAI,MAAI,OAAI;AAAG,uBAAM;AAAG,kBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,KAAE,GAAG,IAAE,KAAG,KAAE,OAAG,KAAE,OAAK,KAAG,AAAO,OAAP,OAAU,GAAG,MAAM,MAAI,CAAC,KAAI,KAAE,OAAK,KAAG,AAAO,OAAP,OAAU,GAAG,MAAM,MAAI,CAAC,KAAI,KAAE,EAAE,QAAQ,IAAG;AAAG,mBAAI,KAAE,MAAI,GAAE,OAAO,IAAE,IAAG,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,oBAAG,AAAK,MAAE,GAAE,KAAI,QAAQ,QAArB,GAAyB;AAAC,uBAAI,KAAE,MAAG,KAAE,MAAG,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,wBAAG,OAAI,GAAE,KAAG;AAAC,2BAAE;AAAG;AAAA;AAAM,uBAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,wBAAG,OAAI,GAAE,KAAG;AAAC,2BAAE;AAAG;AAAA;AAAM,sBAAG,MAAG,IAAE;AAAC,yBAAE;AAAG;AAAA;AAAA;AAAO,qBAAO;AAAA;AAAE,wBAAY,IAAE;AAAC,kBAAI,KAAE,GAAE,eAAc,KAAE,GAAE,QAAO,KAAE,GAAE,MAAK,KAAE;AAAU,kBAAG,OAAI,GAAG;AAAG,uBAAO,AAAO,OAAP;AAAS,kBAAG,AAAe,OAAf,gBAAmB,QAAI,EAAE,KAAG,OAAI,EAAE,MAAI,CAAC,GAAE;AAAC,oBAAG,OAAI,EAAE,KAAG,EAAE,IAAG,SAAS;AAAI,yBAAO,GAAG,GAAE,UAAS,GAAE,aAAa,EAAE;AAAI,oBAAG,OAAO,GAAE,OAAI,EAAE;AAAE,yBAAM;AAAG,oBAAG,AAAO,GAAE,IAAG,KAAG,QAAf,QAAoB,AAAO,GAAE,IAAG,KAAG,QAAf,QAAoB,AAAO,GAAE,IAAG,KAAG,QAAf;AAAmB,yBAAM;AAAA;AAAG,qBAAM;AAAA;AAAG,0BAAa;AAAC,kBAAG;AAAE,uBAAM;AAAG,kBAAI,IAAE,KAAE,KAAG,MAAI,CAAC,KAAG,GAAG,MAAM,SAAO,GAAE,KAAE,CAAC,MAAI,MAAI,CAAC,GAAE,KAAE,IAAG,KAAE;AAAG,mBAAI,MAAE,EAAC,GAAE,GAAG,GAAG,EAAE,KAAI,GAAE,GAAG,GAAG,EAAE,QAAM,MAAI,MAAE,GAAG,IAAI,KAAI,GAAE,MAAI,IAAE,KAAG,IAAG,GAAE,MAAI,IAAG,GAAG,IAAI;AAAI,kBAAI,KAAE,EAAC,GAAE,KAAK,EAAE,MAAI,IAAE,GAAE,KAAK,EAAE,MAAI;AAAG,oBAAI,IAAE,MAAI,IAAE,GAAE,MAAI,IAAG,GAAG,IAAI;AAAI,kBAAI,KAAE,MAAK,KAAE,GAAG,IAAE,KAAI,KAAE,GAAG,IAAE,IAAG,IAAG;AAAI,qBAAO,KAAG,IAAE,KAAG,IAAE,MAAG,MAAG;AAAA;AAAE,0BAAa;AAAC,kBAAG,KAAG;AAAG,uBAAM;AAAG,kBAAI,KAAE,GAAG,KAAK,EAAE,MAAI,IAAG,KAAE,GAAG,IAAE,KAAI,KAAE,GAAG,KAAK,EAAE,MAAI,IAAG,KAAE,GAAG,IAAE,KAAI,KAAE,GAAG,KAAK,EAAE,MAAI,IAAG,KAAE,GAAG,IAAE,KAAI,KAAE,GAAG,GAAG,eAAa,IAAG,KAAE,GAAG,IAAE,KAAI,KAAE,KAAG,GAAG,KAAK,WAAS,IAAG,KAAE,GAAG,IAAE,KAAI,KAAE,KAAG,GAAG,KAAK,WAAS,IAAG,KAAE,GAAG,IAAE,KAAI,KAAE,KAAG,GAAG,KAAK,WAAS,IAAG,KAAE,GAAG,IAAE;AAAI,qBAAO,KAAG,IAAE,MAAI,MAAE,GAAG,IAAG,MAAI,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,MAAG,MAAG,MAAG,MAAG,MAAG,MAAG;AAAA;AAAE,wBAAY,IAAE;AAAC,kBAAG,CAAC;AAAE,uBAAM;AAAG,kBAAI,KAAE,aAAY,KAAE,eAAc,KAAE,cAAa,KAAE,CAAC,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,IAAG,IAAG,eAAc,gBAAe,IAAE,IAAE,KAAG,KAAE,CAAC,KAAG,IAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,KAAI,KAAE,CAAC,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,IAAG,IAAG,eAAc,IAAE,IAAE,KAAG,KAAE,CAAC,KAAG,IAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,KAAI,KAAE,KAAI,KAAE,OAAM,KAAE,GAAG,MAAI,MAAG,GAAG,MAAI,IAAE,KAAE,OAAG,KAAE,SAAS,IAAE,IAAE;AAAC,yBAAQ,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,sBAAG,GAAE,QAAK;AAAE,2BAAM;AAAG,uBAAM;AAAA;AAAI,qBAAO,IAAG,MAAI,MAAG,GAAG,MAAI,OAAM,OAAE,GAAE,IAAE,QAAK,KAAI,MAAE,GAAE,IAAE,OAAK,MAAG,CAAC,MAAK,OAAE,GAAE,IAAE,QAAK,KAAI,MAAE,GAAE,IAAE,OAAK;AAAA;AAAE,0BAAa;AAAC,kBAAG,CAAC,GAAE;AAAC,oBAAI,IAAE,IAAE,IAAE,IAAE,KAAE,CAAC,IAAG,KAAE,GAAG,GAAE,KAAE,GAAG,GAAE,KAAE,IAAG,KAAE,MAAI,IAAE,KAAE,GAAG;AAAG,uBAAO,GAAE,KAAG,MAAI,IAAG,GAAE,KAAG,MAAI,IAAG,GAAE,MAAI,IAAG,GAAG,IAAI,KAAG,KAAE,GAAE,EAAE,KAAI,KAAE,KAAE,EAAE,IAAI,IAAE,GAAE,EAAE,MAAI,KAAG,GAAE,GAAE,MAAI,KAAG,KAAG,IAAG,GAAE,KAAG,MAAI,IAAG,GAAE,MAAI,IAAG,GAAG,IAAI,KAAG,KAAE,GAAE,EAAE,KAAI,KAAE,EAAE,IAAI,IAAE,GAAE,EAAE,MAAI,IAAG,GAAE,MAAI,IAAE,GAAE,MAAI,IAAE,GAAG,IAAI,KAAG,GAAE,KAAG,MAAI,IAAE,GAAE,KAAG,MAAI,IAAE,GAAG,IAAI,KAAG,EAAC,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,IAAG;AAAA;AAAA;AAAI,wBAAY,IAAE,IAAE,IAAE,IAAE;AAAC,kBAAI,KAAE,EAAE,OAAM,KAAE,KAAG,KAAG,KAAG,KAAE,IAAE,MAAI,CAAC,MAAI,CAAC,MAAI,CAAC,IAAE,KAAE,GAAG,GAAG,YAAW,KAAE,GAAG,IAAE,IAAG;AAAG,kBAAG,KAAG,IAAE,aAAa,IAAG,MAAI,IAAG,IAAE,IAAE,GAAG,IAAE,IAAE,GAAG,IAAE,IAAE,IAAE,WAAW,IAAG,MAAK,CAAE,MAAG,MAAG,KAAG,KAAG,CAAC,MAAG,MAAG,AAAW,GAAG,IAAI,eAAlB,WAA8B;AAAC,oBAAE,IAAE,KAAE,MAAG,GAAG,GAAE,KAAE,MAAG,GAAG,GAAE,KAAE,MAAG,GAAG,GAAE,KAAG,IAAG,KAAE,OAAI,KAAG,IAAE,KAAE,OAAI,KAAG,IAAE,KAAE,OAAI,KAAG,IAAE,CAAC,MAAG,GAAE,KAAG,GAAE,IAAE,KAAE,GAAG,MAAG,IAAG,GAAE,uBAAsB,IAAE,IAAE,GAAE,GAAE,IAAE,IAAG,KAAG,EAAC,GAAE,IAAG,IAAE,IAAG,IAAE,IAAE,IAAE,KAAI,GAAE,IAAG,IAAE,IAAG,IAAE,IAAE,IAAE,OAAK,GAAG,KAAI,GAAG;AAAI,oBAAI,KAAE,EAAC,GAAE,GAAG,OAAM,GAAE,GAAG,SAAO,KAAE,GAAE,YAAW,KAAE,GAAE,UAAS,KAAE,GAAE,YAAW,KAAE,GAAG,IAAE,IAAG,KAAG,KAAE,GAAE,UAAS,KAAE,GAAG,IAAE,IAAG,KAAG,KAAE,GAAE,gBAAe,KAAE,GAAG,IAAE,IAAG,KAAG,KAAE,GAAE,eAAc,KAAE,GAAG,IAAE,IAAG,KAAG,KAAE,GAAE,WAAU,KAAE,GAAG,IAAE,IAAG,KAAG,KAAE,GAAE,QAAO,MAAG,GAAG,IAAE,IAAG,OAAI,CAAC,GAAE,MAAG,CAAC,CAAC,KAAG,AAAQ,GAAG,KAAK,YAAhB,OAAwB,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,GAAE,iBAAgB,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,GAAE,YAAW,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,GAAE,mBAAiB,CAAC,GAAE,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,GAAE,yBAAyB,sBAAqB,MAAG,GAAG,KAAG,KAAI,MAAG,GAAE,YAAW,MAAG,GAAG,KAAG,KAAI,MAAG,GAAE,kBAAiB,MAAG,GAAG,KAAG,IAAG,IAAG,IAAG,KAAG,MAAG,GAAE,UAAS,MAAG,GAAG,IAAG,MAAI,MAAG,GAAE,WAAU,MAAG,GAAG,IAAG;AAAI,oBAAG,KAAG,AAAM,OAAN,KAAQ,KAAG,AAAM,OAAN,KAAQ,KAAG,AAAM,OAAN,KAAQ,KAAG,AAAM,OAAN,KAAQ,KAAG,GAAE,eAAc,KAAG,GAAE,cAAa,KAAG,IAAG,KAAG,AAAM,OAAN,KAAQ,KAAG,AAAM,OAAN,KAAQ,KAAG,AAAM,OAAN,KAAQ,KAAG,AAAM,OAAN,KAAQ,KAAG,GAAE,cAAa,MAAG,OAAI,GAAE,KAAG,GAAE,GAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,GAAG,MAAG,IAAG,MAAI,KAAG,KAAG,KAAG,KAAG,KAAG,MAAI,EAAC,GAAE,OAAG,GAAE,SAAI,MAAI,IAAG,IAAG,KAAG,KAAG,KAAI,GAAG,IAAG,OAAI,KAAG,AAAO,OAAP,QAAU,GAAE,SAAO,IAAE,KAAE,MAAK,OAAK,CAAK,QAAL,OAAS,OAAK,GAAE,IAAI,OAAK,AAAO,QAAP,QAAW,KAAG,OAAK,GAAE,IAAI,OAAM,IAAE,OAAO,KAAI,QAAO;AAAG,sBAAG;AAAG,wBAAG,OAAK,KAAI,MAAG,EAAE,GAAG,MAAK,GAAG,OAAO,MAAK;AAAE,yBAAG;AAAA,yBAAW;AAAC,2BAAG,EAAE,GAAG,MAAK,GAAG,OAAO;AAAI,0BAAI,MAAG,EAAC,GAAE,IAAG,GAAE;AAAI,yBAAG,IAAG,WAAU;AAAC,4BAAI,KAAE,EAAC,GAAE,GAAG,GAAG,EAAE,KAAI,GAAE,GAAG,GAAG,EAAE;AAAK,2BAAG,IAAE,QAAM,MAAG,MAAI,GAAE,IAAE,KAAG,MAAI,GAAE,IAAE,IAAE,OAAM,MAAG,CAAC,MAAI,AAAI,GAAE,MAAN,KAAS,CAAC,MAAI,AAAI,GAAE,MAAN,MAAU,OAAM,MAAG;AAAA,0BAAI,IAAE,MAAG,AAAO,OAAP,QAAU,GAAG,IAAI,IAAG,KAAE;AAAA;AAAA;AAAqB,yBAAG,GAAG;AAAO,sBAAI,IAAG,KAAK,KAAK,QAAQ,KAAI,KAAG,GAAG,KAAK,KAAK,QAAQ;AAAK,oBAAI,KAAG,MAAG,GAAG,IAAI,cAAa,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,GAAG,IAAI,eAAc,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,EAAC,GAAE,IAAE,GAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,GAAG,GAAG,IAAI,KAAG;AAAM,oBAAG;AAAC,wBAAG,IAAE,GAAG,GAAG,0BAAwB;AAAA,yBAAW,IAAN;AAAU;AAAA;AAAO,oBAAE,AAAe,QAAf;AAAkB,oBAAI,MAAI,KAAE,AAAQ,QAAR,SAAY,KAAG,IAAG,MAAG,IAAE,KAAG,IAAG,MAAG,GAAG,IAAG,MAAG,GAAG,IAAG,MAAG,OAAG,MAAG,CAAE,EAAC,KAAG,AAAS,GAAG,IAAI,QAAhB,WAAuB,CAAI,EAAE,MAAM,IAAG,QAAM,IAAG,UAAxB,KAAgC,EAAC,CAAC,OAAI,IAAG,EAAE,MAAI,IAAE;AAAI,oBAAG,OAAI,CAAC,KAAG;AAAC,sBAAI,MAAG,IAAG,EAAE,KAAI,MAAG,GAAG,IAAI;AAAI,qBAAG,IAAI,IAAG;AAAI,sBAAI,MAAG,IAAG,EAAE;AAAI,qBAAG,IAAI,IAAG,MAAK,OAAG,QAAK,QAAM,IAAG,IAAI,IAAG,MAAG,IAAG,MAAG,IAAG,EAAE,KAAI,GAAG,IAAI,IAAG,MAAI,MAAG,QAAK;AAAA;AAAI,oBAAI,MAAI,QAAI,QAAK,OAAI,CAAC,IAAE,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,CAAC,OAAI,IAAG,MAAG,CAAE,EAAC,KAAG,OAAI,AAAI,EAAE,MAAM,IAAG,SAAO,IAAG,SAAzB,GAA8B,MAAG,GAAG,KAAG,IAAG,KAAG,MAAG,CAAC,OAAI,IAAG,MAAG,MAAI,IAAG,MAAG,OAAI,KAAG,CAAC,GAAE,MAAG,OAAI,KAAG,CAAC,GAAE,MAAG,EAAC,GAAE,IAAE,GAAE,MAAG,GAAG,GAAG,IAAI,KAAG,KAAG,MAAI,QAAI,GAAE,GAAE,MAAG,GAAG,GAAG,IAAI,KAAG,KAAG,MAAI,QAAI,GAAE,GAAE,MAAG,GAAG,GAAG,IAAI,KAAG,KAAG,MAAI,QAAI,GAAE,GAAE,MAAG,GAAG,GAAG,IAAI,KAAG,KAAG,MAAI,QAAI,KAAG,MAAG,EAAC,GAAE,IAAE,GAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,GAAG,GAAG,IAAI,KAAG,MAAK,GAAE,GAAG,GAAG,IAAI,KAAG,QAAM,MAAG,EAAC,GAAE,OAAO,GAAG,IAAI,KAAG,MAAK,GAAE,OAAO,GAAG,IAAI,KAAG,QAAM,MAAG,IAAG,MAAG,IAAG,MAAG,WAAU;AAAC,yBAAM,EAAC,GAAE,IAAG,EAAE,KAAI,GAAE,IAAG,EAAE;AAAA,mBAAM,MAAG,WAAU;AAAC,sBAAI,KAAE,IAAG;AAAwB,yBAAO,GAAE,MAAI,EAAC,GAAE,GAAE,KAAI,GAAE,GAAE,QAAK,EAAC,GAAE,IAAG,EAAE,KAAI,GAAE,IAAG,EAAE;AAAA;AAAM,oBAAG,IAAE,IAAG,IAAE,IAAG,GAAE,IAAE,IAAG,IAAE,IAAG,GAAE,IAAG,KAAG,MAAG,IAAE,GAAE,IAAG,KAAG,MAAG,IAAE,GAAE,IAAG,IAAE,GAAG,KAAG,KAAI,IAAE,IAAG,IAAE,IAAG,GAAE,IAAE,IAAG,IAAE,IAAG,GAAE,IAAG,IAAE,GAAG,KAAG,KAAI,IAAE,IAAG,IAAE,IAAG,GAAE,IAAE,IAAG,IAAE,IAAG,GAAE,IAAG,IAAE,GAAG,KAAG,KAAI,IAAG,KAAG,GAAG,IAAG,IAAG,IAAG,KAAG,GAAG,IAAG,IAAG,IAAG,KAAG,IAAG,EAAE,QAAQ,QAAM,IAAG,IAAG,KAAG,IAAG,EAAE,QAAQ,QAAM,IAAG,IAAG,IAAE,GAAG,KAAG,IAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,OAAI,KAAG,GAAG,IAAI,IAAG,MAAI,IAAG,KAAG,OAAI,OAAI,OAAI,OAAI,OAAI,KAAG;AAAC,sBAAI,MAAG,IAAG,MAAG;AAAG,qBAAG,KAAG,IAAG,CAAC,CAAC,IAAG,GAAE,CAAC,IAAG,GAAE,CAAC,IAAG,GAAE,CAAC,IAAG,KAAI,MAAI,IAAG,KAAG,IAAG,CAAC,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,KAAI,GAAG,IAAE,MAAG,KAAG,OAAM,IAAG,KAAG,KAAI,GAAG,IAAE,MAAG,KAAG,IAAG,CAAC,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,MAAK,GAAG,IAAI,MAAI,GAAG,IAAI;AAAA;AAAI,qBAAG;AAAK,oBAAI,MAAG,CAAC,CAAC,KAAG;AAAK,oBAAG,OAAK,QAAI,OAAI,OAAI,IAAG,KAAG,IAAG,KAAG,IAAG,KAAI,KAAG,MAAK,KAAG,KAAG,MAAI,IAAG,KAAG,IAAG,KAAG,IAAG,KAAI,KAAE,CAAC,IAAE,KAAG,KAAI,IAAG,MAAI,MAAK,QAAI,QAAM,KAAG,KAAG,MAAI,IAAG,IAAG,MAAI,KAAI,OAAK,QAAI,OAAI,OAAI,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,OAAK,KAAG,MAAK,KAAG,KAAG,MAAI,IAAG,KAAG,IAAG,KAAG,IAAG,KAAI,KAAE,CAAC,IAAE,KAAI,IAAE,IAAE,GAAE,IAAE,KAAG,KAAI,IAAG,MAAI,IAAG,IAAG,KAAG,MAAI,MAAK,QAAI,QAAM,KAAG,KAAG,MAAI,IAAG,IAAG,MAAI,IAAG,IAAG,MAAI,IAAG,IAAG,KAAG,MAAI,KAAI,OAAK,KAAG,MAAK,KAAG,KAAG,MAAI,KAAI,IAAG,MAAI,KAAG,MAAG,IAAG,KAAG,IAAG,IAAG,MAAI,IAAG,IAAG,MAAI,MAAI,OAAK,KAAG,MAAK,KAAG,KAAG,MAAI,KAAI,IAAG,MAAI,IAAE,MAAG,IAAG,KAAG,KAAG,GAAG,GAAG,EAAE,MAAK,OAAI,GAAG,IAAI,MAAI,GAAG,IAAI,MAAI,MAAG,IAAG,MAAG,IAAG,MAAG,MAAG,OAAI,OAAI,OAAI,OAAI,OAAI,OAAI,OAAI,IAAG,KAAG,OAAI,OAAI,OAAI,OAAI,MAAG,OAAI,OAAI,OAAI,IAAE;AAAC,sBAAI,MAAG,YAAW,MAAG,MAAG,MAAK,MAAG,MAAG,MAAK,MAAG,UAAS,MAAG,WAAU,MAAG,IAAE,GAAE,KAAG,GAAE,KAAG,GAAG,IAAE,GAAG,KAAG,GAAG,IAAE,GAAG,KAAG,OAAI,KAAE,KAAG,MAAG,IAAG,MAAG,GAAG,KAAG,GAAG,MAAI,CAAC,MAAG,GAAE,IAAE,GAAG,IAAI,OAAI,CAAC,GAAE,IAAE,GAAE,MAAG,GAAG,KAAG,GAAG,MAAI,CAAC,MAAG,GAAE,IAAE,GAAG,IAAI,MAAI,CAAC,GAAE,IAAE;AAAE,qBAAG,KAAG,KAAI,GAAG,IAAI,MAAI,OAAI,GAAG,IAAI,KAAG;AAAI,sBAAI,MAAG,MAAK,MAAG,KAAG,CAAC,MAAG,GAAG,KAAG,KAAG,MAAG,EAAC,GAAE,IAAG,EAAE,KAAI,GAAE,IAAG,EAAE,OAAK,MAAG,EAAC,GAAE,EAAE,IAAI,IAAG,EAAE,KAAI,IAAG,EAAE,MAAK,GAAE,EAAE,IAAI,IAAG,EAAE,KAAI,IAAG,EAAE,QAAM,MAAG,EAAC,GAAE,KAAG,OAAI,CAAC,MAAG,IAAG,KAAG,MAAG,IAAG,IAAE,IAAG,GAAE,GAAE,KAAG,OAAI,CAAC,MAAG,IAAG,KAAG,MAAG,IAAG,IAAE,IAAG;AAAG,sBAAG,MAAI,MAAG,KAAG,KAAG,IAAG,OAAI,MAAG,KAAG,KAAG,GAAG,IAAI,MAAI,KAAG;AAAK,sBAAI,MAAG,OAAK,MAAG,EAAC,GAAE,EAAE,IAAI,IAAG,IAAE,IAAG,IAAG,IAAG,IAAE,IAAG,GAAE,EAAE,IAAI,IAAG,IAAE,IAAG,IAAG,IAAG,IAAE;AAAI,sBAAG,IAAG,IAAE,GAAG,KAAG,IAAG,KAAG,KAAG,KAAG,KAAG;AAAC,oBAAC,KAAG,KAAG,OAAI,QAAM,KAAG,MAAI,IAAG,GAAE,IAAG,MAAI,IAAG;AAAG,wBAAI,MAAG,IAAG,MAAK,KAAE,IAAE,CAAC,IAAG,MAAG,IAAG,MAAK,KAAE,IAAE,CAAC,IAAG,MAAG;AAAG,oBAAC,EAAC,OAAI,CAAC,OAAI,IAAG,MAAK,KAAG,MAAI,IAAG,IAAG,KAAE,IAAE,IAAE,KAAG,IAAE,IAAI,EAAC,OAAI,CAAC,OAAI,IAAG,MAAK,KAAG,MAAI,IAAG,IAAG,KAAE,IAAE,IAAE,KAAG,IAAE,IAAG,OAAI,IAAG,MAAI,IAAG,OAAK,OAAK,KAAG,MAAI,MAAI,KAAE,IAAE,KAAG,IAAG,OAAI,IAAG,MAAI,IAAG,OAAK,OAAK,KAAG,MAAI,MAAI,KAAE,IAAE,KAAG,IAAG,OAAK,KAAG,IAAE,GAAG,KAAG,KAAG,CAAC,QAAK,AAAI,MAAJ,KAAQ,MAAI,KAAG,MAAI,GAAG,GAAG,IAAI,OAAK,IAAG,IAAG,OAAK,IAAG,OAAK,KAAG,IAAE,GAAG,KAAG,MAAI,AAAI,MAAJ,KAAQ,MAAI,KAAG,MAAI,GAAG,GAAG,IAAI,OAAK,IAAG,IAAG,OAAK,IAAG,IAAG,IAAE,KAAI,KAAG,MAAI,EAAE,IAAI,GAAE,IAAG,MAAK,IAAG,MAAI,EAAE,IAAI,GAAE,IAAG,OAAM,KAAG,GAAG,IAAI,MAAI,GAAG,IAAI;AAAA;AAAI,yBAAK,KAAG,MAAI,KAAI,CAAC,OAAI,KAAG,MAAK,KAAG,MAAI,SAAQ,GAAG,IAAI,MAAI,MAAG;AAAG,sBAAI,MAAG,IAAG,yBAAwB,MAAG,IAAG,OAAK,GAAE,MAAG,IAAG,OAAK,GAAE,MAAG,EAAC,GAAE,EAAE,IAAI,IAAG,EAAE,KAAI,IAAG,EAAE,OAAK,GAAG,OAAI,KAAG,GAAE,EAAE,IAAI,IAAG,EAAE,KAAI,IAAG,EAAE,OAAK,GAAG,OAAI;AAAI,sBAAG,IAAE,KAAE,GAAG,KAAG,IAAG,KAAG,KAAG,KAAG,OAAI,GAAG,IAAI,KAAG,KAAI,KAAG,OAAK,KAAE,GAAG,MAAG,OAAK,KAAI,KAAG;AAAG,sBAAI,MAAG,EAAC,GAAE,AAAQ,IAAG,MAAX,OAAa,GAAE,AAAQ,IAAG,MAAX,SAAc,MAAG,EAAC,GAAE,AAAQ,IAAG,MAAX,OAAa,GAAE,AAAQ,IAAG,MAAX,SAAc,MAAG,EAAC,GAAE,AAAM,IAAG,MAAT,KAAW,GAAE,AAAM,IAAG,MAAT,OAAY,MAAG,EAAC,GAAE,EAAE,IAAI,GAAE,EAAE,MAAM,MAAK,KAAG,IAAE,GAAG,MAAI,MAAK,GAAE,EAAE,IAAI,GAAE,EAAE,MAAM,MAAK,KAAG,IAAE,GAAG,MAAI,QAAM,MAAG,KAAI,CAAI,GAAG,MAAP,KAAU,AAAI,GAAG,MAAP,IAAU,MAAG,AAAI,GAAG,GAAG,kBAAV,KAAyB,IAAG,IAAE,KAAG,IAAG,IAAE,KAAG,AAAI,GAAG,GAAG,iBAAV,KAAwB,IAAG,IAAE,KAAG,IAAG,IAAE;AAAE,kBAAC,QAAI,QAAM,KAAG,IAAE,IAAG,IAAE;AAAG,sBAAI,MAAG,EAAC,GAAE,IAAG,IAAE,GAAE,GAAE,IAAG,IAAE,KAAG,MAAG,EAAC,GAAE,IAAG,GAAE,GAAE,IAAG;AAAG,kBAAC,KAAG,KAAG,IAAG,MAAK,KAAG,IAAE,IAAG,KAAG,CAAC,IAAG,KAAG,CAAC,IAAG,IAAI,KAAG,KAAG,IAAG,MAAK,KAAG,IAAE,IAAG,KAAG,CAAC,IAAG,KAAG,CAAC,IAAG,IAAG,IAAG,KAAG,CAAC,CAAC,IAAG,KAAI,KAAG,KAAG,IAAG,IAAG,IAAG,KAAG,CAAC,CAAC,IAAG,KAAI,KAAG,KAAG,IAAG;AAAG,sBAAI,MAAG,EAAC,GAAE,IAAG,KAAG,IAAG,IAAG,GAAE,IAAG,KAAG,IAAG,MAAI,MAAG;AAAG,sBAAG,IAAG,IAAE,GAAG,KAAG,IAAG,IAAG,IAAG,KAAG,KAAG,KAAG,IAAG,IAAE,GAAG,KAAG,IAAG,IAAG,IAAG,KAAG,KAAG,KAAG,IAAG,IAAE,GAAG,KAAG,IAAG,IAAG,IAAG,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,GAAE;AAAC,wBAAI,MAAG,wBAAuB,MAAG,IAAG,MAAG,IAAG,MAAG;AAAE,oBAAC,KAAG,KAAG,IAAG,MAAK,KAAG,IAAE,GAAE,KAAG,IAAG,IAAE,IAAG,IAAE,GAAE,IAAE,IAAG,IAAG,IAAE,GAAE,KAAG,IAAG,IAAE,IAAG,IAAE,GAAE,IAAE,IAAG,MAAG,GAAG,KAAG,IAAG,KAAG,KAAG,MAAK,KAAG,KAAG,IAAG,KAAG,IAAG,KAAG,OAAI,OAAI,OAAI,OAAI,OAAI,QAAM,KAAG,KAAG,OAAI,IAAG,KAAG,OAAI,IAAG,GAAE,KAAG,IAAG,KAAG,IAAG,KAAI,KAAG,KAAG,MAAI,MAAG,MAAG,KAAG,GAAE,IAAE,IAAG,IAAG,KAAG,MAAI,OAAI,MAAG,KAAG,GAAE,IAAE,OAAK,KAAG,IAAE,IAAG,KAAG,MAAI,IAAG,KAAG,MAAI,IAAG,MAAG,OAAI,GAAE,KAAG,IAAG,KAAG,IAAG,KAAI,KAAG,KAAG,OAAI,MAAG,MAAG,KAAG,GAAE,IAAE,IAAG,IAAG,KAAG,OAAI,MAAG,KAAG,GAAE,IAAE,OAAK,KAAG,IAAE,IAAG,KAAG,OAAI,IAAG,KAAG,OAAI,IAAG,MAAG,QAAK,OAAK,KAAG,IAAE,IAAG,IAAE,IAAG,MAAG,OAAI,OAAK,KAAG,MAAI,IAAG,IAAE,IAAG,IAAE,IAAG,IAAG,MAAI,IAAG,IAAE,IAAG,IAAE,IAAG,MAAK,MAAG,EAAE,GAAG,MAAK,GAAG,QAAQ,MAAK,GAAG,IAAI,OAAK,GAAG,IAAI;AAAA;AAAI,sBAAI,MAAG;AAAG,wBAAG;AAAG,sBAAG,MAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,OAAI,OAAI,OAAI,OAAI,OAAI,KAAG;AAAC,wBAAG,OAAI;AAAG,wBAAI,MAAG,WAAU;AAAC,0BAAG,MAAI,IAAG,GAAG,IAAE;AAAA,uBAAG,MAAG,WAAU;AAAC,0BAAG,OAAI,IAAG,GAAG,IAAE;AAAA;AAAG,wBAAG,IAAG,KAAG,IAAG,KAAI,KAAG,OAAI,IAAG,MAAG,QAAM,KAAG,MAAI,CAAE,IAAE,IAAE,GAAE,IAAE,GAAE,IAAG,GAAG,IAAE,GAAE,IAAE,GAAE,IAAE,MAAK,KAAG,OAAI,IAAG,QAAM,IAAG,KAAG,IAAG,KAAI,KAAG,OAAI,IAAG,MAAG,QAAM,KAAG,OAAI,CAAE,IAAE,IAAE,GAAE,IAAE,GAAE,IAAG,GAAG,IAAE,GAAE,IAAE,GAAE,IAAE,MAAK,KAAG,OAAI,IAAG,QAAO,IAAG,IAAE,GAAG,KAAG,GAAG,IAAE,GAAG,MAAK,KAAG,KAAG,IAAG,KAAG,CAAC,GAAE,KAAG,IAAG,KAAG,IAAG,KAAG,CAAC,GAAE,KAAI,KAAG,KAAG,MAAI,GAAG,GAAE,IAAG,KAAG,MAAI,CAAC,GAAG,GAAE,IAAG,KAAG,OAAI,GAAG,GAAE,IAAG,KAAG,OAAI,CAAC,GAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,MAAI,IAAG,KAAG,OAAI,IAAG,KAAG,OAAI,IAAG,IAAG,KAAG,OAAI,IAAG,KAAG,OAAI,IAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,MAAG,KAAG,OAAK,KAAG,OAAI,IAAG,OAAI,OAAK,EAAC,OAAI,IAAG,KAAG,IAAG,KAAG,IAAG,KAAG,IAAG,MAAK,MAAI,KAAG,OAAI,IAAG,OAAI,KAAI,IAAG,OAAI,IAAG,OAAI,MAAI,GAAG,IAAI,MAAI,GAAG,IAAI,MAAI,MAAG,IAAI,KAAG,KAAG,OAAI,OAAI,QAAM,EAAC,GAAE,KAAG,CAAC,GAAE,IAAG;AAAC,0BAAI,MAAG,GAAG,IAAG,MAAG,IAAG,EAAE;AAAG,0BAAG,kBAAgB,YAAW,IAAG,UAAQ,UAAS,IAAG,EAAE,KAAI,IAAG,UAAQ,IAAG,IAAG,kBAAgB;AAAA;AAAA;AAAI,sBAAG,MAAG,IAAG,OAAI,OAAI;AAAG,wBAAG,KAAG,KAAG;AAAC,0BAAI,MAAG,GAAG,IAAI,KAAI,MAAG,EAAE,MAAM,GAAG,IAAI,IAAG,IAAI,IAAI,IAAG,IAAI,WAAW;AAAM,yBAAG,IAAI,IAAG,MAAI,QAAK,EAAE,MAAM,GAAG,WAAW,SAAQ,KAAG,MAAI;AAAA;AAAS,0BAAG,MAAI;AAAG,qBAAG,IAAI;AAAI,sBAAI,KAAG,KAAG,MAAG,AAAM,OAAN,KAAQ,MAAG,AAAM,OAAN,KAAQ,MAAG,AAAM,OAAN,KAAQ,MAAG,EAAE,KAAK,IAAG,GAAE,MAAG,MAAG,IAAG,IAAG,MAAG,EAAE,KAAK,IAAG,GAAE,OAAG,MAAG,IAAG,IAAG,MAAG,EAAE,KAAK,IAAG,GAAE,MAAG,OAAG,IAAG,IAAG,MAAG,EAAE,KAAK,IAAG,GAAE,OAAG,OAAG,IAAG;AAAG,sBAAG,IAAG,KAAG,IAAG,IAAE,GAAG,IAAG,MAAI,GAAG,IAAG,KAAI,IAAG,IAAE,GAAG,IAAG,MAAI,GAAG,IAAG,KAAI,IAAG,IAAE,GAAG,IAAG,MAAI,GAAG,IAAG,KAAI,OAAK,KAAE,GAAG,IAAG,MAAI,GAAG,IAAG,MAAK,KAAG,GAAG,IAAG,KAAI,KAAG;AAAC,wBAAI,MAAG,WAAU;AAAC,yBAAG,GAAG,KAAG;AAAA,uBAAK,KAAG,WAAU;AAAC,yBAAG,IAAI,KAAG;AAAA;AAAK,yBAAI,IAAG,IAAG,KAAI,GAAG,IAAG,CAAC,IAAG,IAAG,IAAG,IAAI,KAAK,MAAK,QAAO,IAAG,IAAG,KAAI,GAAG,IAAG,KAAI,KAAG,GAAG,IAAG,MAAI,KAAG,GAAG,IAAG,MAAI,MAAI,GAAG,IAAG,KAAI,MAAK;AAAA;AAAM,sBAAI,OAAG,OAAI,IAAG,KAAG,IAAG,KAAG,QAAM,OAAG,OAAK,IAAG,IAAG,KAAI,OAAK,QAAK,UAAO,MAAI,KAAG,IAAE,QAAK,OAAK,IAAG,IAAE,QAAK,SAAM,MAAI,QAAK,SAAM,OAAK,QAAK,SAAQ,OAAG,QAAM,OAAI,KAAI,IAAG,OAAI,QAAM,GAAG,OAAI,KAAG,GAAG,QAAI,GAAG,OAAG,QAAM,OAAG,IAAG,KAAG,OAAI,OAAI,OAAI,OAAI,OAAI,OAAI,QAAM,IAAG,OAAI,GAAG,MAAG,GAAE,IAAG,GAAG,QAAI,GAAG,OAAG,GAAE,KAAI,MAAG,GAAG,MAAG,KAAG,MAAG,GAAG,OAAG,KAAG,KAAG,IAAE;AAAC,wBAAI,KAAG;AAAK,wBAAG,IAAG;AAAC,0BAAI,KAAG,OAAK,KAAG,GAAG,SAAO,GAAG,MAAK,KAAG,GAAG,IAAG,KAAG,GAAG,IAAG,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,KAAG,GAAG,KAAG,IAAG,KAAG,EAAC,GAAE,OAAI,OAAK,MAAI,OAAK,KAAG,KAAG,GAAG,GAAE,GAAG,OAAG,MAAI,MAAI,QAAK,KAAG,GAAE,MAAI,IAAG,IAAG,OAAI,OAAK,OAAK,MAAI,GAAG,IAAE;AAAI,4BAAG,GAAG,IAAE,IAAI,OAAG,GAAG,IAAE,OAAK,GAAG,IAAI,GAAG,IAAG,OAAK,MAAG,MAAI,GAAE,IAAE,GAAG,IAAI,KAAG,GAAG,IAAI,GAAG;AAAA;AAAI,yBAAG;AAAA;AAAG,uBAAG,GAAE,KAAG,GAAE,KAAG,IAAG,KAAG,MAAK,IAAE,KAAG,GAAG,KAAG,IAAG,OAAI,GAAG,IAAI,GAAE,IAAG,OAAI,GAAG,IAAI,GAAE,IAAG,OAAI,GAAG,IAAI,IAAG,OAAI,GAAG,IAAI,IAAG,OAAI,GAAG,sBAAqB,EAAC,OAAM,GAAE,KAAI,QAAK,MAAG,GAAG,qBAAoB,EAAC,OAAM,GAAG,GAAE,QAAO,GAAG,MAAI,MAAG,GAAG,wBAAuB,EAAC,OAAM,GAAG,GAAE,QAAO,GAAG,MAAK,KAAG,KAAG,IAAG,MAAI,GAAG,qBAAoB,EAAC,GAAE,IAAG,GAAE,GAAE,IAAG,GAAE,aAAY,IAAG,IAAG,aAAY,IAAG,IAAG,SAAQ,IAAG,KAAG,IAAG,MAAI,IAAG,KAAG,GAAG,2BAA0B,EAAC,GAAE,IAAG,GAAE,GAAE,IAAG;AAAA;AAAI,qBAAI,IAAG,KAAG,GAAG,MAAK,IAAG,KAAG,MAAK,GAAE,KAAG,GAAG,KAAG,GAAG,IAAI,KAAG,IAAG,GAAG,IAAE,GAAE,IAAG,GAAE,KAAG,GAAG,KAAG,GAAG,IAAI,KAAG,IAAG,GAAG,IAAE,GAAE,IAAG,GAAG,IAAE,QAAI,GAAG,KAAI,GAAG,KAAI,GAAG,aAAY,EAAC,QAAO;AAAA;AAAA;AAAK,wBAAY,IAAE;AAAC,kBAAE,GAAG,MAAG,IAAG,GAAE,EAAE,EAAE,IAAE,EAAE,GAAE,QAAK,KAAE,GAAG,MAAG,IAAG,IAAE,EAAE,EAAE,IAAE,EAAE,GAAE,OAAG;AAAA;AAAK,wBAAY,IAAE;AAAC,kBAAI,KAAE,GAAE,SAAS,gBAAe,KAAE,IAAG,KAAE,WAAU;AAAC,oBAAI,KAAE,KAAE,KAAG;AAAG,kBAAE,KAAK,IAAE,SAAS,IAAE,IAAE;AAAC,qBAAG,OAAI,EAAE,KAAI,OAAG,EAAE,IAAE,GAAE,SAAS,MAAG,GAAE,KAAK,IAAE;AAAA;AAAA,iBAAO,KAAE,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAI,KAAK;AAAI,kBAAG,GAAG,KAAE,GAAG,OAAI,EAAE,IAAE,GAAE,MAAM,OAAK,OAAI,EAAE,KAAG,EAAE,KAAK,IAAE,SAAS,IAAE,IAAE;AAAC,mBAAG,OAAI,EAAE,KAAI,IAAE,MAAG,KAAE,GAAG,KAAK,MAAG,GAAG,KAAK;AAAA,kBAAM;AAAE,mBAAG,WAAW,SAAS,SAAS,UAAS,IAAG,IAAG,WAAW,EAAE,IAAG,MAAI,GAAG,IAAG,KAAE,KAAG,KAAG,KAAG,IAAI,UAAS,GAAG,KAAI,GAAG,OAAM,IAAG,IAAG,KAAI,GAAG,IAAG,MAAI,KAAG,GAAG,IAAG,KAAI,GAAG;AAAA,mBAAQ;AAAC,oBAAG,GAAE;AAAC,sBAAI,KAAE;AAAG,qBAAE,mBAAkB,IAAE,MAAI,GAAG,IAAI,KAAI,GAAE,MAAI,GAAG,IAAI,MAAK,GAAG,KAAK,GAAG,MAAM,MAAG,GAAG,UAAU,IAAI,IAAG,UAAU,GAAG,KAAG,KAAG,KAAK,UAAU,GAAG,KAAG,KAAG,KAAK,UAAU,GAAG,KAAG,KAAG,MAAK,KAAG,GAAG,IAAG,KAAG,KAAI,KAAG,GAAG,IAAG,KAAG,KAAI,KAAG,GAAG,IAAG,KAAG,KAAI,KAAG,EAAE,GAAG,MAAK,GAAG,QAAQ,KAAI,GAAG,IAAG,KAAG,KAAG,KAAI;AAAA;AAAQ,kBAAC,MAAG,IAAI,UAAU,GAAG,KAAK,UAAU,GAAG,KAAK,UAAU,GAAG,MAAK,KAAG,GAAG,IAAG,KAAG,KAAI,KAAG,GAAG,IAAG,KAAG,KAAI,KAAG,GAAG,IAAG,KAAG,KAAI,GAAG,IAAG;AAAI,sBAAG,GAAG,IAAG,GAAE,KAAG,GAAE,IAAE,KAAG,KAAI,KAAG,GAAG,IAAG,KAAI,KAAG,EAAE,GAAG,6BAA4B,GAAG,QAAQ;AAAA;AAAA;AAAK,wBAAY,IAAE;AAAC,kBAAI,IAAE,IAAE,IAAE,IAAE,KAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,MAAK,KAAE,IAAG,KAAE,KAAI,KAAE,KAAE,QAAM;AAAK,eAAC,MAAG,KAAI,MAAE,SAAS,IAAE;AAAC,sBAAK,GAAG,OAAO,KAAI,MAAG,cAAc;AAAA,iBAAK,MAAG,IAAI,MAAI,SAAS,IAAE;AAAC,uBAAO,GAAG,IAAI,GAAE,KAAG,KAAG,UAAQ,IAAG,GAAG,IAAI,IAAG,EAAE,KAAK,KAAG,EAAE,KAAK,KAAG;AAAA,iBAAI,GAAG,OAAK,WAAU;AAAC,2BAAW,WAAU;AAAC,uBAAG;AAAA,mBAAK;AAAA,iBAAK,GAAG,QAAM,WAAU;AAAC,qBAAG;AAAA,iBAAI,GAAG,WAAS,WAAU;AAAC,qBAAG,OAAG,KAAE,IAAG,GAAE;AAAA,iBAAK,KAAE,KAAG,CAAC,KAAE,GAAG,QAAM,WAAU;AAAC;AAAA,kBAAM,IAAG,MAAI,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE;AAAQ,kBAAE,QAAQ,IAAE,MAAG,MAAK,IAAE,UAAS,OAAI,KAAE,YAAY,IAAE,MAAI,MAAK,AAAK,EAAE,QAAQ,IAAE,QAAjB,MAAqB,GAAE,KAAK;AAAA,iBAAK,GAAG,MAAI,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE,SAAQ,KAAE,EAAE,QAAQ,IAAE;AAAG,kBAAE,QAAQ,IAAE,MAAG,MAAK,MAAE,MAAI,GAAE,OAAO,IAAE,IAAG,GAAE,UAAQ,GAAE;AAAA,mBAAQ,IAAE,EAAE,KAAK,IAAG,SAAS,IAAE,IAAE;AAAC,mBAAG,IAAG,IAAE;AAAA,mBAAK,GAAG,IAAG,IAAG,SAAS,IAAE;AAAC,gBAAK,OAAL,QAAS,GAAI,MAAE,GAAE,iBAAe,IAAG,iBAAe,GAAG;AAAA,kBAAM,MAAI,MAAE,SAAS,IAAE;AAAC,qBAAI,QAAI,IAAE,aAAa,MAAK,QAAI,OAAK,GAAG,OAAI,QAAM,GAAG,IAAG,KAAI,GAAG,iBAAgB,MAAI,GAAG,OAAI,GAAG,QAAI,GAAG,YAAW,KAAG,KAAE,WAAW,WAAU;AAAC,uBAAI,cAAa,KAAG,KAAE,GAAG,OAAI,OAAK,GAAG,QAAI,QAAM,GAAG,IAAG,KAAI,GAAG,gBAAe;AAAA,mBAAK;AAAA,iBAAK,KAAE,GAAG,IAAG,IAAG,MAAG,GAAG,GAAG,IAAG;AAAA;AAAI,wBAAY,IAAE;AAAC,mBAAG,IAAG,KAAI,GAAG,OAAM,MAAG,EAAE,GAAG,KAAG,KAAG,MAAK,KAAG,EAAE,GAAG,MAAK,KAAG,EAAE,GAAG,MAAK,KAAG,EAAE,GAAG,KAAG,KAAG,MAAK,KAAG,EAAE,GAAG,MAAK,KAAG,EAAE,GAAG,MAAK,GAAG,OAAO,KAAI,GAAG,OAAO,KAAI,GAAG,OAAO,KAAI,GAAG,OAAO,KAAI,GAAG,MAAM,KAAI,GAAG,MAAM;AAAA;AAAK,wBAAY,IAAE;AAAC,kBAAI,IAAE,IAAE,IAAE,KAAE,GAAG,KAAG,KAAE,EAAE,QAAM,GAAE,KAAE,GAAE,IAAG,KAAE,GAAE,IAAG,KAAE,KAAG,GAAE,IAAG,KAAE,UAAS,KAAE,GAAE,KAAE,CAAC,IAAG;AAAI,4BAAY;AAAC,qBAAE;AAAA;AAAG,4BAAY;AAAC,qBAAE;AAAA;AAAE,0BAAW,IAAE;AAAC,kBAAE,QAAQ,GAAE,SAAQ,MAAG,MAAI;AAAA;AAAI,0BAAW,IAAE;AAAC,kBAAE,QAAQ,GAAE,SAAQ,MAAG,MAAI;AAAA;AAAI,0BAAW,IAAE;AAAC,oBAAI,KAAG,IAAE,iBAAe,IAAG,YAAU;AAAE,uBAAM,CAAE,MAAG,KAAG,QAAM,CAAC,MAAI,MAAG,CAAC,OAAM,CAAI,EAAE,KAAK,QAAX,KAAe;AAAA;AAAG,0BAAW,IAAE;AAAC,oBAAG,GAAE,KAAG;AAAC,sBAAI,KAAE,GAAE,EAAE,IAAG,KAAE,GAAE,EAAE,IAAG,KAAE,GAAE,EAAE,KAAM,SAAG,KAAE,GAAE,WAAS,MAAG,EAAE,KAAK,IAAG,OAAI,MAAI,MAAE;AAAI,uBAAE,SAAS,MAAG,KAAE,GAAE,KAAG,MAAG,CAAC,GAAE,KAAI,OAAG,KAAI,GAAG,IAAG,KAAE,KAAG,MAAG,EAAE,KAAK;AAAA;AAAQ,qBAAE;AAAA;AAAG,0BAAW,IAAE;AAAC,oBAAG,KAAE,MAAG,GAAE,eAAc,GAAG,IAAG,KAAI,GAAG,GAAE,GAAE,KAAG,GAAG,GAAE,GAAE,KAAG,GAAG,GAAE,GAAE,KAAG,EAAE,IAAI,IAAG,IAAG,IAAI,IAAG,IAAG,IAAI,IAAG,IAAG,IAAI,IAAG,IAAG,IAAI,IAAG,KAAI,MAAI,KAAE,GAAE,KAAE,GAAE,OAAI,KAAI,IAAG,cAAa,aAAa,KAAG,KAAE,IAAG,IAAE;AAAC,sBAAI,KAAE,GAAG,GAAG;AAAwB,qBAAE,WAAS,GAAE,QAAM,GAAE,WAAS,GAAE,SAAO,GAAE,WAAS,GAAE,OAAK,GAAE,WAAS,GAAE,UAAQ,MAAM,OAAI,OAAK,GAAG;AAAA;AAAA;AAAK,0BAAW,IAAE;AAAC,qBAAG,MAAE,GAAG,WAAQ,IAAE,IAAE,IAAG,MAAG,MAAG,CAAC,GAAE,KAAG,CAAC,MAAK,MAAE,KAAE,IAAE,IAAE,KAAG,KAAE,MAAG,KAAE,GAAE,WAAS,MAAG,EAAE,KAAK,IAAG,KAAG,GAAG,IAAG,KAAI,GAAG,GAAE,GAAE,KAAG,GAAG,GAAE,GAAE,KAAG,EAAE,GAAG,IAAG,IAAG,GAAG,IAAG,IAAG,GAAG,IAAG,KAAI,CAAC,MAAG,KAAG,EAAE,KAAK,KAAG,EAAE,KAAK;AAAA;AAAG,iBAAE,EAAE,GAAG,KAAG,SAAS,IAAE;AAAC,mBAAE,OAAI,GAAE;AAAA,kBAAK,GAAE,EAAE,GAAG,KAAG,SAAS,IAAE;AAAC,oBAAG,GAAE,KAAG;AAAC,sBAAI,IAAE,IAAE,KAAE,GAAG,GAAE,MAAK,KAAE,GAAE,EAAE,SAAS,GAAE,KAAI,KAAE,GAAE,SAAQ,KAAE,GAAE,UAAS,KAAE,MAAG,IAAE,KAAE,MAAG,KAAE,UAAS,KAAE,WAAU;AAAC,wBAAG,CAAC,GAAE;AAAC,0BAAI,KAAE,KAAE,IAAE,KAAE,GAAE,EAAE,IAAG,KAAE,GAAE,EAAE,IAAG,KAAE,GAAE,EAAE,IAAG,KAAE,GAAE,EAAE,IAAG,KAAE,MAAI,IAAE,KAAE,KAAE,EAAE,IAAI,KAAI,MAAG,IAAE,KAAE,KAAI,OAAE,KAAE,KAAI,MAAE,MAAI,KAAE,KAAG,MAAI,EAAC,GAAE,KAAG,CAAC,GAAE,KAAG,KAAI,KAAE,KAAE,KAAE,KAAE,KAAE,IAAE,KAAE;AAAG,2BAAG,MAAE,SAAS,MAAG,KAAE,GAAE,KAAG,MAAG,CAAC,GAAE,KAAI,MAAE,KAAE,KAAG,KAAG,IAAE,IAAE,OAAG,GAAE,MAAG,IAAE,GAAG,OAAO,IAAE,KAAI,IAAE,WAAU;AAAC,2BAAE;AAAA,4BAAO,IAAG,IAAG,KAAG,GAAE,QAAM,MAAE,KAAE,KAAE,IAAE,KAAE,KAAE,KAAE,KAAE,MAAG,KAAE,MAAG,KAAE,KAAE,MAAG,KAAE,KAAE,MAAG,IAAE,GAAE,MAAG,KAAE,OAAK,KAAE,OAAK,IAAE,GAAG,cAAa,GAAG,OAAO,IAAE,IAAE,KAAG,KAAG,cAAa,KAAG,GAAG,cAAa,KAAE,KAAG,KAAE,WAAW,IAAE,KAAG,KAAE;AAAA;AAAA;AAAM,wBAAG,MAAI,KAAE,EAAE,KAAK,IAAG,KAAG,GAAG,IAAG,KAAI,GAAG,GAAE,GAAE,KAAG,GAAG,GAAE,GAAE,KAAG,EAAE,GAAG,IAAG,IAAG,GAAG,IAAG,IAAG,GAAG,IAAG,IAAG,GAAG,IAAG,KAAI,MAAI,EAAE,KAAK,KAAG,EAAE,KAAK;AAAA;AAAA,iBAAM,GAAG,IAAG,WAAU;AAAC,gBAAC,OAAI,OAAM,MAAG,MAAG,GAAG;AAAA,iBAAO,GAAG,IAAG,WAAU;AAAC,gBAAC,OAAI,OAAM,MAAG,OAAG,GAAG;AAAA,kBAAO,GAAE,EAAE,GAAG,KAAG,SAAS,IAAE;AAAC,kBAAE,KAAK;AAAA,kBAAK,MAAG,GAAE,EAAE,GAAG,IAAG,SAAS,IAAE;AAAC,mBAAE,WAAS,GAAE,EAAE,MAAK,IAAG,KAAG,GAAG;AAAA;AAAA;AAAM,wBAAY,IAAE,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAE,KAAG,IAAG,KAAE,KAAE,KAAG;AAAG,mBAAE,GAAG,IAAG,MAAG,GAAG,IAAG,KAAG,KAAE,GAAG,IAAE,MAAI,GAAG,IAAE;AAAA;AAAI,wBAAY,IAAE,IAAE;AAAC,kBAAG,aAAa,KAAI;AAAE,mBAAG,IAAG,KAAI,GAAG,IAAG;AAAA,mBAAQ;AAAC,oBAAI,KAAE,UAAS,KAAE,WAAU;AAAC,sBAAG,CAAC,MAAI,CAAC,GAAE;AAAC,wBAAI,KAAE,GAAG,SAAS,OAAI,GAAG,SAAS;AAAG,qBAAC,MAAI,OAAI,MAAI,OAAK,GAAG,IAAG,KAAI,CAAC,MAAI,OAAI,MAAI,OAAK,GAAG,IAAG;AAAA;AAAA;AAAM,qBAAG,KAAG,AAAK,OAAL,OAAO,KAAG,WAAW,IAAE,MAAI;AAAA;AAAA;AAAK,wBAAY,IAAE;AAAC,kBAAI,KAAE,IAAG,KAAE,GAAG,KAAG,KAAE,KAAI,KAAE,EAAE,IAAI,GAAG,IAAG,GAAE,OAAM,MAAG,KAAE,IAAE,IAAE,MAAI,GAAG,GAAE;AAAM,iBAAE,GAAE,MAAI,EAAE,MAAM,MAAI,KAAE,MAAG,KAAE,KAAI,QAAM,GAAE,EAAE,IAAI,KAAG,GAAE,EAAE,KAAG,GAAE,EAAE,GAAG,WAAS,GAAE,KAAI,GAAE,EAAE,MAAI;AAAA;AAAE,wBAAY,IAAE,IAAE;AAAC,mBAAE,OAAI,IAAE,KAAE,GAAG,QAAM,GAAG,QAAM;AAAE,kBAAI,IAAE,IAAE,IAAE,KAAE,KAAG,IAAE,KAAE,IAAG,KAAE,GAAG,KAAG,KAAE,cAAa,KAAE,aAAY,KAAE,GAAG,GAAG,KAAG,GAAE,MAAI,GAAG,GAAG,WAAS,GAAE,KAAI,KAAE,GAAE,EAAE,IAAG,KAAE,GAAE,EAAE,GAAG,WAAS,GAAE,KAAI,KAAE,KAAE;AAAE,iBAAE,KAAG,MAAI,OAAG,KAAI,KAAE,KAAE,IAAE,KAAE,MAAM,MAAG,IAAE,EAAE,IAAI,GAAE,KAAG,GAAE,EAAE,KAAG,IAAE,GAAE,EAAE,KAAG,IAAE,GAAE,EAAE,MAAI,IAAE,MAAG,IAAE,KAAE,MAAM,MAAG,IAAE,IAAE,MAAG,CAAC,GAAE,KAAI,MAAE,KAAE,KAAE,KAAG,KAAE,EAAE,IAAI,GAAE,KAAG,KAAG,MAAE,KAAE,CAAE,MAAE,KAAE,MAAG,IAAE,KAAE,KAAE,KAAE,KAAE,WAAS,KAAE,QAAM,KAAE,OAAM,GAAE,aAAW,MAAG,IAAE,GAAE,UAAQ,MAAG,IAAE,GAAE,SAAO,MAAG,IAAE,GAAE,QAAM,MAAG,IAAE,GAAE,MAAG,MAAG,GAAE,GAAE,MAAI,IAAE,QAAM,GAAE,EAAE,IAAI,KAAG,GAAE,EAAE,KAAG,IAAE,GAAE,EAAE,KAAG;AAAA;AAAE,wBAAY,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAE,gBAAc,YAAW,KAAE,KAAE,KAAG,IAAG,KAAE,KAAE,KAAG;AAAG,cAAC,MAAE,KAAG,IAAI,IAAG,KAAG,GAAE,IAAG;AAAA;AAAG,wBAAY,IAAE;AAAC,qBAAM,EAAC,IAAG,KAAE,KAAG,IAAG,IAAG,KAAE,UAAQ,UAAS,IAAG,KAAE,KAAG,IAAG,IAAG,KAAE,SAAO,OAAM,IAAG,KAAE,KAAG,IAAG,IAAG,KAAE,MAAI,KAAI,KAAI,KAAE,MAAI,KAAI,KAAI,KAAE,MAAI,KAAI,GAAE,KAAE,KAAG,IAAG,GAAE,KAAE,KAAG,IAAG,GAAE,KAAE,KAAG,IAAG,GAAE,KAAE,KAAG;AAAA;AAAI,wBAAY,IAAE;AAAC,mBAAE,GAAG,MAAK,MAAG,EAAE,GAAG,MAAK,GAAG,OAAO;AAAA;AAAK,0BAAa;AAAC,kBAAI,KAAE,EAAE,QAAM,GAAE,KAAE,IAAG,KAAE;AAAG,0BAAW,IAAE;AAAC,oBAAG,GAAE,KAAG;AAAC,sBAAI,KAAE,GAAE,KAAG,KAAE;AAAG,kBAAC,OAAI,OAAM,IAAE,MAAI,GAAE,IAAE,GAAE,IAAE,GAAE,IAAI,OAAI,OAAM,IAAE,MAAI,GAAE,IAAE,GAAE,IAAE,GAAE,IAAG,GAAG,IAAI,KAAG,EAAE,KAAK;AAAA;AAAQ,qBAAE;AAAA;AAAG,0BAAW,IAAE;AAAC,oBAAI,KAAE,OAAI;AAAE,kBAAE,IAAI,IAAG,IAAI,IAAI,IAAG,IAAG,IAAI,IAAG,KAAG,GAAG,IAAG,KAAI,GAAG,kBAAgB,GAAG,kBAAiB,MAAI,OAAI,MAAK,GAAG,OAAO,MAAK,KAAG;AAAA;AAAG,0BAAW,IAAE;AAAC,oBAAI,KAAG,IAAE,iBAAe,IAAG,YAAU;AAAE,uBAAM,CAAC,KAAG,CAAC,KAAI,CAAI,EAAE,KAAK,QAAX,KAAe;AAAA;AAAG,0BAAW,IAAE;AAAC,uBAAO,MAAG,KAAE,EAAC,GAAE,GAAE,SAAQ,GAAE,GAAE,YAAS,EAAE,KAAK;AAAA;AAAG,mBAAG,SAAS,IAAE;AAAC,mBAAE,OAAK,OAAK,MAAG,MAAG,OAAM,KAAE,GAAE,KAAG,GAAE,IAAE,GAAG,GAAG,EAAE,MAAK,KAAE,IAAE,IAAG,GAAE,IAAE,GAAG,GAAG,EAAE,MAAK,KAAE,IAAE,IAAG,EAAE,GAAG,IAAG,IAAI,GAAG,IAAG,IAAG,GAAG,IAAG,KAAG,GAAG,IAAG,KAAI,GAAG,cAAY,GAAG,cAAa,EAAE,KAAK,KAAG,EAAE,KAAK;AAAA;AAAA;AAAK,wBAAY,IAAE,IAAE;AAAC,kBAAG,GAAE;AAAC,oBAAI,IAAE,KAAE,GAAE,UAAU,KAAG,KAAE;AAAE,gBAAO,GAAE,OAAO,GAAE,OAAlB,QAAuB,MAAE,GAAE,OAAO,GAAE,GAAG,gBAAc,GAAE,OAAO,KAAI,GAAG,OAAI,EAAE,KAAG,GAAE,KAAK,IAAG,KAAG,EAAE,KAAK,IAAG,WAAU;AAAC,qBAAI,MAAE,MAAM,OAAK,EAAE,KAAG,GAAE,GAAG,IAAE;AAAA;AAAA;AAAU,qBAAG,GAAG,KAAK,EAAC,GAAE,IAAE,GAAE;AAAA;AAAI,wBAAY,IAAE,IAAE,IAAE;AAAC,qBAAI,KAAI,MAAE,CAAC,IAAG,IAAG,IAAG,MAAK,GAAE,KAAE,MAAI,GAAE,IAAG,GAAE,KAAE,MAAI,GAAE,IAAG,GAAE,KAAE,MAAI,GAAE,IAAG,GAAE,KAAE,MAAI,GAAE;AAAA;AAAG,wBAAY,IAAE;AAAC,kBAAI,KAAE,iBAAgB,KAAE,eAAc,KAAE,MAAG,GAAE,OAAI,GAAE,IAAG,gBAAc;AAAE,qBAAO,OAAO,GAAE,OAAI,EAAE,IAAE,cAAa,GAAE,MAAG,MAAG,OAAO,MAAG,EAAE,KAAG,AAAO,OAAP,QAAU,AAAI,GAAE,aAAN,KAAgB,OAAO,GAAE,YAAU,EAAE;AAAA;AAAE,wBAAY,IAAE,IAAE;AAAC,kBAAI,IAAE,IAAE,KAAE,IAAG,KAAE;AAAG,mBAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,mBAAE,GAAE,OAAI;AAAG,mBAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,mBAAE,GAAE,OAAI,OAAO,GAAE,GAAE,OAAI,GAAE,GAAE,OAAI;AAAG,mBAAI,MAAK;AAAE,mBAAE,KAAK;AAAG,qBAAO;AAAA;AAAE,wBAAY,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAE,WAAW,MAAG,SAAS;AAAG,qBAAO,MAAM,MAAG,IAAE;AAAA;AAAE,0BAAa;AAAC,kBAAI,KAAE,GAAG,GAAG;AAAe,kBAAG,OAAI,GAAE;AAAC,oBAAI,IAAE,IAAE,KAAE,UAAS,KAAE,GAAG,OAAM,KAAE,GAAE,KAAG,KAAE,GAAE,MAAM,OAAM,KAAE,GAAE,KAAG,KAAE,GAAE,OAAO,GAAE,IAAG,MAAM,OAAM,KAAE,GAAE,KAAE,GAAE,KAAE,GAAE,KAAG,KAAE,GAAE,GAAE,MAAG,GAAG;AAAG,qBAAI,KAAE,GAAE,KAAE,GAAE,KAAG;AAAI,kBAAC,MAAE,GAAE,IAAG,OAAI,MAAI,MAAE,KAAE,GAAE,KAAE;AAAG,uBAAM,EAAC,IAAG,IAAE,IAAG,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE;AAAA;AAAA;AAAI,0BAAa;AAAC,qBAAO,MAAI,GAAE,KAAG,GAAE;AAAA;AAAE,0BAAa;AAAC,qBAAO,IAAE,GAAG,KAAG,GAAG;AAAA;AAAG,wBAAY,IAAE,IAAE;AAAC,qBAAM,UAAS,MAAE,GAAG,OAAI,EAAE,IAAE,YAAU,KAAE,MAAI,WAAU;AAAC,oBAAI,IAAE,KAAE;AAAG,oBAAG,EAAE,cAAc;AAAG,uBAAI,MAAK;AAAE,0BAAI,CAAc,OAAd,cAAgB,UAAQ,MAAG,OAAK,GAAE,MAAG;AAAK,uBAAO;AAAA,oBAAK,MAAI,MAAK,OAAG,MAAI;AAAA;AAAS,wBAAY,IAAE,IAAE;AAAC,uBAAQ,IAAE,KAAE,GAAE,MAAM,KAAI,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,oBAAG,CAAC,GAAE,eAAe,GAAE;AAAI;AAAO,qBAAE,GAAE,GAAE,MAAI,KAAE,GAAE,UAAQ,GAAG,OAAI,EAAE,KAAI,MAAE;AAAA;AAAG,qBAAO;AAAA;AAAE,wBAAY,IAAE,IAAE,IAAE;AAAC,uBAAQ,KAAE,GAAE,MAAM,KAAI,KAAE,GAAE,QAAO,KAAE,GAAE,KAAE,IAAG,KAAE,IAAE,KAAE,IAAE;AAAI,qBAAE,GAAE,GAAE,OAAI,KAAE,IAAE,KAAE,KAAG;AAAE,gBAAE,OAAO,IAAE,IAAE;AAAA;AAAI,wBAAY,IAAE,IAAE,IAAE;AAAC,qBAAM,AAAK,OAAL,OAAO,KAAE,OAAI,KAAG,OAAI;AAAA;AAAE,wBAAY,IAAE,IAAE,IAAE,IAAE,IAAE;AAAC,kBAAG,AAAK,OAAL;AAAO,uBAAO;AAAE,kBAAG,OAAI,KAAG,OAAI,GAAE;AAAC,oBAAG,AAAK,OAAL;AAAO,yBAAO;AAAE,qBAAE;AAAA;AAAE,qBAAO,KAAE,OAAI,IAAE,MAAI,IAAE,KAAE,OAAI,IAAE,MAAI,IAAE,OAAI,KAAI,IAAE,QAAK,GAAE,OAAI,GAAE,QAAK,GAAE;AAAA;AAAI,wBAAY,IAAE,IAAE;AAAC,qBAAO,OAAI,KAAI,IAAE,MAAI,GAAE,KAAG,GAAE,MAAI,GAAE,KAAG,GAAE,MAAI,GAAE,KAAG,GAAE,MAAI,GAAE;AAAA;AAAG,wBAAY,IAAE;AAAC,qBAAO,EAAE,KAAK;AAAA;AAAG,0BAAa;AAAC,qBAAO,EAAE,OAAO,MAAM,MAAK;AAAA;AAAW,wBAAY,IAAE,IAAE;AAAC,qBAAO,GAAG,SAAS,KAAK,IAAE;AAAA;AAAG,wBAAY,IAAE,IAAE;AAAC,qBAAO,GAAG,YAAY,KAAK,IAAE;AAAA;AAAG,wBAAY,IAAE;AAAC,qBAAO,GAAG,OAAO,KAAK;AAAA;AAAG,wBAAY,IAAE,IAAE;AAAC,qBAAO,GAAG,KAAK,KAAK,IAAE,IAAG,GAAG;AAAA;AAAG,wBAAY,IAAE,IAAE,IAAE;AAAC,qBAAO,IAAE,GAAE,gBAAe,KAAE,GAAE,wBAAuB,KAAE,GAAG,MAAG,IAAG,GAAE,sBAAqB,KAAE,GAAG,MAAG,IAAG,GAAE,4BAA2B,KAAE,GAAG,MAAG,IAAG,GAAE,4BAA2B,KAAE,GAAG,MAAG,IAAG,GAAE,oBAAmB,GAAG,GAAG,MAAG,IAAG,GAAE,MAAI,GAAE,KAAG,GAAE,KAAG,CAAC,GAAE,yBAAyB,aAAY,IAAG,8BAA6B,SAAK,MAAE,GAAE,SAAQ,KAAE,GAAE,MAAK,KAAE,GAAE,uBAAsB,KAAE,GAAE,mBAAkB,KAAE,GAAE,kBAAiB,KAAE,GAAE,sBAAqB,KAAE,GAAE,uBAAsB,KAAE,GAAE,yBAAwB,IAAE,GAAE,qBAAoB,IAAE,EAAE,GAAE,gBAAe,IAAE,EAAE,EAAE,GAAG,eAAa,EAAE,GAAG,eAAc,KAAG,GAAG,GAAE,SAAQ,KAAG,GAAG,IAAG,SAAQ,KAAG,EAAE,KAAG,IAAE,GAAG,GAAG,aAAY,IAAE,GAAG,GAAG,SAAQ,IAAE,EAAE,OAAK,GAAE,KAAK,OAAE,IAAI,IAAE,EAAE,IAAI,GAAG,OAAM,GAAG,OAAM,EAAE,QAAO,GAAE,IAAE,EAAE,IAAI,GAAG,OAAM,GAAG,OAAM,EAAE,SAAQ,MAAK,MAAK,MAAK,GAAG,OAAI,GAAG,QAAI,MAAK,MAAK,MAAK,KAAI,IAAG,IAAI,GAAE,GAAG,IAAI,GAAE,IAAG,EAAE,iBAAe,MAAG,GAAG,GAAG,SAAQ,IAAG,KAAK,YAAW,OAAM,GAAG,GAAG,SAAQ,GAAG,IAAI,KAAG,WAAU;AAAC,mBAAG,WAAW;AAAA,oBAAgB,GAAG,IAAG,KAAI,MAAK,GAAG,OAAO,KAAI,IAAE,MAAG,GAAG,kBAAiB,EAAE,KAAK,IAAG,SAAS,IAAE,IAAE;AAAC,mBAAG,GAAE,GAAE,GAAE;AAAA,kBAAK,KAAG,IAAG,GAAG,OAAI,EAAE,KAAI,MAAE,CAAC,MAAI,EAAE,IAAI,MAAG,EAAE,KAAK,IAAE,SAAS,IAAE,IAAE;AAAC,mBAAG,OAAO;AAAA,mBAAK,EAAE,cAAc,OAAI,EAAE,KAAK,IAAE,SAAS,IAAE,IAAE;AAAC,mBAAG,OAAO,IAAE;AAAA,kBAAK,WAAW,WAAU;AAAC,sBAAG,CAAC,KAAG,GAAG,IAAG;AAAA,iBAAK,MAAK;AAAG,kBAAI;AAAA;AAAA;AAAG,iBAAO,EAAE,KAAG,SAAS,IAAE,IAAE,IAAE;AAAC,gBAAG,AAAI,UAAU,WAAd;AAAqB,qBAAO;AAAK,gBAAI,IAAE,IAAE,KAAE,IAAG,KAAE,EAAE,cAAc;AAAG,mBAAO,KAAG,MAAE,GAAE,UAAQ,IAAE,KAAE,CAAC,GAAE,MAAI,KAAG,KAAI,GAAE,SAAO,KAAI,MAAE,EAAE,KAAK,IAAE,SAAS,IAAE,IAAE;AAAC,cAAC,MAAE,QAAK,KAAG,GAAE,KAAK,EAAE,IAAE,IAAE,IAAE,IAAE;AAAA,iBAAM,EAAE,KAAK,IAAE,SAAS,IAAE,IAAE;AAAC,mBAAE,EAAE,KAAG,AAAM,OAAN,OAAS,cAAa,EAAE,MAAI,EAAE,KAAK,OAAI,EAAE,KAAG,GAAE,IAAE,MAAG,GAAE,KAAK,MAAG,OAAI,KAAG,GAAE,KAAK;AAAA,gBAAK,KAAE,AAAI,GAAE,WAAN,IAAa,GAAE,KAAG,KAAG,MAAG,MAAG,CAAC,KAAE,KAAE;AAAA,aAAG,EAAE,GAAG,UAAQ,WAAU;AAAC;AAAI,gBAAI,KAAE,EAAE,OAAO,MAAG,IAAG;AAAG,mBAAO,OAAO,GAAE,MAAK;AAAA,aAAG,EAAE,GAAG,iBAAe,SAAS,IAAE;AAAC;AAAI,gBAAI,KAAE,GAAE;AAAe,gBAAG,OAAI;AAAE,qBAAO,EAAE,OAAO,MAAG,IAAG;AAAG,eAAE,iBAAe,EAAE,OAAO,MAAG,IAAG,IAAE,EAAE,EAAE,IAAE,EAAE,GAAE;AAAA,aAAM,EAAE,GAAG,YAAU,SAAS,IAAE,IAAE,IAAE;AAAC,gBAAI,KAAE,EAAE,KAAK,OAAI,EAAE,GAAE,KAAE,UAAU,EAAE,IAAG,KAAE;AAAE,gBAAG,KAAE,KAAG,CAAC;AAAE,qBAAO,EAAE,OAAO,MAAG,EAAC,QAAO,EAAE,EAAE,MAAI;AAAG,gBAAG;AAAE,kBAAG,EAAE,KAAK,OAAI,EAAE;AAAE,kBAAE,KAAK,EAAC,MAAK,IAAE,kBAAiB,IAAE,gBAAe;AAAA;AAAS,uBAAK,KAAE,EAAE,EAAE,IAAG;AAAI,sBAAG,EAAE,IAAG,SAAO,IAAE;AAAC,wBAAG,CAAE,MAAE;AAAG,6BAAO,EAAE,OAAO,MAAG,IAAG,EAAE;AAAI,sBAAE,OAAO,IAAE;AAAA;AAAA;AAAA,aAAK,EAAE;AAAA;AAAM,eAAO,KAAG,EAAE,MAAK,GAAE,GAAG,oBAAkB,SAAS,IAAE,IAAE;AAAC,cAAI,KAAE;AAAK,iBAAO,EAAE,cAAc,MAAI,GAAE,KAAK,IAAE,WAAU;AAAC,cAAE,MAAK,IAAE;AAAA,cAAK,MAAG,EAAE,IAAE;AAAA,YAAK;AAAA;AAAA;AAAA;;;ACZxmxC;AAAA;AACA,OAAC,SAAS,GAAE;AAAC,QAAY,OAAO,UAAnB,cAA2B,OAAO,MAAI,OAAO,CAAC,WAAU,KAAG,AAAU,OAAO,UAAjB,YAAyB,OAAO,UAAQ,OAAO,UAAQ,SAAS,GAAE,GAAE;AAAC,iBAAO,AAAS,MAAT,UAAa,KAAE,AAAa,OAAO,UAApB,cAA2B,mBAAkB,iBAAkB,KAAI,EAAE,IAAG;AAAA,YAAG,EAAE;AAAA,QAAS,SAAS,GAAE;AAAC,YAAI,IAAE,WAAU;AAAC,cAAG,KAAG,EAAE,MAAI,EAAE,GAAG,WAAS,EAAE,GAAG,QAAQ;AAAI,gBAAI,KAAE,EAAE,GAAG,QAAQ;AAAI,cAAI,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,qBAAW,IAAE,IAAE;AAAC,mBAAO,EAAE,KAAK,IAAE;AAAA;AAAG,qBAAW,IAAE,IAAE;AAAC,gBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,GAAE,KAAE,MAAG,GAAE,MAAM,MAAK,KAAE,EAAE,KAAI,KAAE,MAAG,GAAE,QAAM;AAAG,gBAAG,IAAE;AAAC,mBAAI,KAAG,MAAE,GAAE,MAAM,MAAM,SAAO,GAAE,EAAE,gBAAc,EAAE,KAAK,GAAE,QAAM,IAAE,MAAG,GAAE,IAAG,QAAQ,GAAE,MAAK,AAAM,GAAE,GAAG,OAAO,OAAlB,OAAsB,MAAI,MAAE,GAAE,MAAM,GAAE,GAAE,SAAO,GAAG,OAAO,MAAI,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,oBAAG,AAAO,KAAE,GAAE,SAAX;AAAe,qBAAE,OAAO,IAAE,IAAG,MAAG;AAAA,yBAAU,AAAO,MAAP,MAAS;AAAC,sBAAG,AAAI,OAAJ,KAAO,AAAI,OAAJ,KAAO,AAAO,GAAE,OAAT,QAAa,AAAO,GAAE,KAAE,OAAX;AAAc;AAAS,sBAAE,MAAI,IAAE,OAAO,KAAE,GAAE,IAAG,MAAG;AAAA;AAAG,mBAAE,GAAE,KAAK;AAAA;AAAK,gBAAI,OAAG,OAAI,IAAE;AAAC,mBAAI,KAAG,MAAE,GAAE,MAAM,MAAM,QAAO,IAAE,IAAE,MAAG,GAAE;AAAC,oBAAG,KAAE,GAAE,MAAM,GAAE,IAAG,KAAK,MAAK;AAAE,uBAAI,KAAE,GAAE,QAAO,IAAE,IAAE,MAAG;AAAE,wBAAG,KAAG,MAAE,GAAE,GAAE,MAAM,GAAE,IAAG,KAAK,UAAQ,GAAE,KAAG;AAAC,2BAAE,IAAE,KAAE;AAAE;AAAA;AAAA;AAAM,oBAAG;AAAE;AAAM,iBAAC,MAAG,MAAG,GAAE,OAAK,MAAE,GAAE,KAAG,KAAE;AAAA;AAAG,eAAC,MAAG,MAAI,MAAE,IAAE,KAAE,KAAG,MAAI,IAAE,OAAO,GAAE,IAAE,KAAG,KAAE,GAAE,KAAK;AAAA;AAAM,mBAAO;AAAA;AAAE,qBAAW,IAAE,IAAE;AAAC,mBAAO,WAAU;AAAC,kBAAI,KAAE,EAAE,KAAK,WAAU;AAAG,qBAAM,AAAU,OAAO,GAAE,MAAnB,YAAuB,AAAI,GAAE,WAAN,KAAc,GAAE,KAAK,OAAM,EAAE,MAAM,GAAE,GAAE,OAAO,CAAC,IAAE;AAAA;AAAA;AAAM,qBAAW,IAAE;AAAC,mBAAO,SAAS,IAAE;AAAC,gBAAE,MAAG;AAAA;AAAA;AAAG,qBAAW,IAAE;AAAC,gBAAG,EAAE,GAAE,KAAG;AAAC,kBAAI,KAAE,EAAE;AAAG,qBAAO,EAAE,KAAG,EAAE,MAAG,MAAG,EAAE,MAAM,GAAE;AAAA;AAAG,gBAAG,CAAC,EAAE,GAAE,OAAI,CAAC,EAAE,GAAE;AAAG,oBAAM,IAAI,MAAM,QAAM;AAAG,mBAAO,EAAE;AAAA;AAAG,qBAAW,IAAE;AAAC,gBAAI,IAAE,KAAE,KAAE,GAAE,QAAQ,OAAK;AAAG,mBAAM,KAAG,MAAI,MAAE,GAAE,UAAU,GAAE,KAAG,KAAE,GAAE,UAAU,KAAE,GAAE,GAAE,UAAS,CAAC,IAAE;AAAA;AAAG,qBAAW,IAAE;AAAC,mBAAO,KAAE,EAAE,MAAG;AAAA;AAAG,iBAAO,MAAG,GAAE,aAAY,MAAE,IAAE,KAAE,KAAE,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,OAAO,UAAU,gBAAe,IAAE,GAAG,OAAM,IAAE,SAAQ,IAAE,SAAS,IAAE,IAAE;AAAC,gBAAI,IAAE,KAAE,EAAE,KAAG,KAAE,GAAE,IAAG,KAAE,GAAE;AAAG,mBAAO,KAAE,GAAE,IAAG,MAAI,MAAE,EAAE,KAAE,EAAE,IAAE,OAAK,KAAE,KAAE,MAAG,GAAE,YAAU,GAAE,UAAU,IAAE,SAAS,IAAE;AAAC,qBAAO,SAAS,IAAE;AAAC,uBAAO,EAAE,IAAE;AAAA;AAAA,cAAK,OAAI,EAAE,IAAE,MAAI,MAAG,MAAE,EAAE,KAAE,EAAE,IAAE,MAAK,IAAG,KAAE,GAAE,IAAG,MAAI,MAAE,EAAE,OAAK,EAAC,GAAE,KAAE,KAAE,MAAI,KAAE,IAAE,GAAE,IAAE,IAAG,IAAE,GAAE;AAAA,aAAI,IAAE,EAAC,SAAQ,SAAS,IAAE;AAAC,mBAAO,EAAE;AAAA,aAAI,SAAQ,SAAS,IAAE;AAAC,gBAAI,KAAE,EAAE;AAAG,mBAAO,AAAS,OAAT,SAAW,KAAE,EAAE,MAAG;AAAA,aAAI,QAAO,SAAS,IAAE;AAAC,mBAAM,EAAC,IAAG,IAAE,KAAI,IAAG,SAAQ,EAAE,KAAG,QAAO,SAAS,IAAE;AAAC,qBAAO,WAAU;AAAC,uBAAO,KAAG,EAAE,UAAQ,EAAE,OAAO,OAAI;AAAA;AAAA,cAAK;AAAA,eAAM,IAAE,SAAS,IAAE,IAAE,IAAE,IAAE;AAAC,gBAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,KAAE,IAAG,IAAE,OAAO;AAAE,gBAAG,KAAE,EAAE,KAAE,MAAG,KAAG,AAAa,KAAb,eAAgB,AAAY,KAAZ,YAAc;AAAC,mBAAI,KAAE,CAAC,GAAE,UAAQ,GAAE,SAAO,CAAC,WAAU,WAAU,YAAU,IAAE,KAAE,GAAE,KAAE,GAAE,QAAO,MAAG;AAAE,oBAAG,AAAa,MAAG,MAAE,EAAE,GAAE,KAAG,KAAI,OAA7B;AAAgC,qBAAE,MAAG,EAAE,QAAQ;AAAA,yBAAW,AAAY,OAAZ;AAAc,qBAAE,MAAG,EAAE,QAAQ,KAAG,KAAE;AAAA,yBAAW,AAAW,OAAX;AAAa,uBAAE,GAAE,MAAG,EAAE,OAAO;AAAA,yBAAW,EAAE,GAAE,OAAI,EAAE,GAAE,OAAI,EAAE,GAAE;AAAG,qBAAE,MAAG,EAAE;AAAA,qBAAO;AAAC,sBAAG,CAAC,GAAE;AAAE,0BAAM,IAAI,MAAM,KAAE,cAAY;AAAG,qBAAE,EAAE,KAAK,GAAE,GAAE,EAAE,IAAE,OAAI,EAAE,KAAG,KAAI,GAAE,MAAG,EAAE;AAAA;AAAG,mBAAE,KAAE,GAAE,MAAM,EAAE,KAAG,MAAG,QAAO,MAAI,OAAG,GAAE,YAAU,KAAG,GAAE,YAAU,EAAE,MAAG,EAAE,MAAG,GAAE,UAAQ,OAAI,KAAG,MAAI,GAAE,MAAG;AAAA;AAAS,oBAAI,GAAE,MAAG;AAAA,aAAI,KAAE,IAAE,IAAE,SAAS,IAAE,IAAE,IAAE,IAAE,IAAE;AAAC,gBAAG,AAAU,OAAO,MAAjB;AAAmB,qBAAO,EAAE,MAAG,EAAE,IAAG,MAAG,EAAE,EAAE,IAAE,EAAE,KAAI;AAAG,gBAAG,CAAC,GAAE,QAAO;AAAC,kBAAI,KAAE,IAAG,QAAM,EAAE,EAAE,MAAK,EAAE,WAAU,CAAC;AAAE;AAAO,iBAAE,SAAQ,MAAE,IAAE,KAAE,IAAE,KAAE,QAAM,KAAE;AAAA;AAAE,mBAAO,KAAE,MAAG,WAAU;AAAA,eAAG,AAAY,OAAO,MAAnB,cAAuB,MAAE,IAAE,KAAE,KAAG,KAAE,EAAE,GAAE,IAAE,IAAE,MAAG,WAAW,WAAU;AAAC,gBAAE,GAAE,IAAE,IAAE;AAAA,eAAI,IAAG;AAAA,aAAG,EAAE,SAAO,SAAS,IAAE;AAAC,mBAAO,EAAE;AAAA,aAAI,GAAE,WAAS,GAAG,KAAE,SAAS,IAAE,IAAE,IAAE;AAAC,gBAAG,AAAU,OAAO,MAAjB;AAAmB,oBAAM,IAAI,MAAM;AAA6D,eAAE,UAAS,MAAE,IAAE,KAAE,KAAI,EAAE,GAAE,OAAI,EAAE,GAAE,OAAK,GAAE,MAAG,CAAC,IAAE,IAAE;AAAA,aAAM,MAAI,EAAC,QAAO,QAAI,GAAE,YAAU,IAAE,GAAE,UAAQ,GAAE,GAAE,SAAO,IAAG,GAAE,OAAO,UAAS,WAAU;AAAA,cAAI,GAAE,OAAO,UAAS,IAAG,WAAU;AAAC,gBAAI,KAAE,KAAG;AAAE,mBAAO,AAAM,MAAN,QAAS,WAAS,QAAQ,SAAO,QAAQ,MAAM,0JAAyJ;AAAA,cAAI,GAAE,OAAO,iBAAgB,CAAC,WAAU,SAAS,IAAE;AAAC,gBAAI,KAAE;AAAG,wBAAW,IAAE;AAAC,kBAAI,KAAE,GAAE,WAAU,KAAE;AAAG,uBAAQ,MAAK,IAAE;AAAC,gBAAY,OAAO,GAAE,OAArB,cAAyB,AAAgB,OAAhB,iBAAmB,GAAE,KAAK;AAAA;AAAG,qBAAO;AAAA;AAAE,eAAE,SAAO,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,GAAG;AAAe,4BAAY;AAAC,qBAAK,cAAY;AAAA;AAAE,uBAAQ,MAAK;AAAE,mBAAE,KAAK,IAAE,OAAK,IAAE,MAAG,GAAE;AAAI,qBAAO,GAAE,YAAU,GAAE,WAAU,GAAE,YAAU,IAAI,MAAE,GAAE,YAAU,GAAE,WAAU;AAAA,eAAG,GAAE,WAAS,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,GAAE,KAAG,KAAE,GAAE;AAAG,4BAAY;AAAC,oBAAI,KAAE,MAAM,UAAU,SAAQ,KAAE,GAAE,UAAU,YAAY,QAAO,KAAE,GAAE,UAAU;AAAY,oBAAE,MAAI,IAAE,KAAK,WAAU,GAAE,UAAU,cAAa,KAAE,GAAE,UAAU,cAAa,GAAE,MAAM,MAAK;AAAA;AAAW,iBAAE,cAAY,GAAE,aAAY,GAAE,YAAU,IAAI,WAAU;AAAC,qBAAK,cAAY;AAAA;AAAG,uBAAQ,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,oBAAI,KAAE,GAAE;AAAG,mBAAE,UAAU,MAAG,GAAE,UAAU;AAAA;AAAG,0BAAW,IAAE;AAAC,oBAAI,KAAE,WAAU;AAAA;AAAG,sBAAK,GAAE,aAAY,MAAE,GAAE,UAAU;AAAI,oBAAI,KAAE,GAAE,UAAU;AAAG,uBAAO,WAAU;AAAC,yBAAO,MAAM,UAAU,QAAQ,KAAK,WAAU,KAAG,GAAE,MAAM,MAAK;AAAA;AAAA;AAAY,uBAAQ,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,oBAAI,KAAE,GAAE;AAAG,mBAAE,UAAU,MAAG,GAAE;AAAA;AAAG,qBAAO;AAAA;AAAG,0BAAY;AAAC,mBAAK,YAAU;AAAA;AAAG,eAAE,UAAU,KAAG,SAAS,IAAE,IAAE;AAAC,mBAAK,YAAU,KAAK,aAAW,IAAG,MAAK,KAAK,YAAU,KAAK,UAAU,IAAG,KAAK,MAAG,KAAK,UAAU,MAAG,CAAC;AAAA,eAAI,GAAE,UAAU,UAAQ,SAAS,IAAE;AAAC,kBAAI,KAAE,MAAM,UAAU,OAAM,KAAE,GAAE,KAAK,WAAU;AAAG,mBAAK,YAAU,KAAK,aAAW,IAAG,AAAM,MAAN,QAAU,MAAE,KAAI,AAAI,GAAE,WAAN,KAAc,GAAE,KAAK,KAAK,IAAE,GAAG,QAAM,OAAK,KAAK,aAAW,KAAK,OAAO,KAAK,UAAU,KAAG,GAAE,KAAK,WAAU,KAAI,OAAM,KAAK,aAAW,KAAK,OAAO,KAAK,UAAU,MAAK;AAAA,eAAY,GAAE,UAAU,SAAO,SAAS,IAAE,IAAE;AAAC,uBAAQ,KAAE,GAAE,KAAE,GAAE,QAAO,KAAE,IAAE;AAAI,mBAAE,IAAG,MAAM,MAAK;AAAA,eAAI,GAAE,aAAW,IAAE,GAAE,gBAAc,SAAS,IAAE;AAAC,uBAAQ,KAAE,IAAG,KAAE,GAAE,KAAE,IAAE,MAAI;AAAC,sBAAG,KAAK,MAAM,KAAG,KAAK,UAAU,SAAS;AAAA;AAAI,qBAAO;AAAA,eAAG,GAAE,OAAK,SAAS,IAAE,IAAE;AAAC,qBAAO,WAAU;AAAC,mBAAE,MAAM,IAAE;AAAA;AAAA,eAAa,GAAE,eAAa,SAAS,IAAE;AAAC,uBAAQ,MAAK,IAAE;AAAC,oBAAI,KAAE,GAAE,MAAM,MAAK,KAAE;AAAE,oBAAG,AAAI,GAAE,WAAN,GAAa;AAAC,2BAAQ,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,wBAAI,KAAE,GAAE;AAAG,oBAAC,MAAE,GAAE,UAAU,GAAE,GAAG,gBAAc,GAAE,UAAU,OAAM,MAAI,IAAE,MAAG,KAAI,MAAG,GAAE,SAAO,KAAI,IAAE,MAAG,GAAE,MAAI,KAAE,GAAE;AAAA;AAAG,yBAAO,GAAE;AAAA;AAAA;AAAI,qBAAO;AAAA,eAAG,GAAE,YAAU,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,GAAE,KAAG,KAAE,GAAE,MAAM,WAAU,KAAE,GAAE,MAAM;AAAU,qBAAO,QAAI,MAAG,AAAW,OAAX,YAAc,AAAY,OAAZ,cAAiB,CAAW,OAAX,YAAc,AAAW,OAAX,YAAe,IAAE,gBAAc,GAAE,gBAAc,GAAE,eAAa,GAAE;AAAA,eAAe,GAAE,eAAa,SAAS,IAAE;AAAC,kBAAI,KAAE,EAAC,MAAK,SAAQ,KAAI,SAAQ,KAAI,QAAO,KAAI,QAAO,KAAI,UAAS,KAAI,SAAQ,KAAI;AAAS,qBAAM,AAAU,OAAO,MAAjB,WAAmB,KAAE,OAAO,IAAG,QAAQ,gBAAe,SAAS,IAAE;AAAC,uBAAO,GAAE;AAAA;AAAA,eAAM,GAAE,aAAW,SAAS,IAAE,IAAE;AAAC,kBAAG,AAAQ,GAAE,GAAG,OAAO,OAAO,GAAE,OAA7B,OAAgC;AAAC,oBAAI,KAAE;AAAI,mBAAE,IAAI,IAAE,SAAS,IAAE;AAAC,uBAAE,GAAE,IAAI;AAAA,oBAAK,KAAE;AAAA;AAAE,iBAAE,OAAO;AAAA,eAAI,GAAE,UAAQ;AAAG,gBAAI,KAAE;AAAE,mBAAO,GAAE,qBAAmB,SAAS,IAAE;AAAC,kBAAI,KAAE,GAAE,aAAa;AAAmB,qBAAO,AAAM,MAAN,QAAU,IAAE,KAAI,MAAE,GAAE,IAAG,GAAE,aAAa,mBAAkB,OAAK,IAAE,aAAa,mBAAkB,EAAE,KAAG,KAAE,GAAE,cAAa;AAAA,eAAG,GAAE,YAAU,SAAS,IAAE,IAAE,IAAE;AAAC,kBAAI,KAAE,GAAE,mBAAmB;AAAG,iBAAE,QAAQ,OAAK,IAAE,QAAQ,MAAG,KAAI,GAAE,QAAQ,IAAG,MAAG;AAAA,eAAG,GAAE,UAAQ,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,GAAE,mBAAmB;AAAG,qBAAO,KAAE,GAAE,QAAQ,OAAI,AAAM,GAAE,QAAQ,IAAG,OAAnB,OAAsB,GAAE,QAAQ,IAAG,MAAG,GAAE,IAAG,KAAK,MAAG,GAAE,QAAQ;AAAA,eAAI,GAAE,aAAW,SAAS,IAAE;AAAC,kBAAI,KAAE,GAAE,mBAAmB;AAAG,cAAM,GAAE,QAAQ,OAAhB,QAAoB,OAAO,GAAE,QAAQ,KAAG,GAAE,gBAAgB;AAAA,eAAoB;AAAA,cAAI,GAAE,OAAO,mBAAkB,CAAC,UAAS,YAAW,SAAS,IAAE,IAAE;AAAC,wBAAW,IAAE,IAAE,IAAE;AAAC,mBAAK,WAAS,IAAE,KAAK,OAAK,IAAE,KAAK,UAAQ,IAAE,GAAE,UAAU,YAAY,KAAK;AAAA;AAAM,mBAAO,GAAE,OAAO,IAAE,GAAE,aAAY,GAAE,UAAU,SAAO,WAAU;AAAC,kBAAI,KAAE,GAAE;AAA6D,qBAAO,KAAK,QAAQ,IAAI,eAAa,GAAE,KAAK,wBAAuB,SAAQ,KAAK,WAAS;AAAA,eAAG,GAAE,UAAU,QAAM,WAAU;AAAC,mBAAK,SAAS;AAAA,eAAS,GAAE,UAAU,iBAAe,SAAS,IAAE;AAAC,kBAAI,KAAE,KAAK,QAAQ,IAAI;AAAgB,mBAAK,SAAQ,KAAK;AAAc,kBAAI,KAAE,GAAE,iFAAgF,KAAE,KAAK,QAAQ,IAAI,gBAAgB,IAAI,GAAE;AAAS,iBAAE,OAAO,GAAE,GAAE,GAAE,SAAQ,GAAE,GAAG,aAAW,6BAA4B,KAAK,SAAS,OAAO;AAAA,eAAI,GAAE,UAAU,eAAa,WAAU;AAAC,mBAAK,SAAS,KAAK,6BAA6B;AAAA,eAAU,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,mBAAK;AAAc,kBAAI,KAAE;AAAG,kBAAG,AAAM,GAAE,WAAR,QAAiB,AAAI,GAAE,QAAQ,WAAd,GAAqB;AAAC,mBAAE,UAAQ,KAAK,KAAK,GAAE;AAAS,yBAAQ,KAAE,GAAE,KAAE,GAAE,QAAQ,QAAO,MAAI;AAAC,sBAAI,KAAE,GAAE,QAAQ,KAAG,KAAE,KAAK,OAAO;AAAG,qBAAE,KAAK;AAAA;AAAG,qBAAK,SAAS,OAAO;AAAA;AAAQ,gBAAI,KAAK,SAAS,WAAW,WAA7B,KAAqC,KAAK,QAAQ,mBAAkB,EAAC,SAAQ;AAAA,eAAe,GAAE,UAAU,WAAS,SAAS,IAAE,IAAE;AAAC,iBAAE,KAAK,oBAAoB,OAAO;AAAA,eAAI,GAAE,UAAU,OAAK,SAAS,IAAE;AAAC,qBAAO,KAAK,QAAQ,IAAI,UAAU;AAAA,eAAI,GAAE,UAAU,qBAAmB,WAAU;AAAC,kBAAI,KAAE,KAAK,SAAS,KAAK,4CAA2C,KAAE,GAAE,OAAO;AAAwB,kBAAE,GAAE,SAAO,GAAE,QAAQ,QAAQ,gBAAc,GAAE,QAAQ,QAAQ,eAAc,KAAK;AAAA,eAA0B,GAAE,UAAU,aAAW,WAAU;AAAC,kBAAI,KAAE;AAAK,mBAAK,KAAK,QAAQ,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE,IAAI,IAAE,SAAS,IAAE;AAAC,yBAAO,GAAE,GAAG;AAAA;AAAa,mBAAE,SAAS,KAAK,2CAA2C,KAAK,WAAU;AAAC,sBAAI,KAAE,GAAE,OAAM,KAAE,GAAE,QAAQ,MAAK,SAAQ,KAAE,KAAG,GAAE;AAAG,kBAAM,GAAE,WAAR,QAAiB,GAAE,QAAQ,YAAU,AAAM,GAAE,WAAR,QAAiB,KAAG,GAAE,QAAQ,IAAE,MAAG,GAAE,KAAK,iBAAgB,UAAQ,GAAE,KAAK,iBAAgB;AAAA;AAAA;AAAA,eAAc,GAAE,UAAU,cAAY,SAAS,IAAE;AAAC,mBAAK;AAAc,kBAAI,KAAE,EAAC,UAAS,MAAG,SAAQ,MAAG,MAAK,KAAK,QAAQ,IAAI,gBAAgB,IAAI,aAAa,OAAI,KAAE,KAAK,OAAO;AAAG,iBAAE,aAAW,oBAAmB,KAAK,SAAS,QAAQ;AAAA,eAAI,GAAE,UAAU,cAAY,WAAU;AAAC,mBAAK,SAAS,KAAK,oBAAoB;AAAA,eAAU,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,kBAAI,KAAE,SAAS,cAAc;AAAM,iBAAE,YAAU;AAA0B,kBAAI,KAAE,EAAC,MAAK,UAAS,iBAAgB,WAAS,KAAE,OAAO,QAAQ,UAAU,WAAS,OAAO,QAAQ,UAAU,qBAAmB,OAAO,QAAQ,UAAU;AAAsB,uBAAQ,MAAK,CAAM,GAAE,WAAR,QAAiB,GAAE,KAAK,GAAE,SAAQ,gBAAc,AAAM,GAAE,WAAR,QAAiB,GAAE,aAAY,QAAO,GAAE,kBAAiB,GAAE,mBAAiB,SAAQ,AAAM,GAAE,MAAR,QAAY,OAAO,GAAE,kBAAiB,AAAM,GAAE,aAAR,QAAoB,IAAE,KAAG,GAAE,YAAW,GAAE,SAAQ,IAAE,QAAM,GAAE,QAAO,GAAE,YAAW,IAAE,OAAK,SAAQ,GAAE,gBAAc,GAAE,MAAK,OAAO,GAAE,mBAAkB,IAAE;AAAC,oBAAI,KAAE,GAAE;AAAG,mBAAE,aAAa,IAAE;AAAA;AAAG,kBAAG,GAAE,UAAS;AAAC,oBAAI,KAAE,GAAE,KAAG,KAAE,SAAS,cAAc;AAAU,mBAAE,YAAU;AAAyB,mBAAE;AAAG,qBAAK,SAAS,IAAE;AAAG,yBAAQ,KAAE,IAAG,KAAE,GAAE,KAAE,GAAE,SAAS,QAAO,MAAI;AAAC,sBAAI,KAAE,GAAE,SAAS,KAAG,KAAE,KAAK,OAAO;AAAG,qBAAE,KAAK;AAAA;AAAG,oBAAI,IAAE,GAAE,aAAY,EAAC,OAAM;AAA8D,kBAAE,OAAO,KAAG,GAAE,OAAO,KAAG,GAAE,OAAO;AAAA;AAAQ,qBAAK,SAAS,IAAE;AAAG,qBAAO,GAAE,UAAU,IAAE,QAAO,KAAG;AAAA,eAAG,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,MAAK,KAAE,GAAE,KAAG;AAAW,mBAAK,SAAS,KAAK,MAAK,KAAG,GAAE,GAAG,eAAc,SAAS,IAAE;AAAC,mBAAE,SAAQ,GAAE,OAAO,GAAE,OAAM,GAAE,YAAW,IAAE,cAAa,GAAE;AAAA,kBAAwB,GAAE,GAAG,kBAAiB,SAAS,IAAE;AAAC,mBAAE,OAAO,GAAE,OAAM,GAAE,YAAU,GAAE;AAAA,kBAAe,GAAE,GAAG,SAAQ,SAAS,IAAE;AAAC,mBAAE,gBAAe,GAAE,YAAY;AAAA,kBAAK,GAAE,GAAG,UAAS,WAAU;AAAC,mBAAE,YAAW,IAAE,cAAa,GAAE,QAAQ,IAAI,wBAAsB,GAAE;AAAA,kBAAwB,GAAE,GAAG,YAAW,WAAU;AAAC,mBAAE,YAAW,IAAE,cAAa,GAAE,QAAQ,IAAI,wBAAsB,GAAE;AAAA,kBAAwB,GAAE,GAAG,QAAO,WAAU;AAAC,mBAAE,SAAS,KAAK,iBAAgB,SAAQ,GAAE,SAAS,KAAK,eAAc,UAAS,GAAE,cAAa,GAAE;AAAA,kBAA2B,GAAE,GAAG,SAAQ,WAAU;AAAC,mBAAE,SAAS,KAAK,iBAAgB,UAAS,GAAE,SAAS,KAAK,eAAc,SAAQ,GAAE,SAAS,WAAW;AAAA,kBAA2B,GAAE,GAAG,kBAAiB,WAAU;AAAC,oBAAI,KAAE,GAAE;AAAwB,gBAAI,GAAE,WAAN,KAAc,GAAE,QAAQ;AAAA,kBAAa,GAAE,GAAG,kBAAiB,WAAU;AAAC,oBAAI,KAAE,GAAE;AAAwB,oBAAG,AAAI,GAAE,WAAN,GAAa;AAAC,sBAAI,KAAE,GAAE,QAAQ,GAAE,IAAG;AAAQ,kBAAQ,GAAE,KAAK,oBAAf,SAAgC,GAAE,QAAQ,SAAQ,MAAI,GAAE,QAAQ,UAAS,EAAC,MAAK;AAAA;AAAA,kBAAO,GAAE,GAAG,oBAAmB,WAAU;AAAC,oBAAI,KAAE,GAAE,yBAAwB,KAAE,GAAE,SAAS,KAAK,oBAAmB,KAAE,GAAE,MAAM;AAAG,oBAAG,CAAE,OAAG,IAAG;AAAC,sBAAI,KAAE,KAAE;AAAE,kBAAI,GAAE,WAAN,KAAe,MAAE;AAAG,sBAAI,KAAE,GAAE,GAAG;AAAG,qBAAE,QAAQ;AAAc,sBAAI,KAAE,GAAE,SAAS,SAAS,KAAI,KAAE,GAAE,SAAS,KAAI,KAAE,GAAE,SAAS,cAAa,MAAE;AAAG,kBAAI,OAAJ,IAAM,GAAE,SAAS,UAAU,KAAG,KAAE,KAAE,KAAG,GAAE,SAAS,UAAU;AAAA;AAAA,kBAAM,GAAE,GAAG,gBAAe,WAAU;AAAC,oBAAI,KAAE,GAAE,yBAAwB,KAAE,GAAE,SAAS,KAAK,oBAAmB,KAAE,GAAE,MAAM,MAAG;AAAE,oBAAG,CAAE,OAAG,GAAE,SAAQ;AAAC,sBAAI,KAAE,GAAE,GAAG;AAAG,qBAAE,QAAQ;AAAc,sBAAI,KAAE,GAAE,SAAS,SAAS,MAAI,GAAE,SAAS,YAAY,QAAI,KAAE,GAAE,SAAS,MAAI,GAAE,YAAY,QAAI,KAAE,GAAE,SAAS,cAAY,KAAE;AAAE,kBAAI,OAAJ,IAAM,GAAE,SAAS,UAAU,KAAG,KAAE,MAAG,GAAE,SAAS,UAAU;AAAA;AAAA,kBAAM,GAAE,GAAG,iBAAgB,SAAS,IAAE;AAAC,mBAAE,QAAQ,SAAS;AAAA,kBAA0C,GAAE,GAAG,mBAAkB,SAAS,IAAE;AAAC,mBAAE,eAAe;AAAA,kBAAK,GAAE,GAAG,cAAY,KAAK,SAAS,GAAG,cAAa,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE,SAAS,aAAY,KAAE,GAAE,SAAS,IAAI,GAAG,eAAa,KAAE,GAAE,QAAO,KAAE,IAAE,GAAE,UAAQ,KAAE,GAAE,UAAQ,GAAE,KAAE,GAAE,SAAO,KAAG,MAAG,GAAE,SAAS;AAAS,qBAAG,IAAE,SAAS,UAAU,IAAG,GAAE,kBAAiB,GAAE,qBAAmB,MAAI,IAAE,SAAS,UAAU,GAAE,SAAS,IAAI,GAAG,eAAa,GAAE,SAAS,WAAU,GAAE,kBAAiB,GAAE;AAAA,kBAAqB,KAAK,SAAS,GAAG,WAAU,2CAA0C,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE,OAAM,KAAE,GAAE,QAAQ,MAAK;AAAQ,gBAAS,GAAE,KAAK,qBAAhB,SAAiC,GAAE,QAAQ,UAAS,EAAC,eAAc,IAAE,MAAK,QAAI,GAAE,QAAQ,IAAI,cAAY,GAAE,QAAQ,YAAW,EAAC,eAAc,IAAE,MAAK,QAAI,GAAE,QAAQ,SAAQ;AAAA,kBAAM,KAAK,SAAS,GAAG,cAAa,2CAA0C,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE,QAAQ,MAAK;AAAQ,mBAAE,wBAAwB,YAAY,yCAAwC,GAAE,QAAQ,iBAAgB,EAAC,MAAK,IAAE,SAAQ,GAAE;AAAA;AAAA,eAAW,GAAE,UAAU,wBAAsB,WAAU;AAAC,qBAAO,KAAK,SAAS,KAAK;AAAA,eAA0C,GAAE,UAAU,UAAQ,WAAU;AAAC,mBAAK,SAAS;AAAA,eAAU,GAAE,UAAU,yBAAuB,WAAU;AAAC,kBAAI,KAAE,KAAK;AAAwB,kBAAG,AAAI,GAAE,WAAN,GAAa;AAAC,oBAAI,KAAE,KAAK,SAAS,KAAK,mBAAmB,MAAM,KAAG,KAAE,KAAK,SAAS,SAAS,KAAI,KAAE,GAAE,SAAS,KAAI,KAAE,KAAK,SAAS,cAAa,MAAE,KAAG,KAAE,KAAE;AAAE,sBAAG,IAAE,GAAE,YAAY,QAAI,MAAG,IAAE,KAAK,SAAS,UAAU,KAAI,MAAE,KAAK,SAAS,iBAAe,KAAE,MAAI,KAAK,SAAS,UAAU;AAAA;AAAA,eAAK,GAAE,UAAU,WAAS,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAK,QAAQ,IAAI,mBAAkB,KAAE,KAAK,QAAQ,IAAI,iBAAgB,KAAE,GAAE,IAAE;AAAG,cAAM,MAAN,OAAQ,GAAE,MAAM,UAAQ,SAAO,AAAU,OAAO,MAAjB,WAAmB,GAAE,YAAU,GAAE,MAAG,GAAE,IAAG,OAAO;AAAA,eAAI;AAAA,cAAI,GAAE,OAAO,gBAAe,IAAG,WAAU;AAAC,mBAAM,EAAC,WAAU,GAAE,KAAI,GAAE,OAAM,IAAG,OAAM,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,OAAM,IAAG,SAAQ,IAAG,WAAU,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,IAAG,IAAG,OAAM,IAAG,MAAK,IAAG,QAAO;AAAA,cAAM,GAAE,OAAO,0BAAyB,CAAC,UAAS,YAAW,YAAW,SAAS,IAAE,IAAE,IAAE;AAAC,wBAAW,IAAE,IAAE;AAAC,mBAAK,WAAS,IAAE,KAAK,UAAQ,IAAE,GAAE,UAAU,YAAY,KAAK;AAAA;AAAM,mBAAO,GAAE,OAAO,IAAE,GAAE,aAAY,GAAE,UAAU,SAAO,WAAU;AAAC,kBAAI,KAAE,GAAE;AAAuG,qBAAO,KAAK,YAAU,GAAE,AAAM,GAAE,QAAQ,KAAK,SAAS,IAAG,mBAAjC,OAAiD,KAAK,YAAU,GAAE,QAAQ,KAAK,SAAS,IAAG,kBAAgB,AAAM,KAAK,SAAS,KAAK,eAAzB,QAAuC,MAAK,YAAU,KAAK,SAAS,KAAK,cAAa,GAAE,KAAK,SAAQ,KAAK,SAAS,KAAK,WAAU,GAAE,KAAK,YAAW,KAAK,YAAW,GAAE,KAAK,iBAAgB,UAAS,KAAK,aAAW;AAAA,eAAG,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,MAAK,KAAE,GAAE,KAAG;AAAW,mBAAK,YAAU,IAAE,KAAK,WAAW,GAAG,SAAQ,SAAS,IAAE;AAAC,mBAAE,QAAQ,SAAQ;AAAA,kBAAK,KAAK,WAAW,GAAG,QAAO,SAAS,IAAE;AAAC,mBAAE,YAAY;AAAA,kBAAK,KAAK,WAAW,GAAG,WAAU,SAAS,IAAE;AAAC,mBAAE,QAAQ,YAAW,KAAG,GAAE,UAAQ,GAAE,SAAO,GAAE;AAAA,kBAAmB,GAAE,GAAG,iBAAgB,SAAS,IAAE;AAAC,mBAAE,WAAW,KAAK,yBAAwB,GAAE,KAAK;AAAA,kBAAa,GAAE,GAAG,oBAAmB,SAAS,IAAE;AAAC,mBAAE,OAAO,GAAE;AAAA,kBAAQ,GAAE,GAAG,QAAO,WAAU;AAAC,mBAAE,WAAW,KAAK,iBAAgB,SAAQ,GAAE,WAAW,KAAK,aAAY,KAAG,GAAE,oBAAoB;AAAA,kBAAK,GAAE,GAAG,SAAQ,WAAU;AAAC,mBAAE,WAAW,KAAK,iBAAgB,UAAS,GAAE,WAAW,WAAW,0BAAyB,GAAE,WAAW,WAAW,cAAa,GAAE,WAAW,QAAQ,UAAS,GAAE,oBAAoB;AAAA,kBAAK,GAAE,GAAG,UAAS,WAAU;AAAC,mBAAE,WAAW,KAAK,YAAW,GAAE,YAAW,GAAE,WAAW,KAAK,iBAAgB;AAAA,kBAAW,GAAE,GAAG,WAAU,WAAU;AAAC,mBAAE,WAAW,KAAK,YAAW,OAAM,GAAE,WAAW,KAAK,iBAAgB;AAAA;AAAA,eAAW,GAAE,UAAU,cAAY,SAAS,IAAE;AAAC,kBAAI,KAAE;AAAK,qBAAO,WAAW,WAAU;AAAC,yBAAS,iBAAe,GAAE,WAAW,MAAI,GAAE,SAAS,GAAE,WAAW,IAAG,SAAS,kBAAgB,GAAE,QAAQ,QAAO;AAAA,iBAAI;AAAA,eAAI,GAAE,UAAU,sBAAoB,SAAS,IAAE;AAAC,iBAAE,SAAS,MAAM,GAAG,uBAAqB,GAAE,IAAG,SAAS,IAAE;AAAC,oBAAI,KAAE,GAAE,GAAE,QAAQ,QAAQ;AAAY,mBAAE,oCAAoC,KAAK,WAAU;AAAC,0BAAM,GAAE,MAAI,GAAE,QAAQ,MAAK,WAAW,QAAQ;AAAA;AAAA;AAAA,eAAc,GAAE,UAAU,sBAAoB,SAAS,IAAE;AAAC,iBAAE,SAAS,MAAM,IAAI,uBAAqB,GAAE;AAAA,eAAK,GAAE,UAAU,WAAS,SAAS,IAAE,IAAE;AAAC,iBAAE,KAAK,cAAc,OAAO;AAAA,eAAI,GAAE,UAAU,UAAQ,WAAU;AAAC,mBAAK,oBAAoB,KAAK;AAAA,eAAY,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,oBAAM,IAAI,MAAM;AAAA,eAA0D,GAAE,UAAU,YAAU,WAAU;AAAC,qBAAM,CAAC,KAAK;AAAA,eAAc,GAAE,UAAU,aAAW,WAAU;AAAC,qBAAO,KAAK,QAAQ,IAAI;AAAA,eAAa;AAAA,cAAI,GAAE,OAAO,4BAA2B,CAAC,UAAS,UAAS,YAAW,YAAW,SAAS,IAAE,IAAE,IAAE,IAAE;AAAC,0BAAY;AAAC,iBAAE,UAAU,YAAY,MAAM,MAAK;AAAA;AAAW,mBAAO,GAAE,OAAO,IAAE,KAAG,GAAE,UAAU,SAAO,WAAU;AAAC,kBAAI,KAAE,GAAE,UAAU,OAAO,KAAK;AAAM,qBAAO,GAAE,SAAS,8BAA6B,GAAE,KAAK,mJAAkJ;AAAA,eAAG,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE;AAAK,iBAAE,UAAU,KAAK,MAAM,MAAK;AAAW,kBAAI,KAAE,GAAE,KAAG;AAAa,mBAAK,WAAW,KAAK,gCAAgC,KAAK,MAAK,IAAG,KAAK,QAAO,WAAW,KAAK,iBAAgB,SAAQ,KAAK,WAAW,KAAK,mBAAkB,KAAG,KAAK,WAAW,GAAG,aAAY,SAAS,IAAE;AAAC,gBAAI,GAAE,UAAN,KAAa,GAAE,QAAQ,UAAS,EAAC,eAAc;AAAA,kBAAM,KAAK,WAAW,GAAG,SAAQ,SAAS,IAAE;AAAA,kBAAI,KAAK,WAAW,GAAG,QAAO,SAAS,IAAE;AAAA,kBAAI,GAAE,GAAG,SAAQ,SAAS,IAAE;AAAC,mBAAE,YAAU,GAAE,WAAW,QAAQ;AAAA;AAAA,eAAY,GAAE,UAAU,QAAM,WAAU;AAAC,kBAAI,KAAE,KAAK,WAAW,KAAK;AAAgC,iBAAE,SAAQ,GAAE,WAAW;AAAA,eAAU,GAAE,UAAU,UAAQ,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAK,QAAQ,IAAI;AAAqB,qBAAO,KAAK,QAAQ,IAAI,gBAAgB,GAAE,IAAE;AAAA,eAAK,GAAE,UAAU,qBAAmB,WAAU;AAAC,qBAAO,GAAE;AAAA,eAAkB,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,kBAAG,AAAI,GAAE,WAAN,GAAa;AAAC,oBAAI,KAAE,GAAE,IAAG,KAAE,KAAK,WAAW,KAAK,iCAAgC,KAAE,KAAK,QAAQ,IAAE;AAAG,mBAAE,QAAQ,OAAO;AAAG,oBAAI,KAAE,GAAE,SAAO,GAAE;AAAK,qBAAE,GAAE,KAAK,SAAQ,MAAG,GAAE,WAAW;AAAA;AAAc,qBAAK;AAAA,eAAS;AAAA,cAAI,GAAE,OAAO,8BAA6B,CAAC,UAAS,UAAS,aAAY,SAAS,IAAE,IAAE,IAAE;AAAC,wBAAW,IAAE,IAAE;AAAC,iBAAE,UAAU,YAAY,MAAM,MAAK;AAAA;AAAW,mBAAO,GAAE,OAAO,IAAE,KAAG,GAAE,UAAU,SAAO,WAAU;AAAC,kBAAI,KAAE,GAAE,UAAU,OAAO,KAAK;AAAM,qBAAO,GAAE,SAAS,gCAA+B,GAAE,KAAK,kDAAiD;AAAA,eAAG,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE;AAAK,iBAAE,UAAU,KAAK,MAAM,MAAK,YAAW,KAAK,WAAW,GAAG,SAAQ,SAAS,IAAE;AAAC,mBAAE,QAAQ,UAAS,EAAC,eAAc;AAAA,kBAAM,KAAK,WAAW,GAAG,SAAQ,sCAAqC,SAAS,IAAE;AAAC,oBAAG,CAAC,GAAE,cAAa;AAAC,sBAAI,KAAE,GAAE,MAAM,UAAS,KAAE,GAAE,QAAQ,GAAE,IAAG;AAAQ,qBAAE,QAAQ,YAAW,EAAC,eAAc,IAAE,MAAK;AAAA;AAAA;AAAA,eAAQ,GAAE,UAAU,QAAM,WAAU;AAAC,kBAAI,KAAE,KAAK,WAAW,KAAK;AAAgC,iBAAE,SAAQ,GAAE,WAAW;AAAA,eAAU,GAAE,UAAU,UAAQ,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAK,QAAQ,IAAI;AAAqB,qBAAO,KAAK,QAAQ,IAAI,gBAAgB,GAAE,IAAE;AAAA,eAAK,GAAE,UAAU,qBAAmB,WAAU;AAAC,qBAAO,GAAE;AAAA,eAAkI,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,kBAAG,KAAK,SAAQ,AAAI,GAAE,WAAN,GAAa;AAAC,yBAAQ,KAAE,IAAG,KAAE,GAAE,KAAE,GAAE,QAAO,MAAI;AAAC,sBAAI,KAAE,GAAE,KAAG,KAAE,KAAK,sBAAqB,KAAE,KAAK,QAAQ,IAAE;AAAG,qBAAE,OAAO;AAAG,sBAAI,KAAE,GAAE,SAAO,GAAE;AAAK,wBAAG,GAAE,KAAK,SAAQ,KAAG,GAAE,UAAU,GAAE,IAAG,QAAO,KAAG,GAAE,KAAK;AAAA;AAAG,oBAAI,KAAE,KAAK,WAAW,KAAK;AAAgC,mBAAE,WAAW,IAAE;AAAA;AAAA,eAAK;AAAA,cAAI,GAAE,OAAO,iCAAgC,CAAC,aAAY,SAAS,IAAE;AAAC,wBAAW,IAAE,IAAE,IAAE;AAAC,mBAAK,cAAY,KAAK,qBAAqB,GAAE,IAAI,iBAAgB,GAAE,KAAK,MAAK,IAAE;AAAA;AAAG,mBAAO,GAAE,UAAU,uBAAqB,SAAS,IAAE,IAAE;AAAC,qBAAM,AAAU,OAAO,MAAjB,YAAqB,MAAE,EAAC,IAAG,IAAG,MAAK,OAAI;AAAA,eAAG,GAAE,UAAU,oBAAkB,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAK;AAAqB,qBAAO,GAAE,KAAK,KAAK,QAAQ,MAAI,GAAE,SAAS,kCAAkC,YAAY,8BAA6B;AAAA,eAAG,GAAE,UAAU,SAAO,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,AAAG,GAAE,UAAL,KAAa,GAAE,GAAG,MAAI,KAAK,YAAY;AAAG,kBAAG,IAAE,GAAE,UAAQ;AAAE,uBAAO,GAAE,KAAK,MAAK;AAAG,mBAAK;AAAQ,kBAAI,KAAE,KAAK,kBAAkB,KAAK;AAAa,mBAAK,WAAW,KAAK,gCAAgC,OAAO;AAAA,eAAI;AAAA,cAAI,GAAE,OAAO,gCAA+B,CAAC,UAAS,WAAU,aAAY,SAAS,IAAE,IAAE,IAAE;AAAC,0BAAY;AAAA;AAAE,mBAAO,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE,IAAE;AAAC,kBAAI,KAAE;AAAK,iBAAE,KAAK,MAAK,IAAE,KAAG,AAAM,KAAK,eAAX,QAAwB,KAAK,QAAQ,IAAI,YAAU,OAAO,WAAS,QAAQ,SAAO,QAAQ,MAAM,kGAAiG,KAAK,WAAW,GAAG,aAAY,6BAA4B,SAAS,IAAE;AAAC,mBAAE,aAAa;AAAA,kBAAK,GAAE,GAAG,YAAW,SAAS,IAAE;AAAC,mBAAE,qBAAqB,IAAE;AAAA;AAAA,eAAM,GAAE,UAAU,eAAa,SAAS,IAAE,IAAE;AAAC,kBAAG,CAAC,KAAK,cAAa;AAAC,oBAAI,KAAE,KAAK,WAAW,KAAK;AAA6B,oBAAG,AAAI,GAAE,WAAN,GAAa;AAAC,qBAAE;AAAkB,sBAAI,KAAE,GAAE,QAAQ,GAAE,IAAG,SAAQ,KAAE,KAAK,SAAS;AAAM,uBAAK,SAAS,IAAI,KAAK,YAAY;AAAI,sBAAI,KAAE,EAAC,MAAK;AAAG,sBAAG,KAAK,QAAQ,SAAQ,KAAG,GAAE;AAAU,yBAAK,SAAS,IAAI;AAAA,uBAAO;AAAC,6BAAQ,KAAE,GAAE,KAAE,GAAE,QAAO;AAAI,0BAAG,KAAE,EAAC,MAAK,GAAE,OAAI,KAAK,QAAQ,YAAW,KAAG,GAAE;AAAU,+BAAO,KAAK,KAAK,SAAS,IAAI;AAAG,yBAAK,SAAS,QAAQ,SAAS,QAAQ,WAAU,KAAK,QAAQ,UAAS;AAAA;AAAA;AAAA;AAAA,eAAQ,GAAE,UAAU,uBAAqB,SAAS,IAAE,IAAE,IAAE;AAAC,iBAAE,YAAU,GAAE,SAAO,GAAE,UAAQ,GAAE,SAAO,GAAE,aAAW,KAAK,aAAa;AAAA,eAAI,GAAE,UAAU,SAAO,SAAS,IAAE,IAAE;AAAC,kBAAG,GAAE,KAAK,MAAK,KAAG,CAAE,KAAE,KAAK,WAAW,KAAK,mCAAmC,UAAQ,AAAI,GAAE,WAAN,IAAc;AAAC,oBAAI,KAAE,KAAK,QAAQ,IAAI,gBAAgB,IAAI,mBAAkB,KAAE,GAAE,mDAAiD,OAAI;AAAoB,mBAAE,UAAU,GAAE,IAAG,QAAO,KAAG,KAAK,WAAW,KAAK,gCAAgC,QAAQ;AAAA;AAAA,eAAK;AAAA,cAAI,GAAE,OAAO,4BAA2B,CAAC,UAAS,YAAW,YAAW,SAAS,IAAE,IAAE,IAAE;AAAC,wBAAW,IAAE,IAAE,IAAE;AAAC,iBAAE,KAAK,MAAK,IAAE;AAAA;AAAG,mBAAO,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,kBAAI,KAAE,GAAE;AAAsP,mBAAK,mBAAiB,IAAE,KAAK,UAAQ,GAAE,KAAK;AAAS,kBAAI,KAAE,GAAE,KAAK;AAAM,qBAAO,KAAK,qBAAoB;AAAA,eAAG,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE,IAAE;AAAC,kBAAI,KAAE,MAAK,KAAE,GAAE,KAAG;AAAW,iBAAE,KAAK,MAAK,IAAE,KAAG,GAAE,GAAG,QAAO,WAAU;AAAC,mBAAE,QAAQ,KAAK,iBAAgB,KAAG,GAAE,QAAQ,QAAQ;AAAA,kBAAW,GAAE,GAAG,SAAQ,WAAU;AAAC,mBAAE,QAAQ,IAAI,KAAI,GAAE,QAAQ,WAAW,kBAAiB,GAAE,QAAQ,WAAW,0BAAyB,GAAE,QAAQ,QAAQ;AAAA,kBAAW,GAAE,GAAG,UAAS,WAAU;AAAC,mBAAE,QAAQ,KAAK,YAAW,QAAI,GAAE;AAAA,kBAAsB,GAAE,GAAG,WAAU,WAAU;AAAC,mBAAE,QAAQ,KAAK,YAAW;AAAA,kBAAM,GAAE,GAAG,SAAQ,SAAS,IAAE;AAAC,mBAAE,QAAQ,QAAQ;AAAA,kBAAW,GAAE,GAAG,iBAAgB,SAAS,IAAE;AAAC,mBAAE,KAAK,YAAU,GAAE,QAAQ,KAAK,yBAAwB,GAAE,KAAK,aAAW,GAAE,QAAQ,WAAW;AAAA,kBAA2B,KAAK,WAAW,GAAG,WAAU,2BAA0B,SAAS,IAAE;AAAC,mBAAE,QAAQ,SAAQ;AAAA,kBAAK,KAAK,WAAW,GAAG,YAAW,2BAA0B,SAAS,IAAE;AAAC,mBAAE,YAAY;AAAA,kBAAK,KAAK,WAAW,GAAG,WAAU,2BAA0B,SAAS,IAAE;AAAC,oBAAG,GAAE,mBAAkB,GAAE,QAAQ,YAAW,KAAG,GAAE,kBAAgB,GAAE,sBAAqB,GAAE,UAAQ,GAAE,aAAW,AAAK,GAAE,QAAQ,UAAf,IAAqB;AAAC,sBAAI,KAAE,GAAE,iBAAiB,KAAK;AAA8B,sBAAG,IAAE,GAAE,QAAO;AAAC,wBAAI,KAAE,GAAE,QAAQ,GAAE,IAAG;AAAQ,uBAAE,mBAAmB,KAAG,GAAE;AAAA;AAAA;AAAA,kBAAqB,KAAK,WAAW,GAAG,SAAQ,2BAA0B,SAAS,IAAE;AAAC,mBAAE,QAAQ,SAAO,GAAE;AAAA;AAAoB,kBAAI,KAAE,SAAS,cAAa,KAAE,MAAG,MAAG;AAAG,mBAAK,WAAW,GAAG,qBAAoB,2BAA0B,SAAS,IAAE;AAAC,qBAAE,GAAE,WAAW,IAAI,oCAAkC,GAAE,WAAW,IAAI;AAAA,kBAAkB,KAAK,WAAW,GAAG,6BAA4B,2BAA0B,SAAS,IAAE;AAAC,oBAAG,MAAG,AAAU,GAAE,SAAZ;AAAiB,qBAAE,WAAW,IAAI;AAAA,qBAAsC;AAAC,sBAAI,KAAE,GAAE;AAAM,wBAAG,GAAE,SAAO,MAAG,GAAE,QAAM,MAAG,GAAE,OAAK,MAAG,GAAE,OAAK,GAAE,aAAa;AAAA;AAAA;AAAA,eAAO,GAAE,UAAU,oBAAkB,SAAS,IAAE;AAAC,mBAAK,QAAQ,KAAK,YAAW,KAAK,WAAW,KAAK,cAAa,KAAK,WAAW,KAAK,YAAW;AAAA,eAAO,GAAE,UAAU,oBAAkB,SAAS,IAAE,IAAE;AAAC,mBAAK,QAAQ,KAAK,eAAc,GAAE;AAAA,eAAO,GAAE,UAAU,SAAO,SAAS,IAAE,IAAE;AAAC,kBAAI,KAAE,KAAK,QAAQ,MAAI,SAAS;AAAc,mBAAK,QAAQ,KAAK,eAAc,KAAI,GAAE,KAAK,MAAK,KAAG,KAAK,WAAW,KAAK,gCAAgC,OAAO,KAAK,mBAAkB,KAAK,gBAAe,MAAG,KAAK,QAAQ,QAAQ;AAAA,eAAU,GAAE,UAAU,eAAa,WAAU;AAAC,kBAAG,KAAK,gBAAe,CAAC,KAAK,iBAAgB;AAAC,oBAAI,KAAE,KAAK,QAAQ;AAAM,qBAAK,QAAQ,SAAQ,EAAC,MAAK;AAAA;AAAI,mBAAK,kBAAgB;AAAA,eAAI,GAAE,UAAU,qBAAmB,SAAS,IAAE,IAAE;AAAC,mBAAK,QAAQ,YAAW,EAAC,MAAK,OAAI,KAAK,QAAQ,IAAI,GAAE,OAAM,KAAK;AAAA,eAAgB,GAAE,UAAU,eAAa,WAAU;AAAC,mBAAK,QAAQ,IAAI,SAAQ;AAAQ,kBAAI,KAAE;AAAG,cAAK,KAAK,QAAQ,KAAK,mBAAvB,KAAsC,KAAE,KAAK,WAAW,KAAK,gCAAgC,UAAQ,KAAE,OAAK,MAAK,QAAQ,MAAM,SAAO,KAAG;AAAK,mBAAK,QAAQ,IAAI,SAAQ;AAAA,eAAI;AAAA,cAAI,GAAE,OAAO,gCAA+B,CAAC,WAAU,SAAS,IAAE;AAAC,0BAAY;AAAA;AAAE,mBAAO,GAAE,UAAU,OAAK,SAAS,IAAE,IAAE,IAAE;AAAC,kBAAI,KAAE,MAAK,KAAE,CAAC,QAAO,WAAU,SAAQ,WAAU,UAAS,aAAY,YAAW,eAAc,SAAQ,aAAY,KAAE,CAAC,WAAU,WAAU,aAAY,eAAc;AAAY,iBAAE,KAAK,MAAK,IAAE,KAAG,GAAE,GAAG,KAAI,SAAS,IAAE,IAAE;AAAC,oBAAG,AAAK,GAAE,QAAQ,IAAE,QAAjB,IAAoB;AAAC,uBAAE,MAAG;AAAG,sBAAI,KAAE,GAAE,MAAM,aAAW,IAAE,EAAC,QAAO;AAAI,qBAAE,SAAS,QAAQ,KAAG,AAAK,GAAE,QAAQ,IAAE,QAAjB,MAAsB,IAAE,YAAU,GAAE;AAAA;AAAA;AAAA,eAA0B;AAAA,cAAI,GAAE,OAAO,uBAAsB,CAAC,UAAS,YAAW,SAAS,IAAE,IAAE;AAAC,wBAAW,IAAE;AAAC,mBAAK,OAAK,MAAG;AAAA;AAAG,mBAAO,GAAE,UAAU,MAAI,WAAU;AAAC,qBAAO,KAAK;AAAA,eAAM,GAAE,UAAU,MAAI,SAAS,IAAE;AAAC,qBAAO,KAAK,KAAK;AAAA,eAAI,GAAE,UAAU,SAAO,SAAS,IAAE;AAAC,mBAAK,OAAK,GAAE,OAAO,IAAG,GAAE,OAAM,KAAK;AAAA,eAAO,GAAE,SAAO,IAAG,GAAE,WAAS,SAAS,IAAE;AAAC,kBAAG,CAAE,OAAK,GAAE,SAAQ;AAAC,oBAAI,KAAE,GAAE;AAAG,mBAAE,OAAO,MAAG;AAAA;AAAE,qBAAO,IAAI,GAAE,GAAE,OAAO;AAAA,eAAK;AAAA,cAAI,GAAE,OAAO,sBAAqB,IAAG,WAAU;AAAC,mBAAM,EAAC,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,QAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,QAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,MAAK,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,QAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,QAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,KAAI,UAAI,K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",
  "names": []
}
